1
+ import { BridgeAdapter , PartialContractEventParams } from "../../helpers/bridgeAdapter.type" ;
2
+ import { getTxDataFromEVMEventLogs } from "../../helpers/processTransactions" ;
3
+ import { constructTransferParams } from "../../helpers/eventParams" ;
4
+ import { Chain } from "@defillama/sdk/build/general" ;
5
+ import { getTxsBlockRangeEtherscan , wait } from "../../helpers/etherscan" ;
6
+ import { getTxsBlockRangeMerlinScan } from "../../helpers/merlin" ;
7
+ import { EventData } from "../../utils/types" ;
8
+ import { BigNumber } from "ethers" ;
9
+ import { getTxsBlockRangeBtrScan } from "../../helpers/btr" ;
10
+
11
+ const blackListedAddresses = [
12
+ "0xe2e1808ed4cc4a6f701696086838f511ee187d57" ,
13
+ ] . map ( ( a ) => a . toLowerCase ( ) ) ;
14
+
15
+ const solverAddressesEOA = [
16
+ "0x2fc617e933a52713247ce25730f6695920b3befe"
17
+ ] ;
18
+
19
+ const solverAddressesEOAerc = [
20
+ "0x2fc617e933a52713247ce25730f6695920b3befe" ,
21
+ "0x08b00ceee2fb66029b53d76110b19eeaabfd1e65" ,
22
+ ] ;
23
+
24
+ const nativeTokens : Record < string , string > = {
25
+ ethereum : "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" ,
26
+ arbitrum : "0x82af49447d8a07e3bd95bd0d56f35241523fbab1" ,
27
+ optimism : "0x4200000000000000000000000000000000000006" ,
28
+ base : "0x4200000000000000000000000000000000000006" ,
29
+ linea : "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f" ,
30
+ blast : "0x4300000000000000000000000000000000000004" ,
31
+ polygon : "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270" ,
32
+ scroll : "0x5300000000000000000000000000000000000004" ,
33
+ mode : "0x4200000000000000000000000000000000000006" ,
34
+ manta : "0x0Dc808adcE2099A9F62AA87D9670745AbA741746" ,
35
+ arbitrum_nova : "0x722E8BdD2ce80A4422E880164f2079488e115365" ,
36
+ polygon_zkevm : "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270" ,
37
+ era : "0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91" ,
38
+ merlin : "0xF6D226f9Dc15d9bB51182815b320D3fBE324e1bA" ,
39
+ zklink : "0x000000000000000000000000000000000000800A" ,
40
+ btr : "0xff204e2681a6fa0e2c3fade68a1b28fb90e4fc5f" ,
41
+ xlayer : "0x5a77f1443d16ee5761d310e38b62f77f726bc71c" ,
42
+ op_bnb : "0xe7798f023fc62146e8aa1b36da45fb70855a77ea" ,
43
+ bsc : "0x2170Ed0880ac9A755fd29B2688956BD959F933F8" ,
44
+ mantle : "0xdeaddeaddeaddeaddeaddeaddeaddeaddead1111" ,
45
+ bouncebit : "0x7F150c293c97172C75983BD8ac084c187107eA19" ,
46
+ zkfair : "0x4b21b980d0Dc7D3C0C6175b0A412694F3A1c7c6b" ,
47
+ bsquared : "0x8dbf84c93727c85DB09478C83a8621e765D20eC2" ,
48
+ taiko : "0xA51894664A773981C6C112C43ce576f315d5b1B6" ,
49
+ } ;
50
+
51
+ const constructParams = ( chain : string ) => {
52
+
53
+ let eventParams = [ ] as any ;
54
+ solverAddressesEOAerc . map ( ( address : string ) => {
55
+ const transferWithdrawalParams : PartialContractEventParams = constructTransferParams ( address , false ) ;
56
+ const transferDepositParams : PartialContractEventParams = constructTransferParams ( address , true ) ;
57
+ eventParams . push ( transferWithdrawalParams , transferDepositParams ) ;
58
+ } ) ;
59
+
60
+ return async ( fromBlock : number , toBlock : number ) => {
61
+
62
+ const eventLogData = await getTxDataFromEVMEventLogs ( "layerswap" , chain as Chain , fromBlock , toBlock , eventParams ) ;
63
+
64
+ const nativeEvents = await Promise . all (
65
+ solverAddressesEOA . map ( async ( address : string , i : number ) => {
66
+ await wait ( 500 * i ) ; // for etherscan
67
+ let txs : any [ ] = [ ] ;
68
+ if ( chain === "merlin" ) {
69
+ txs = await getTxsBlockRangeMerlinScan ( address , fromBlock , toBlock , { } ) ;
70
+ } else if ( chain === "btr" ) {
71
+ txs = await getTxsBlockRangeBtrScan ( address , fromBlock , toBlock , { } ) ;
72
+ } else {
73
+ txs = await getTxsBlockRangeEtherscan ( chain , address , fromBlock , toBlock , { } ) ;
74
+ }
75
+ const eventsRes : EventData [ ] = txs . map ( ( tx : any ) => {
76
+ const event : EventData = {
77
+ txHash : tx . hash ,
78
+ blockNumber : + tx . blockNumber ,
79
+ from : tx . from ,
80
+ to : tx . to ,
81
+ token : nativeTokens [ chain ] ,
82
+ amount : BigNumber . from ( tx . value ) ,
83
+ isDeposit : address === tx . to ,
84
+ } ;
85
+ return event ;
86
+ } ) ;
87
+
88
+ return eventsRes ;
89
+ } )
90
+ ) ;
91
+
92
+ const allEvents : EventData [ ] = [ ...nativeEvents . flat ( ) , ...eventLogData ] ;
93
+ const filteredEvents = allEvents . filter (
94
+ ( event ) =>
95
+ ! blackListedAddresses . includes ( event ?. from ?. toLowerCase ( ) ) &&
96
+ ! blackListedAddresses . includes ( event ?. to ?. toLowerCase ( ) )
97
+ ) ;
98
+ return filteredEvents ;
99
+ } ;
100
+ } ;
101
+
102
+ const adapter : BridgeAdapter = {
103
+ ethereum : constructParams ( "ethereum" ) ,
104
+ arbitrum : constructParams ( "arbitrum" ) ,
105
+ optimism : constructParams ( "optimism" ) ,
106
+ base : constructParams ( "base" ) ,
107
+ linea : constructParams ( "linea" ) ,
108
+ blast : constructParams ( "blast" ) ,
109
+ polygon : constructParams ( "polygon" ) ,
110
+ scroll : constructParams ( "scroll" ) ,
111
+ bsc : constructParams ( "bsc" ) ,
112
+ mode : constructParams ( "mode" ) ,
113
+ manta : constructParams ( "manta" ) ,
114
+ metis : constructParams ( "metis" ) ,
115
+ mantle : constructParams ( "mantle" ) ,
116
+ taiko : constructParams ( "taiko" ) ,
117
+ opbnb : constructParams ( "op_bnb" ) ,
118
+ bouncebit : constructParams ( "bouncebit-mainnet" ) ,
119
+ mint : constructParams ( "mint" ) ,
120
+ 'x layer' : constructParams ( "xlayer" ) ,
121
+ "arbitrum nova" : constructParams ( "arbitrum_nova" ) ,
122
+ "polygon zkevm" : constructParams ( "polygon_zkevm" ) ,
123
+ "zksync era" : constructParams ( "era" ) ,
124
+ gnosis : constructParams ( "xdai" ) ,
125
+ avalanche : constructParams ( "avax" ) ,
126
+ gravity : constructParams ( "gravity" ) ,
127
+ bob : constructParams ( "bob" ) ,
128
+ zora : constructParams ( "zora" ) ,
129
+ kroma : constructParams ( "kroma" ) ,
130
+ fraxtal : constructParams ( "fraxtal" ) ,
131
+ kcc : constructParams ( "kcc" ) ,
132
+ astar : constructParams ( "astar" ) ,
133
+ fuse : constructParams ( "fuse" ) ,
134
+ } ;
135
+ export default adapter ;
0 commit comments