@rhinestone/shared-configs 2.0.0 → 2.0.1

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.
@@ -14,7 +14,12 @@
14
14
  "symbol": "ETH"
15
15
  },
16
16
  "network": "mainnet",
17
+ "providerIds": {
18
+ "alchemy": "ETH_MAINNET",
19
+ "zerion": "ethereum"
20
+ },
17
21
  "publicRpcUrl": "https://eth.merkle.io",
22
+ "sessionCapable": true,
18
23
  "settlementConfig": {
19
24
  "cctp": {
20
25
  "domain": 0
@@ -127,7 +132,12 @@
127
132
  "symbol": "ETH"
128
133
  },
129
134
  "network": "mainnet",
135
+ "providerIds": {
136
+ "alchemy": "OPT_MAINNET",
137
+ "zerion": "optimism"
138
+ },
130
139
  "publicRpcUrl": "https://mainnet.optimism.io",
140
+ "sessionCapable": true,
131
141
  "settlementConfig": {
132
142
  "cctp": {
133
143
  "domain": 2
@@ -255,7 +265,12 @@
255
265
  "symbol": "BNB"
256
266
  },
257
267
  "network": "mainnet",
268
+ "providerIds": {
269
+ "alchemy": "BNB_MAINNET",
270
+ "zerion": "binance-smart-chain"
271
+ },
258
272
  "publicRpcUrl": "https://56.rpc.thirdweb.com",
273
+ "sessionCapable": true,
259
274
  "settlementConfig": {
260
275
  "cctp": {
261
276
  "domain": 17
@@ -348,7 +363,12 @@
348
363
  "symbol": "XDAI"
349
364
  },
350
365
  "network": "mainnet",
366
+ "providerIds": {
367
+ "alchemy": "GNOSIS_MAINNET",
368
+ "zerion": "xdai"
369
+ },
351
370
  "publicRpcUrl": "https://rpc.gnosischain.com",
371
+ "sessionCapable": true,
352
372
  "settlementConfig": {
353
373
  "near": {
354
374
  "prefix": "gnosis"
@@ -403,7 +423,12 @@
403
423
  "symbol": "ETH"
404
424
  },
405
425
  "network": "mainnet",
426
+ "providerIds": {
427
+ "alchemy": "UNICHAIN_MAINNET",
428
+ "zerion": "unichain"
429
+ },
406
430
  "publicRpcUrl": "https://mainnet.unichain.org",
431
+ "sessionCapable": true,
407
432
  "settlementConfig": {
408
433
  "cctp": {
409
434
  "domain": 10
@@ -504,7 +529,12 @@
504
529
  "symbol": "POL"
505
530
  },
506
531
  "network": "mainnet",
532
+ "providerIds": {
533
+ "alchemy": "MATIC_MAINNET",
534
+ "zerion": "polygon"
535
+ },
507
536
  "publicRpcUrl": "https://polygon.drpc.org",
537
+ "sessionCapable": true,
508
538
  "settlementConfig": {
509
539
  "cctp": {
510
540
  "domain": 7
@@ -607,7 +637,12 @@
607
637
  "symbol": "MON"
608
638
  },
609
639
  "network": "mainnet",
640
+ "providerIds": {
641
+ "alchemy": "MONAD_MAINNET",
642
+ "zerion": "monad"
643
+ },
610
644
  "publicRpcUrl": "https://rpc.monad.xyz",
645
+ "sessionCapable": true,
611
646
  "settlementConfig": {
612
647
  "cctp": {
613
648
  "domain": 15
@@ -689,7 +724,12 @@
689
724
  "symbol": "S"
690
725
  },
691
726
  "network": "mainnet",
727
+ "providerIds": {
728
+ "alchemy": "SONIC_MAINNET",
729
+ "zerion": "sonic"
730
+ },
692
731
  "publicRpcUrl": "https://rpc.soniclabs.com",
732
+ "sessionCapable": true,
693
733
  "settlementConfig": {
694
734
  "cctp": {
695
735
  "domain": 13
@@ -742,7 +782,12 @@
742
782
  "symbol": "HYPE"
743
783
  },
744
784
  "network": "mainnet",
785
+ "providerIds": {
786
+ "alchemy": "HYPERLIQUID_MAINNET",
787
+ "zerion": "hyperevm"
788
+ },
745
789
  "publicRpcUrl": "https://rpc.hyperliquid.xyz/evm",
790
+ "sessionCapable": true,
746
791
  "settlementConfig": {
747
792
  "cctp": {
748
793
  "domain": 19
@@ -813,7 +858,12 @@
813
858
  "symbol": "ETH"
814
859
  },
815
860
  "network": "mainnet",
861
+ "providerIds": {
862
+ "alchemy": "SONEIUM_MAINNET",
863
+ "zerion": "soneium"
864
+ },
816
865
  "publicRpcUrl": "https://rpc.soneium.org",
866
+ "sessionCapable": true,
817
867
  "settlementLayers": [
818
868
  "ACROSS",
819
869
  "RELAY"
@@ -889,7 +939,12 @@
889
939
  "symbol": "ETH"
890
940
  },
891
941
  "network": "mainnet",
942
+ "providerIds": {
943
+ "alchemy": "ROBINHOOD_MAINNET",
944
+ "zerion": "robinhood"
945
+ },
892
946
  "publicRpcUrl": "https://rpc.mainnet.chain.robinhood.com",
947
+ "sessionCapable": true,
893
948
  "settlementLayers": [
894
949
  "ACROSS",
895
950
  "RELAY"
@@ -954,7 +1009,12 @@
954
1009
  "symbol": "ETH"
955
1010
  },
956
1011
  "network": "mainnet",
1012
+ "providerIds": {
1013
+ "alchemy": "BASE_MAINNET",
1014
+ "zerion": "base"
1015
+ },
957
1016
  "publicRpcUrl": "https://mainnet.base.org",
1017
+ "sessionCapable": true,
958
1018
  "settlementConfig": {
959
1019
  "cctp": {
960
1020
  "domain": 6
@@ -1046,7 +1106,12 @@
1046
1106
  "symbol": "XPL"
1047
1107
  },
1048
1108
  "network": "mainnet",
1109
+ "providerIds": {
1110
+ "alchemy": "PLASMA_MAINNET",
1111
+ "zerion": "plasma"
1112
+ },
1049
1113
  "publicRpcUrl": "https://rpc.plasma.to",
1114
+ "sessionCapable": true,
1050
1115
  "settlementConfig": {
1051
1116
  "oft": {
1052
1117
  "adapter": "0x02ca37966753bDdDf11216B73B16C1dE756A7CF9",
@@ -1109,7 +1174,12 @@
1109
1174
  "symbol": "XPL"
1110
1175
  },
1111
1176
  "network": "testnet",
1177
+ "providerIds": {
1178
+ "alchemy": null,
1179
+ "zerion": null
1180
+ },
1112
1181
  "publicRpcUrl": "https://testnet-rpc.plasma.to",
1182
+ "sessionCapable": false,
1113
1183
  "settlementLayers": [
1114
1184
  "ECO"
1115
1185
  ],
@@ -1162,7 +1232,12 @@
1162
1232
  "symbol": "ETH"
1163
1233
  },
1164
1234
  "network": "mainnet",
1235
+ "providerIds": {
1236
+ "alchemy": "ARB_MAINNET",
1237
+ "zerion": "arbitrum"
1238
+ },
1165
1239
  "publicRpcUrl": "https://arb1.arbitrum.io/rpc",
1240
+ "sessionCapable": true,
1166
1241
  "settlementConfig": {
1167
1242
  "cctp": {
1168
1243
  "domain": 3
@@ -1276,7 +1351,12 @@
1276
1351
  "symbol": "AVAX"
1277
1352
  },
1278
1353
  "network": "mainnet",
1354
+ "providerIds": {
1355
+ "alchemy": "AVAX_MAINNET",
1356
+ "zerion": "avalanche"
1357
+ },
1279
1358
  "publicRpcUrl": "https://api.avax.network/ext/bc/C/rpc",
1359
+ "sessionCapable": true,
1280
1360
  "settlementConfig": {
1281
1361
  "cctp": {
1282
1362
  "domain": 1
@@ -1381,7 +1461,12 @@
1381
1461
  "symbol": "ETH"
1382
1462
  },
1383
1463
  "network": "testnet",
1464
+ "providerIds": {
1465
+ "alchemy": "BASE_SEPOLIA",
1466
+ "zerion": null
1467
+ },
1384
1468
  "publicRpcUrl": "https://sepolia.base.org",
1469
+ "sessionCapable": false,
1385
1470
  "settlementConfig": {
1386
1471
  "cctp": {
1387
1472
  "domain": 6
@@ -1469,7 +1554,12 @@
1469
1554
  "symbol": "ETH"
1470
1555
  },
1471
1556
  "network": "testnet",
1557
+ "providerIds": {
1558
+ "alchemy": "ARB_SEPOLIA",
1559
+ "zerion": null
1560
+ },
1472
1561
  "publicRpcUrl": "https://sepolia-rollup.arbitrum.io/rpc",
1562
+ "sessionCapable": false,
1473
1563
  "settlementConfig": {
1474
1564
  "cctp": {
1475
1565
  "domain": 3
@@ -1543,7 +1633,12 @@
1543
1633
  "symbol": "ETH"
1544
1634
  },
1545
1635
  "network": "mainnet",
1636
+ "providerIds": {
1637
+ "alchemy": null,
1638
+ "zerion": "katana"
1639
+ },
1546
1640
  "publicRpcUrl": "https://rpc.katana.network",
1641
+ "sessionCapable": true,
1547
1642
  "settlementConfig": {
1548
1643
  "rhino": {
1549
1644
  "bridgeContract": "0x04317f0e4795b1e1bab333234153fa10aaac79e9",
@@ -1615,10 +1710,15 @@
1615
1710
  "symbol": "HYPE"
1616
1711
  },
1617
1712
  "network": "mainnet",
1713
+ "providerIds": {
1714
+ "alchemy": null,
1715
+ "zerion": null
1716
+ },
1618
1717
  "roles": {
1619
1718
  "destination": true,
1620
1719
  "origin": true
1621
1720
  },
1721
+ "sessionCapable": false,
1622
1722
  "settlementLayers": [],
1623
1723
  "stack": "vanilla",
1624
1724
  "swapQuoters": [],
@@ -1655,10 +1755,15 @@
1655
1755
  "symbol": "HYPE"
1656
1756
  },
1657
1757
  "network": "mainnet",
1758
+ "providerIds": {
1759
+ "alchemy": null,
1760
+ "zerion": null
1761
+ },
1658
1762
  "roles": {
1659
1763
  "destination": true,
1660
1764
  "origin": false
1661
1765
  },
1766
+ "sessionCapable": false,
1662
1767
  "settlementLayers": [],
1663
1768
  "stack": "vanilla",
1664
1769
  "swapQuoters": [],
@@ -1695,7 +1800,12 @@
1695
1800
  "symbol": "ETH"
1696
1801
  },
1697
1802
  "network": "testnet",
1803
+ "providerIds": {
1804
+ "alchemy": "ETH_SEPOLIA",
1805
+ "zerion": null
1806
+ },
1698
1807
  "publicRpcUrl": "https://11155111.rpc.thirdweb.com",
1808
+ "sessionCapable": false,
1699
1809
  "settlementConfig": {
1700
1810
  "cctp": {
1701
1811
  "domain": 0
@@ -1779,7 +1889,12 @@
1779
1889
  "symbol": "ETH"
1780
1890
  },
1781
1891
  "network": "testnet",
1892
+ "providerIds": {
1893
+ "alchemy": "OPT_SEPOLIA",
1894
+ "zerion": null
1895
+ },
1782
1896
  "publicRpcUrl": "https://sepolia.optimism.io",
1897
+ "sessionCapable": false,
1783
1898
  "settlementConfig": {
1784
1899
  "cctp": {
1785
1900
  "domain": 2
@@ -1853,6 +1968,11 @@
1853
1968
  "symbol": "TRX"
1854
1969
  },
1855
1970
  "network": "mainnet",
1971
+ "providerIds": {
1972
+ "alchemy": null,
1973
+ "zerion": null
1974
+ },
1975
+ "sessionCapable": false,
1856
1976
  "settlementConfig": {
1857
1977
  "near": {
1858
1978
  "prefix": "tron"
@@ -1921,6 +2041,11 @@
1921
2041
  "symbol": "SOL"
1922
2042
  },
1923
2043
  "network": "mainnet",
2044
+ "providerIds": {
2045
+ "alchemy": null,
2046
+ "zerion": null
2047
+ },
2048
+ "sessionCapable": false,
1924
2049
  "settlementConfig": {
1925
2050
  "cctp": {
1926
2051
  "domain": 5
@@ -26,6 +26,8 @@ function validChain(overrides = {}) {
26
26
  tokens: [{ ...nativeToken, balanceSlot: null, approvalSlot: null }],
27
27
  settlementLayers: ["ACROSS", "ECO", "RELAY"],
28
28
  swapQuoters: ["0x"],
29
+ providerIds: { alchemy: "ETH_MAINNET", zerion: "ethereum" },
30
+ sessionCapable: true,
29
31
  ...overrides,
30
32
  };
31
33
  }
@@ -83,12 +85,25 @@ function errorsFor(chain) {
83
85
  ["an iconSlug carrying its extension", { iconSlug: "base.svg" }],
84
86
  ["an iconSlug carrying a directory", { iconSlug: "chains/base" }],
85
87
  ["an iconSlug that is not a string", { iconSlug: 42 }],
88
+ // A missing vendor id and a null one mean opposite things — an artifact
89
+ // older than the field, versus a vendor that was checked and does not serve
90
+ // the chain. Only the second is an answer a consumer can act on.
91
+ ["missing providerIds", { providerIds: undefined }],
92
+ ["providerIds missing a vendor", { providerIds: { alchemy: "ETH_MAINNET" } }],
93
+ ["an empty vendor id", { providerIds: { alchemy: "", zerion: "ethereum" } }],
94
+ ["a missing sessionCapable", { sessionCapable: undefined }],
86
95
  ])("rejects %s", (_label, overrides) => {
87
96
  (0, bun_test_1.expect)(errorsFor(validChain(overrides)).length).toBeGreaterThan(0);
88
97
  });
89
98
  (0, bun_test_1.it)("accepts a null explorer, the answer for a chain that has none", () => {
90
99
  (0, bun_test_1.expect)(errorsFor(validChain({ explorer: null }))).toEqual([]);
91
100
  });
101
+ // Katana is exactly this: Alchemy serves it over RPC but Address Activity
102
+ // does not carry it, so ingestion is Zerion's alone.
103
+ (0, bun_test_1.it)("accepts a null vendor id, the answer for a vendor that does not serve the chain", () => {
104
+ (0, bun_test_1.expect)(errorsFor(validChain({ providerIds: { alchemy: null, zerion: "katana" } }))).toEqual([]);
105
+ (0, bun_test_1.expect)(errorsFor(validChain({ providerIds: { alchemy: null, zerion: null } }))).toEqual([]);
106
+ });
92
107
  (0, bun_test_1.it)("names the offending value so the build failure is actionable", () => {
93
108
  const [error] = errorsFor(validChain({ settlementLayers: ["TELEPORT"] }));
94
109
  (0, bun_test_1.expect)(error.message).toContain("TELEPORT");
@@ -89,7 +89,7 @@ function renderChains(chainRegistry, mainnets, testnets) {
89
89
  }
90
90
  return [
91
91
  "// Auto-generated by scripts/generate.ts. Do not edit manually.",
92
- 'import type { ChainNetwork, ChainStack, PegGroup, ProviderName, SettlementConfig, SettlementLayer, SupportedChain, SwapQuoter, SwapQuoterConfig, VmType } from "./types";',
92
+ 'import type { ChainNetwork, ChainStack, PegGroup, ProviderIds, ProviderName, SettlementConfig, SettlementLayer, SupportedChain, SwapQuoter, SwapQuoterConfig, VmType } from "./types";',
93
93
  "",
94
94
  "interface Token {",
95
95
  " /** EVM: 0x-prefixed hex. SVM: base58 SPL mint. TVM: base58 (T-prefixed). */",
@@ -159,6 +159,13 @@ function renderChains(chainRegistry, mainnets, testnets) {
159
159
  " * name, CCTP domain, NEAR prefix, OFT adapter). Third-party addresses —",
160
160
  " * never the contracts block, which is read as Rhinestone-deployed. */",
161
161
  " settlementConfig?: SettlementConfig;",
162
+ " /** What the deposit-ingestion vendors call this chain. `null` means the",
163
+ " * vendor was checked and does not serve it; both null means the chain",
164
+ " * cannot take deposits. */",
165
+ " providerIds: ProviderIds;",
166
+ " /** Whether we open smart sessions here — a declared policy, not a",
167
+ " * statement about what is deployed. */",
168
+ " sessionCapable: boolean;",
162
169
  " providers: ProviderName[];",
163
170
  " swapQuoters: SwapQuoter[];",
164
171
  " swapQuoterConfig?: Partial<Record<SwapQuoter, SwapQuoterConfig>>;",
@@ -241,6 +241,28 @@ function structuralProblems(chain) {
241
241
  if (!isAbsentOr(chain.virtual, (v) => typeof v === 'boolean')) {
242
242
  problems.push('virtual is not a boolean');
243
243
  }
244
+ // Required, and each vendor's key required within it: `null` says the vendor
245
+ // was checked and does not serve this chain, which is the answer a consumer
246
+ // acts on when it decides the chain cannot take deposits. An absent key is a
247
+ // different claim — an artifact older than the field — and letting the two
248
+ // look alike is exactly the silent gap this field exists to close.
249
+ if (!isObject(chain.providerIds)) {
250
+ problems.push('providerIds is missing (use null per vendor for a chain it does not serve)');
251
+ }
252
+ else {
253
+ for (const vendor of ['alchemy', 'zerion']) {
254
+ const id = chain.providerIds[vendor];
255
+ if (!(vendor in chain.providerIds)) {
256
+ problems.push(`providerIds.${vendor} is missing (use null if the vendor does not serve this chain)`);
257
+ }
258
+ else if (id !== null && !isNonEmptyString(id)) {
259
+ problems.push(`providerIds.${vendor} ${JSON.stringify(id)} is not a non-empty string or null`);
260
+ }
261
+ }
262
+ }
263
+ if (typeof chain.sessionCapable !== 'boolean') {
264
+ problems.push('sessionCapable is not a boolean');
265
+ }
244
266
  for (const field of ['nativeToken', 'wrappedNativeToken']) {
245
267
  const token = chain[field];
246
268
  if (!isObject(token)) {
@@ -1,4 +1,4 @@
1
- import type { ChainNetwork, ChainStack, PegGroup, ProviderName, SettlementConfig, SettlementLayer, SupportedChain, SwapQuoter, SwapQuoterConfig, VmType } from "./types";
1
+ import type { ChainNetwork, ChainStack, PegGroup, ProviderIds, ProviderName, SettlementConfig, SettlementLayer, SupportedChain, SwapQuoter, SwapQuoterConfig, VmType } from "./types";
2
2
  interface Token {
3
3
  /** EVM: 0x-prefixed hex. SVM: base58 SPL mint. TVM: base58 (T-prefixed). */
4
4
  address: string;
@@ -67,6 +67,13 @@ interface Chain {
67
67
  * name, CCTP domain, NEAR prefix, OFT adapter). Third-party addresses —
68
68
  * never the contracts block, which is read as Rhinestone-deployed. */
69
69
  settlementConfig?: SettlementConfig;
70
+ /** What the deposit-ingestion vendors call this chain. `null` means the
71
+ * vendor was checked and does not serve it; both null means the chain
72
+ * cannot take deposits. */
73
+ providerIds: ProviderIds;
74
+ /** Whether we open smart sessions here — a declared policy, not a
75
+ * statement about what is deployed. */
76
+ sessionCapable: boolean;
70
77
  providers: ProviderName[];
71
78
  swapQuoters: SwapQuoter[];
72
79
  swapQuoterConfig?: Partial<Record<SwapQuoter, SwapQuoterConfig>>;
@@ -17,7 +17,12 @@ const chains = {
17
17
  "symbol": "ETH"
18
18
  },
19
19
  "network": "mainnet",
20
+ "providerIds": {
21
+ "alchemy": "ETH_MAINNET",
22
+ "zerion": "ethereum"
23
+ },
20
24
  "publicRpcUrl": "https://eth.merkle.io",
25
+ "sessionCapable": true,
21
26
  "settlementConfig": {
22
27
  "cctp": {
23
28
  "domain": 0
@@ -134,7 +139,12 @@ const chains = {
134
139
  "symbol": "ETH"
135
140
  },
136
141
  "network": "mainnet",
142
+ "providerIds": {
143
+ "alchemy": "OPT_MAINNET",
144
+ "zerion": "optimism"
145
+ },
137
146
  "publicRpcUrl": "https://mainnet.optimism.io",
147
+ "sessionCapable": true,
138
148
  "settlementConfig": {
139
149
  "cctp": {
140
150
  "domain": 2
@@ -266,7 +276,12 @@ const chains = {
266
276
  "symbol": "BNB"
267
277
  },
268
278
  "network": "mainnet",
279
+ "providerIds": {
280
+ "alchemy": "BNB_MAINNET",
281
+ "zerion": "binance-smart-chain"
282
+ },
269
283
  "publicRpcUrl": "https://56.rpc.thirdweb.com",
284
+ "sessionCapable": true,
270
285
  "settlementConfig": {
271
286
  "cctp": {
272
287
  "domain": 17
@@ -363,7 +378,12 @@ const chains = {
363
378
  "symbol": "XDAI"
364
379
  },
365
380
  "network": "mainnet",
381
+ "providerIds": {
382
+ "alchemy": "GNOSIS_MAINNET",
383
+ "zerion": "xdai"
384
+ },
366
385
  "publicRpcUrl": "https://rpc.gnosischain.com",
386
+ "sessionCapable": true,
367
387
  "settlementConfig": {
368
388
  "near": {
369
389
  "prefix": "gnosis"
@@ -423,7 +443,12 @@ const chains = {
423
443
  "symbol": "ETH"
424
444
  },
425
445
  "network": "mainnet",
446
+ "providerIds": {
447
+ "alchemy": "UNICHAIN_MAINNET",
448
+ "zerion": "unichain"
449
+ },
426
450
  "publicRpcUrl": "https://mainnet.unichain.org",
451
+ "sessionCapable": true,
427
452
  "settlementConfig": {
428
453
  "cctp": {
429
454
  "domain": 10
@@ -528,7 +553,12 @@ const chains = {
528
553
  "symbol": "POL"
529
554
  },
530
555
  "network": "mainnet",
556
+ "providerIds": {
557
+ "alchemy": "MATIC_MAINNET",
558
+ "zerion": "polygon"
559
+ },
531
560
  "publicRpcUrl": "https://polygon.drpc.org",
561
+ "sessionCapable": true,
532
562
  "settlementConfig": {
533
563
  "cctp": {
534
564
  "domain": 7
@@ -635,7 +665,12 @@ const chains = {
635
665
  "symbol": "MON"
636
666
  },
637
667
  "network": "mainnet",
668
+ "providerIds": {
669
+ "alchemy": "MONAD_MAINNET",
670
+ "zerion": "monad"
671
+ },
638
672
  "publicRpcUrl": "https://rpc.monad.xyz",
673
+ "sessionCapable": true,
639
674
  "settlementConfig": {
640
675
  "cctp": {
641
676
  "domain": 15
@@ -721,7 +756,12 @@ const chains = {
721
756
  "symbol": "S"
722
757
  },
723
758
  "network": "mainnet",
759
+ "providerIds": {
760
+ "alchemy": "SONIC_MAINNET",
761
+ "zerion": "sonic"
762
+ },
724
763
  "publicRpcUrl": "https://rpc.soniclabs.com",
764
+ "sessionCapable": true,
725
765
  "settlementConfig": {
726
766
  "cctp": {
727
767
  "domain": 13
@@ -778,7 +818,12 @@ const chains = {
778
818
  "symbol": "HYPE"
779
819
  },
780
820
  "network": "mainnet",
821
+ "providerIds": {
822
+ "alchemy": "HYPERLIQUID_MAINNET",
823
+ "zerion": "hyperevm"
824
+ },
781
825
  "publicRpcUrl": "https://rpc.hyperliquid.xyz/evm",
826
+ "sessionCapable": true,
782
827
  "settlementConfig": {
783
828
  "cctp": {
784
829
  "domain": 19
@@ -854,7 +899,12 @@ const chains = {
854
899
  "symbol": "ETH"
855
900
  },
856
901
  "network": "mainnet",
902
+ "providerIds": {
903
+ "alchemy": "SONEIUM_MAINNET",
904
+ "zerion": "soneium"
905
+ },
857
906
  "publicRpcUrl": "https://rpc.soneium.org",
907
+ "sessionCapable": true,
858
908
  "settlementLayers": [
859
909
  "ACROSS",
860
910
  "RELAY"
@@ -934,7 +984,12 @@ const chains = {
934
984
  "symbol": "ETH"
935
985
  },
936
986
  "network": "mainnet",
987
+ "providerIds": {
988
+ "alchemy": "ROBINHOOD_MAINNET",
989
+ "zerion": "robinhood"
990
+ },
937
991
  "publicRpcUrl": "https://rpc.mainnet.chain.robinhood.com",
992
+ "sessionCapable": true,
938
993
  "settlementLayers": [
939
994
  "ACROSS",
940
995
  "RELAY"
@@ -1003,7 +1058,12 @@ const chains = {
1003
1058
  "symbol": "ETH"
1004
1059
  },
1005
1060
  "network": "mainnet",
1061
+ "providerIds": {
1062
+ "alchemy": "BASE_MAINNET",
1063
+ "zerion": "base"
1064
+ },
1006
1065
  "publicRpcUrl": "https://mainnet.base.org",
1066
+ "sessionCapable": true,
1007
1067
  "settlementConfig": {
1008
1068
  "cctp": {
1009
1069
  "domain": 6
@@ -1099,7 +1159,12 @@ const chains = {
1099
1159
  "symbol": "XPL"
1100
1160
  },
1101
1161
  "network": "mainnet",
1162
+ "providerIds": {
1163
+ "alchemy": "PLASMA_MAINNET",
1164
+ "zerion": "plasma"
1165
+ },
1102
1166
  "publicRpcUrl": "https://rpc.plasma.to",
1167
+ "sessionCapable": true,
1103
1168
  "settlementConfig": {
1104
1169
  "oft": {
1105
1170
  "adapter": "0x02ca37966753bDdDf11216B73B16C1dE756A7CF9",
@@ -1167,7 +1232,12 @@ const chains = {
1167
1232
  "symbol": "XPL"
1168
1233
  },
1169
1234
  "network": "testnet",
1235
+ "providerIds": {
1236
+ "alchemy": null,
1237
+ "zerion": null
1238
+ },
1170
1239
  "publicRpcUrl": "https://testnet-rpc.plasma.to",
1240
+ "sessionCapable": false,
1171
1241
  "settlementLayers": [
1172
1242
  "ECO"
1173
1243
  ],
@@ -1225,7 +1295,12 @@ const chains = {
1225
1295
  "symbol": "ETH"
1226
1296
  },
1227
1297
  "network": "mainnet",
1298
+ "providerIds": {
1299
+ "alchemy": "ARB_MAINNET",
1300
+ "zerion": "arbitrum"
1301
+ },
1228
1302
  "publicRpcUrl": "https://arb1.arbitrum.io/rpc",
1303
+ "sessionCapable": true,
1229
1304
  "settlementConfig": {
1230
1305
  "cctp": {
1231
1306
  "domain": 3
@@ -1343,7 +1418,12 @@ const chains = {
1343
1418
  "symbol": "AVAX"
1344
1419
  },
1345
1420
  "network": "mainnet",
1421
+ "providerIds": {
1422
+ "alchemy": "AVAX_MAINNET",
1423
+ "zerion": "avalanche"
1424
+ },
1346
1425
  "publicRpcUrl": "https://api.avax.network/ext/bc/C/rpc",
1426
+ "sessionCapable": true,
1347
1427
  "settlementConfig": {
1348
1428
  "cctp": {
1349
1429
  "domain": 1
@@ -1452,7 +1532,12 @@ const chains = {
1452
1532
  "symbol": "ETH"
1453
1533
  },
1454
1534
  "network": "testnet",
1535
+ "providerIds": {
1536
+ "alchemy": "BASE_SEPOLIA",
1537
+ "zerion": null
1538
+ },
1455
1539
  "publicRpcUrl": "https://sepolia.base.org",
1540
+ "sessionCapable": false,
1456
1541
  "settlementConfig": {
1457
1542
  "cctp": {
1458
1543
  "domain": 6
@@ -1544,7 +1629,12 @@ const chains = {
1544
1629
  "symbol": "ETH"
1545
1630
  },
1546
1631
  "network": "testnet",
1632
+ "providerIds": {
1633
+ "alchemy": "ARB_SEPOLIA",
1634
+ "zerion": null
1635
+ },
1547
1636
  "publicRpcUrl": "https://sepolia-rollup.arbitrum.io/rpc",
1637
+ "sessionCapable": false,
1548
1638
  "settlementConfig": {
1549
1639
  "cctp": {
1550
1640
  "domain": 3
@@ -1622,7 +1712,12 @@ const chains = {
1622
1712
  "symbol": "ETH"
1623
1713
  },
1624
1714
  "network": "mainnet",
1715
+ "providerIds": {
1716
+ "alchemy": null,
1717
+ "zerion": "katana"
1718
+ },
1625
1719
  "publicRpcUrl": "https://rpc.katana.network",
1720
+ "sessionCapable": true,
1626
1721
  "settlementConfig": {
1627
1722
  "rhino": {
1628
1723
  "bridgeContract": "0x04317f0e4795b1e1bab333234153fa10aaac79e9",
@@ -1698,10 +1793,15 @@ const chains = {
1698
1793
  "symbol": "HYPE"
1699
1794
  },
1700
1795
  "network": "mainnet",
1796
+ "providerIds": {
1797
+ "alchemy": null,
1798
+ "zerion": null
1799
+ },
1701
1800
  "roles": {
1702
1801
  "destination": true,
1703
1802
  "origin": true
1704
1803
  },
1804
+ "sessionCapable": false,
1705
1805
  "settlementLayers": [],
1706
1806
  "stack": "vanilla",
1707
1807
  "swapQuoters": [],
@@ -1739,10 +1839,15 @@ const chains = {
1739
1839
  "symbol": "HYPE"
1740
1840
  },
1741
1841
  "network": "mainnet",
1842
+ "providerIds": {
1843
+ "alchemy": null,
1844
+ "zerion": null
1845
+ },
1742
1846
  "roles": {
1743
1847
  "destination": true,
1744
1848
  "origin": false
1745
1849
  },
1850
+ "sessionCapable": false,
1746
1851
  "settlementLayers": [],
1747
1852
  "stack": "vanilla",
1748
1853
  "swapQuoters": [],
@@ -1780,7 +1885,12 @@ const chains = {
1780
1885
  "symbol": "ETH"
1781
1886
  },
1782
1887
  "network": "testnet",
1888
+ "providerIds": {
1889
+ "alchemy": "ETH_SEPOLIA",
1890
+ "zerion": null
1891
+ },
1783
1892
  "publicRpcUrl": "https://11155111.rpc.thirdweb.com",
1893
+ "sessionCapable": false,
1784
1894
  "settlementConfig": {
1785
1895
  "cctp": {
1786
1896
  "domain": 0
@@ -1868,7 +1978,12 @@ const chains = {
1868
1978
  "symbol": "ETH"
1869
1979
  },
1870
1980
  "network": "testnet",
1981
+ "providerIds": {
1982
+ "alchemy": "OPT_SEPOLIA",
1983
+ "zerion": null
1984
+ },
1871
1985
  "publicRpcUrl": "https://sepolia.optimism.io",
1986
+ "sessionCapable": false,
1872
1987
  "settlementConfig": {
1873
1988
  "cctp": {
1874
1989
  "domain": 2
@@ -1946,6 +2061,11 @@ const chains = {
1946
2061
  "symbol": "TRX"
1947
2062
  },
1948
2063
  "network": "mainnet",
2064
+ "providerIds": {
2065
+ "alchemy": null,
2066
+ "zerion": null
2067
+ },
2068
+ "sessionCapable": false,
1949
2069
  "settlementConfig": {
1950
2070
  "near": {
1951
2071
  "prefix": "tron"
@@ -2015,6 +2135,11 @@ const chains = {
2015
2135
  "symbol": "SOL"
2016
2136
  },
2017
2137
  "network": "mainnet",
2138
+ "providerIds": {
2139
+ "alchemy": null,
2140
+ "zerion": null
2141
+ },
2142
+ "sessionCapable": false,
2018
2143
  "settlementConfig": {
2019
2144
  "cctp": {
2020
2145
  "domain": 5
@@ -1,2 +1,2 @@
1
- declare const PACKAGE_VERSION = "2.0.0";
1
+ declare const PACKAGE_VERSION = "2.0.1";
2
2
  export { PACKAGE_VERSION };
@@ -2,5 +2,5 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PACKAGE_VERSION = void 0;
4
4
  // Auto-generated by scripts/generate.ts. Do not edit manually.
5
- const PACKAGE_VERSION = "2.0.0";
5
+ const PACKAGE_VERSION = "2.0.1";
6
6
  exports.PACKAGE_VERSION = PACKAGE_VERSION;
@@ -268,6 +268,44 @@ interface ChainEntry {
268
268
  * say so). This is the outer bound: what the chain itself permits.
269
269
  */
270
270
  roles?: ChainRoles;
271
+ /**
272
+ * What the deposit-ingestion vendors call this chain.
273
+ *
274
+ * These are the last identifiers that made adding a chain a code change: a
275
+ * chain missing from deposit-processor's Alchemy map is never considered for
276
+ * webhook creation, one missing from its Zerion map is never ingested, and a
277
+ * chain in neither publishes `deposit: false` and turns into a refund-only
278
+ * chain. Neither id is derivable from anything else here.
279
+ *
280
+ * On `ChainEntry` rather than under a consumer's namespace because an
281
+ * Alchemy network name is a fact about the chain, not about deposit-processor:
282
+ * the next service to adopt a vendor reads the same key instead of another
283
+ * service's.
284
+ *
285
+ * `null` is an answer, and a different one from absence: the vendor was
286
+ * checked and does not serve this chain. Both null means the chain cannot take
287
+ * deposits at all. Absence, by contrast, would mean an artifact published
288
+ * before this field existed — which is why it is required here, on the same
289
+ * reasoning as `network` and `stack`: the read-client refuses any artifact
290
+ * older than the registry bundled with the package reading it, so a package
291
+ * whose bundled registry carries this can only accept remote artifacts that
292
+ * carry it too.
293
+ */
294
+ providerIds: ProviderIds;
295
+ /**
296
+ * Whether we open smart sessions on this chain.
297
+ *
298
+ * A declared policy, not a derived one. The underlying constraint is where the
299
+ * SmartSession modules are deployed — which `bootstrap_full` does everywhere,
300
+ * making deployment necessary but not sufficient, since we still decline to
301
+ * open sessions on testnets. `@rhinestone/sdk` gates nothing here: its chain
302
+ * catalog resolves any chain by id, so this is the only statement of the
303
+ * answer.
304
+ *
305
+ * A consumer rejects `setup-account` for a chain that is `false`. Required for
306
+ * the same reason as `providerIds`.
307
+ */
308
+ sessionCapable: boolean;
271
309
  nativeToken: NativeTokenEntry;
272
310
  wrappedNativeToken: NativeTokenEntry;
273
311
  tokens: TokenEntry[];
@@ -276,6 +314,16 @@ interface ChainEntry {
276
314
  swapQuoters: SwapQuoter[];
277
315
  swapQuoterConfig?: Partial<Record<SwapQuoter, SwapQuoterConfig>>;
278
316
  }
317
+ /**
318
+ * Vendor-keyed, so a chain states each vendor's own name for it once. `null`
319
+ * means checked and unsupported — see `ChainEntry.providerIds`.
320
+ */
321
+ interface ProviderIds {
322
+ /** Alchemy Notify network name, e.g. `BASE_MAINNET`. */
323
+ alchemy: string | null;
324
+ /** Zerion chain slug, e.g. `binance-smart-chain`. */
325
+ zerion: string | null;
326
+ }
279
327
  type ContractAddresses = Record<string, Record<string, Address>>;
280
328
  interface ChainRegistry {
281
329
  [chainId: string]: ChainEntry;
@@ -320,4 +368,4 @@ interface ErpcConfig {
320
368
  providerIdPrefix: Record<string, string>;
321
369
  }
322
370
  export { OPStackChains, MainnetNetwork, TestnetNetwork, mainnetChains, testnetChains, chains, PEG_GROUPS };
323
- export type { CctpChainConfig, ChainItem, ChainEntry, ChainExplorer, ChainNetwork, ChainRegistry, ChainRoles, ChainStack, ChainList, ContractAddresses, NearChainConfig, OftChainConfig, ProviderRegistry, ProviderName, RhinoChainConfig, SettlementConfig, SettlementLayer, SupportedTestnet, SupportedMainnet, SupportedOPStackMainnet, SupportedOPStackTestnet, SupportedChain, SwapQuoter, SwapQuoterConfig, PegGroup, VmType, ErpcFailsafe, ErpcChainOverride, ErpcConfig, };
371
+ export type { CctpChainConfig, ChainItem, ChainEntry, ChainExplorer, ChainNetwork, ChainRegistry, ChainRoles, ChainStack, ChainList, ContractAddresses, NearChainConfig, OftChainConfig, ProviderIds, ProviderRegistry, ProviderName, RhinoChainConfig, SettlementConfig, SettlementLayer, SupportedTestnet, SupportedMainnet, SupportedOPStackMainnet, SupportedOPStackTestnet, SupportedChain, SwapQuoter, SwapQuoterConfig, PegGroup, VmType, ErpcFailsafe, ErpcChainOverride, ErpcConfig, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhinestone/shared-configs",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "Reusable configuration files for Rhinestone services",
5
5
  "author": {
6
6
  "name": "Rhinestone",