|
| 1 | +import { BigNumber, ethers } from "ethers"; |
| 2 | +import { BridgeAdapter, PartialContractEventParams } from "../../helpers/bridgeAdapter.type"; |
| 3 | +import { getTxDataFromEVMEventLogs } from "../../helpers/processTransactions"; |
| 4 | +import { getProvider } from "@defillama/sdk"; |
| 5 | + |
| 6 | +const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; |
| 7 | +const WBTC = "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"; |
| 8 | +const USDT = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; |
| 9 | +const SUI_BRIDGE = "0xda3bD1fE1973470312db04551B65f401Bc8a92fD"; |
| 10 | +const SUI_BRIDGE_CONFIG = "0x72D34Fe82c71Bf8120647518e5128e53106a1540"; |
| 11 | + |
| 12 | +const erc20DepositParams: PartialContractEventParams = { |
| 13 | + target: SUI_BRIDGE, |
| 14 | + topic: "TokensDeposited(uint8,uint64,uint8,uint8,uint64,address,bytes)", |
| 15 | + abi: [ |
| 16 | + "event TokensDeposited(uint8 indexed sourceChainID, uint64 indexed nonce, uint8 indexed destinationChainID, uint8 tokenID, uint64 suiAdjustedAmount, address senderAddress, bytes recipientAddress)", |
| 17 | + ], |
| 18 | + logKeys: { |
| 19 | + blockNumber: "blockNumber", |
| 20 | + txHash: "transactionHash", |
| 21 | + }, |
| 22 | + argKeys: { |
| 23 | + from: "senderAddress", |
| 24 | + to: "recipientAddress", |
| 25 | + amount: "suiAdjustedAmount", |
| 26 | + token: "tokenID", |
| 27 | + }, |
| 28 | + argGetters: { |
| 29 | + token: (log) => getTokenAddressFromTokenID(log.tokenID), |
| 30 | + }, |
| 31 | + fixedEventData: { |
| 32 | + to: SUI_BRIDGE, |
| 33 | + }, |
| 34 | + isDeposit: true, |
| 35 | +}; |
| 36 | + |
| 37 | +const erc20WithdrawParams: PartialContractEventParams = { |
| 38 | + target: SUI_BRIDGE, |
| 39 | + topic: "TokensClaimed(uint8,uint64,uint8,uint8,uint256,bytes,address)", |
| 40 | + abi: [ |
| 41 | + "event TokensClaimed(uint8 indexed sourceChainID, uint64 indexed nonce, uint8 indexed destinationChainID, uint8 tokenID, uint256 erc20AdjustedAmount, bytes senderAddress, address recipientAddress)", |
| 42 | + ], |
| 43 | + logKeys: { |
| 44 | + blockNumber: "blockNumber", |
| 45 | + txHash: "transactionHash", |
| 46 | + }, |
| 47 | + argKeys: { |
| 48 | + from: "senderAddress", |
| 49 | + to: "recipientAddress", |
| 50 | + amount: "erc20AdjustedAmount", |
| 51 | + token: "tokenID" |
| 52 | + }, |
| 53 | + argGetters: { |
| 54 | + token: (log) => getTokenAddressFromTokenID(log.tokenID), |
| 55 | + }, |
| 56 | + fixedEventData: { |
| 57 | + from: SUI_BRIDGE, |
| 58 | + }, |
| 59 | + isDeposit: false, |
| 60 | +}; |
| 61 | + |
| 62 | +const constructParams = () => { |
| 63 | + const eventParams = [erc20WithdrawParams, erc20DepositParams]; |
| 64 | + return async (fromBlock: number, toBlock: number) => { |
| 65 | + const eventLogsRes = await getTxDataFromEVMEventLogs("suibridge", "ethereum", fromBlock, toBlock, eventParams); |
| 66 | + return eventLogsRes.map((event) => { |
| 67 | + if (event.isDeposit) { |
| 68 | + let erc20TokenAmount = formatSuiAmount(event.amount, event.token); |
| 69 | + event.amount = erc20TokenAmount; |
| 70 | + } |
| 71 | + return event; |
| 72 | + }); |
| 73 | + }; |
| 74 | +}; |
| 75 | + |
| 76 | +// TODO: use config contract read to get the token address from tokenID |
| 77 | +const getTokenAddressFromTokenID = (tokenID: number) => { |
| 78 | + switch (tokenID) { |
| 79 | + case 2: |
| 80 | + return WETH; |
| 81 | + case 3: |
| 82 | + return WBTC; |
| 83 | + case 4: |
| 84 | + return USDT; |
| 85 | + default: |
| 86 | + return ""; |
| 87 | + } |
| 88 | +} |
| 89 | + |
| 90 | +// TODO: get decimal values from on chain contract call |
| 91 | +const formatSuiAmount = (amount: BigNumber, token: string) => { |
| 92 | + switch (token) { |
| 93 | + case WETH: |
| 94 | + return amount.mul(10**10); |
| 95 | + case WBTC: |
| 96 | + return amount.mul(10**10); |
| 97 | + case USDT: |
| 98 | + return amount.mul(10**12); |
| 99 | + default: |
| 100 | + return amount; |
| 101 | + } |
| 102 | +} |
| 103 | + |
| 104 | +const adapter: BridgeAdapter = { |
| 105 | + ethereum: constructParams(), |
| 106 | +}; |
| 107 | + |
| 108 | +export default adapter; |
0 commit comments