@snowbridge/registry 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,7 @@ const registry = {
7
7
  beaconApiUrl: "https://lodestar-sepolia.chainsafe.io",
8
8
  ethereumChains: {
9
9
  "84532": "https://base-sepolia-rpc.publicnode.com",
10
+ "421614": "https://arbitrum-sepolia-rpc.publicnode.com",
10
11
  "11155111": "https://ethereum-sepolia-rpc.publicnode.com",
11
12
  },
12
13
  relaychainUrl: "wss://westend-rpc.n.dwellir.com",
@@ -15,21 +16,21 @@ const registry = {
15
16
  "1002": "wss://bridge-hub-westend-rpc.n.dwellir.com",
16
17
  },
17
18
  gatewayContract: "0x9ed8b47bc3417e3bd0507adc06e56e2fa360a4e9",
18
- beefyContract: "0xA04460B1D8bBef33F54edB2C3115e3E4D41237A6",
19
+ beefyContract: "0xa04460b1d8bbef33f54edb2c3115e3e4d41237a6",
19
20
  assetHubParaId: 1000,
20
21
  bridgeHubParaId: 1002,
21
22
  v2_parachains: [1000],
22
23
  indexerGraphQlUrl: "https://snowbridge.squids.live/snowbridge-subsquid-westend@v1/api/graphql",
23
24
  l2Bridge: {
24
25
  acrossAPIUrl: "https://testnet.across.to/api",
25
- l1AdapterAddress: "0xA5B8589bD534701be49916c4d2e634aB1c765Cbf",
26
- l1HandlerAddress: "0x924a9f036260DdD5808007E1AA95f08eD08aA569",
27
- l1FeeTokenAddress: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
28
- l1SwapRouterAddress: "0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E",
29
- l1SwapQuoterAddress: "0xEd1f6473345F45b75F8179591dd5bA1888cf2FB3",
26
+ l1AdapterAddress: "0xcda9bff39cdf39e95f4b699422e422195091126d",
27
+ l1HandlerAddress: "0x924a9f036260ddd5808007e1aa95f08ed08aa569",
28
+ l1FeeTokenAddress: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
29
+ l1SwapRouterAddress: "0x3bfa4769fb09eefc5a80d6e87c3b9c650f7ae48e",
30
+ l1SwapQuoterAddress: "0xed1f6473345f45b75f8179591dd5ba1888cf2fb3",
30
31
  l2Chains: {
31
32
  "84532": {
32
- adapterAddress: "0xf06939613A3838Af11104c898758220dB9093679",
33
+ adapterAddress: "0xf06939613a3838af11104c898758220db9093679",
33
34
  feeTokenAddress: "0x4200000000000000000000000000000000000006",
34
35
  swapRoutes: [
35
36
  {
@@ -44,6 +45,22 @@ const registry = {
44
45
  },
45
46
  ],
46
47
  },
48
+ "421614": {
49
+ adapterAddress: "0xcb3d8043bdbfb0d9b30de279a09132073d1de561",
50
+ feeTokenAddress: "0x980b62da83eff3d4576c647993b0c1d7faf17c73",
51
+ swapRoutes: [
52
+ {
53
+ inputToken: "0x980b62da83eff3d4576c647993b0c1d7faf17c73",
54
+ outputToken: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
55
+ swapFee: 0,
56
+ },
57
+ {
58
+ inputToken: "0x75faf114eafb1bdbe2f0316df893fd58ce46aa4d",
59
+ outputToken: "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
60
+ swapFee: 500,
61
+ },
62
+ ],
63
+ },
47
64
  },
48
65
  },
49
66
  },
@@ -84,9 +101,69 @@ const registry = {
84
101
  "0xf50fb50d65c8c1f6c72e4d8397c984933afc8f7e",
85
102
  ],
86
103
  },
