From dde2848da6bc099bd3c839fb80f7b98bc69cf016 Mon Sep 17 00:00:00 2001 From: 0xfisher6 <162862570+0xfisher6@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:35:54 +0800 Subject: [PATCH 1/4] Create CometBridge index.ts --- src/adapters/cometbridge/index.ts | 108 ++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/adapters/cometbridge/index.ts diff --git a/src/adapters/cometbridge/index.ts b/src/adapters/cometbridge/index.ts new file mode 100644 index 0000000..ed975bf --- /dev/null +++ b/src/adapters/cometbridge/index.ts @@ -0,0 +1,108 @@ +import { BridgeAdapter, PartialContractEventParams } from "../../helpers/bridgeAdapter.type"; +import { getTxDataFromEVMEventLogs } from "../../helpers/processTransactions"; +import { constructTransferParams } from "../../helpers/eventParams"; +import { Chain } from "@defillama/sdk/build/general"; +import { EventData } from "../../utils/types"; +import { getTxsBlockRangeEtherscan, wait } from "../../helpers/etherscan"; + +export const bridgesAddress = { + ethereum: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + arbitrum: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + optimism: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + era: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + base: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + linea: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + scroll: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + blast: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + xlayer: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + taiko: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + zklink: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + bsc: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + mode: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + merlin: ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], + "b2-mainnet": ["0xB50Ac92D6d8748AC42721c25A3e2C84637385A6b"], +} as const; + +const nativeTokens: Record = { + ethereum: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", + arbitrum: "0x82af49447d8a07e3bd95bd0d56f35241523fbab1", + optimism: "0x4200000000000000000000000000000000000006", + base: "0x4200000000000000000000000000000000000006", + linea: "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f", + blast: "0x4300000000000000000000000000000000000004", + scroll: "0x5300000000000000000000000000000000000004", + polygon: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270", + bsc: "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c", + era: "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91", + merlin: "0xF6D226f9Dc15d9bB51182815b320D3fBE324e1bA", +}; +const nativeTokenTransferSignature = ["0x535741", "0x"]; + +type SupportedChains = keyof typeof bridgesAddress; + +const constructParams = (chain: SupportedChains) => { + const bridgeAddress = bridgesAddress[chain]; + + let eventParams = [] as any; + bridgeAddress.map((address: string) => { + const transferWithdrawalParams: PartialContractEventParams = constructTransferParams(address, false); + const transferDepositParams: PartialContractEventParams = constructTransferParams(address, true); + eventParams.push(transferWithdrawalParams, transferDepositParams); + }); + + if (nativeTokens.hasOwnProperty(chain)) { + return async (fromBlock: number, toBlock: number) => { + const eventLogData = await getTxDataFromEVMEventLogs("comet", chain as Chain, fromBlock, toBlock, eventParams); + + const nativeEvents = await Promise.all([ + ...bridgeAddress.map(async (address: string, i: number) => { + await wait(300 * i); // for etherscan + let txs: any[] = []; + txs = await getTxsBlockRangeEtherscan(chain, address, fromBlock, toBlock, { + includeSignatures: nativeTokenTransferSignature, + }); + + const eventsRes: EventData[] = txs.map((tx: any) => { + const event: EventData = { + txHash: tx.hash, + blockNumber: +tx.blockNumber, + from: tx.from, + to: tx.to, + token: nativeTokens[chain], + amount: tx.value, + isDeposit: address === tx.to, + }; + return event; + }); + + return eventsRes; + }), + ] + ); + const allEvents = [...eventLogData, ...nativeEvents.flat()]; + return allEvents; + }; + } else { + return async (fromBlock: number, toBlock: number) => + getTxDataFromEVMEventLogs("comet", chain as Chain, fromBlock, toBlock, eventParams); + } +} + + +const adapter: BridgeAdapter = { + ethereum: constructParams("ethereum"), + arbitrum: constructParams("arbitrum"), + optimism: constructParams("optimism"), + base: constructParams("base"), + linea: constructParams("linea"), + blast: constructParams("blast"), + scroll: constructParams("scroll"), + bsc: constructParams("bsc"), + taiko: constructParams("taiko"), + zklink: constructParams("zklink"), + + 'x layer': constructParams("xlayer"), + "zksync era": constructParams("era"), +}; + +export default adapter; From cf99c3d8149f1787c3d6220cc2a1de58c83e7566 Mon Sep 17 00:00:00 2001 From: 0xfisher6 <162862570+0xfisher6@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:36:55 +0800 Subject: [PATCH 2/4] Update index.ts --- src/adapters/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/adapters/index.ts b/src/adapters/index.ts index 4eff845..4a5af24 100644 --- a/src/adapters/index.ts +++ b/src/adapters/index.ts @@ -64,6 +64,7 @@ import oooo from "./oooo"; import memebridge from "./memebridge"; import bunnyfi from "./bunnyfi"; import minibridge from "./minibridge"; +import cometbridge from "./cometbridge"; export default { polygon, @@ -131,6 +132,7 @@ export default { memebridge, bunnyfi, minibridge, + cometbridge, } as { [bridge: string]: BridgeAdapter; }; From 70893c59b8950d67f6be2ea627c9c0cb9d41c1f2 Mon Sep 17 00:00:00 2001 From: 0xfisher6 <162862570+0xfisher6@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:37:47 +0800 Subject: [PATCH 3/4] Update bridgeNetworkData.ts --- src/data/bridgeNetworkData.ts | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/data/bridgeNetworkData.ts b/src/data/bridgeNetworkData.ts index 668cc9d..7791588 100644 --- a/src/data/bridgeNetworkData.ts +++ b/src/data/bridgeNetworkData.ts @@ -1410,4 +1410,34 @@ export default [ bitlayer: "btr", }, }, + { + id: 69, + displayName: "CometBridge", + bridgeDbName: "cometbridge", + iconLink: "icons:comet", + largeTxThreshold: 10000, + url: "https://cometbridge.app", + chains: [ + "Ethereum", + "Arbitrum", + "Optimism", + "Base", + "Linea", + "Blast", + "Scroll", + "BSC", + "X Layer", + "Taiko", + "ZkLink", + "zkSync Era", + "Merlin", + "BSquared", + "Bitlayer", + "Mode", + ], + chainMapping: { + "zksync era": "era", + "x layer": "xlayer", + }, + }, ] as BridgeNetwork[]; From 42f4b80bbd18437c8f42d54a8706c1e9cc5bb24f Mon Sep 17 00:00:00 2001 From: vrtnd Date: Tue, 6 Aug 2024 15:02:46 +0300 Subject: [PATCH 4/4] fix id --- src/data/bridgeNetworkData.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/bridgeNetworkData.ts b/src/data/bridgeNetworkData.ts index 7791588..fe40f4f 100644 --- a/src/data/bridgeNetworkData.ts +++ b/src/data/bridgeNetworkData.ts @@ -204,6 +204,7 @@ export default [ "Base", "Blast", "Scroll", + "Linea", // "Harmony", // "Dogechain", // "DFK Chain", @@ -1223,6 +1224,7 @@ export default [ "ZkLink", "Bouncebit", "opBNB", + "Mint", "zkSync Era", "Polygon zkEVM",