Skip to content

Commit 531656e

Browse files
committed
feat(ccip): add token directory API with lane verifiers and v2 feature detection
Add /tokens/{symbol}/chains/{chain} endpoint with supportsV2Features flag for interpreting null values in ccvConfig, customFinality, and verifiers fields.
1 parent 715a2dc commit 531656e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+81606
-36780
lines changed

docs/CCIP-API-TOKEN-DIRECTORY.md

Lines changed: 683 additions & 0 deletions
Large diffs are not rendered by default.

jest.config.cjs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,9 @@ module.exports = {
3535
"\\.ya?ml$": "<rootDir>/src/__mocks__/yamlMock.ts",
3636
},
3737
transformIgnorePatterns: ["/node_modules/(?!.*\\.mjs$)"],
38-
testPathIgnorePatterns: ["/node_modules/", "src/tests/chain-api.test.ts"],
38+
testPathIgnorePatterns: [
39+
"/node_modules/",
40+
"src/tests/chain-api.test.ts",
41+
"src/tests/chain-identifier-service.test.ts",
42+
],
3943
}

public/api/ccip/v1/openapi.json

Lines changed: 901 additions & 3 deletions
Large diffs are not rendered by default.
Lines changed: 333 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,333 @@
1+
{
2+
"LBTC": {
3+
"mainnet": {
4+
"thresholdAmount": "100000000000",
5+
"outboundCCVs": {
6+
"ethereum-mainnet-to-ethereum-mainnet-arbitrum-1": {
7+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
8+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
9+
},
10+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
11+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
12+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
13+
},
14+
"ethereum-mainnet-to-ethereum-mainnet-optimism-1": {
15+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
16+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
17+
}
18+
},
19+
"inboundCCVs": {
20+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet": {
21+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
22+
"threshold": []
23+
},
24+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
25+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
26+
"threshold": []
27+
},
28+
"ethereum-mainnet-optimism-1-to-ethereum-mainnet": {
29+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
30+
"threshold": []
31+
}
32+
}
33+
},
34+
"ethereum-mainnet-arbitrum-1": {
35+
"thresholdAmount": "50000000000",
36+
"outboundCCVs": {
37+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet": {
38+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191"],
39+
"threshold": ["0xBF38331E34ef7f248020611bB31Be0576D06413D"]
40+
},
41+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet-base-1": {
42+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191"],
43+
"threshold": ["0xBF38331E34ef7f248020611bB31Be0576D06413D"]
44+
}
45+
},
46+
"inboundCCVs": {
47+
"ethereum-mainnet-to-ethereum-mainnet-arbitrum-1": {
48+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191"],
49+
"threshold": []
50+
},
51+
"ethereum-mainnet-base-1-to-ethereum-mainnet-arbitrum-1": {
52+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191"],
53+
"threshold": []
54+
}
55+
}
56+
},
57+
"ethereum-mainnet-base-1": {
58+
"thresholdAmount": "50000000000",
59+
"outboundCCVs": {
60+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
61+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755"],
62+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
63+
},
64+
"ethereum-mainnet-base-1-to-ethereum-mainnet-arbitrum-1": {
65+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755"],
66+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
67+
}
68+
},
69+
"inboundCCVs": {
70+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
71+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755"],
72+
"threshold": []
73+
},
74+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet-base-1": {
75+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755"],
76+
"threshold": []
77+
}
78+
}
79+
}
80+
},
81+
"USDC": {
82+
"mainnet": {
83+
"thresholdAmount": "0",
84+
"outboundCCVs": {
85+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
86+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x768a1a3B321126A8B214d7376D48465C7f6Fa061"],
87+
"threshold": []
88+
},
89+
"ethereum-mainnet-to-ethereum-mainnet-arbitrum-1": {
90+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x768a1a3B321126A8B214d7376D48465C7f6Fa061"],
91+
"threshold": []
92+
},
93+
"ethereum-mainnet-to-ethereum-mainnet-optimism-1": {
94+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x2edAc8B8928c4e1Ed559e619b6A8a4aaCe9Ef18A"],
95+
"threshold": []
96+
}
97+
},
98+
"inboundCCVs": {
99+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
100+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x768a1a3B321126A8B214d7376D48465C7f6Fa061"],
101+
"threshold": []
102+
},
103+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet": {
104+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x768a1a3B321126A8B214d7376D48465C7f6Fa061"],
105+
"threshold": []
106+
},
107+
"ethereum-mainnet-optimism-1-to-ethereum-mainnet": {
108+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x2edAc8B8928c4e1Ed559e619b6A8a4aaCe9Ef18A"],
109+
"threshold": []
110+
}
111+
}
112+
},
113+
"ethereum-mainnet-base-1": {
114+
"thresholdAmount": "0",
115+
"outboundCCVs": {
116+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
117+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755", "0x09521B0B5BB2d4406124c0207Cf551829B45f84d"],
118+
"threshold": []
119+
}
120+
},
121+
"inboundCCVs": {
122+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
123+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755", "0x09521B0B5BB2d4406124c0207Cf551829B45f84d"],
124+
"threshold": []
125+
}
126+
}
127+
},
128+
"ethereum-mainnet-arbitrum-1": {
129+
"thresholdAmount": "0",
130+
"outboundCCVs": {
131+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet": {
132+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191", "0x768a1a3B321126A8B214d7376D48465C7f6Fa061"],
133+
"threshold": []
134+
}
135+
},
136+
"inboundCCVs": {
137+
"ethereum-mainnet-to-ethereum-mainnet-arbitrum-1": {
138+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191", "0x768a1a3B321126A8B214d7376D48465C7f6Fa061"],
139+
"threshold": []
140+
}
141+
}
142+
},
143+
"ethereum-mainnet-optimism-1": {
144+
"thresholdAmount": "0",
145+
"outboundCCVs": {
146+
"ethereum-mainnet-optimism-1-to-ethereum-mainnet": {
147+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x2edAc8B8928c4e1Ed559e619b6A8a4aaCe9Ef18A"],
148+
"threshold": []
149+
}
150+
},
151+
"inboundCCVs": {
152+
"ethereum-mainnet-to-ethereum-mainnet-optimism-1": {
153+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0x2edAc8B8928c4e1Ed559e619b6A8a4aaCe9Ef18A"],
154+
"threshold": []
155+
}
156+
}
157+
}
158+
},
159+
"LINK": {
160+
"mainnet": {
161+
"thresholdAmount": "10000000000000000000000",
162+
"outboundCCVs": {
163+
"ethereum-mainnet-to-ethereum-mainnet-arbitrum-1": {
164+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
165+
"threshold": ["0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc"]
166+
},
167+
"ethereum-mainnet-to-ethereum-mainnet-optimism-1": {
168+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
169+
"threshold": ["0x76Aa17dCda9E8529149E76e9ffaE4aD1C4AD701B"]
170+
},
171+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
172+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
173+
"threshold": ["0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc"]
174+
}
175+
},
176+
"inboundCCVs": {
177+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet": {
178+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
179+
"threshold": []
180+
},
181+
"ethereum-mainnet-optimism-1-to-ethereum-mainnet": {
182+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
183+
"threshold": []
184+
},
185+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
186+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
187+
"threshold": []
188+
}
189+
}
190+
},
191+
"ethereum-mainnet-arbitrum-1": {
192+
"thresholdAmount": "10000000000000000000000",
193+
"outboundCCVs": {
194+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet": {
195+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191", "0xBF38331E34ef7f248020611bB31Be0576D06413D"],
196+
"threshold": ["0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc"]
197+
},
198+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet-base-1": {
199+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191", "0xBF38331E34ef7f248020611bB31Be0576D06413D"],
200+
"threshold": ["0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc"]
201+
}
202+
},
203+
"inboundCCVs": {
204+
"ethereum-mainnet-to-ethereum-mainnet-arbitrum-1": {
205+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191", "0xBF38331E34ef7f248020611bB31Be0576D06413D"],
206+
"threshold": []
207+
},
208+
"ethereum-mainnet-base-1-to-ethereum-mainnet-arbitrum-1": {
209+
"base": ["0xe9c6945281028cb6530d43F998eE539dFE2a9191", "0xBF38331E34ef7f248020611bB31Be0576D06413D"],
210+
"threshold": []
211+
}
212+
}
213+
},
214+
"ethereum-mainnet-base-1": {
215+
"thresholdAmount": "10000000000000000000000",
216+
"outboundCCVs": {
217+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
218+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
219+
"threshold": ["0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc"]
220+
},
221+
"ethereum-mainnet-base-1-to-ethereum-mainnet-arbitrum-1": {
222+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
223+
"threshold": ["0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc"]
224+
}
225+
},
226+
"inboundCCVs": {
227+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
228+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
229+
"threshold": []
230+
},
231+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet-base-1": {
232+
"base": ["0x0aA145a62153190B8f0D3cA00c441e451529f755", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
233+
"threshold": []
234+
}
235+
}
236+
},
237+
"ethereum-mainnet-optimism-1": {
238+
"thresholdAmount": "10000000000000000000000",
239+
"outboundCCVs": {
240+
"ethereum-mainnet-optimism-1-to-ethereum-mainnet": {
241+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
242+
"threshold": ["0x76Aa17dCda9E8529149E76e9ffaE4aD1C4AD701B"]
243+
}
244+
},
245+
"inboundCCVs": {
246+
"ethereum-mainnet-to-ethereum-mainnet-optimism-1": {
247+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D", "0xF4c7E640EdA248ef95972845a62bdC74237805dB"],
248+
"threshold": []
249+
}
250+
}
251+
}
252+
},
253+
"wstETH": {
254+
"mainnet": {
255+
"thresholdAmount": "500000000000000000000",
256+
"outboundCCVs": {
257+
"ethereum-mainnet-to-ethereum-mainnet-arbitrum-1": {
258+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
259+
"threshold": ["0xcBD48A8eB077381c3c4Eb36b402d7283aB2b11Bc"]
260+
},
261+
"ethereum-mainnet-to-ethereum-mainnet-optimism-1": {
262+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
263+
"threshold": ["0x76Aa17dCda9E8529149E76e9ffaE4aD1C4AD701B"]
264+
}
265+
},
266+
"inboundCCVs": {
267+
"ethereum-mainnet-arbitrum-1-to-ethereum-mainnet": {
268+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
269+
"threshold": []
270+
},
271+
"ethereum-mainnet-optimism-1-to-ethereum-mainnet": {
272+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
273+
"threshold": []
274+
}
275+
}
276+
}
277+
},
278+
"BETS": {
279+
"mainnet": {
280+
"thresholdAmount": "50000000000000000000000000",
281+
"outboundCCVs": {
282+
"ethereum-mainnet-to-avalanche-mainnet": {
283+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
284+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
285+
},
286+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
287+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
288+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
289+
}
290+
},
291+
"inboundCCVs": {
292+
"avalanche-mainnet-to-ethereum-mainnet": {
293+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
294+
"threshold": []
295+
},
296+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
297+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
298+
"threshold": []
299+
}
300+
}
301+
},
302+
"ethereum-mainnet-base-1": {
303+
"thresholdAmount": "25000000000000000000000000",
304+
"outboundCCVs": {
305+
"ethereum-mainnet-base-1-to-ethereum-mainnet": {
306+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
307+
"threshold": ["0xF4c7E640EdA248ef95972845a62bdC74237805dB"]
308+
}
309+
},
310+
"inboundCCVs": {
311+
"ethereum-mainnet-to-ethereum-mainnet-base-1": {
312+
"base": ["0x80226fc0Ee2b096224EeAc085Bb9a8cba1146f7D"],
313+
"threshold": []
314+
}
315+
}
316+
},
317+
"bsc-mainnet": {
318+
"thresholdAmount": "0",
319+
"outboundCCVs": {
320+
"binance_smart_chain-mainnet-to-ethereum-mainnet": {
321+
"base": null,
322+
"threshold": null
323+
}
324+
},
325+
"inboundCCVs": {
326+
"ethereum-mainnet-to-binance_smart_chain-mainnet": {
327+
"base": null,
328+
"threshold": null
329+
}
330+
}
331+
}
332+
}
333+
}

0 commit comments

Comments
 (0)