104
+ {
105
+ from: {
106
+ kind: "polkadot",
107
+ id: 1000,
108
+ },
109
+ to: {
110
+ kind: "ethereum_l2",
111
+ id: 84532,
112
+ },
113
+ assets: [
114
+ "0x0000000000000000000000000000000000000000",
115
+ "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
116
+ "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
117
+ ],
118
+ },
119
+ {
120
+ from: {
121
+ kind: "ethereum_l2",
122
+ id: 84532,
123
+ },
124
+ to: {
125
+ kind: "polkadot",
126
+ id: 1000,
127
+ },
128
+ assets: [
129
+ "0x0000000000000000000000000000000000000000",
130
+ "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
131
+ "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
132
+ ],
133
+ },
134
+ {
135
+ from: {
136
+ kind: "polkadot",
137
+ id: 1000,
138
+ },
139
+ to: {
140
+ kind: "ethereum_l2",
141
+ id: 421614,
142
+ },
143
+ assets: [
144
+ "0x0000000000000000000000000000000000000000",
145
+ "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
146
+ "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
147
+ ],
148
+ },
149
+ {
150
+ from: {
151
+ kind: "ethereum_l2",
152
+ id: 421614,
153
+ },
154
+ to: {
155
+ kind: "polkadot",
156
+ id: 1000,
157
+ },
158
+ assets: [
159
+ "0x0000000000000000000000000000000000000000",
160
+ "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
161
+ "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
162
+ ],
163
+ },
87
164
  ],
