@rhinestone/shared-configs 2.17.0 → 2.18.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.
@@ -58,7 +58,7 @@
58
58
  "grace_ms": 30000,
59
59
  "max_catchup_blocks": 5000,
60
60
  "parse_concurrency": 8,
61
- "poll_interval_ms": 1000,
61
+ "poll_interval_ms": 250,
62
62
  "reorg_window_k": 16,
63
63
  "reverify_delay_ms": 500,
64
64
  "scan_batch_max_blocks": 200,
@@ -110,7 +110,7 @@
110
110
  "grace_ms": 30000,
111
111
  "max_catchup_blocks": 5000,
112
112
  "parse_concurrency": 4,
113
- "poll_interval_ms": 1000,
113
+ "poll_interval_ms": 250,
114
114
  "reorg_window_k": 16,
115
115
  "reverify_delay_ms": 500,
116
116
  "scan_batch_max_blocks": 200,
@@ -123,7 +123,7 @@
123
123
  "grace_ms": 0,
124
124
  "max_catchup_blocks": 5000,
125
125
  "parse_concurrency": 8,
126
- "poll_interval_ms": 1000,
126
+ "poll_interval_ms": 250,
127
127
  "reorg_window_k": 4,
128
128
  "reverify_delay_ms": 0,
129
129
  "scan_batch_max_blocks": 200,
@@ -175,7 +175,7 @@
175
175
  "grace_ms": 0,
176
176
  "max_catchup_blocks": 5000,
177
177
  "parse_concurrency": 8,
178
- "poll_interval_ms": 1000,
178
+ "poll_interval_ms": 250,
179
179
  "reorg_window_k": 4,
180
180
  "reverify_delay_ms": 0,
181
181
  "scan_batch_max_blocks": 200,
@@ -188,7 +188,7 @@
188
188
  "grace_ms": 0,
189
189
  "max_catchup_blocks": 5000,
190
190
  "parse_concurrency": 4,
191
- "poll_interval_ms": 1000,
191
+ "poll_interval_ms": 250,
192
192
  "reorg_window_k": 4,
193
193
  "reverify_delay_ms": 0,
194
194
  "scan_batch_max_blocks": 200,
@@ -214,7 +214,7 @@
214
214
  "grace_ms": 0,
215
215
  "max_catchup_blocks": 5000,
216
216
  "parse_concurrency": 4,
217
- "poll_interval_ms": 1000,
217
+ "poll_interval_ms": 250,
218
218
  "reorg_window_k": 4,
219
219
  "reverify_delay_ms": 0,
220
220
  "scan_batch_max_blocks": 200,
@@ -227,7 +227,7 @@
227
227
  "grace_ms": 30000,
228
228
  "max_catchup_blocks": 5000,
229
229
  "parse_concurrency": 4,
230
- "poll_interval_ms": 1000,
230
+ "poll_interval_ms": 250,
231
231
  "reorg_window_k": 16,
232
232
  "reverify_delay_ms": 500,
233
233
  "scan_batch_max_blocks": 200,
@@ -266,7 +266,7 @@
266
266
  "grace_ms": 30000,
267
267
  "max_catchup_blocks": 5000,
268
268
  "parse_concurrency": 4,
269
- "poll_interval_ms": 1000,
269
+ "poll_interval_ms": 250,
270
270
  "reorg_window_k": 16,
271
271
  "reverify_delay_ms": 500,
272
272
  "scan_batch_max_blocks": 200,
@@ -3219,7 +3219,14 @@
3219
3219
  "zerion": null
3220
3220
  },
3221
3221
  "sessionCapable": false,
3222
- "settlementLayers": [],
3222
+ "settlementConfig": {
3223
+ "cctp": {
3224
+ "domain": 5
3225
+ }
3226
+ },
3227
+ "settlementLayers": [
3228
+ "CCTP"
3229
+ ],
3223
3230
  "stack": "vanilla",
3224
3231
  "swapQuoters": [],
3225
3232
  "tokens": [
@@ -344,30 +344,7 @@ function errorsFor(chain) {
344
344
  (0, bun_test_1.expect)(result.issues[0].message).toContain("no settlement layers");
345
345
  (0, bun_test_1.expect)(result.hasErrors).toBe(true);
346
346
  });
