From a7d618150274e7cf8c93ae4b49db18fbfd770380 Mon Sep 17 00:00:00 2001 From: Jonathan Smirnoff Date: Fri, 26 Jul 2024 11:53:50 -0300 Subject: [PATCH 1/7] feat: add fastbtc --- package-lock.json | 4 ++ src/adapters/index.ts | 2 + .../rootstock-fastbtc-bridge/index.ts | 39 +++++++++++++++++++ src/data/bridgeNetworkData.ts | 13 +++++++ src/utils/recordedBlocks.json | 3 +- 5 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/adapters/rootstock-fastbtc-bridge/index.ts diff --git a/package-lock.json b/package-lock.json index b9f0b068..467fd31c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,7 +5,11 @@ "packages": { "": { "dependencies": { +<<<<<<< HEAD "@defillama/sdk": "^5.0.77", +======= + "@defillama/sdk": "^5.0.76", +>>>>>>> c3b3d04 (feat: add fastbtc) "@graphql-typed-document-node/core": "^3.2.0", "@solana/web3.js": "^1.87.3", "async-retry": "^1.3.1", diff --git a/src/adapters/index.ts b/src/adapters/index.ts index 4a5af247..d036d02c 100644 --- a/src/adapters/index.ts +++ b/src/adapters/index.ts @@ -65,6 +65,7 @@ import memebridge from "./memebridge"; import bunnyfi from "./bunnyfi"; import minibridge from "./minibridge"; import cometbridge from "./cometbridge"; +import fastbtc from "./rootstock-fastbtc-bridge" export default { polygon, @@ -133,6 +134,7 @@ export default { bunnyfi, minibridge, cometbridge, + fastbtc } as { [bridge: string]: BridgeAdapter; }; diff --git a/src/adapters/rootstock-fastbtc-bridge/index.ts b/src/adapters/rootstock-fastbtc-bridge/index.ts new file mode 100644 index 00000000..401a1fc1 --- /dev/null +++ b/src/adapters/rootstock-fastbtc-bridge/index.ts @@ -0,0 +1,39 @@ +import { BridgeAdapter, ContractEventParams } from "../../helpers/bridgeAdapter.type"; +import { getTxDataFromEVMEventLogs } from "../../helpers/processTransactions"; + +const bridge = "0x1a8e78b41bc5ab9ebb6996136622b9b41a601b5c"; +const rbtc = "0x542fDA317318eBF1d3DEAf76E0b632741A7e677d"; + +const outFlowEventParams: ContractEventParams = { + target: bridge, + topic: "NewBitcoinTransfer(bytes32,string,uint256,uint256,uint256,address)", + abi: ["event NewBitcoinTransfer(bytes32 indexed transferId, string btcAddress, uint256 nonce, uint256 amountSatoshi, uint256 feeSatoshi, address indexed rskAddress)"], + logKeys: { + blockNumber: "blockNumber", + txHash: "transactionHash", + }, + fixedEventData: { + from: bridge, + token: rbtc, + }, + argKeys: { + to: "btcAddress", + amount: "amount", + }, + isDeposit: false, +}; + +const constructParams = () => { + const eventParams = [outFlowEventParams]; + return async (fromBlock: number, toBlock: number) => { + const logs = await getTxDataFromEVMEventLogs("fastbtc", "rsk", fromBlock, toBlock, eventParams); + const results = logs.map((log) => ({ ...log, amount: log?.amount?.mul(1e10) })); + return results; + }; +}; + +const adapter: BridgeAdapter = { + rootstock: constructParams(), +}; + +export default adapter; diff --git a/src/data/bridgeNetworkData.ts b/src/data/bridgeNetworkData.ts index ac4a6443..edaa90dc 100644 --- a/src/data/bridgeNetworkData.ts +++ b/src/data/bridgeNetworkData.ts @@ -1453,4 +1453,17 @@ export default [ "x layer": "xlayer", }, }, + { + id: 70, + displayName: "FastBTC", + bridgeDbName: "fastbtc", + iconLink: "chain:rootstock", + largeTxThreshold: 10000, + url: "https://rootstock.io/", + chains: ["Rootstock", "Bitcoin"], + chainMapping: { + rootstock: "rsk", + }, + destinationChain: "Bitcoin", + }, ] as BridgeNetwork[]; diff --git a/src/utils/recordedBlocks.json b/src/utils/recordedBlocks.json index 36c596af..71b48d82 100644 --- a/src/utils/recordedBlocks.json +++ b/src/utils/recordedBlocks.json @@ -71,5 +71,6 @@ "rainbowbridge:ethereum": { "startBlock": 15443371, "endBlock": 15887866 }, "chainport:aurora": { "startBlock": 73145592, "endBlock": 77620017 }, "rootstock:rsk": { "startBlock": 3616337, "endBlock": 3616337 }, - "tokenbrige:rsk": { "startBlock": 4089976, "endBlock": 6088951 } + "tokenbrige:rsk": { "startBlock": 4089976, "endBlock": 6088951 }, + "fastbtc:rsk": { "startBlock": 4089976, "endBlock": 6088951 } } From 4d1008d03b0c58d79fbb136a2c288a801c80f0c2 Mon Sep 17 00:00:00 2001 From: Jonathan Smirnoff Date: Fri, 26 Jul 2024 18:08:57 -0300 Subject: [PATCH 2/7] fix: amount data from outFlow fastbtc event --- src/adapters/rootstock-fastbtc-bridge/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/adapters/rootstock-fastbtc-bridge/index.ts b/src/adapters/rootstock-fastbtc-bridge/index.ts index 401a1fc1..0e0378ed 100644 --- a/src/adapters/rootstock-fastbtc-bridge/index.ts +++ b/src/adapters/rootstock-fastbtc-bridge/index.ts @@ -18,7 +18,7 @@ const outFlowEventParams: ContractEventParams = { }, argKeys: { to: "btcAddress", - amount: "amount", + amount: "amountSatoshi", }, isDeposit: false, }; From 1be6bf2c6d20cdc22122949596ad7c50e7a8011f Mon Sep 17 00:00:00 2001 From: Jonathan Smirnoff Date: Mon, 5 Aug 2024 14:56:57 -0300 Subject: [PATCH 3/7] chore: small updates and tests --- .../rootstock-fastbtc-bridge/index.ts | 62 ++++++++++++++++--- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/src/adapters/rootstock-fastbtc-bridge/index.ts b/src/adapters/rootstock-fastbtc-bridge/index.ts index 0e0378ed..bca85e13 100644 --- a/src/adapters/rootstock-fastbtc-bridge/index.ts +++ b/src/adapters/rootstock-fastbtc-bridge/index.ts @@ -1,11 +1,14 @@ +import { BigNumber, ethers } from "ethers"; import { BridgeAdapter, ContractEventParams } from "../../helpers/bridgeAdapter.type"; import { getTxDataFromEVMEventLogs } from "../../helpers/processTransactions"; -const bridge = "0x1a8e78b41bc5ab9ebb6996136622b9b41a601b5c"; +const bridgeOutFlow = "0x1a8e78b41bc5ab9ebb6996136622b9b41a601b5c"; +const bridgeOutFlow2 = "0x0d5006330289336ebdf9d0ac9e0674f91b4851ea"; +const bridgeInFlow = "0xe43cafbdd6674df708ce9dff8762af356c2b454d"; const rbtc = "0x542fDA317318eBF1d3DEAf76E0b632741A7e677d"; const outFlowEventParams: ContractEventParams = { - target: bridge, + target: bridgeOutFlow, topic: "NewBitcoinTransfer(bytes32,string,uint256,uint256,uint256,address)", abi: ["event NewBitcoinTransfer(bytes32 indexed transferId, string btcAddress, uint256 nonce, uint256 amountSatoshi, uint256 feeSatoshi, address indexed rskAddress)"], logKeys: { @@ -13,7 +16,7 @@ const outFlowEventParams: ContractEventParams = { txHash: "transactionHash", }, fixedEventData: { - from: bridge, + from: bridgeOutFlow, token: rbtc, }, argKeys: { @@ -23,12 +26,57 @@ const outFlowEventParams: ContractEventParams = { isDeposit: false, }; +const outFlow2EventParams: ContractEventParams = { + target: bridgeOutFlow2, + topic: "NewBitcoinTransfer(bytes32,string,uint256,uint256,uint256,address)", + abi: ["event NewBitcoinTransfer(bytes32 indexed transferId, string btcAddress, uint256 nonce, uint256 amountSatoshi, uint256 feeSatoshi, address indexed rskAddress)"], + logKeys: { + blockNumber: "blockNumber", + txHash: "transactionHash", + }, + fixedEventData: { + from: bridgeOutFlow2, + token: rbtc, + }, + argKeys: { + to: "btcAddress", + amount: "amountSatoshi", + }, + isDeposit: false, +}; + +const inFlowEventParams: ContractEventParams = { + target: bridgeInFlow, + topic: "NewBitcoinTransferIncoming(address,uint256,uint256,bytes32,uint256)", + topics: ["0x20ef15fb02bd69f212d7a84358d8a7c05b65d25bbb920b11c4d32f837118e441"], + abi: ["event NewBitcoinTransferIncoming(address indexed rskAddress, uint256 amountWei, uint256 feeWei, bytes32 btcTxHash, uint256 btcTxVout)"], + logKeys: { + blockNumber: "blockNumber", + txHash: "transactionHash", + }, + fixedEventData: { + from: bridgeInFlow, + token: rbtc, + }, + argKeys: { + to: "rskAddress", + amount: "amountWei", + }, + isDeposit: true, + }; + const constructParams = () => { - const eventParams = [outFlowEventParams]; - return async (fromBlock: number, toBlock: number) => { + const eventParams = [inFlowEventParams]; + return async (fromBlock: number, toBlock: number) => { const logs = await getTxDataFromEVMEventLogs("fastbtc", "rsk", fromBlock, toBlock, eventParams); - const results = logs.map((log) => ({ ...log, amount: log?.amount?.mul(1e10) })); - return results; + + logs.forEach((log) => { + if (!log.isDeposit) { + log.amount = log?.amount?.mul(1e10) + } + }); + + return logs; }; }; From 0652b03767bcea9ab16475ff82a95e92fd1cd166 Mon Sep 17 00:00:00 2001 From: Jonathan Smirnoff Date: Mon, 5 Aug 2024 18:02:36 -0300 Subject: [PATCH 4/7] fix: fastbtc bridge network data --- src/data/bridgeNetworkData.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/bridgeNetworkData.ts b/src/data/bridgeNetworkData.ts index edaa90dc..00863772 100644 --- a/src/data/bridgeNetworkData.ts +++ b/src/data/bridgeNetworkData.ts @@ -1462,8 +1462,8 @@ export default [ url: "https://rootstock.io/", chains: ["Rootstock", "Bitcoin"], chainMapping: { - rootstock: "rsk", + "rootstock": "rsk", }, destinationChain: "Bitcoin", }, -] as BridgeNetwork[]; +] as BridgeNetwork[]; \ No newline at end of file From 13f48c37d548ce245dbaa033dff7283d4b2c2ffe Mon Sep 17 00:00:00 2001 From: Jonathan Smirnoff Date: Mon, 12 Aug 2024 16:46:55 -0300 Subject: [PATCH 5/7] fix: package-lock.json --- package-lock.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 467fd31c..b9f0b068 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,11 +5,7 @@ "packages": { "": { "dependencies": { -<<<<<<< HEAD "@defillama/sdk": "^5.0.77", -======= - "@defillama/sdk": "^5.0.76", ->>>>>>> c3b3d04 (feat: add fastbtc) "@graphql-typed-document-node/core": "^3.2.0", "@solana/web3.js": "^1.87.3", "async-retry": "^1.3.1", From 6c272c2b04fa297f2280c279ed5b19a8da59a399 Mon Sep 17 00:00:00 2001 From: Jonathan Smirnoff Date: Tue, 13 Aug 2024 09:43:50 -0300 Subject: [PATCH 6/7] chore: add outflow events --- .../rootstock-fastbtc-bridge/index.ts | 24 ++----------------- src/data/bridgeNetworkData.ts | 2 +- 2 files changed, 3 insertions(+), 23 deletions(-) diff --git a/src/adapters/rootstock-fastbtc-bridge/index.ts b/src/adapters/rootstock-fastbtc-bridge/index.ts index bca85e13..02287af7 100644 --- a/src/adapters/rootstock-fastbtc-bridge/index.ts +++ b/src/adapters/rootstock-fastbtc-bridge/index.ts @@ -3,7 +3,6 @@ import { BridgeAdapter, ContractEventParams } from "../../helpers/bridgeAdapter. import { getTxDataFromEVMEventLogs } from "../../helpers/processTransactions"; const bridgeOutFlow = "0x1a8e78b41bc5ab9ebb6996136622b9b41a601b5c"; -const bridgeOutFlow2 = "0x0d5006330289336ebdf9d0ac9e0674f91b4851ea"; const bridgeInFlow = "0xe43cafbdd6674df708ce9dff8762af356c2b454d"; const rbtc = "0x542fDA317318eBF1d3DEAf76E0b632741A7e677d"; @@ -26,25 +25,6 @@ const outFlowEventParams: ContractEventParams = { isDeposit: false, }; -const outFlow2EventParams: ContractEventParams = { - target: bridgeOutFlow2, - topic: "NewBitcoinTransfer(bytes32,string,uint256,uint256,uint256,address)", - abi: ["event NewBitcoinTransfer(bytes32 indexed transferId, string btcAddress, uint256 nonce, uint256 amountSatoshi, uint256 feeSatoshi, address indexed rskAddress)"], - logKeys: { - blockNumber: "blockNumber", - txHash: "transactionHash", - }, - fixedEventData: { - from: bridgeOutFlow2, - token: rbtc, - }, - argKeys: { - to: "btcAddress", - amount: "amountSatoshi", - }, - isDeposit: false, -}; - const inFlowEventParams: ContractEventParams = { target: bridgeInFlow, topic: "NewBitcoinTransferIncoming(address,uint256,uint256,bytes32,uint256)", @@ -63,10 +43,10 @@ const inFlowEventParams: ContractEventParams = { amount: "amountWei", }, isDeposit: true, - }; +}; const constructParams = () => { - const eventParams = [inFlowEventParams]; + const eventParams = [outFlowEventParams, inFlowEventParams]; return async (fromBlock: number, toBlock: number) => { const logs = await getTxDataFromEVMEventLogs("fastbtc", "rsk", fromBlock, toBlock, eventParams); diff --git a/src/data/bridgeNetworkData.ts b/src/data/bridgeNetworkData.ts index 00863772..35d5d16e 100644 --- a/src/data/bridgeNetworkData.ts +++ b/src/data/bridgeNetworkData.ts @@ -1459,7 +1459,7 @@ export default [ bridgeDbName: "fastbtc", iconLink: "chain:rootstock", largeTxThreshold: 10000, - url: "https://rootstock.io/", + url: "https://sovryn.com/", chains: ["Rootstock", "Bitcoin"], chainMapping: { "rootstock": "rsk", From aa2697346a13bc34f02c224f0ebb855d128e5b92 Mon Sep 17 00:00:00 2001 From: vrtnd Date: Tue, 27 Aug 2024 19:27:50 +0300 Subject: [PATCH 7/7] Fix icon --- src/data/bridgeNetworkData.ts | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/src/data/bridgeNetworkData.ts b/src/data/bridgeNetworkData.ts index 35d5d16e..ed2644b1 100644 --- a/src/data/bridgeNetworkData.ts +++ b/src/data/bridgeNetworkData.ts @@ -326,18 +326,7 @@ export default [ iconLink: "icons:across", largeTxThreshold: 10000, url: "https://across.to/", - chains: [ - "Ethereum", - "Polygon", - "Optimism", - "zkSync Era", - "Base", - "Arbitrum", - "Linea", - "Mode", - "Blast", - "Scroll" - ], + chains: ["Ethereum", "Polygon", "Optimism", "zkSync Era", "Base", "Arbitrum", "Linea", "Mode", "Blast", "Scroll"], chainMapping: { "zksync era": "era", }, @@ -1457,13 +1446,13 @@ export default [ id: 70, displayName: "FastBTC", bridgeDbName: "fastbtc", - iconLink: "chain:rootstock", + iconLink: "icons:sovryn", largeTxThreshold: 10000, url: "https://sovryn.com/", chains: ["Rootstock", "Bitcoin"], chainMapping: { - "rootstock": "rsk", + rootstock: "rsk", }, destinationChain: "Bitcoin", }, -] as BridgeNetwork[]; \ No newline at end of file +] as BridgeNetwork[];