Skip to content

Commit f5439d3

Browse files
authored
Add snowbridge (#405)
* Add snowbridge * Fix the adapter * Add TRAC * Add supported assets * Add git ignore * Update site url
1 parent 2101698 commit f5439d3

File tree

4 files changed

+161
-2
lines changed

4 files changed

+161
-2
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,6 @@ src/utils/filljobs2.ts
2626

2727
.vscoded
2828

29-
dist
29+
dist
30+
31+
.vscode

src/adapters/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ import pheasantNetwork from "./pheasant-network";
9696
import teleswap from "./teleswap";
9797
import agglayer from "./agglayer";
9898
import fxrp from "./flare/fxrp";
99+
import snowbridge from "./snowbridge";
99100

100101
export default {
101102
polygon,
@@ -195,6 +196,7 @@ export default {
195196
teleswap,
196197
agglayer,
197198
fxrp,
199+
snowbridge,
198200
} as {
199201
[bridge: string]: BridgeAdapter | AsyncBridgeAdapter;
200202
};

src/adapters/snowbridge/index.ts

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
import { BridgeAdapter, PartialContractEventParams } from "../../helpers/bridgeAdapter.type";
2+
import { Chain } from "@defillama/sdk/build/general";
3+
import { getTxDataFromEVMEventLogs } from "../../helpers/processTransactions";
4+
import { BigNumber } from "ethers";
5+
6+
const contractAddresses = {
7+
ethereum: {
8+
gateway: "0x27ca963c279c93801941e1eb8799c23f407d68e7", // Gateway address
9+
agent: "0xd803472c47a87D7B63E888DE53f03B4191B846a8", // Agent address
10+
tokens: [
11+
{
12+
token: "0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f", // TracToken
13+
},
14+
{
15+
token: "0xba41ddf06b7ffd89d1267b5a93bfef2424eb2003", // MYTH
16+
},
17+
{
18+
token: "0x18084fba666a33d37592fa2633fd49a74dd93a88", // tBTC v2
19+
},
20+
{
21+
token: "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0", // wstETH
22+
},
23+
{
24+
token: "0x45804880De22913dAFE09f4980848ECE6EcbAf78", // PAXG
25+
},
26+
{
27+
token: "0x514910771af9ca656af840dff83e8264ecf986ca", // LINK
28+
},
29+
{
30+
token: "0x7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9", // AAVE
31+
},
32+
{
33+
token: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2", // WETH
34+
},
35+
{
36+
token: "0x9D39A5DE30e57443BfF2A8307A4256c8797A3497", // SUSDE
37+
},
38+
{
39+
token: "0x5a98fcbea516cf06857215779fd812ca3bef1b32", // LDO
40+
},
41+
{
42+
token: "0x5d3d01fd6d2ad1169b17918eb4f153c6616288eb", // KILT
43+
},
44+
{
45+
token: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", // USDC
46+
},
47+
{
48+
token: "0xdac17f958d2ee523a2206206994597c13d831ec7", // USDT
49+
},
50+
{
51+
token: "0x56072C95FAA701256059aa122697B133aDEd9279", // SKY
52+
},
53+
{
54+
token: "0x57e114B691Db790C35207b2e685D4A43181e6061", // ENA
55+
},
56+
{
57+
token: "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", // WBTC
58+
},
59+
],
60+
},
61+
} as {
62+
[chain: string]: {
63+
gateway: string;
64+
agent: string;
65+
tokens: { token: string }[];
66+
};
67+
};
68+
69+
const depositParams: PartialContractEventParams = {
70+
target: "",
71+
topic: "Transfer(address,address,uint256)",
72+
abi: ["event Transfer(address indexed from, address indexed to, uint256 value)"],
73+
logKeys: {
74+
blockNumber: "blockNumber",
75+
txHash: "transactionHash",
76+
},
77+
argKeys: {
78+
amount: "value",
79+
from: "from",
80+
to: "to",
81+
},
82+
argGetters: {
83+
amount: (log: any) => BigNumber.from(log.value),
84+
},
85+
fixedEventData: {
86+
token: "",
87+
},
88+
isDeposit: true,
89+
};
90+
91+
const withdrawalParams: PartialContractEventParams = {
92+
target: "",
93+
topic: "Transfer(address,address,uint256)",
94+
abi: ["event Transfer(address indexed from, address indexed to, uint256 value)"],
95+
logKeys: {
96+
blockNumber: "blockNumber",
97+
txHash: "transactionHash",
98+
},
99+
argKeys: {
100+
amount: "value",
101+
from: "from",
102+
to: "to",
103+
},
104+
fixedEventData: {
105+
token: "",
106+
},
107+
isDeposit: false,
108+
};
109+
110+
const constructParams = (chain: string) => {
111+
let eventParams: PartialContractEventParams[] = [];
112+
113+
const contractAddressesForChain = contractAddresses[chain];
114+
const gateway = contractAddressesForChain?.gateway;
115+
const agent = contractAddressesForChain?.agent;
116+
const tokens = contractAddressesForChain?.tokens || [];
117+
118+
tokens.map(({ token }) => {
119+
const tokenDepositParams: PartialContractEventParams = {
120+
...depositParams,
121+
target: token,
122+
filter: { includeTo: [agent] },
123+
fixedEventData: { ...depositParams.fixedEventData, token: token },
124+
};
125+
const tokenWithdrawalParams: PartialContractEventParams = {
126+
...withdrawalParams,
127+
target: token,
128+
isDeposit: false,
129+
filter: { includeFrom: [agent] },
130+
fixedEventData: { ...withdrawalParams.fixedEventData, token: token },
131+
};
132+
eventParams.push(tokenDepositParams, tokenWithdrawalParams);
133+
});
134+
135+
// Return a function to fetch transaction data from event logs
136+
return async (fromBlock: number, toBlock: number) =>
137+
getTxDataFromEVMEventLogs("snowbridge", chain as Chain, fromBlock, toBlock, eventParams);
138+
};
139+
140+
// Step 6: Export the adapter
141+
const adapter: BridgeAdapter = Object.fromEntries(
142+
Object.keys(contractAddresses).map((chain) => [chain, constructParams(chain)])
143+
);
144+
145+
export default adapter;

src/data/bridgeNetworkData.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2455,7 +2455,6 @@ export default [
24552455
},
24562456
},
24572457
{
2458-
id: 96,
24592458
displayName: "Chainlink CCIP",
24602459
bridgeDbName: "ccip",
24612460
iconLink: "icons:chainlink",
@@ -2583,4 +2582,15 @@ export default [
25832582
chains: ["Flare", "XRPL"],
25842583
destinationChain: "XRPL",
25852584
},
2585+
{
2586+
id: 101,
2587+
displayName: "Snowbridge",
2588+
bridgeDbName: "snowbridge",
2589+
iconLink: "icons:snowbridge",
2590+
slug: "snowbridge",
2591+
largeTxThreshold: 10000,
2592+
url: "https://app.snowbridge.network/",
2593+
chains: ["Polkadot", "Ethereum"],
2594+
destinationChain: "Ethereum",
2595+
},
25862596
] as BridgeNetwork[];

0 commit comments

Comments
 (0)