88
165
  registry: {
89
- timestamp: "2026-01-28T21:33:34.219Z",
166
+ timestamp: "2026-02-16T10:24:33.190Z",
90
167
  environment: "westend_sepolia",
91
168
  ethChainId: 11155111,
92
169
  gatewayAddress: "0x9ed8b47bc3417e3bd0507adc06e56e2fa360a4e9",
@@ -100,7 +177,7 @@ const registry = {
100
177
  accountType: "AccountId32",
101
178
  name: "Westend",
102
179
  specName: "westend",
103
- specVersion: 1021001,
180
+ specVersion: 1021002,
104
181
  },
105
182
  bridgeHub: {
106
183
  tokenSymbols: "WND",
@@ -110,12 +187,13 @@ const registry = {
110
187
  accountType: "AccountId32",
111
188
  name: "Westend BridgeHub",
112
189
  specName: "bridge-hub-westend",
113
- specVersion: 1021000,
190
+ specVersion: 1021001,
114
191
  },
115
192
  ethereumChains: {
116
193
  ethereum_l2_84532: {
117
194
  kind: "ethereum_l2",
118
195
  id: 84532,
196
+ name: "base-sepolia",
119
197
  assets: {
120
198
  "0x4200000000000000000000000000000000000006": {
121
199
  token: "0x4200000000000000000000000000000000000006",
@@ -144,9 +222,42 @@ const registry = {
144
222
  },
145
223
  key: "ethereum_l2_84532",
146
224
  },
225
+ ethereum_l2_421614: {
226
+ kind: "ethereum_l2",
227
+ id: 421614,
228
+ name: "arbitrum-sepolia",
229
+ assets: {
230
+ "0x980b62da83eff3d4576c647993b0c1d7faf17c73": {
231
+ token: "0x980b62da83eff3d4576c647993b0c1d7faf17c73",
232
+ name: "WETH",
233
+ symbol: "WETH",
234
+ decimals: 18,
235
+ swapTokenAddress: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
236
+ swapFee: 0,
237
+ },
238
+ "0x75faf114eafb1bdbe2f0316df893fd58ce46aa4d": {
239
+ token: "0x75faf114eafb1bdbe2f0316df893fd58ce46aa4d",
240
+ name: "USD Coin",
241
+ symbol: "USDC",
242
+ decimals: 6,
243
+ swapTokenAddress: "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238",
244
+ swapFee: 500,
245
+ },
246
+ "0x0000000000000000000000000000000000000000": {
247
+ token: "0x0000000000000000000000000000000000000000",
248
+ name: "Ether",
249
+ symbol: "Ether",
250
+ decimals: 18,
251
+ swapTokenAddress: "0x0000000000000000000000000000000000000000",
252
+ swapFee: 0,
253
+ },
254
+ },
255
+ key: "ethereum_l2_421614",
256
+ },
147
257
  ethereum_11155111: {
148
258
  kind: "ethereum",
149
259
  id: 11155111,
260
+ name: "sepolia",
150
261
  assets: {
151
262
  "0x0000000000000000000000000000000000000000": {
152
263
  token: "0x0000000000000000000000000000000000000000",
@@ -229,7 +340,7 @@ const registry = {
229
340
  accountType: "AccountId32",
230
341
  name: "Westend Asset Hub",
231
342
  specName: "westmint",
232
- specVersion: 1021000,
343
+ specVersion: 1021003,
233
344
  },
234
345
  assets: {
235
346
  "0x0000000000000000000000000000000000000000": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snowbridge/registry",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "description": "Snowbridge Asset Registry",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -24,11 +24,11 @@
24
24
  "ts-node": "10.9.2",
25
25
  "tsconfig-paths": "4.2.0",
26
26
  "typescript": "5.9.3",
27
- "@snowbridge/api": "0.4.1",
28
- "@snowbridge/contract-types": "0.4.1"
27
+ "@snowbridge/contract-types": "0.4.3",
28
+ "@snowbridge/api": "0.4.3"
29
29
  },
30
30
  "dependencies": {
31
- "@snowbridge/base-types": "0.4.1"
31
+ "@snowbridge/base-types": "0.4.3"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "tsc --build --force && tsc -p tsconfig.scripts.json",
@@ -70,8 +70,8 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
70
70
  "3369": "wss://paseo-muse-rpc.polkadot.io",
71
71
  "2043": `wss://parachain-testnet-rpc.origin-trail.network`,
72
72
  },
73
- gatewayContract: "0x1607C1368bc943130258318c91bBd8cFf3D063E6",
74
- beefyContract: "0x2c780945beb1241fE9c645800110cb9C4bBbb639",
73
+ gatewayContract: "0x1607c1368bc943130258318c91bbd8cff3d063e6",
74
+ beefyContract: "0x2c780945beb1241fe9c645800110cb9c4bbbb639",
75
75
  assetHubParaId: 1000,
76
76
  bridgeHubParaId: 1002,
77
77
  v2_parachains: [1000],
@@ -93,6 +93,8 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
93
93
  "1": "https://ethereum-rpc.publicnode.com",
94
94
  "1284": "https://rpc.api.moonbeam.network",
95
95
  "8453": "https://base-rpc.publicnode.com",
96
+ "42161": "https://arbitrum-one-rpc.publicnode.com",
97
+ "10": "https://optimism-rpc.publicnode.com",
96
98
  },
97
99
  relaychainUrl: "https://polkadot-rpc.n.dwellir.com",
98
100
  parachains: {
@@ -108,7 +110,7 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
108
110
  //"3397": "wss://rpc.jamton.network",
109
111
  },
110
112
  gatewayContract: "0x27ca963c279c93801941e1eb8799c23f407d68e7",
111
- beefyContract: "0x1817874feAb3ce053d0F40AbC23870DB35C2AFfc",
113
+ beefyContract: "0x1817874feab3ce053d0f40abc23870db35c2affc",
112
114
  assetHubParaId: 1000,
113
115
  bridgeHubParaId: 1002,
114
116
  v2_parachains: [1000],
@@ -134,14 +136,14 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
134
136
  },
135
137
  l2Bridge: {
136
138
  acrossAPIUrl: "https://app.across.to/api",
137
- l1AdapterAddress: "0x313E8c9Fb47613f2B1A436bE978c2BB75727fcC5",
138
- l1HandlerAddress: "0x924a9f036260DdD5808007E1AA95f08eD08aA569",
139
+ l1AdapterAddress: "0xd3b11c36404b092645522b682832fcdee07d2668",
140
+ l1HandlerAddress: "0x924a9f036260ddd5808007e1aa95f08ed08aa569",
139
141
  l1FeeTokenAddress: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
140
- l1SwapQuoterAddress: "0x61fFE014bA17989E743c5F6cB21bF9697530B21e",
141
- l1SwapRouterAddress: "0xE592427A0AEce92De3Edee1F18E0157C05861564",
142
+ l1SwapQuoterAddress: "0x61ffe014ba17989e743c5f6cb21bf9697530b21e",
143
+ l1SwapRouterAddress: "0xe592427a0aece92de3edee1f18e0157c05861564",
142
144
  l2Chains: {
143
145
  "8453": {
144
- adapterAddress: "0xCd5d2c665E3AC84bF5c67FE7a0C48748dA40db2F",
146
+ adapterAddress: "0x07fe4E7340976FC873B74bAfe3C3e5b0e01f3665".toLowerCase(),
145
147
  feeTokenAddress: "0x4200000000000000000000000000000000000006",
146
148
  swapRoutes: [
147
149
  // WETH
@@ -152,8 +154,44 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
152
154
  },
153
155
  // USDC
154
156
  {
155
- inputToken: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
156
- outputToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
157
+ inputToken: "0x833589fcd6edb6e08f4c7c32d4f71b54bda02913",
158
+ outputToken: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
159
+ swapFee: 500,
160
+ },
161
+ ],
162
+ },
163
+ "42161": {
164
+ adapterAddress: "0x836895Ad176235Dfe9C59b3df56C7579d90ea338".toLowerCase(),
165
+ feeTokenAddress: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1".toLowerCase(),
166
+ swapRoutes: [
167
+ // WETH
168
+ {
169
+ inputToken: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1".toLowerCase(),
170
+ outputToken: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
171
+ swapFee: 0,
172
+ },
173
+ // USDC
174
+ {
175
+ inputToken: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831".toLowerCase(),
176
+ outputToken: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
177
+ swapFee: 500,
178
+ },
179
+ ],
180
+ },
181
+ "10": {
182
+ adapterAddress: "0x836895Ad176235Dfe9C59b3df56C7579d90ea338".toLowerCase(),
183
+ feeTokenAddress: "0x4200000000000000000000000000000000000006".toLowerCase(),
184
+ swapRoutes: [
185
+ // WETH
186
+ {
187
+ inputToken: "0x4200000000000000000000000000000000000006".toLowerCase(),
188
+ outputToken: "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
189
+ swapFee: 0,
190
+ },
191
+ // USDC
192
+ {
193
+ inputToken: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85".toLowerCase(),
194
+ outputToken: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
157
195
  swapFee: 500,
158
196
  },
159
197
  ],
@@ -168,6 +206,7 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
168
206
  ethereumChains: {
169
207
  "11155111": "https://ethereum-sepolia-rpc.publicnode.com",
170
208
  "84532": "https://base-sepolia-rpc.publicnode.com",
209
+ "421614": "https://arbitrum-sepolia-rpc.publicnode.com",
171
210
  },
172
211
  relaychainUrl: "wss://westend-rpc.n.dwellir.com",
173
212
  parachains: {
@@ -175,7 +214,7 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
175
214
  "1002": "wss://bridge-hub-westend-rpc.n.dwellir.com",
176
215
  },
177
216
  gatewayContract: "0x9ed8b47bc3417e3bd0507adc06e56e2fa360a4e9",
178
- beefyContract: "0xA04460B1D8bBef33F54edB2C3115e3E4D41237A6",
217
+ beefyContract: "0xa04460b1d8bbef33f54edb2c3115e3e4d41237a6",
179
218
  assetHubParaId: 1000,
180
219
  bridgeHubParaId: 1002,
181
220
  v2_parachains: [1000],
@@ -183,14 +222,14 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
183
222
  "https://snowbridge.squids.live/snowbridge-subsquid-westend@v1/api/graphql",
184
223
  l2Bridge: {
185
224
  acrossAPIUrl: "https://testnet.across.to/api",
186
- l1AdapterAddress: "0xA5B8589bD534701be49916c4d2e634aB1c765Cbf",
187
- l1HandlerAddress: "0x924a9f036260DdD5808007E1AA95f08eD08aA569",
188
- l1FeeTokenAddress: "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",
189
- l1SwapRouterAddress: "0x3bFA4769FB09eefC5a80d6E87c3B9C650f7Ae48E",
190
- l1SwapQuoterAddress: "0xEd1f6473345F45b75F8179591dd5bA1888cf2FB3",
225
+ l1AdapterAddress: "0xCDa9bFf39cdF39E95F4B699422E422195091126d".toLowerCase(),
226
+ l1HandlerAddress: "0x924a9f036260ddd5808007e1aa95f08ed08aa569",
227
+ l1FeeTokenAddress: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14",
228
+ l1SwapRouterAddress: "0x3bfa4769fb09eefc5a80d6e87c3b9c650f7ae48e",
229
+ l1SwapQuoterAddress: "0xed1f6473345f45b75f8179591dd5ba1888cf2fb3",
191
230
  l2Chains: {
192
231
  "84532": {
193
- adapterAddress: "0xf06939613A3838Af11104c898758220dB9093679",
232
+ adapterAddress: "0xf06939613a3838af11104c898758220db9093679",
194
233
  feeTokenAddress: "0x4200000000000000000000000000000000000006",
195
234
  swapRoutes: [
196
235
  // WETH
@@ -207,6 +246,24 @@ const SNOWBRIDGE_ENV: { [env: string]: Environment } = {
207
246
  },
208
247
  ],
209
248
  },
249
+ "421614": {
250
+ adapterAddress: "0xcB3d8043bDbfB0D9b30de279A09132073d1dE561".toLowerCase(),
251
+ feeTokenAddress: "0x980B62Da83eFf3D4576C647993b0c1D7faf17c73".toLowerCase(),
252
+ swapRoutes: [
253
+ // WETH
254
+ {
255
+ inputToken: "0x980B62Da83eFf3D4576C647993b0c1D7faf17c73".toLowerCase(),
256
+ outputToken: "0xfff9976782d46cc05630d1f6ebab18b2324d6b14".toLowerCase(),
257
+ swapFee: 0,
258
+ },
259
+ // USDC
260
+ {
261
+ inputToken: "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d".toLowerCase(),
262
+ outputToken: "0x1c7d4b196cb0c7b01d743fbc6116a902379c7238".toLowerCase(),
263
+ swapFee: 500,
264
+ },
265
+ ],
266
+ },
210
267
  },
211
268
  },
212
269
  },
@@ -232,7 +289,9 @@ export function defaultPathFilter(envName: string): (_: Path) => boolean {
232
289
  // Disallow MUSE to any location but 3369
233
290
  if (
234
291
  path.asset === "0xb34a6924a02100ba6ef12af1c798285e8f7a16ee" &&
235
- ((path.destination.id !== 3369 && path.source.kind === "ethereum") ||
292
+ ((path.destination.kind === "polkadot" &&
293
+ path.destination.id !== 3369 &&
294
+ path.source.kind === "ethereum") ||
236
295
  (path.source.id !== 3369 && path.source.kind === "polkadot"))
237
296
  ) {
238
297
  return false
@@ -248,7 +307,9 @@ export function defaultPathFilter(envName: string): (_: Path) => boolean {
248
307
  // Disallow MYTH to any location but 3369
249
308
  if (
250
309
  path.asset === "0xba41ddf06b7ffd89d1267b5a93bfef2424eb2003" &&
251
- ((path.destination.id !== 3369 && path.source.kind === "ethereum") ||
310
+ ((path.destination.kind === "polkadot" &&
311
+ path.destination.id !== 3369 &&
312
+ path.source.kind === "ethereum") ||
252
313
  (path.source.id !== 3369 && path.source.kind === "polkadot"))
253
314
  ) {
254
315
  return false
@@ -257,7 +318,8 @@ export function defaultPathFilter(envName: string): (_: Path) => boolean {
257
318
  // Allow TRAC to go to Hydration (2034) and Neuroweb (2043) only
258
319
  if (
259
320
  path.asset === "0xaa7a9ca87d3694b5755f213b5d04094b8d0f0a6f" &&
260
- ((path.destination.id !== 2034 &&
321
+ ((path.destination.kind === "polkadot" &&
322
+ path.destination.id !== 2034 &&
261
323
  path.destination.id !== 2043 &&
262
324
  path.source.kind === "ethereum") ||
263
325
  (path.source.id !== 2034 &&
@@ -272,6 +334,7 @@ export function defaultPathFilter(envName: string): (_: Path) => boolean {
272
334
  (path.asset === "0x9d39a5de30e57443bff2a8307a4256c8797a3497" || // Staked USDe
273
335
  path.asset === "0xa3931d71877c0e7a3148cb7eb4463524fec27fbd" || // Savings USD
274
336
  path.asset === "0x6b175474e89094c44da98b954eedeac495271d0f") && // DAI
337
+ path.destination.kind === "polkadot" &&
275
338
  path.destination.id === 2034 // Hydration
276
339
  ) {
277
340
  return false
@@ -297,6 +360,7 @@ export function defaultPathFilter(envName: string): (_: Path) => boolean {
297
360
 
298
361
  function buildTransferLocations(
299
362
  registry: AssetRegistry,
363
+ environment: Environment,
300
364
  filter?: (path: Path) => boolean,
301
365
  ): TransferRoute[] {
302
366
  const ethChain = registry.ethereumChains[`ethereum_${registry.ethChainId}`]
@@ -386,6 +450,73 @@ function buildTransferLocations(
386
450
  }
387
451
  }
388
452
 
453
+ // L2 paths
454
+ if (environment.l2Bridge) {
455
+ // Do asset hub only, in future we can loop through all v2 enabled parachains.
456
+ for (const l2ChainKey of Object.keys(environment.l2Bridge.l2Chains)) {
457
+ const l2ChainId = Number(l2ChainKey)
458
+ const l2Chain = environment.l2Bridge.l2Chains[l2ChainId]
459
+ const ethChain = registry.ethereumChains[`ethereum_l2_${l2ChainId}`]
460
+ if (!ethChain || !l2Chain) {
461
+ console.warn(`Could not find ethereum l2 chain ${l2ChainId}. Skipping...`)
462
+ continue
463
+ }
464
+ const assetHubAssets = Object.keys(assetHub.assets)
465
+ const destinationAssets = Object.values(ethChain.assets)
466
+ .map((a) => a.swapTokenAddress?.toLowerCase())
467
+ .filter((a) => a !== undefined)
468
+
469
+ // The asset exists on ethereum, parachain and asset hub
470
+ const commonAssets = new Set(
471
+ ethAssets.filter(
472
+ (sa) =>
473
+ assetHubAssets.find((da) => da === sa) &&
474
+ destinationAssets.find((da) => da === sa),
475
+ ),
476
+ )
477
+ for (const asset of commonAssets) {
478
+ const p1: Path = {
479
+ source: { kind: assetHub.kind, id: assetHub.id },
480
+ destination: { kind: ethChain.kind, id: ethChain.id },
481
+ asset,
482
+ }
483
+ if (pathFilter(p1)) {
484
+ locations.push(p1)
485
+ }
486
+ const p2: Path = {
487
+ source: p1.destination, // L2 Chain
488
+ destination: p1.source, // Asset Hub
489
+ asset,
490
+ }
491
+ if (pathFilter(p2)) {
492
+ locations.push(p2)
493
+ }
494
+ }
495
+ }
496
+
497
+ const results: TransferRoute[] = []
498
+ for (const location of locations) {
499
+ let source = results.find(
500
+ (s) =>
501
+ s.from.kind === location.source.kind &&
502
+ s.from.id === location.source.id &&
503
+ s.to.kind === location.destination.kind &&
504
+ s.to.id === location.destination.id,
505
+ )
506
+
507
+ if (!source) {
508
+ source = {
509
+ from: location.source,
510
+ to: location.destination,
511
+ assets: [],
512
+ }
513
+ results.push(source)
514
+ }
515
+ source.assets = source.assets.concat(location.asset)
516
+ }
517
+ }
518
+
519
+ // Combine all paths into routes
389
520
  const results: TransferRoute[] = []
390
521
  for (const location of locations) {
391
522
  let source = results.find(
@@ -755,7 +886,7 @@ async function indexParachain(
755
886
  const destinationXcm = xcmBuilder.buildParachainERC20ReceivedXcmOnDestination(
756
887
  parachain.provider.registry,
757
888
  ethChainId,
758
- "0x0000000000000000000000000000000000000000",
889
+ assetsV2.ETHER_TOKEN_ADDRESS,
759
890
  340282366920938463463374607431768211455n,
760
891
  340282366920938463463374607431768211455n,
761
892
  info.accountType === "AccountId32"
@@ -808,7 +939,7 @@ async function indexEthChain(
808
939
  metadataOverrides: ERC20MetadataOverrideMap,
809
940
  l2Chains: { [l2ChainId: number]: L2ForwardMetadata },
810
941
  ): Promise<EthereumChain> {
811
- const id = networkName !== "unknown" ? networkName : undefined
942
+ const name = networkName !== "unknown" ? networkName : undefined
812
943
  if (networkChainId == ethChainId) {
813
944
  // Asset Hub and get meta data
814
945
  const assetHub = parachains[`polkadot_${assetHubParaId}`]
@@ -866,6 +997,7 @@ async function indexEthChain(
866
997
  return {
867
998
  kind: "ethereum",
868
999
  id: networkChainId,
1000
+ name,
869
1001
  assets,
870
1002
  key: `ethereum_${networkChainId}`,
871
1003
  baseDeliveryGas: 120_000n,
@@ -874,23 +1006,24 @@ async function indexEthChain(
874
1006
  const assets: ERC20MetadataMap = {}
875
1007
  for (const route of l2Chains[networkChainId].swapRoutes) {
876
1008
  let asset = await assetErc20Metadata(provider, route.inputToken)
877
- assets[route.inputToken] = {
1009
+ assets[route.inputToken.toLowerCase()] = {
878
1010
  ...asset,
879
- swapTokenAddress: route.outputToken,
1011
+ swapTokenAddress: route.outputToken.toLowerCase(),
880
1012
  swapFee: route.swapFee,
881
1013
  }
882
1014
  }
883
- assets["0x0000000000000000000000000000000000000000"] = {
884
- token: "0x0000000000000000000000000000000000000000",
1015
+ assets[assetsV2.ETHER_TOKEN_ADDRESS] = {
1016
+ token: assetsV2.ETHER_TOKEN_ADDRESS,
885
1017
  name: "Ether",
886
1018
  symbol: "Ether",
887
1019
  decimals: 18,
888
- swapTokenAddress: "0x0000000000000000000000000000000000000000",
1020
+ swapTokenAddress: assetsV2.ETHER_TOKEN_ADDRESS,
889
1021
  swapFee: 0,
890
1022
  }
891
1023
  return {
892
1024
  kind: "ethereum_l2",
893
1025
  id: networkChainId,
1026
+ name,
894
1027
  assets,
895
1028
  key: `ethereum_l2_${networkChainId}`,
896
1029
  }
@@ -942,6 +1075,7 @@ async function indexEthChain(
942
1075
  kind: "ethereum",
943
1076
  id: networkChainId,
944
1077
  key: `ethereum_${networkChainId}`,
1078
+ name,
945
1079
  evmParachainId: evmParachainChain.id,
946
1080
  assets,
947
1081
  precompile,
@@ -1005,7 +1139,7 @@ async function assetErc20Metadata(
1005
1139
  erc20Metadata.decimals(),
1006
1140
  ])
1007
1141
  return {
1008
- token,
1142
+ token: token.toLowerCase(),
1009
1143
  name: String(name),
1010
1144
  symbol: String(symbol),
1011
1145
  decimals: Number(decimals),
@@ -1049,7 +1183,7 @@ async function getRegisteredPnas(
1049
1183
  }
1050
1184
  const environment = SNOWBRIDGE_ENV[env]
1051
1185
  const registry = await buildRegistry(environment)
1052
- const routes = buildTransferLocations(registry)
1186
+ const routes = buildTransferLocations(registry, environment)
1053
1187
  const bridge: BridgeInfo = { environment, routes, registry }
1054
1188
  const json = generateTsObject(bridge, 4)
1055
1189
  const fileContents = `const registry = ${json} as const\nexport default registry\n`
@@ -13,8 +13,8 @@ const registry = {
13
13
  "2043": "wss://parachain-testnet-rpc.origin-trail.network",
14
14
  "3369": "wss://paseo-muse-rpc.polkadot.io",
15
15
  },
16
- gatewayContract: "0x1607C1368bc943130258318c91bBd8cFf3D063E6",
17
- beefyContract: "0x2c780945beb1241fE9c645800110cb9C4bBbb639",
16
+ gatewayContract: "0x1607c1368bc943130258318c91bbd8cff3d063e6",
17
+ beefyContract: "0x2c780945beb1241fe9c645800110cb9c4bbbb639",
18
18
  assetHubParaId: 1000,
19
19
  bridgeHubParaId: 1002,
20
20
  v2_parachains: [1000],
@@ -108,10 +108,10 @@ const registry = {
108
108
  },
109
109
  ],
110
110
  registry: {
111
- timestamp: "2026-01-28T21:31:42.998Z",
111
+ timestamp: "2026-02-16T10:23:33.158Z",
112
112
  environment: "paseo_sepolia",
113
113
  ethChainId: 11155111,
114
- gatewayAddress: "0x1607C1368bc943130258318c91bBd8cFf3D063E6",
114
+ gatewayAddress: "0x1607c1368bc943130258318c91bbd8cff3d063e6",
115
115
  assetHubParaId: 1000,
116
116
  bridgeHubParaId: 1002,
117
117
  relaychain: {
@@ -122,7 +122,7 @@ const registry = {
122
122
  accountType: "AccountId32",
123
123
  name: "Paseo Testnet",
124
124
  specName: "paseo",
125
- specVersion: 2000005,
125
+ specVersion: 2000006,
126
126
  },
127
127
  bridgeHub: {
128
128
  tokenSymbols: "PAS",
@@ -132,12 +132,13 @@ const registry = {
132
132
  accountType: "AccountId32",
133
133
  name: "Paseo Bridge Hub",
134
134
  specName: "bridge-hub-paseo",
135
- specVersion: 2000005,
135
+ specVersion: 2000006,
136
136
  },
137
137
  ethereumChains: {
138
138
  ethereum_11155111: {
139
139
  kind: "ethereum",
140
140
  id: 11155111,
141
+ name: "sepolia",
141
142
  assets: {
142
143
  "0x0000000000000000000000000000000000000000": {
143
144
  token: "0x0000000000000000000000000000000000000000",
@@ -210,7 +211,7 @@ const registry = {
210
211
  accountType: "AccountId32",
211
212
  name: "Paseo Asset Hub",
212
213
  specName: "asset-hub-paseo",
213
- specVersion: 2000005,
214
+ specVersion: 2000006,
214
215
  },
215
216
  assets: {
216
217
  "0x0000000000000000000000000000000000000000": {