347
- (0, bun_test_1.it)("allows only the exact same-chain Solana Devnet identity without settlement layers", () => {
348
- const devnet = validChain({
349
- name: "Solana Devnet",
350
- vmType: "svm",
351
- network: "testnet",
352
- caip2: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
353
- settlementLayers: [],
354
- providerIds: { alchemy: null, zerion: null },
355
- sessionCapable: false,
356
- });
357
- (0, bun_test_1.expect)((0, validation_1.validateChainConfig)({ "792703810": devnet }).issues).toEqual([]);
358
- for (const [chainId, overrides] of [
359
- ["792703811", {}],
360
- ["792703810", { caip2: "solana:wrong" }],
361
- ["792703810", { network: "mainnet" }],
362
- ["792703810", { vmType: "evm" }],
363
- ]) {
364
- const result = (0, validation_1.validateChainConfig)({
365
- [chainId]: { ...devnet, ...overrides },
366
- });
367
- (0, bun_test_1.expect)(result.issues.some((issue) => issue.message.includes("no settlement layers"))).toBe(true);
368
- }
369
- });
370
- (0, bun_test_1.it)("still reports structural errors on the exempt Devnet entry", () => {
347
+ (0, bun_test_1.it)("has no per-chain exemption from the zero-settlement-layer rule", () => {
371
348
  const result = (0, validation_1.validateChainConfig)({
372
349
  "792703810": validChain({
373
350
  name: "Solana Devnet",
@@ -375,10 +352,9 @@ function errorsFor(chain) {
375
352
  network: "testnet",
376
353
  caip2: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1",
377
354
  settlementLayers: [],
378
- tokens: {},
379
355
  }),
380
356
  });
381
- (0, bun_test_1.expect)(result.issues.some((issue) => issue.message === "tokens is not an array")).toBe(true);
357
+ (0, bun_test_1.expect)(result.issues.some((issue) => issue.message.includes("no settlement layers"))).toBe(true);
382
358
  (0, bun_test_1.expect)(result.hasErrors).toBe(true);
383
359
  });
384
360
  (0, bun_test_1.it)("returns warning for chain with single settlement layer", () => {
@@ -1119,13 +1119,7 @@ function validateChainConfig(chains) {
1119
1119
  // Already reported structurally; skip the reachability checks below.
1120
1120
  continue;
1121
1121
  }
1122
- const isSameChainOnlySolanaDevnet = chainId === '792703810' &&
1123
- chain.caip2 === 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1' &&
1124
- chain.vmType === 'svm' &&
1125
- chain.network === 'testnet' &&
1126
- !chain.virtual;
1127
- // Devnet exists for same-chain execution only; it has no bridge route by design.
1128
- if (layers.length === 0 && !isSameChainOnlySolanaDevnet) {
1122
+ if (layers.length === 0) {
1129
1123
  issues.push({
1130
1124
  severity: 'error',
1131
1125
  chainId,
@@ -7,6 +7,10 @@ const DEVNET_ID = 792_703_810;
7
7
  const NATIVE_SOL = '11111111111111111111111111111111';
8
8
  const WRAPPED_SOL = 'So11111111111111111111111111111111111111112';
9
9
  const DEVNET_USDC = '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
10
+ const BASE_SEPOLIA_ID = 84_532;
11
+ const BASE_SEPOLIA_USDC = '0x036CbD53842c5426634e7929541eC2318f3dCF7e';
12
+ const BASE_ID = 8453;
13
+ const SOLANA_ID = 792_703_809;
10
14
  (0, bun_test_1.describe)('Solana Devnet registry', () => {
11
15
  (0, bun_test_1.it)('publishes the exact testnet identity without a viem chain', () => {
12
16
  (0, bun_test_1.expect)(index_1.TestnetNetwork.SOLANA_DEVNET).toBe(DEVNET_ID);
@@ -67,12 +71,14 @@ const DEVNET_USDC = '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
67
71
  },
68
72
  ]);
69
73
  });
70
- (0, bun_test_1.it)('keeps normal same-chain roles without advertising bridge coverage', () => {
74
+ (0, bun_test_1.it)('advertises CCTP coverage and nothing else', () => {
71
75
  const entry = index_1.chainRegistry[String(DEVNET_ID)];
72
- (0, bun_test_1.expect)(entry.settlementLayers).toEqual([]);
76
+ (0, bun_test_1.expect)(entry.settlementLayers).toEqual(['CCTP']);
73
77
  (0, bun_test_1.expect)(entry.swapQuoters).toEqual([]);
74
- (0, bun_test_1.expect)(entry.settlementConfig).toBeUndefined();
78
+ (0, bun_test_1.expect)(entry.settlementConfig).toEqual({ cctp: { domain: 5 } });
75
79
  (0, bun_test_1.expect)(entry.paymentTokens).toBeUndefined();
80
+ // Token-level CCTP coverage is authored registry-wide in a later pass;
81
+ // absent here means "no opinion", not "routes nothing".
76
82
  (0, bun_test_1.expect)(entry.tokens.every((token) => token.settlementLayers === undefined)).toBe(true);
77
83
  (0, bun_test_1.expect)(oft_1.OFT_PROGRAM_IDS[DEVNET_ID]).toBeUndefined();
78
84
  for (const config of Object.values(oft_1.OFT_REGISTRY)) {
@@ -83,4 +89,24 @@ const DEVNET_USDC = '4zMMC9srt5Ri5X14GAgXhaHii3GnPAEERYPJgZJDncDU';
83
89
  (0, bun_test_1.expect)((0, index_1.canBeOrigin)(DEVNET_ID)).toBe(true);
84
90
  (0, bun_test_1.expect)((0, index_1.canBeDestination)(DEVNET_ID)).toBe(true);
85
91
  });
92
+ (0, bun_test_1.it)('pairs with Base Sepolia over CCTP on Circle test USDC', () => {
93
+ const baseSepolia = index_1.chainRegistry[String(BASE_SEPOLIA_ID)];
94
+ const devnet = index_1.chainRegistry[String(DEVNET_ID)];
95
+ (0, bun_test_1.expect)(baseSepolia.settlementLayers).toContain('CCTP');
96
+ (0, bun_test_1.expect)(baseSepolia.settlementConfig?.cctp).toEqual({ domain: 6 });
97
+ (0, bun_test_1.expect)(baseSepolia.tokens.some((token) => token.symbol === 'USDC' && token.address === BASE_SEPOLIA_USDC)).toBe(true);
98
+ (0, bun_test_1.expect)(devnet.tokens.some((token) => token.symbol === 'USDC' && token.address === DEVNET_USDC)).toBe(true);
99
+ // Circle assigns domains per blockchain, not per network, so a testnet
100
+ // domain equals its mainnet counterpart and `network` is the only
101
+ // discriminator between the two environments.
102
+ // https://developers.circle.com/cctp/concepts/supported-chains-and-domains
103
+ (0, bun_test_1.expect)(baseSepolia.network).toBe('testnet');
104
+ (0, bun_test_1.expect)(devnet.network).toBe('testnet');
105
+ (0, bun_test_1.expect)(index_1.chainRegistry[String(BASE_ID)].settlementConfig?.cctp).toEqual({
106
+ domain: 6,
107
+ });
108
+ (0, bun_test_1.expect)(index_1.chainRegistry[String(SOLANA_ID)].settlementConfig?.cctp).toEqual({
109
+ domain: 5,
110
+ });
111
+ });
86
112
  });
@@ -3323,7 +3323,14 @@ const chains = {
3323
3323
  "zerion": null
3324
3324
  },
3325
3325
  "sessionCapable": false,
3326
- "settlementLayers": [],
3326
+ "settlementConfig": {
3327
+ "cctp": {
3328
+ "domain": 5
3329
+ }
3330
+ },
3331
+ "settlementLayers": [
3332
+ "CCTP"
3333
+ ],
3327
3334
  "stack": "vanilla",
3328
3335
  "swapQuoters": [],
3329
3336
  "tokens": [
@@ -1,2 +1,2 @@
1
- declare const PACKAGE_VERSION = "2.17.0";
1
+ declare const PACKAGE_VERSION = "2.18.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.17.0";
5
+ const PACKAGE_VERSION = "2.18.1";
6
6
  exports.PACKAGE_VERSION = PACKAGE_VERSION;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhinestone/shared-configs",
3
- "version": "2.17.0",
3
+ "version": "2.18.1",
4
4
  "description": "Reusable configuration files for Rhinestone services",
5
5
  "author": {
6
6
  "name": "Rhinestone",