@pushchain/core 4.0.14-alpha.0 → 5.1.0

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.
Files changed (87) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +1 -1
  3. package/src/lib/constants/abi/cea.evm.d.ts +23 -0
  4. package/src/lib/constants/abi/cea.evm.js +34 -0
  5. package/src/lib/constants/abi/cea.evm.js.map +1 -0
  6. package/src/lib/constants/abi/ceaFactory.evm.d.ts +65 -0
  7. package/src/lib/constants/abi/ceaFactory.evm.js +41 -0
  8. package/src/lib/constants/abi/ceaFactory.evm.js.map +1 -0
  9. package/src/lib/constants/abi/erc20.evm.d.ts +14 -0
  10. package/src/lib/constants/abi/erc20.evm.js +7 -0
  11. package/src/lib/constants/abi/erc20.evm.js.map +1 -1
  12. package/src/lib/constants/abi/index.d.ts +6 -0
  13. package/src/lib/constants/abi/index.js +15 -1
  14. package/src/lib/constants/abi/index.js.map +1 -1
  15. package/src/lib/constants/abi/prc20.evm.d.ts +188 -0
  16. package/src/lib/constants/abi/prc20.evm.js +130 -0
  17. package/src/lib/constants/abi/prc20.evm.js.map +1 -0
  18. package/src/lib/constants/abi/uea-factory.d.ts +30 -0
  19. package/src/lib/constants/abi/uea-factory.js +25 -0
  20. package/src/lib/constants/abi/uea-factory.js.map +1 -0
  21. package/src/lib/constants/abi/universalGateway.evm.d.ts +93 -0
  22. package/src/lib/constants/abi/universalGateway.evm.js +70 -0
  23. package/src/lib/constants/abi/universalGateway.evm.js.map +1 -0
  24. package/src/lib/constants/abi/universalGatewayPC.evm.d.ts +140 -0
  25. package/src/lib/constants/abi/universalGatewayPC.evm.js +70 -0
  26. package/src/lib/constants/abi/universalGatewayPC.evm.js.map +1 -0
  27. package/src/lib/constants/abi/universalGatewayV0.evm.js +57 -0
  28. package/src/lib/constants/abi/universalGatewayV0.evm.js.map +1 -1
  29. package/src/lib/constants/abi/universalGatewayV0.json +1162 -1647
  30. package/src/lib/constants/chain.d.ts +52 -0
  31. package/src/lib/constants/chain.js +161 -1
  32. package/src/lib/constants/chain.js.map +1 -1
  33. package/src/lib/constants/index.d.ts +9 -1
  34. package/src/lib/constants/index.js +20 -1
  35. package/src/lib/constants/index.js.map +1 -1
  36. package/src/lib/constants/selectors.d.ts +42 -0
  37. package/src/lib/constants/selectors.js +45 -0
  38. package/src/lib/constants/selectors.js.map +1 -0
  39. package/src/lib/constants/tokens.d.ts +41 -0
  40. package/src/lib/constants/tokens.js +62 -1
  41. package/src/lib/constants/tokens.js.map +1 -1
  42. package/src/lib/generated/uexecutor/v2/index.d.ts +2 -0
  43. package/src/lib/generated/uexecutor/v2/index.js +31 -0
  44. package/src/lib/generated/uexecutor/v2/index.js.map +1 -0
  45. package/src/lib/generated/uexecutor/v2/query.d.ts +23 -0
  46. package/src/lib/generated/uexecutor/v2/query.js +79 -0
  47. package/src/lib/generated/uexecutor/v2/query.js.map +1 -0
  48. package/src/lib/generated/uexecutor/v2/types.d.ts +101 -0
  49. package/src/lib/generated/uexecutor/v2/types.js +660 -0
  50. package/src/lib/generated/uexecutor/v2/types.js.map +1 -0
  51. package/src/lib/generated/v1/tx.d.ts +22 -0
  52. package/src/lib/generated/v1/tx.js +188 -1
  53. package/src/lib/generated/v1/tx.js.map +1 -1
  54. package/src/lib/index.d.ts +5 -0
  55. package/src/lib/index.js +25 -1
  56. package/src/lib/index.js.map +1 -1
  57. package/src/lib/orchestrator/cea-utils.d.ts +85 -0
  58. package/src/lib/orchestrator/cea-utils.js +186 -0
  59. package/src/lib/orchestrator/cea-utils.js.map +1 -0
  60. package/src/lib/orchestrator/orchestrator.d.ts +326 -3
  61. package/src/lib/orchestrator/orchestrator.js +3262 -135
  62. package/src/lib/orchestrator/orchestrator.js.map +1 -1
  63. package/src/lib/orchestrator/orchestrator.types.d.ts +487 -0
  64. package/src/lib/orchestrator/orchestrator.types.js +17 -0
  65. package/src/lib/orchestrator/orchestrator.types.js.map +1 -1
  66. package/src/lib/orchestrator/payload-builders.d.ts +210 -1
  67. package/src/lib/orchestrator/payload-builders.js +481 -0
  68. package/src/lib/orchestrator/payload-builders.js.map +1 -1
  69. package/src/lib/orchestrator/route-detector.d.ts +102 -0
  70. package/src/lib/orchestrator/route-detector.js +355 -0
  71. package/src/lib/orchestrator/route-detector.js.map +1 -0
  72. package/src/lib/price-fetch/price-fetch.js +5 -2
  73. package/src/lib/price-fetch/price-fetch.js.map +1 -1
  74. package/src/lib/progress-hook/progress-hook.js +43 -0
  75. package/src/lib/progress-hook/progress-hook.js.map +1 -1
  76. package/src/lib/progress-hook/progress-hook.types.d.ts +7 -1
  77. package/src/lib/progress-hook/progress-hook.types.js +7 -0
  78. package/src/lib/progress-hook/progress-hook.types.js.map +1 -1
  79. package/src/lib/push-chain/push-chain.d.ts +71 -1
  80. package/src/lib/push-chain/push-chain.js +70 -1
  81. package/src/lib/push-chain/push-chain.js.map +1 -1
  82. package/src/lib/push-client/push-client.d.ts +10 -1
  83. package/src/lib/push-client/push-client.js +35 -6
  84. package/src/lib/push-client/push-client.js.map +1 -1
  85. package/src/lib/vm-client/evm-client.d.ts +3 -1
  86. package/src/lib/vm-client/evm-client.js +23 -15
  87. package/src/lib/vm-client/evm-client.js.map +1 -1
@@ -8,25 +8,20 @@
8
8
  },
9
9
  "instructions": [
10
10
  {
11
- "name": "execute_universal_tx",
11
+ "name": "finalize_universal_tx",
12
12
  "docs": [
13
- "@notice TSS-verified execute arbitrary Solana instruction with SOL",
14
- "@param tx_id Transaction ID from Push chain event",
15
- "@param amount Amount of SOL to transfer to cea authority",
16
- "@param target_program Target Solana program to invoke",
17
- "@param sender EVM sender address (same as origin_caller in EVM)",
18
- "@param accounts Ordered list of accounts for target program",
19
- "@param ix_data Instruction data for target program"
13
+ "@notice Unified outbound entrypoint: withdraw (mode 1) or execute (mode 2)",
14
+ "@param instruction_id 1=withdraw (vault→CEA→recipient), 2=execute (vault→CEA→CPI)"
20
15
  ],
21
16
  "discriminator": [
22
- 248,
23
- 132,
24
- 87,
25
- 87,
26
- 210,
27
- 51,
28
- 117,
29
- 76
17
+ 222,
18
+ 91,
19
+ 238,
20
+ 150,
21
+ 75,
22
+ 216,
23
+ 2,
24
+ 80
30
25
  ],
31
26
  "accounts": [
32
27
  {
@@ -103,7 +98,7 @@
103
98
  },
104
99
  {
105
100
  "kind": "arg",
106
- "path": "sender"
101
+ "path": "push_account"
107
102
  }
108
103
  ]
109
104
  }
@@ -121,14 +116,17 @@
121
116
  115,
122
117
  112,
123
118
  100,
124
- 97
119
+ 97,
120
+ 95,
121
+ 118,
122
+ 50
125
123
  ]
126
124
  }
127
125
  ]
128
126
  }
129
127
  },
130
128
  {
131
- "name": "executed_tx",
129
+ "name": "executed_sub_tx",
132
130
  "docs": [
133
131
  "Executed transaction tracker (replay protection)",
134
132
  "Relayer pays for this account creation and gets reimbursed via gas_fee"
@@ -148,28 +146,119 @@
148
146
  101,
149
147
  100,
150
148
  95,
149
+ 115,
150
+ 117,
151
+ 98,
152
+ 95,
151
153
  116,
152
154
  120
153
155
  ]
154
156
  },
155
157
  {
156
158
  "kind": "arg",
157
- "path": "tx_id"
159
+ "path": "sub_tx_id"
158
160
  }
159
161
  ]
160
162
  }
161
163
  },
162
- {
163
- "name": "destination_program"
164
- },
165
164
  {
166
165
  "name": "system_program",
167
166
  "address": "11111111111111111111111111111111"
167
+ },
168
+ {
169
+ "name": "destination_program",
170
+ "docs": [
171
+ "Pass system program id for withdraw, it's ignored"
172
+ ]
173
+ },
174
+ {
175
+ "name": "recipient",
176
+ "writable": true,
177
+ "optional": true
178
+ },
179
+ {
180
+ "name": "vault_ata",
181
+ "docs": [
182
+ "Vault ATA for this mint — always initialized (deposit path guarantees existence)"
183
+ ],
184
+ "writable": true,
185
+ "optional": true
186
+ },
187
+ {
188
+ "name": "cea_ata",
189
+ "writable": true,
190
+ "optional": true
191
+ },
192
+ {
193
+ "name": "mint",
194
+ "optional": true
195
+ },
196
+ {
197
+ "name": "token_program",
198
+ "optional": true,
199
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
200
+ },
201
+ {
202
+ "name": "rent",
203
+ "optional": true,
204
+ "address": "SysvarRent111111111111111111111111111111111"
205
+ },
206
+ {
207
+ "name": "associated_token_program",
208
+ "optional": true,
209
+ "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
210
+ },
211
+ {
212
+ "name": "recipient_ata",
213
+ "writable": true,
214
+ "optional": true
215
+ },
216
+ {
217
+ "name": "rate_limit_config",
218
+ "optional": true,
219
+ "pda": {
220
+ "seeds": [
221
+ {
222
+ "kind": "const",
223
+ "value": [
224
+ 114,
225
+ 97,
226
+ 116,
227
+ 101,
228
+ 95,
229
+ 108,
230
+ 105,
231
+ 109,
232
+ 105,
233
+ 116,
234
+ 95,
235
+ 99,
236
+ 111,
237
+ 110,
238
+ 102,
239
+ 105,
240
+ 103
241
+ ]
242
+ }
243
+ ]
244
+ }
245
+ },
246
+ {
247
+ "name": "token_rate_limit",
248
+ "docs": [
249
+ "Token-specific rate limit state (CEA withdrawal path only)"
250
+ ],
251
+ "writable": true,
252
+ "optional": true
168
253
  }
169
254
  ],
170
255
  "args": [
171
256
  {
172
- "name": "tx_id",
257
+ "name": "instruction_id",
258
+ "type": "u8"
259
+ },
260
+ {
261
+ "name": "sub_tx_id",
173
262
  "type": {
174
263
  "array": [
175
264
  "u8",
@@ -178,15 +267,20 @@
178
267
  }
179
268
  },
180
269
  {
181
- "name": "amount",
182
- "type": "u64"
270
+ "name": "universal_tx_id",
271
+ "type": {
272
+ "array": [
273
+ "u8",
274
+ 32
275
+ ]
276
+ }
183
277
  },
184
278
  {
185
- "name": "target_program",
186
- "type": "pubkey"
279
+ "name": "amount",
280
+ "type": "u64"
187
281
  },
188
282
  {
189
- "name": "sender",
283
+ "name": "push_account",
190
284
  "type": {
191
285
  "array": [
192
286
  "u8",
@@ -195,14 +289,8 @@
195
289
  }
196
290
  },
197
291
  {
198
- "name": "accounts",
199
- "type": {
200
- "vec": {
201
- "defined": {
202
- "name": "GatewayAccountMeta"
203
- }
204
- }
205
- }
292
+ "name": "writable_flags",
293
+ "type": "bytes"
206
294
  },
207
295
  {
208
296
  "name": "ix_data",
@@ -212,10 +300,6 @@
212
300
  "name": "gas_fee",
213
301
  "type": "u64"
214
302
  },
215
- {
216
- "name": "rent_fee",
217
- "type": "u64"
218
- },
219
303
  {
220
304
  "name": "signature",
221
305
  "type": {
@@ -237,39 +321,70 @@
237
321
  32
238
322
  ]
239
323
  }
240
- },
241
- {
242
- "name": "nonce",
243
- "type": "u64"
244
324
  }
245
325
  ]
246
326
  },
247
327
  {
248
- "name": "execute_universal_tx_token",
328
+ "name": "get_sol_price",
249
329
  "docs": [
250
- "@notice TSS-verified execute arbitrary Solana instruction with SPL tokens",
251
- "@param tx_id Transaction ID from Push chain event",
252
- "@param amount Amount of SPL tokens to transfer to cea ATA",
253
- "@param target_program Target Solana program to invoke",
254
- "@param sender EVM sender address (same as origin_caller in EVM)",
255
- "@param accounts Ordered list of accounts for target program",
256
- "@param ix_data Instruction data for target program"
330
+ "@notice View function for SOL price (locker-compatible)"
257
331
  ],
258
332
  "discriminator": [
259
- 109,
260
- 179,
261
- 159,
262
- 72,
263
- 154,
264
- 247,
265
- 19,
266
- 188
333
+ 230,
334
+ 145,
335
+ 206,
336
+ 175,
337
+ 43,
338
+ 184,
339
+ 97,
340
+ 110
267
341
  ],
268
342
  "accounts": [
269
343
  {
270
- "name": "caller",
344
+ "name": "price_update"
345
+ }
346
+ ],
347
+ "args": [],
348
+ "returns": {
349
+ "defined": {
350
+ "name": "PriceData"
351
+ }
352
+ }
353
+ },
354
+ {
355
+ "name": "init_tss",
356
+ "discriminator": [
357
+ 47,
358
+ 31,
359
+ 100,
360
+ 111,
361
+ 115,
362
+ 2,
363
+ 22,
364
+ 208
365
+ ],
366
+ "accounts": [
367
+ {
368
+ "name": "tss_pda",
271
369
  "writable": true,
272
- "signer": true
370
+ "pda": {
371
+ "seeds": [
372
+ {
373
+ "kind": "const",
374
+ "value": [
375
+ 116,
376
+ 115,
377
+ 115,
378
+ 112,
379
+ 100,
380
+ 97,
381
+ 95,
382
+ 118,
383
+ 50
384
+ ]
385
+ }
386
+ ]
387
+ }
273
388
  },
274
389
  {
275
390
  "name": "config",
@@ -290,103 +405,221 @@
290
405
  }
291
406
  },
292
407
  {
293
- "name": "vault_authority",
294
- "docs": [
295
- "Vault authority PDA - owner of all vault ATAs"
296
- ],
297
- "pda": {
298
- "seeds": [
299
- {
300
- "kind": "const",
301
- "value": [
302
- 118,
303
- 97,
304
- 117,
305
- 108,
306
- 116
307
- ]
308
- }
408
+ "name": "authority",
409
+ "writable": true,
410
+ "signer": true
411
+ },
412
+ {
413
+ "name": "system_program",
414
+ "address": "11111111111111111111111111111111"
415
+ }
416
+ ],
417
+ "args": [
418
+ {
419
+ "name": "tss_eth_address",
420
+ "type": {
421
+ "array": [
422
+ "u8",
423
+ 20
309
424
  ]
310
425
  }
311
426
  },
312
427
  {
313
- "name": "vault_ata",
314
- "docs": [
315
- "Vault ATA for this mint"
316
- ],
317
- "writable": true
318
- },
428
+ "name": "chain_id",
429
+ "type": "string"
430
+ }
431
+ ]
432
+ },
433
+ {
434
+ "name": "initialize",
435
+ "docs": [
436
+ "@notice Initialize the gateway"
437
+ ],
438
+ "discriminator": [
439
+ 175,
440
+ 175,
441
+ 109,
442
+ 31,
443
+ 13,
444
+ 152,
445
+ 155,
446
+ 237
447
+ ],
448
+ "accounts": [
319
449
  {
320
- "name": "cea_authority",
321
- "docs": [
322
- "CEA (Chain Executor Account) - persistent identity per Push Chain user",
323
- "This PDA represents the user on Solana and can sign for target programs"
324
- ],
450
+ "name": "config",
325
451
  "writable": true,
326
452
  "pda": {
327
453
  "seeds": [
328
454
  {
329
455
  "kind": "const",
330
456
  "value": [
331
- 112,
332
- 117,
333
- 115,
334
- 104,
335
- 95,
336
- 105,
337
- 100,
338
- 101,
457
+ 99,
458
+ 111,
339
459
  110,
340
- 116,
460
+ 102,
341
461
  105,
342
- 116,
343
- 121
462
+ 103
344
463
  ]
345
- },
346
- {
347
- "kind": "arg",
348
- "path": "sender"
349
464
  }
350
465
  ]
351
466
  }
352
467
  },
353
468
  {
354
- "name": "cea_ata",
355
- "docs": [
356
- "CEA ATA for this user+mint",
357
- "Created per-tx, closed after (rent reclaim)"
358
- ],
359
- "writable": true
469
+ "name": "vault",
470
+ "writable": true,
471
+ "pda": {
472
+ "seeds": [
473
+ {
474
+ "kind": "const",
475
+ "value": [
476
+ 118,
477
+ 97,
478
+ 117,
479
+ 108,
480
+ 116
481
+ ]
482
+ }
483
+ ]
484
+ }
360
485
  },
361
486
  {
362
- "name": "mint",
363
- "docs": [
364
- "Token mint"
365
- ]
487
+ "name": "admin",
488
+ "writable": true,
489
+ "signer": true
366
490
  },
367
491
  {
368
- "name": "tss_pda",
492
+ "name": "system_program",
493
+ "address": "11111111111111111111111111111111"
494
+ }
495
+ ],
496
+ "args": [
497
+ {
498
+ "name": "admin",
499
+ "type": "pubkey"
500
+ },
501
+ {
502
+ "name": "pauser",
503
+ "type": "pubkey"
504
+ },
505
+ {
506
+ "name": "tss",
507
+ "type": "pubkey"
508
+ },
509
+ {
510
+ "name": "min_cap_usd",
511
+ "type": "u128"
512
+ },
513
+ {
514
+ "name": "max_cap_usd",
515
+ "type": "u128"
516
+ },
517
+ {
518
+ "name": "pyth_price_feed",
519
+ "type": "pubkey"
520
+ }
521
+ ]
522
+ },
523
+ {
524
+ "name": "pause",
525
+ "docs": [
526
+ "@notice Pause the gateway"
527
+ ],
528
+ "discriminator": [
529
+ 211,
530
+ 22,
531
+ 221,
532
+ 251,
533
+ 74,
534
+ 121,
535
+ 193,
536
+ 47
537
+ ],
538
+ "accounts": [
539
+ {
540
+ "name": "config",
369
541
  "writable": true,
370
542
  "pda": {
371
543
  "seeds": [
372
544
  {
373
545
  "kind": "const",
374
546
  "value": [
375
- 116,
376
- 115,
377
- 115,
378
- 112,
379
- 100,
380
- 97
547
+ 99,
548
+ 111,
549
+ 110,
550
+ 102,
551
+ 105,
552
+ 103
381
553
  ]
382
554
  }
383
555
  ]
384
556
  }
385
557
  },
386
558
  {
387
- "name": "vault_sol",
559
+ "name": "pauser",
560
+ "signer": true
561
+ }
562
+ ],
563
+ "args": []
564
+ },
565
+ {
566
+ "name": "rescue_funds",
567
+ "docs": [
568
+ "@notice TSS-verified emergency rescue of locked funds from vault.",
569
+ "SOL path: token_mint = None. SPL path: token_mint = Some.",
570
+ "Replay-protected via ExecutedSubTx PDA"
571
+ ],
572
+ "discriminator": [
573
+ 238,
574
+ 204,
575
+ 8,
576
+ 81,
577
+ 89,
578
+ 43,
579
+ 193,
580
+ 103
581
+ ],
582
+ "accounts": [
583
+ {
584
+ "name": "config",
585
+ "pda": {
586
+ "seeds": [
587
+ {
588
+ "kind": "const",
589
+ "value": [
590
+ 99,
591
+ 111,
592
+ 110,
593
+ 102,
594
+ 105,
595
+ 103
596
+ ]
597
+ }
598
+ ]
599
+ }
600
+ },
601
+ {
602
+ "name": "vault",
603
+ "writable": true,
604
+ "pda": {
605
+ "seeds": [
606
+ {
607
+ "kind": "const",
608
+ "value": [
609
+ 118,
610
+ 97,
611
+ 117,
612
+ 108,
613
+ 116
614
+ ]
615
+ }
616
+ ]
617
+ }
618
+ },
619
+ {
620
+ "name": "fee_vault",
388
621
  "docs": [
389
- "Vault SOL PDA (needed for rent_fee transfer to CEA and gas_fee reimbursement to relayer)"
622
+ "Fee vault relayer gas reimbursement source."
390
623
  ],
391
624
  "writable": true,
392
625
  "pda": {
@@ -394,6 +627,10 @@
394
627
  {
395
628
  "kind": "const",
396
629
  "value": [
630
+ 102,
631
+ 101,
632
+ 101,
633
+ 95,
397
634
  118,
398
635
  97,
399
636
  117,
@@ -405,10 +642,38 @@
405
642
  }
406
643
  },
407
644
  {
408
- "name": "executed_tx",
645
+ "name": "tss_pda",
646
+ "writable": true,
647
+ "pda": {
648
+ "seeds": [
649
+ {
650
+ "kind": "const",
651
+ "value": [
652
+ 116,
653
+ 115,
654
+ 115,
655
+ 112,
656
+ 100,
657
+ 97,
658
+ 95,
659
+ 118,
660
+ 50
661
+ ]
662
+ }
663
+ ]
664
+ }
665
+ },
666
+ {
667
+ "name": "recipient",
409
668
  "docs": [
410
- "Executed transaction tracker (replay protection)",
411
- "Relayer pays for this account creation and gets reimbursed via gas_fee"
669
+ "recipient_token_account.owner and used as the canonical identity in the TSS message."
670
+ ],
671
+ "writable": true
672
+ },
673
+ {
674
+ "name": "executed_sub_tx",
675
+ "docs": [
676
+ "Replay protection (EVM parity: isExecuted[subTxId])."
412
677
  ],
413
678
  "writable": true,
414
679
  "pda": {
@@ -425,40 +690,62 @@
425
690
  101,
426
691
  100,
427
692
  95,
693
+ 115,
694
+ 117,
695
+ 98,
696
+ 95,
428
697
  116,
429
698
  120
430
699
  ]
431
700
  },
432
701
  {
433
702
  "kind": "arg",
434
- "path": "tx_id"
703
+ "path": "sub_tx_id"
435
704
  }
436
705
  ]
437
706
  }
438
707
  },
439
708
  {
440
- "name": "destination_program"
441
- },
442
- {
443
- "name": "token_program",
444
- "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
709
+ "name": "caller",
710
+ "docs": [
711
+ "The caller/relayer — pays transaction fees, receives gas_fee reimbursement."
712
+ ],
713
+ "writable": true,
714
+ "signer": true
445
715
  },
446
716
  {
447
717
  "name": "system_program",
448
718
  "address": "11111111111111111111111111111111"
449
719
  },
450
720
  {
451
- "name": "rent",
452
- "address": "SysvarRent111111111111111111111111111111111"
721
+ "name": "token_vault",
722
+ "docs": [
723
+ "Vault ATA for this mint — holds bridged SPL tokens."
724
+ ],
725
+ "writable": true,
726
+ "optional": true
453
727
  },
454
728
  {
455
- "name": "associated_token_program",
456
- "address": "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
729
+ "name": "recipient_token_account",
730
+ "docs": [
731
+ "Recipient token account — must be owned by recipient and match token_mint."
732
+ ],
733
+ "writable": true,
734
+ "optional": true
735
+ },
736
+ {
737
+ "name": "token_mint",
738
+ "optional": true
739
+ },
740
+ {
741
+ "name": "token_program",
742
+ "optional": true,
743
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
457
744
  }
458
745
  ],
459
746
  "args": [
460
747
  {
461
- "name": "tx_id",
748
+ "name": "sub_tx_id",
462
749
  "type": {
463
750
  "array": [
464
751
  "u8",
@@ -467,42 +754,20 @@
467
754
  }
468
755
  },
469
756
  {
470
- "name": "amount",
471
- "type": "u64"
472
- },
473
- {
474
- "name": "target_program",
475
- "type": "pubkey"
476
- },
477
- {
478
- "name": "sender",
757
+ "name": "universal_tx_id",
479
758
  "type": {
480
759
  "array": [
481
760
  "u8",
482
- 20
761
+ 32
483
762
  ]
484
763
  }
485
764
  },
486
765
  {
487
- "name": "accounts",
488
- "type": {
489
- "vec": {
490
- "defined": {
491
- "name": "GatewayAccountMeta"
492
- }
493
- }
494
- }
495
- },
496
- {
497
- "name": "ix_data",
498
- "type": "bytes"
499
- },
500
- {
501
- "name": "gas_fee",
766
+ "name": "amount",
502
767
  "type": "u64"
503
768
  },
504
769
  {
505
- "name": "rent_fee",
770
+ "name": "gas_fee",
506
771
  "type": "u64"
507
772
  },
508
773
  {
@@ -526,136 +791,28 @@
526
791
  32
527
792
  ]
528
793
  }
529
- },
530
- {
531
- "name": "nonce",
532
- "type": "u64"
533
794
  }
534
795
  ]
535
796
  },
536
797
  {
537
- "name": "get_sol_price",
798
+ "name": "revert_universal_tx",
538
799
  "docs": [
539
- "@notice View function for SOL price (locker-compatible)",
540
- "@dev Anyone can fetch SOL price in USD"
800
+ "@notice TSS-verified unified revert (SOL and SPL) — EVM parity: `revertUniversalTx`.",
801
+ "SOL path: token_mint = None. SPL path: token_mint = Some."
541
802
  ],
542
803
  "discriminator": [
543
- 230,
544
- 145,
545
- 206,
546
- 175,
547
- 43,
548
- 184,
549
- 97,
550
- 110
551
- ],
552
- "accounts": [
553
- {
554
- "name": "price_update"
555
- }
556
- ],
557
- "args": [],
558
- "returns": {
559
- "defined": {
560
- "name": "PriceData"
561
- }
562
- }
563
- },
564
- {
565
- "name": "init_tss",
566
- "discriminator": [
567
- 47,
568
- 31,
569
- 100,
570
- 111,
571
- 115,
572
- 2,
573
- 22,
574
- 208
575
- ],
576
- "accounts": [
577
- {
578
- "name": "tss_pda",
579
- "writable": true,
580
- "pda": {
581
- "seeds": [
582
- {
583
- "kind": "const",
584
- "value": [
585
- 116,
586
- 115,
587
- 115,
588
- 112,
589
- 100,
590
- 97
591
- ]
592
- }
593
- ]
594
- }
595
- },
596
- {
597
- "name": "config",
598
- "pda": {
599
- "seeds": [
600
- {
601
- "kind": "const",
602
- "value": [
603
- 99,
604
- 111,
605
- 110,
606
- 102,
607
- 105,
608
- 103
609
- ]
610
- }
611
- ]
612
- }
613
- },
614
- {
615
- "name": "authority",
616
- "writable": true,
617
- "signer": true
618
- },
619
- {
620
- "name": "system_program",
621
- "address": "11111111111111111111111111111111"
622
- }
623
- ],
624
- "args": [
625
- {
626
- "name": "tss_eth_address",
627
- "type": {
628
- "array": [
629
- "u8",
630
- 20
631
- ]
632
- }
633
- },
634
- {
635
- "name": "chain_id",
636
- "type": "string"
637
- }
638
- ]
639
- },
640
- {
641
- "name": "initialize",
642
- "docs": [
643
- "@notice Initialize the gateway"
644
- ],
645
- "discriminator": [
646
- 175,
647
- 175,
648
- 109,
649
- 31,
650
- 13,
651
- 152,
652
- 155,
653
- 237
804
+ 124,
805
+ 49,
806
+ 81,
807
+ 233,
808
+ 23,
809
+ 147,
810
+ 82,
811
+ 122
654
812
  ],
655
813
  "accounts": [
656
814
  {
657
815
  "name": "config",
658
- "writable": true,
659
816
  "pda": {
660
817
  "seeds": [
661
818
  {
@@ -691,325 +848,144 @@
691
848
  }
692
849
  },
693
850
  {
694
- "name": "admin",
695
- "writable": true,
696
- "signer": true
697
- },
698
- {
699
- "name": "system_program",
700
- "address": "11111111111111111111111111111111"
701
- }
702
- ],
703
- "args": [
704
- {
705
- "name": "admin",
706
- "type": "pubkey"
707
- },
708
- {
709
- "name": "pauser",
710
- "type": "pubkey"
711
- },
712
- {
713
- "name": "tss",
714
- "type": "pubkey"
715
- },
716
- {
717
- "name": "min_cap_usd",
718
- "type": "u128"
719
- },
720
- {
721
- "name": "max_cap_usd",
722
- "type": "u128"
723
- },
724
- {
725
- "name": "pyth_price_feed",
726
- "type": "pubkey"
727
- }
728
- ]
729
- },
730
- {
731
- "name": "pause",
732
- "docs": [
733
- "@notice Pause the gateway"
734
- ],
735
- "discriminator": [
736
- 211,
737
- 22,
738
- 221,
739
- 251,
740
- 74,
741
- 121,
742
- 193,
743
- 47
744
- ],
745
- "accounts": [
746
- {
747
- "name": "config",
851
+ "name": "fee_vault",
852
+ "docs": [
853
+ "Fee vault — relayer gas reimbursement source."
854
+ ],
748
855
  "writable": true,
749
856
  "pda": {
750
857
  "seeds": [
751
858
  {
752
859
  "kind": "const",
753
860
  "value": [
754
- 99,
755
- 111,
756
- 110,
757
861
  102,
758
- 105,
759
- 103
862
+ 101,
863
+ 101,
864
+ 95,
865
+ 118,
866
+ 97,
867
+ 117,
868
+ 108,
869
+ 116
760
870
  ]
761
871
  }
762
872
  ]
763
873
  }
764
874
  },
765
875
  {
766
- "name": "pauser",
767
- "signer": true
768
- }
769
- ],
770
- "args": []
771
- },
772
- {
773
- "name": "remove_whitelist_token",
774
- "docs": [
775
- "@notice Remove token from whitelist"
776
- ],
777
- "discriminator": [
778
- 65,
779
- 182,
780
- 42,
781
- 255,
782
- 198,
783
- 163,
784
- 73,
785
- 46
786
- ],
787
- "accounts": [
788
- {
789
- "name": "config",
876
+ "name": "tss_pda",
790
877
  "writable": true,
791
878
  "pda": {
792
879
  "seeds": [
793
880
  {
794
881
  "kind": "const",
795
882
  "value": [
796
- 99,
797
- 111,
798
- 110,
799
- 102,
800
- 105,
801
- 103
883
+ 116,
884
+ 115,
885
+ 115,
886
+ 112,
887
+ 100,
888
+ 97,
889
+ 95,
890
+ 118,
891
+ 50
802
892
  ]
803
893
  }
804
894
  ]
805
895
  }
806
896
  },
807
897
  {
808
- "name": "whitelist",
898
+ "name": "recipient",
899
+ "docs": [
900
+ "recipient_token_account.owner and used as canonical identity in TSS message."
901
+ ],
902
+ "writable": true
903
+ },
904
+ {
905
+ "name": "executed_sub_tx",
906
+ "docs": [
907
+ "Replay protection (EVM parity: isExecuted[subTxId])."
908
+ ],
809
909
  "writable": true,
810
910
  "pda": {
811
911
  "seeds": [
812
912
  {
813
913
  "kind": "const",
814
914
  "value": [
815
- 119,
816
- 104,
817
- 105,
915
+ 101,
916
+ 120,
917
+ 101,
918
+ 99,
919
+ 117,
818
920
  116,
819
921
  101,
820
- 108,
821
- 105,
922
+ 100,
923
+ 95,
822
924
  115,
823
- 116
925
+ 117,
926
+ 98,
927
+ 95,
928
+ 116,
929
+ 120
824
930
  ]
931
+ },
932
+ {
933
+ "kind": "arg",
934
+ "path": "sub_tx_id"
825
935
  }
826
936
  ]
827
937
  }
828
938
  },
829
939
  {
830
- "name": "admin",
940
+ "name": "caller",
941
+ "docs": [
942
+ "The caller/relayer — pays transaction fees, receives gas_fee reimbursement."
943
+ ],
831
944
  "writable": true,
832
945
  "signer": true
833
946
  },
834
947
  {
835
948
  "name": "system_program",
836
949
  "address": "11111111111111111111111111111111"
837
- }
838
- ],
839
- "args": [
950
+ },
840
951
  {
841
- "name": "token",
842
- "type": "pubkey"
952
+ "name": "token_vault",
953
+ "docs": [
954
+ "Vault ATA for this mint — holds bridged SPL tokens."
955
+ ],
956
+ "writable": true,
957
+ "optional": true
958
+ },
959
+ {
960
+ "name": "recipient_token_account",
961
+ "docs": [
962
+ "Recipient token account — must be owned by recipient and match token_mint."
963
+ ],
964
+ "writable": true,
965
+ "optional": true
966
+ },
967
+ {
968
+ "name": "token_mint",
969
+ "optional": true
970
+ },
971
+ {
972
+ "name": "token_program",
973
+ "optional": true,
974
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
843
975
  }
844
- ]
845
- },
846
- {
847
- "name": "reset_nonce",
848
- "discriminator": [
849
- 104,
850
- 139,
851
- 110,
852
- 85,
853
- 234,
854
- 155,
855
- 132,
856
- 248
857
976
  ],
858
- "accounts": [
977
+ "args": [
859
978
  {
860
- "name": "tss_pda",
861
- "writable": true,
862
- "pda": {
863
- "seeds": [
864
- {
865
- "kind": "const",
866
- "value": [
867
- 116,
868
- 115,
869
- 115,
870
- 112,
871
- 100,
872
- 97
873
- ]
874
- }
875
- ]
876
- }
877
- },
878
- {
879
- "name": "authority",
880
- "signer": true
881
- }
882
- ],
883
- "args": [
884
- {
885
- "name": "new_nonce",
886
- "type": "u64"
887
- }
888
- ]
889
- },
890
- {
891
- "name": "revert_universal_tx",
892
- "docs": [
893
- "@notice TSS-verified revert withdraw for SOL (EVM parity: `revertUniversalTx`)",
894
- "@param tx_id Transaction ID for tracking"
895
- ],
896
- "discriminator": [
897
- 124,
898
- 49,
899
- 81,
900
- 233,
901
- 23,
902
- 147,
903
- 82,
904
- 122
905
- ],
906
- "accounts": [
907
- {
908
- "name": "config",
909
- "pda": {
910
- "seeds": [
911
- {
912
- "kind": "const",
913
- "value": [
914
- 99,
915
- 111,
916
- 110,
917
- 102,
918
- 105,
919
- 103
920
- ]
921
- }
922
- ]
923
- }
924
- },
925
- {
926
- "name": "vault",
927
- "writable": true,
928
- "pda": {
929
- "seeds": [
930
- {
931
- "kind": "const",
932
- "value": [
933
- 118,
934
- 97,
935
- 117,
936
- 108,
937
- 116
938
- ]
939
- }
940
- ]
941
- }
942
- },
943
- {
944
- "name": "tss_pda",
945
- "writable": true,
946
- "pda": {
947
- "seeds": [
948
- {
949
- "kind": "const",
950
- "value": [
951
- 116,
952
- 115,
953
- 115,
954
- 112,
955
- 100,
956
- 97
957
- ]
958
- }
959
- ]
960
- }
961
- },
962
- {
963
- "name": "recipient",
964
- "writable": true
965
- },
966
- {
967
- "name": "executed_tx",
968
- "docs": [
969
- "Executed transaction tracker (EVM parity: isExecuted[txID])"
970
- ],
971
- "writable": true,
972
- "pda": {
973
- "seeds": [
974
- {
975
- "kind": "const",
976
- "value": [
977
- 101,
978
- 120,
979
- 101,
980
- 99,
981
- 117,
982
- 116,
983
- 101,
984
- 100,
985
- 95,
986
- 116,
987
- 120
988
- ]
989
- },
990
- {
991
- "kind": "arg",
992
- "path": "tx_id"
993
- }
979
+ "name": "sub_tx_id",
980
+ "type": {
981
+ "array": [
982
+ "u8",
983
+ 32
994
984
  ]
995
985
  }
996
986
  },
997
987
  {
998
- "name": "caller",
999
- "docs": [
1000
- "The caller/relayer who pays for the transaction (including executed_tx account creation)"
1001
- ],
1002
- "writable": true,
1003
- "signer": true
1004
- },
1005
- {
1006
- "name": "system_program",
1007
- "address": "11111111111111111111111111111111"
1008
- }
1009
- ],
1010
- "args": [
1011
- {
1012
- "name": "tx_id",
988
+ "name": "universal_tx_id",
1013
989
  "type": {
1014
990
  "array": [
1015
991
  "u8",
@@ -1054,231 +1030,15 @@
1054
1030
  32
1055
1031
  ]
1056
1032
  }
1057
- },
1058
- {
1059
- "name": "nonce",
1060
- "type": "u64"
1061
1033
  }
1062
1034
  ]
1063
1035
  },
1064
1036
  {
1065
- "name": "revert_universal_tx_token",
1037
+ "name": "send_universal_tx",
1066
1038
  "docs": [
1067
- "@notice TSS-verified revert withdraw for SPL tokens (EVM parity: `revertUniversalTxToken`)",
1068
- "@param tx_id Transaction ID for tracking"
1069
- ],
1070
- "discriminator": [
1071
- 139,
1072
- 196,
1073
- 1,
1074
- 242,
1075
- 109,
1076
- 31,
1077
- 98,
1078
- 32
1079
- ],
1080
- "accounts": [
1081
- {
1082
- "name": "config",
1083
- "pda": {
1084
- "seeds": [
1085
- {
1086
- "kind": "const",
1087
- "value": [
1088
- 99,
1089
- 111,
1090
- 110,
1091
- 102,
1092
- 105,
1093
- 103
1094
- ]
1095
- }
1096
- ]
1097
- }
1098
- },
1099
- {
1100
- "name": "whitelist"
1101
- },
1102
- {
1103
- "name": "vault",
1104
- "writable": true,
1105
- "pda": {
1106
- "seeds": [
1107
- {
1108
- "kind": "const",
1109
- "value": [
1110
- 118,
1111
- 97,
1112
- 117,
1113
- 108,
1114
- 116
1115
- ]
1116
- }
1117
- ]
1118
- }
1119
- },
1120
- {
1121
- "name": "token_vault",
1122
- "writable": true
1123
- },
1124
- {
1125
- "name": "tss_pda",
1126
- "writable": true,
1127
- "pda": {
1128
- "seeds": [
1129
- {
1130
- "kind": "const",
1131
- "value": [
1132
- 116,
1133
- 115,
1134
- 115,
1135
- 112,
1136
- 100,
1137
- 97
1138
- ]
1139
- }
1140
- ]
1141
- }
1142
- },
1143
- {
1144
- "name": "recipient_token_account",
1145
- "docs": [
1146
- "Recipient token account (ATA for fund_recipient + token_mint)"
1147
- ],
1148
- "writable": true
1149
- },
1150
- {
1151
- "name": "token_mint"
1152
- },
1153
- {
1154
- "name": "executed_tx",
1155
- "docs": [
1156
- "Executed transaction tracker (EVM parity: isExecuted[txID])"
1157
- ],
1158
- "writable": true,
1159
- "pda": {
1160
- "seeds": [
1161
- {
1162
- "kind": "const",
1163
- "value": [
1164
- 101,
1165
- 120,
1166
- 101,
1167
- 99,
1168
- 117,
1169
- 116,
1170
- 101,
1171
- 100,
1172
- 95,
1173
- 116,
1174
- 120
1175
- ]
1176
- },
1177
- {
1178
- "kind": "arg",
1179
- "path": "tx_id"
1180
- }
1181
- ]
1182
- }
1183
- },
1184
- {
1185
- "name": "caller",
1186
- "docs": [
1187
- "The caller/relayer who pays for the transaction (including executed_tx account creation)"
1188
- ],
1189
- "writable": true,
1190
- "signer": true
1191
- },
1192
- {
1193
- "name": "vault_sol",
1194
- "docs": [
1195
- "Vault SOL PDA (needed for gas_fee transfer to caller)"
1196
- ],
1197
- "writable": true,
1198
- "pda": {
1199
- "seeds": [
1200
- {
1201
- "kind": "const",
1202
- "value": [
1203
- 118,
1204
- 97,
1205
- 117,
1206
- 108,
1207
- 116
1208
- ]
1209
- }
1210
- ]
1211
- }
1212
- },
1213
- {
1214
- "name": "token_program",
1215
- "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
1216
- },
1217
- {
1218
- "name": "system_program",
1219
- "address": "11111111111111111111111111111111"
1220
- }
1221
- ],
1222
- "args": [
1223
- {
1224
- "name": "tx_id",
1225
- "type": {
1226
- "array": [
1227
- "u8",
1228
- 32
1229
- ]
1230
- }
1231
- },
1232
- {
1233
- "name": "amount",
1234
- "type": "u64"
1235
- },
1236
- {
1237
- "name": "revert_instruction",
1238
- "type": {
1239
- "defined": {
1240
- "name": "RevertInstructions"
1241
- }
1242
- }
1243
- },
1244
- {
1245
- "name": "gas_fee",
1246
- "type": "u64"
1247
- },
1248
- {
1249
- "name": "signature",
1250
- "type": {
1251
- "array": [
1252
- "u8",
1253
- 64
1254
- ]
1255
- }
1256
- },
1257
- {
1258
- "name": "recovery_id",
1259
- "type": "u8"
1260
- },
1261
- {
1262
- "name": "message_hash",
1263
- "type": {
1264
- "array": [
1265
- "u8",
1266
- 32
1267
- ]
1268
- }
1269
- },
1270
- {
1271
- "name": "nonce",
1272
- "type": "u64"
1273
- }
1274
- ]
1275
- },
1276
- {
1277
- "name": "send_universal_tx",
1278
- "docs": [
1279
- "@notice Universal transaction entrypoint with internal routing (EVM parity).",
1280
- "@dev Native amount parameter mirrors `msg.value` on EVM chains.",
1281
- "All routing (gas / funds / batching) is handled inside the deposit module."
1039
+ "@notice Universal transaction entrypoint with internal routing (EVM parity).",
1040
+ "@dev Native amount parameter mirrors `msg.value` on EVM chains.",
1041
+ "All routing (gas / funds / batching) is handled inside the deposit module."
1282
1042
  ],
1283
1043
  "discriminator": [
1284
1044
  145,
@@ -1286,287 +1046,13 @@
1286
1046
  164,
1287
1047
  55,
1288
1048
  165,
1289
- 220,
1290
- 23,
1291
- 97
1292
- ],
1293
- "accounts": [
1294
- {
1295
- "name": "config",
1296
- "writable": true,
1297
- "pda": {
1298
- "seeds": [
1299
- {
1300
- "kind": "const",
1301
- "value": [
1302
- 99,
1303
- 111,
1304
- 110,
1305
- 102,
1306
- 105,
1307
- 103
1308
- ]
1309
- }
1310
- ]
1311
- }
1312
- },
1313
- {
1314
- "name": "vault",
1315
- "writable": true,
1316
- "pda": {
1317
- "seeds": [
1318
- {
1319
- "kind": "const",
1320
- "value": [
1321
- 118,
1322
- 97,
1323
- 117,
1324
- 108,
1325
- 116
1326
- ]
1327
- }
1328
- ]
1329
- }
1330
- },
1331
- {
1332
- "name": "user_token_account",
1333
- "docs": [
1334
- "For native SOL routes, pass vault account as dummy (not used)."
1335
- ],
1336
- "writable": true
1337
- },
1338
- {
1339
- "name": "gateway_token_account",
1340
- "docs": [
1341
- "For native SOL routes, pass vault account as dummy (not used)."
1342
- ],
1343
- "writable": true
1344
- },
1345
- {
1346
- "name": "user",
1347
- "writable": true,
1348
- "signer": true
1349
- },
1350
- {
1351
- "name": "price_update"
1352
- },
1353
- {
1354
- "name": "rate_limit_config",
1355
- "docs": [
1356
- "Rate limit config - REQUIRED for universal entrypoint"
1357
- ],
1358
- "writable": true,
1359
- "pda": {
1360
- "seeds": [
1361
- {
1362
- "kind": "const",
1363
- "value": [
1364
- 114,
1365
- 97,
1366
- 116,
1367
- 101,
1368
- 95,
1369
- 108,
1370
- 105,
1371
- 109,
1372
- 105,
1373
- 116,
1374
- 95,
1375
- 99,
1376
- 111,
1377
- 110,
1378
- 102,
1379
- 105,
1380
- 103
1381
- ]
1382
- }
1383
- ]
1384
- }
1385
- },
1386
- {
1387
- "name": "token_rate_limit",
1388
- "docs": [
1389
- "Token rate limit - REQUIRED for universal entrypoint",
1390
- "NOTE: For native SOL, use Pubkey::default() as the token_mint when deriving this PDA"
1391
- ],
1392
- "writable": true
1393
- },
1394
- {
1395
- "name": "token_program",
1396
- "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
1397
- },
1398
- {
1399
- "name": "system_program",
1400
- "address": "11111111111111111111111111111111"
1401
- }
1402
- ],
1403
- "args": [
1404
- {
1405
- "name": "req",
1406
- "type": {
1407
- "defined": {
1408
- "name": "UniversalTxRequest"
1409
- }
1410
- }
1411
- },
1412
- {
1413
- "name": "native_amount",
1414
- "type": "u64"
1415
- }
1416
- ]
1417
- },
1418
- {
1419
- "name": "set_block_usd_cap",
1420
- "docs": [
1421
- "@notice Set block-based USD cap for rate limiting"
1422
- ],
1423
- "discriminator": [
1424
- 205,
1425
- 253,
1426
- 33,
1427
- 164,
1428
- 220,
1429
- 216,
1430
- 42,
1431
- 50
1432
- ],
1433
- "accounts": [
1434
- {
1435
- "name": "config",
1436
- "writable": true,
1437
- "pda": {
1438
- "seeds": [
1439
- {
1440
- "kind": "const",
1441
- "value": [
1442
- 99,
1443
- 111,
1444
- 110,
1445
- 102,
1446
- 105,
1447
- 103
1448
- ]
1449
- }
1450
- ]
1451
- }
1452
- },
1453
- {
1454
- "name": "rate_limit_config",
1455
- "writable": true,
1456
- "pda": {
1457
- "seeds": [
1458
- {
1459
- "kind": "const",
1460
- "value": [
1461
- 114,
1462
- 97,
1463
- 116,
1464
- 101,
1465
- 95,
1466
- 108,
1467
- 105,
1468
- 109,
1469
- 105,
1470
- 116,
1471
- 95,
1472
- 99,
1473
- 111,
1474
- 110,
1475
- 102,
1476
- 105,
1477
- 103
1478
- ]
1479
- }
1480
- ]
1481
- }
1482
- },
1483
- {
1484
- "name": "admin",
1485
- "writable": true,
1486
- "signer": true
1487
- },
1488
- {
1489
- "name": "system_program",
1490
- "address": "11111111111111111111111111111111"
1491
- }
1492
- ],
1493
- "args": [
1494
- {
1495
- "name": "block_usd_cap",
1496
- "type": "u128"
1497
- }
1498
- ]
1499
- },
1500
- {
1501
- "name": "set_caps_usd",
1502
- "docs": [
1503
- "@notice Set USD caps"
1504
- ],
1505
- "discriminator": [
1506
- 136,
1507
- 160,
1508
- 17,
1509
- 54,
1510
- 239,
1511
- 108,
1512
- 125,
1513
- 129
1514
- ],
1515
- "accounts": [
1516
- {
1517
- "name": "config",
1518
- "writable": true,
1519
- "pda": {
1520
- "seeds": [
1521
- {
1522
- "kind": "const",
1523
- "value": [
1524
- 99,
1525
- 111,
1526
- 110,
1527
- 102,
1528
- 105,
1529
- 103
1530
- ]
1531
- }
1532
- ]
1533
- }
1534
- },
1535
- {
1536
- "name": "admin",
1537
- "signer": true
1538
- }
1539
- ],
1540
- "args": [
1541
- {
1542
- "name": "min_cap",
1543
- "type": "u128"
1544
- },
1545
- {
1546
- "name": "max_cap",
1547
- "type": "u128"
1548
- }
1549
- ]
1550
- },
1551
- {
1552
- "name": "set_pyth_confidence_threshold",
1553
- "docs": [
1554
- "@notice Set Pyth confidence threshold"
1555
- ],
1556
- "discriminator": [
1557
- 213,
1558
- 69,
1559
- 242,
1560
- 123,
1561
- 122,
1562
- 165,
1563
- 125,
1564
- 21
1049
+ 220,
1050
+ 23,
1051
+ 97
1565
1052
  ],
1566
1053
  "accounts": [
1567
1054
  {
1568
1055
  "name": "config",
1569
- "writable": true,
1570
1056
  "pda": {
1571
1057
  "seeds": [
1572
1058
  {
@@ -1584,103 +1070,78 @@
1584
1070
  }
1585
1071
  },
1586
1072
  {
1587
- "name": "admin",
1588
- "signer": true
1589
- }
1590
- ],
1591
- "args": [
1592
- {
1593
- "name": "threshold",
1594
- "type": "u64"
1595
- }
1596
- ]
1597
- },
1598
- {
1599
- "name": "set_pyth_price_feed",
1600
- "docs": [
1601
- "@notice Set Pyth price feed"
1602
- ],
1603
- "discriminator": [
1604
- 202,
1605
- 185,
1606
- 109,
1607
- 150,
1608
- 255,
1609
- 130,
1610
- 210,
1611
- 208
1612
- ],
1613
- "accounts": [
1614
- {
1615
- "name": "config",
1073
+ "name": "vault",
1616
1074
  "writable": true,
1617
1075
  "pda": {
1618
1076
  "seeds": [
1619
1077
  {
1620
1078
  "kind": "const",
1621
1079
  "value": [
1622
- 99,
1623
- 111,
1624
- 110,
1625
- 102,
1626
- 105,
1627
- 103
1080
+ 118,
1081
+ 97,
1082
+ 117,
1083
+ 108,
1084
+ 116
1628
1085
  ]
1629
1086
  }
1630
1087
  ]
1631
1088
  }
1632
1089
  },
1633
1090
  {
1634
- "name": "admin",
1635
- "signer": true
1636
- }
1637
- ],
1638
- "args": [
1639
- {
1640
- "name": "price_feed",
1641
- "type": "pubkey"
1642
- }
1643
- ]
1644
- },
1645
- {
1646
- "name": "set_token_rate_limit",
1647
- "docs": [
1648
- "@notice Set token-specific rate limit threshold",
1649
- "@dev For batch operations, call this function multiple times in a single transaction.",
1650
- "This is the Solana-idiomatic approach and provides better type safety than using remaining_accounts."
1651
- ],
1652
- "discriminator": [
1653
- 67,
1654
- 225,
1655
- 226,
1656
- 248,
1657
- 119,
1658
- 98,
1659
- 18,
1660
- 68
1661
- ],
1662
- "accounts": [
1663
- {
1664
- "name": "config",
1091
+ "name": "fee_vault",
1092
+ "docs": [
1093
+ "Fee vault: receives the flat protocol fee per inbound tx.",
1094
+ "Separate from bridge vault to preserve the 1:1 bridge invariant."
1095
+ ],
1665
1096
  "writable": true,
1666
1097
  "pda": {
1667
1098
  "seeds": [
1668
1099
  {
1669
1100
  "kind": "const",
1670
1101
  "value": [
1671
- 99,
1672
- 111,
1673
- 110,
1674
1102
  102,
1675
- 105,
1676
- 103
1103
+ 101,
1104
+ 101,
1105
+ 95,
1106
+ 118,
1107
+ 97,
1108
+ 117,
1109
+ 108,
1110
+ 116
1677
1111
  ]
1678
1112
  }
1679
1113
  ]
1680
1114
  }
1681
1115
  },
1682
1116
  {
1683
- "name": "token_rate_limit",
1117
+ "name": "user_token_account",
1118
+ "docs": [
1119
+ "Only required for SPL token routes; can be omitted (pass null) on native SOL routes."
1120
+ ],
1121
+ "writable": true,
1122
+ "optional": true
1123
+ },
1124
+ {
1125
+ "name": "gateway_token_account",
1126
+ "docs": [
1127
+ "Only required for SPL token routes; can be omitted (pass null) on native SOL routes."
1128
+ ],
1129
+ "writable": true,
1130
+ "optional": true
1131
+ },
1132
+ {
1133
+ "name": "user",
1134
+ "writable": true,
1135
+ "signer": true
1136
+ },
1137
+ {
1138
+ "name": "price_update"
1139
+ },
1140
+ {
1141
+ "name": "rate_limit_config",
1142
+ "docs": [
1143
+ "Rate limit config - REQUIRED for universal entrypoint"
1144
+ ],
1684
1145
  "writable": true,
1685
1146
  "pda": {
1686
1147
  "seeds": [
@@ -1696,23 +1157,30 @@
1696
1157
  105,
1697
1158
  109,
1698
1159
  105,
1699
- 116
1160
+ 116,
1161
+ 95,
1162
+ 99,
1163
+ 111,
1164
+ 110,
1165
+ 102,
1166
+ 105,
1167
+ 103
1700
1168
  ]
1701
- },
1702
- {
1703
- "kind": "account",
1704
- "path": "token_mint"
1705
1169
  }
1706
1170
  ]
1707
1171
  }
1708
1172
  },
1709
1173
  {
1710
- "name": "token_mint"
1174
+ "name": "token_rate_limit",
1175
+ "docs": [
1176
+ "Token rate limit - REQUIRED for universal entrypoint",
1177
+ "NOTE: For native SOL, use Pubkey::default() as the token_mint when deriving this PDA"
1178
+ ],
1179
+ "writable": true
1711
1180
  },
1712
1181
  {
1713
- "name": "admin",
1714
- "writable": true,
1715
- "signer": true
1182
+ "name": "token_program",
1183
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
1716
1184
  },
1717
1185
  {
1718
1186
  "name": "system_program",
@@ -1721,25 +1189,33 @@
1721
1189
  ],
1722
1190
  "args": [
1723
1191
  {
1724
- "name": "limit_threshold",
1725
- "type": "u128"
1192
+ "name": "req",
1193
+ "type": {
1194
+ "defined": {
1195
+ "name": "UniversalTxRequest"
1196
+ }
1197
+ }
1198
+ },
1199
+ {
1200
+ "name": "native_amount",
1201
+ "type": "u64"
1726
1202
  }
1727
1203
  ]
1728
1204
  },
1729
1205
  {
1730
- "name": "unpause",
1206
+ "name": "set_authorities",
1731
1207
  "docs": [
1732
- "@notice Unpause the gateway"
1208
+ "@notice Update admin and/or pauser authority."
1733
1209
  ],
1734
1210
  "discriminator": [
1735
- 169,
1736
- 144,
1737
- 4,
1738
- 38,
1739
- 10,
1740
- 141,
1741
- 188,
1742
- 255
1211
+ 124,
1212
+ 254,
1213
+ 44,
1214
+ 240,
1215
+ 197,
1216
+ 70,
1217
+ 190,
1218
+ 107
1743
1219
  ],
1744
1220
  "accounts": [
1745
1221
  {
@@ -1762,26 +1238,39 @@
1762
1238
  }
1763
1239
  },
1764
1240
  {
1765
- "name": "pauser",
1241
+ "name": "admin",
1766
1242
  "signer": true
1767
1243
  }
1768
1244
  ],
1769
- "args": []
1245
+ "args": [
1246
+ {
1247
+ "name": "new_admin",
1248
+ "type": {
1249
+ "option": "pubkey"
1250
+ }
1251
+ },
1252
+ {
1253
+ "name": "new_pauser",
1254
+ "type": {
1255
+ "option": "pubkey"
1256
+ }
1257
+ }
1258
+ ]
1770
1259
  },
1771
1260
  {
1772
- "name": "update_epoch_duration",
1261
+ "name": "set_block_usd_cap",
1773
1262
  "docs": [
1774
- "@notice Update epoch duration for rate limiting"
1263
+ "@notice Set block-based USD cap for rate limiting"
1775
1264
  ],
1776
1265
  "discriminator": [
1777
- 145,
1778
- 173,
1779
- 2,
1780
- 249,
1781
- 226,
1782
- 157,
1783
- 29,
1784
- 104
1266
+ 205,
1267
+ 253,
1268
+ 33,
1269
+ 164,
1270
+ 220,
1271
+ 216,
1272
+ 42,
1273
+ 50
1785
1274
  ],
1786
1275
  "accounts": [
1787
1276
  {
@@ -1845,83 +1334,81 @@
1845
1334
  ],
1846
1335
  "args": [
1847
1336
  {
1848
- "name": "epoch_duration_sec",
1849
- "type": "u64"
1337
+ "name": "block_usd_cap",
1338
+ "type": "u128"
1850
1339
  }
1851
1340
  ]
1852
1341
  },
1853
1342
  {
1854
- "name": "update_tss",
1343
+ "name": "set_caps_usd",
1344
+ "docs": [
1345
+ "@notice Set USD caps"
1346
+ ],
1855
1347
  "discriminator": [
1856
- 227,
1857
1348
  136,
1858
- 3,
1859
- 242,
1860
- 177,
1861
- 168,
1862
- 10,
1863
- 160
1349
+ 160,
1350
+ 17,
1351
+ 54,
1352
+ 239,
1353
+ 108,
1354
+ 125,
1355
+ 129
1864
1356
  ],
1865
1357
  "accounts": [
1866
1358
  {
1867
- "name": "tss_pda",
1359
+ "name": "config",
1868
1360
  "writable": true,
1869
1361
  "pda": {
1870
1362
  "seeds": [
1871
1363
  {
1872
1364
  "kind": "const",
1873
1365
  "value": [
1874
- 116,
1875
- 115,
1876
- 115,
1877
- 112,
1878
- 100,
1879
- 97
1366
+ 99,
1367
+ 111,
1368
+ 110,
1369
+ 102,
1370
+ 105,
1371
+ 103
1880
1372
  ]
1881
1373
  }
1882
1374
  ]
1883
1375
  }
1884
1376
  },
1885
1377
  {
1886
- "name": "authority",
1378
+ "name": "admin",
1887
1379
  "signer": true
1888
1380
  }
1889
1381
  ],
1890
1382
  "args": [
1891
1383
  {
1892
- "name": "tss_eth_address",
1893
- "type": {
1894
- "array": [
1895
- "u8",
1896
- 20
1897
- ]
1898
- }
1384
+ "name": "min_cap",
1385
+ "type": "u128"
1899
1386
  },
1900
1387
  {
1901
- "name": "chain_id",
1902
- "type": "string"
1388
+ "name": "max_cap",
1389
+ "type": "u128"
1903
1390
  }
1904
1391
  ]
1905
1392
  },
1906
1393
  {
1907
- "name": "whitelist_token",
1394
+ "name": "set_protocol_fee",
1908
1395
  "docs": [
1909
- "@notice Whitelist a token"
1396
+ "@notice Set flat protocol fee (lamports) for inbound send_universal_tx.",
1397
+ "Not gated by `!config.paused` so the admin can disable fees during an emergency pause."
1910
1398
  ],
1911
1399
  "discriminator": [
1912
- 6,
1913
- 141,
1914
- 83,
1915
- 167,
1916
- 31,
1917
- 6,
1918
- 2,
1919
- 224
1400
+ 173,
1401
+ 239,
1402
+ 83,
1403
+ 242,
1404
+ 136,
1405
+ 43,
1406
+ 144,
1407
+ 217
1920
1408
  ],
1921
1409
  "accounts": [
1922
1410
  {
1923
1411
  "name": "config",
1924
- "writable": true,
1925
1412
  "pda": {
1926
1413
  "seeds": [
1927
1414
  {
@@ -1939,21 +1426,21 @@
1939
1426
  }
1940
1427
  },
1941
1428
  {
1942
- "name": "whitelist",
1429
+ "name": "fee_vault",
1943
1430
  "writable": true,
1944
1431
  "pda": {
1945
1432
  "seeds": [
1946
1433
  {
1947
1434
  "kind": "const",
1948
1435
  "value": [
1949
- 119,
1950
- 104,
1951
- 105,
1952
- 116,
1436
+ 102,
1953
1437
  101,
1438
+ 101,
1439
+ 95,
1440
+ 118,
1441
+ 97,
1442
+ 117,
1954
1443
  108,
1955
- 105,
1956
- 115,
1957
1444
  116
1958
1445
  ]
1959
1446
  }
@@ -1972,31 +1459,30 @@
1972
1459
  ],
1973
1460
  "args": [
1974
1461
  {
1975
- "name": "token",
1976
- "type": "pubkey"
1462
+ "name": "fee_lamports",
1463
+ "type": "u64"
1977
1464
  }
1978
1465
  ]
1979
1466
  },
1980
1467
  {
1981
- "name": "withdraw",
1468
+ "name": "set_pyth_confidence_threshold",
1982
1469
  "docs": [
1983
- "@notice TSS-verified withdraw of native SOL (EVM parity: `withdraw`)",
1984
- "@param tx_id Transaction ID for tracking",
1985
- "@param origin_caller Original caller on source chain (EVM address, 20 bytes)"
1470
+ "@notice Set Pyth confidence threshold"
1986
1471
  ],
1987
1472
  "discriminator": [
1988
- 183,
1989
- 18,
1990
- 70,
1991
- 156,
1992
- 148,
1993
- 109,
1994
- 161,
1995
- 34
1473
+ 213,
1474
+ 69,
1475
+ 242,
1476
+ 123,
1477
+ 122,
1478
+ 165,
1479
+ 125,
1480
+ 21
1996
1481
  ],
1997
1482
  "accounts": [
1998
1483
  {
1999
1484
  "name": "config",
1485
+ "writable": true,
2000
1486
  "pda": {
2001
1487
  "seeds": [
2002
1488
  {
@@ -2014,84 +1500,131 @@
2014
1500
  }
2015
1501
  },
2016
1502
  {
2017
- "name": "vault",
1503
+ "name": "admin",
1504
+ "signer": true
1505
+ }
1506
+ ],
1507
+ "args": [
1508
+ {
1509
+ "name": "threshold",
1510
+ "type": "u64"
1511
+ }
1512
+ ]
1513
+ },
1514
+ {
1515
+ "name": "set_pyth_price_feed",
1516
+ "docs": [
1517
+ "@notice Set Pyth price feed"
1518
+ ],
1519
+ "discriminator": [
1520
+ 202,
1521
+ 185,
1522
+ 109,
1523
+ 150,
1524
+ 255,
1525
+ 130,
1526
+ 210,
1527
+ 208
1528
+ ],
1529
+ "accounts": [
1530
+ {
1531
+ "name": "config",
2018
1532
  "writable": true,
2019
1533
  "pda": {
2020
1534
  "seeds": [
2021
1535
  {
2022
1536
  "kind": "const",
2023
1537
  "value": [
2024
- 118,
2025
- 97,
2026
- 117,
2027
- 108,
2028
- 116
1538
+ 99,
1539
+ 111,
1540
+ 110,
1541
+ 102,
1542
+ 105,
1543
+ 103
2029
1544
  ]
2030
1545
  }
2031
1546
  ]
2032
1547
  }
2033
1548
  },
2034
1549
  {
2035
- "name": "tss_pda",
1550
+ "name": "admin",
1551
+ "signer": true
1552
+ }
1553
+ ],
1554
+ "args": [
1555
+ {
1556
+ "name": "price_feed",
1557
+ "type": "pubkey"
1558
+ }
1559
+ ]
1560
+ },
1561
+ {
1562
+ "name": "set_token_rate_limit",
1563
+ "docs": [
1564
+ "@notice Set token-specific rate limit threshold"
1565
+ ],
1566
+ "discriminator": [
1567
+ 67,
1568
+ 225,
1569
+ 226,
1570
+ 248,
1571
+ 119,
1572
+ 98,
1573
+ 18,
1574
+ 68
1575
+ ],
1576
+ "accounts": [
1577
+ {
1578
+ "name": "config",
2036
1579
  "writable": true,
2037
1580
  "pda": {
2038
1581
  "seeds": [
2039
1582
  {
2040
1583
  "kind": "const",
2041
1584
  "value": [
2042
- 116,
2043
- 115,
2044
- 115,
2045
- 112,
2046
- 100,
2047
- 97
1585
+ 99,
1586
+ 111,
1587
+ 110,
1588
+ 102,
1589
+ 105,
1590
+ 103
2048
1591
  ]
2049
1592
  }
2050
1593
  ]
2051
1594
  }
2052
1595
  },
2053
1596
  {
2054
- "name": "recipient",
2055
- "writable": true
2056
- },
2057
- {
2058
- "name": "executed_tx",
2059
- "docs": [
2060
- "Executed transaction tracker (EVM parity: isExecuted[txID])",
2061
- "PDA: [b\"executed_tx\", tx_id] - account existence = transaction executed",
2062
- "Standard Solana pattern (equivalent to Solidity mapping(bytes32 => bool))"
2063
- ],
1597
+ "name": "token_rate_limit",
2064
1598
  "writable": true,
2065
1599
  "pda": {
2066
1600
  "seeds": [
2067
1601
  {
2068
1602
  "kind": "const",
2069
1603
  "value": [
2070
- 101,
2071
- 120,
2072
- 101,
2073
- 99,
2074
- 117,
1604
+ 114,
1605
+ 97,
2075
1606
  116,
2076
1607
  101,
2077
- 100,
2078
1608
  95,
2079
- 116,
2080
- 120
1609
+ 108,
1610
+ 105,
1611
+ 109,
1612
+ 105,
1613
+ 116
2081
1614
  ]
2082
1615
  },
2083
1616
  {
2084
- "kind": "arg",
2085
- "path": "tx_id"
1617
+ "kind": "account",
1618
+ "path": "token_mint"
2086
1619
  }
2087
1620
  ]
2088
1621
  }
2089
1622
  },
2090
1623
  {
2091
- "name": "caller",
2092
- "docs": [
2093
- "The caller/relayer who pays for the transaction (including executed_tx account creation)"
2094
- ],
1624
+ "name": "token_mint"
1625
+ },
1626
+ {
1627
+ "name": "admin",
2095
1628
  "writable": true,
2096
1629
  "signer": true
2097
1630
  },
@@ -2102,79 +1635,30 @@
2102
1635
  ],
2103
1636
  "args": [
2104
1637
  {
2105
- "name": "tx_id",
2106
- "type": {
2107
- "array": [
2108
- "u8",
2109
- 32
2110
- ]
2111
- }
2112
- },
2113
- {
2114
- "name": "origin_caller",
2115
- "type": {
2116
- "array": [
2117
- "u8",
2118
- 20
2119
- ]
2120
- }
2121
- },
2122
- {
2123
- "name": "amount",
2124
- "type": "u64"
2125
- },
2126
- {
2127
- "name": "gas_fee",
2128
- "type": "u64"
2129
- },
2130
- {
2131
- "name": "signature",
2132
- "type": {
2133
- "array": [
2134
- "u8",
2135
- 64
2136
- ]
2137
- }
2138
- },
2139
- {
2140
- "name": "recovery_id",
2141
- "type": "u8"
2142
- },
2143
- {
2144
- "name": "message_hash",
2145
- "type": {
2146
- "array": [
2147
- "u8",
2148
- 32
2149
- ]
2150
- }
2151
- },
2152
- {
2153
- "name": "nonce",
2154
- "type": "u64"
1638
+ "name": "limit_threshold",
1639
+ "type": "u128"
2155
1640
  }
2156
1641
  ]
2157
1642
  },
2158
1643
  {
2159
- "name": "withdraw_funds",
1644
+ "name": "unpause",
2160
1645
  "docs": [
2161
- "@notice TSS-verified withdraw of SPL tokens (EVM parity: `withdrawFunds`)",
2162
- "@param tx_id Transaction ID for tracking",
2163
- "@param origin_caller Original caller on source chain (EVM address, 20 bytes)"
1646
+ "@notice Unpause the gateway"
2164
1647
  ],
2165
1648
  "discriminator": [
2166
- 241,
2167
- 36,
2168
- 29,
2169
- 111,
2170
- 208,
2171
- 31,
2172
- 104,
2173
- 217
1649
+ 169,
1650
+ 144,
1651
+ 4,
1652
+ 38,
1653
+ 10,
1654
+ 141,
1655
+ 188,
1656
+ 255
2174
1657
  ],
2175
1658
  "accounts": [
2176
1659
  {
2177
1660
  "name": "config",
1661
+ "writable": true,
2178
1662
  "pda": {
2179
1663
  "seeds": [
2180
1664
  {
@@ -2192,137 +1676,155 @@
2192
1676
  }
2193
1677
  },
2194
1678
  {
2195
- "name": "whitelist"
2196
- },
1679
+ "name": "pauser",
1680
+ "signer": true
1681
+ }
1682
+ ],
1683
+ "args": []
1684
+ },
1685
+ {
1686
+ "name": "update_epoch_duration",
1687
+ "docs": [
1688
+ "@notice Update epoch duration for rate limiting"
1689
+ ],
1690
+ "discriminator": [
1691
+ 145,
1692
+ 173,
1693
+ 2,
1694
+ 249,
1695
+ 226,
1696
+ 157,
1697
+ 29,
1698
+ 104
1699
+ ],
1700
+ "accounts": [
2197
1701
  {
2198
- "name": "vault",
1702
+ "name": "config",
2199
1703
  "writable": true,
2200
1704
  "pda": {
2201
1705
  "seeds": [
2202
1706
  {
2203
1707
  "kind": "const",
2204
1708
  "value": [
2205
- 118,
2206
- 97,
2207
- 117,
2208
- 108,
2209
- 116
1709
+ 99,
1710
+ 111,
1711
+ 110,
1712
+ 102,
1713
+ 105,
1714
+ 103
2210
1715
  ]
2211
1716
  }
2212
1717
  ]
2213
1718
  }
2214
1719
  },
2215
1720
  {
2216
- "name": "token_vault",
2217
- "writable": true
2218
- },
2219
- {
2220
- "name": "tss_pda",
1721
+ "name": "rate_limit_config",
2221
1722
  "writable": true,
2222
1723
  "pda": {
2223
1724
  "seeds": [
2224
1725
  {
2225
1726
  "kind": "const",
2226
1727
  "value": [
1728
+ 114,
1729
+ 97,
2227
1730
  116,
2228
- 115,
2229
- 115,
2230
- 112,
2231
- 100,
2232
- 97
1731
+ 101,
1732
+ 95,
1733
+ 108,
1734
+ 105,
1735
+ 109,
1736
+ 105,
1737
+ 116,
1738
+ 95,
1739
+ 99,
1740
+ 111,
1741
+ 110,
1742
+ 102,
1743
+ 105,
1744
+ 103
2233
1745
  ]
2234
1746
  }
2235
1747
  ]
2236
1748
  }
2237
1749
  },
2238
1750
  {
2239
- "name": "recipient_token_account",
2240
- "writable": true
1751
+ "name": "admin",
1752
+ "writable": true,
1753
+ "signer": true
2241
1754
  },
2242
1755
  {
2243
- "name": "token_mint"
2244
- },
1756
+ "name": "system_program",
1757
+ "address": "11111111111111111111111111111111"
1758
+ }
1759
+ ],
1760
+ "args": [
2245
1761
  {
2246
- "name": "executed_tx",
2247
- "docs": [
2248
- "Executed transaction tracker (EVM parity: isExecuted[txID])"
2249
- ],
1762
+ "name": "epoch_duration_sec",
1763
+ "type": "u64"
1764
+ }
1765
+ ]
1766
+ },
1767
+ {
1768
+ "name": "update_tss",
1769
+ "discriminator": [
1770
+ 227,
1771
+ 136,
1772
+ 3,
1773
+ 242,
1774
+ 177,
1775
+ 168,
1776
+ 10,
1777
+ 160
1778
+ ],
1779
+ "accounts": [
1780
+ {
1781
+ "name": "tss_pda",
2250
1782
  "writable": true,
2251
1783
  "pda": {
2252
1784
  "seeds": [
2253
1785
  {
2254
1786
  "kind": "const",
2255
1787
  "value": [
2256
- 101,
2257
- 120,
2258
- 101,
2259
- 99,
2260
- 117,
2261
1788
  116,
2262
- 101,
1789
+ 115,
1790
+ 115,
1791
+ 112,
2263
1792
  100,
1793
+ 97,
2264
1794
  95,
2265
- 116,
2266
- 120
1795
+ 118,
1796
+ 50
2267
1797
  ]
2268
- },
2269
- {
2270
- "kind": "arg",
2271
- "path": "tx_id"
2272
1798
  }
2273
1799
  ]
2274
1800
  }
2275
1801
  },
2276
1802
  {
2277
- "name": "caller",
2278
- "docs": [
2279
- "The caller/relayer who pays for the transaction (including executed_tx account creation)"
2280
- ],
2281
- "writable": true,
2282
- "signer": true
2283
- },
2284
- {
2285
- "name": "vault_sol",
2286
- "docs": [
2287
- "Vault SOL PDA (needed for gas_fee transfer to caller)"
2288
- ],
2289
- "writable": true,
1803
+ "name": "config",
2290
1804
  "pda": {
2291
1805
  "seeds": [
2292
1806
  {
2293
1807
  "kind": "const",
2294
1808
  "value": [
2295
- 118,
2296
- 97,
2297
- 117,
2298
- 108,
2299
- 116
1809
+ 99,
1810
+ 111,
1811
+ 110,
1812
+ 102,
1813
+ 105,
1814
+ 103
2300
1815
  ]
2301
1816
  }
2302
1817
  ]
2303
1818
  }
2304
1819
  },
2305
1820
  {
2306
- "name": "token_program",
2307
- "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
2308
- },
2309
- {
2310
- "name": "system_program",
2311
- "address": "11111111111111111111111111111111"
1821
+ "name": "authority",
1822
+ "signer": true
2312
1823
  }
2313
1824
  ],
2314
1825
  "args": [
2315
1826
  {
2316
- "name": "tx_id",
2317
- "type": {
2318
- "array": [
2319
- "u8",
2320
- 32
2321
- ]
2322
- }
2323
- },
2324
- {
2325
- "name": "origin_caller",
1827
+ "name": "tss_eth_address",
2326
1828
  "type": {
2327
1829
  "array": [
2328
1830
  "u8",
@@ -2331,38 +1833,8 @@
2331
1833
  }
2332
1834
  },
2333
1835
  {
2334
- "name": "amount",
2335
- "type": "u64"
2336
- },
2337
- {
2338
- "name": "gas_fee",
2339
- "type": "u64"
2340
- },
2341
- {
2342
- "name": "signature",
2343
- "type": {
2344
- "array": [
2345
- "u8",
2346
- 64
2347
- ]
2348
- }
2349
- },
2350
- {
2351
- "name": "recovery_id",
2352
- "type": "u8"
2353
- },
2354
- {
2355
- "name": "message_hash",
2356
- "type": {
2357
- "array": [
2358
- "u8",
2359
- 32
2360
- ]
2361
- }
2362
- },
2363
- {
2364
- "name": "nonce",
2365
- "type": "u64"
1836
+ "name": "chain_id",
1837
+ "type": "string"
2366
1838
  }
2367
1839
  ]
2368
1840
  }
@@ -2382,16 +1854,29 @@
2382
1854
  ]
2383
1855
  },
2384
1856
  {
2385
- "name": "ExecutedTx",
1857
+ "name": "ExecutedSubTx",
2386
1858
  "discriminator": [
2387
- 57,
1859
+ 221,
2388
1860
  204,
2389
- 8,
2390
- 150,
2391
- 49,
2392
- 18,
2393
- 183,
2394
- 38
1861
+ 118,
1862
+ 83,
1863
+ 194,
1864
+ 194,
1865
+ 141,
1866
+ 237
1867
+ ]
1868
+ },
1869
+ {
1870
+ "name": "FeeVault",
1871
+ "discriminator": [
1872
+ 192,
1873
+ 178,
1874
+ 69,
1875
+ 232,
1876
+ 58,
1877
+ 149,
1878
+ 157,
1879
+ 132
2395
1880
  ]
2396
1881
  },
2397
1882
  {
@@ -2433,19 +1918,6 @@
2433
1918
  97
2434
1919
  ]
2435
1920
  },
2436
- {
2437
- "name": "TokenWhitelist",
2438
- "discriminator": [
2439
- 105,
2440
- 240,
2441
- 104,
2442
- 47,
2443
- 95,
2444
- 13,
2445
- 48,
2446
- 78
2447
- ]
2448
- },
2449
1921
  {
2450
1922
  "name": "TssPda",
2451
1923
  "discriminator": [
@@ -2500,6 +1972,58 @@
2500
1972
  129
2501
1973
  ]
2502
1974
  },
1975
+ {
1976
+ "name": "FundsRescued",
1977
+ "discriminator": [
1978
+ 159,
1979
+ 37,
1980
+ 6,
1981
+ 93,
1982
+ 98,
1983
+ 122,
1984
+ 176,
1985
+ 210
1986
+ ]
1987
+ },
1988
+ {
1989
+ "name": "ProtocolFeeCollected",
1990
+ "discriminator": [
1991
+ 149,
1992
+ 0,
1993
+ 167,
1994
+ 154,
1995
+ 105,
1996
+ 146,
1997
+ 209,
1998
+ 134
1999
+ ]
2000
+ },
2001
+ {
2002
+ "name": "ProtocolFeeReimbursed",
2003
+ "discriminator": [
2004
+ 109,
2005
+ 145,
2006
+ 191,
2007
+ 216,
2008
+ 237,
2009
+ 169,
2010
+ 121,
2011
+ 222
2012
+ ]
2013
+ },
2014
+ {
2015
+ "name": "ProtocolFeeUpdated",
2016
+ "discriminator": [
2017
+ 172,
2018
+ 56,
2019
+ 83,
2020
+ 113,
2021
+ 219,
2022
+ 69,
2023
+ 69,
2024
+ 105
2025
+ ]
2026
+ },
2503
2027
  {
2504
2028
  "name": "RevertUniversalTx",
2505
2029
  "discriminator": [
@@ -2513,19 +2037,6 @@
2513
2037
  186
2514
2038
  ]
2515
2039
  },
2516
- {
2517
- "name": "TSSAddressUpdated",
2518
- "discriminator": [
2519
- 157,
2520
- 148,
2521
- 149,
2522
- 250,
2523
- 42,
2524
- 118,
2525
- 17,
2526
- 232
2527
- ]
2528
- },
2529
2040
  {
2530
2041
  "name": "TokenRateLimitUpdated",
2531
2042
  "discriminator": [
@@ -2553,207 +2064,164 @@
2553
2064
  ]
2554
2065
  },
2555
2066
  {
2556
- "name": "UniversalTxExecuted",
2067
+ "name": "UniversalTxFinalized",
2557
2068
  "discriminator": [
2558
- 85,
2559
- 124,
2560
- 2,
2561
- 217,
2069
+ 179,
2070
+ 64,
2071
+ 150,
2562
2072
  112,
2563
- 75,
2564
- 63,
2565
- 203
2566
- ]
2567
- },
2568
- {
2569
- "name": "WithdrawToken",
2570
- "discriminator": [
2571
- 65,
2572
- 183,
2573
- 107,
2574
- 32,
2575
- 149,
2576
- 183,
2577
- 215,
2578
- 129
2073
+ 117,
2074
+ 140,
2075
+ 156,
2076
+ 37
2579
2077
  ]
2580
2078
  }
2581
2079
  ],
2582
2080
  "errors": [
2583
2081
  {
2584
2082
  "code": 6000,
2585
- "name": "PausedError",
2586
- "msg": "Contract is paused"
2587
- },
2588
- {
2589
- "code": 6001,
2590
2083
  "name": "Unauthorized",
2591
2084
  "msg": "Unauthorized access"
2592
2085
  },
2593
2086
  {
2594
- "code": 6002,
2087
+ "code": 6001,
2595
2088
  "name": "InvalidAmount",
2596
2089
  "msg": "Invalid amount"
2597
2090
  },
2598
2091
  {
2599
- "code": 6003,
2092
+ "code": 6002,
2600
2093
  "name": "InvalidRecipient",
2601
2094
  "msg": "Invalid recipient"
2602
2095
  },
2603
2096
  {
2604
- "code": 6004,
2097
+ "code": 6003,
2605
2098
  "name": "BelowMinCap",
2606
2099
  "msg": "Amount below minimum cap"
2607
2100
  },
2608
2101
  {
2609
- "code": 6005,
2102
+ "code": 6004,
2610
2103
  "name": "AboveMaxCap",
2611
2104
  "msg": "Amount above maximum cap"
2612
2105
  },
2613
2106
  {
2614
- "code": 6006,
2107
+ "code": 6005,
2615
2108
  "name": "ZeroAddress",
2616
2109
  "msg": "Zero address not allowed"
2617
2110
  },
2618
2111
  {
2619
- "code": 6007,
2620
- "name": "InvalidCapRange",
2621
- "msg": "Invalid cap range"
2622
- },
2623
- {
2624
- "code": 6008,
2625
- "name": "InvalidPrice",
2626
- "msg": "Invalid price data"
2627
- },
2628
- {
2629
- "code": 6009,
2630
- "name": "TokenAlreadyWhitelisted",
2631
- "msg": "Token already whitelisted"
2112
+ "code": 6006,
2113
+ "name": "InvalidCapRange",
2114
+ "msg": "Invalid cap range"
2632
2115
  },
2633
2116
  {
2634
- "code": 6010,
2635
- "name": "TokenNotWhitelisted",
2636
- "msg": "Token not whitelisted"
2117
+ "code": 6007,
2118
+ "name": "InvalidPrice",
2119
+ "msg": "Invalid price data"
2637
2120
  },
2638
2121
  {
2639
- "code": 6011,
2122
+ "code": 6008,
2640
2123
  "name": "InvalidOwner",
2641
2124
  "msg": "Invalid owner"
2642
2125
  },
2643
2126
  {
2644
- "code": 6012,
2127
+ "code": 6009,
2645
2128
  "name": "Paused",
2646
2129
  "msg": "Contract is paused"
2647
2130
  },
2648
2131
  {
2649
- "code": 6013,
2132
+ "code": 6010,
2650
2133
  "name": "InvalidInput",
2651
2134
  "msg": "Invalid input"
2652
2135
  },
2653
2136
  {
2654
- "code": 6014,
2137
+ "code": 6011,
2655
2138
  "name": "InvalidTxType",
2656
2139
  "msg": "Invalid transaction type"
2657
2140
  },
2658
2141
  {
2659
- "code": 6015,
2142
+ "code": 6012,
2660
2143
  "name": "InvalidMint",
2661
2144
  "msg": "Invalid mint"
2662
2145
  },
2663
2146
  {
2664
- "code": 6016,
2147
+ "code": 6013,
2665
2148
  "name": "InsufficientBalance",
2666
2149
  "msg": "Insufficient balance"
2667
2150
  },
2668
2151
  {
2669
- "code": 6017,
2152
+ "code": 6014,
2670
2153
  "name": "InvalidToken",
2671
2154
  "msg": "Invalid token"
2672
2155
  },
2673
2156
  {
2674
- "code": 6018,
2157
+ "code": 6015,
2675
2158
  "name": "BlockUsdCapExceeded",
2676
2159
  "msg": "Block USD cap exceeded"
2677
2160
  },
2678
2161
  {
2679
- "code": 6019,
2162
+ "code": 6016,
2680
2163
  "name": "RateLimitExceeded",
2681
2164
  "msg": "Rate limit exceeded"
2682
2165
  },
2683
2166
  {
2684
- "code": 6020,
2167
+ "code": 6017,
2685
2168
  "name": "InvalidAccount",
2686
2169
  "msg": "Invalid account"
2687
2170
  },
2688
2171
  {
2689
- "code": 6021,
2172
+ "code": 6018,
2690
2173
  "name": "NotSupported",
2691
2174
  "msg": "Token not supported"
2692
2175
  },
2693
2176
  {
2694
- "code": 6022,
2177
+ "code": 6019,
2695
2178
  "name": "MessageHashMismatch",
2696
2179
  "msg": "Message hash mismatch"
2697
2180
  },
2698
2181
  {
2699
- "code": 6023,
2182
+ "code": 6020,
2700
2183
  "name": "TssAuthFailed",
2701
2184
  "msg": "TSS authentication failed"
2702
2185
  },
2703
2186
  {
2704
- "code": 6024,
2705
- "name": "NonceMismatch",
2706
- "msg": "Nonce mismatch"
2707
- },
2708
- {
2709
- "code": 6025,
2187
+ "code": 6021,
2710
2188
  "name": "AccountListLengthMismatch",
2711
2189
  "msg": "Account list length mismatch"
2712
2190
  },
2713
2191
  {
2714
- "code": 6026,
2192
+ "code": 6022,
2715
2193
  "name": "AccountPubkeyMismatch",
2716
2194
  "msg": "Account pubkey mismatch"
2717
2195
  },
2718
2196
  {
2719
- "code": 6027,
2197
+ "code": 6023,
2720
2198
  "name": "AccountWritableFlagMismatch",
2721
2199
  "msg": "Account writable flag mismatch"
2722
2200
  },
2723
2201
  {
2724
- "code": 6028,
2202
+ "code": 6024,
2725
2203
  "name": "UnexpectedOuterSigner",
2726
2204
  "msg": "Unexpected outer signer in remaining accounts"
2727
2205
  },
2728
2206
  {
2729
- "code": 6029,
2730
- "name": "TargetProgramMismatch",
2731
- "msg": "Target program mismatch"
2732
- },
2733
- {
2734
- "code": 6030,
2207
+ "code": 6025,
2735
2208
  "name": "InvalidProgram",
2736
2209
  "msg": "Destination program is not executable"
2737
2210
  },
2738
2211
  {
2739
- "code": 6031,
2740
- "name": "PayloadExecuted",
2741
- "msg": "Payload already executed"
2742
- },
2743
- {
2744
- "code": 6032,
2745
- "name": "SerializationError",
2746
- "msg": "Serialization error"
2212
+ "code": 6026,
2213
+ "name": "InvalidInstruction",
2214
+ "msg": "Invalid instruction"
2747
2215
  },
2748
2216
  {
2749
- "code": 6033,
2750
- "name": "NoWritableRecipient",
2751
- "msg": "No writable recipient found in accounts"
2217
+ "code": 6027,
2218
+ "name": "InsufficientProtocolFee",
2219
+ "msg": "Insufficient protocol fee"
2752
2220
  },
2753
2221
  {
2754
- "code": 6034,
2755
- "name": "InvalidInstruction",
2756
- "msg": "Invalid instruction"
2222
+ "code": 6028,
2223
+ "name": "InsufficientFeePool",
2224
+ "msg": "Fee vault has insufficient balance to reimburse relayer"
2757
2225
  }
2758
2226
  ],
2759
2227
  "types": [
@@ -2800,6 +2268,10 @@
2800
2268
  },
2801
2269
  {
2802
2270
  "name": "tss_address",
2271
+ "docs": [
2272
+ "Legacy field — reserved for account layout compatibility.",
2273
+ "Cannot be removed without a migration because it is part of the deployed on-chain layout."
2274
+ ],
2803
2275
  "type": "pubkey"
2804
2276
  },
2805
2277
  {
@@ -2869,10 +2341,10 @@
2869
2341
  }
2870
2342
  },
2871
2343
  {
2872
- "name": "ExecutedTx",
2344
+ "name": "ExecutedSubTx",
2873
2345
  "docs": [
2874
- "Executed transaction tracker (parity with EVM `isExecuted[txID]` mapping).",
2875
- "PDA: `[b\"executed_tx\", tx_id]`.",
2346
+ "Executed transaction tracker (parity with EVM `isExecuted[subTxID]` mapping).",
2347
+ "PDA: `[b\"executed_sub_tx\", sub_tx_id]`.",
2876
2348
  "Account existence = transaction executed (replay protection via `init` constraint)."
2877
2349
  ],
2878
2350
  "type": {
@@ -2881,21 +2353,68 @@
2881
2353
  }
2882
2354
  },
2883
2355
  {
2884
- "name": "GatewayAccountMeta",
2356
+ "name": "FeeVault",
2357
+ "docs": [
2358
+ "Fee vault: holds protocol fee lamports and the per-tx fee config.",
2359
+ "PDA: `[b\"fee_vault\"]`.",
2360
+ "Lamports above rent-exempt minimum = spendable relayer reimbursement pool.",
2361
+ "Vault (bridge funds) is never touched by fee logic — 1:1 invariant is structurally enforced."
2362
+ ],
2363
+ "type": {
2364
+ "kind": "struct",
2365
+ "fields": [
2366
+ {
2367
+ "name": "protocol_fee_lamports",
2368
+ "type": "u64"
2369
+ },
2370
+ {
2371
+ "name": "bump",
2372
+ "type": "u8"
2373
+ }
2374
+ ]
2375
+ }
2376
+ },
2377
+ {
2378
+ "name": "FundsRescued",
2885
2379
  "docs": [
2886
- "Account metadata for execute messages (no isSigner in payload).",
2887
- "Off-chain builds this from target instruction's account list."
2380
+ "Emitted when locked funds are rescued back to recipient via TSS-verified rescue instruction."
2888
2381
  ],
2889
2382
  "type": {
2890
2383
  "kind": "struct",
2891
2384
  "fields": [
2892
2385
  {
2893
- "name": "pubkey",
2386
+ "name": "sub_tx_id",
2387
+ "type": {
2388
+ "array": [
2389
+ "u8",
2390
+ 32
2391
+ ]
2392
+ }
2393
+ },
2394
+ {
2395
+ "name": "universal_tx_id",
2396
+ "type": {
2397
+ "array": [
2398
+ "u8",
2399
+ 32
2400
+ ]
2401
+ }
2402
+ },
2403
+ {
2404
+ "name": "token",
2894
2405
  "type": "pubkey"
2895
2406
  },
2896
2407
  {
2897
- "name": "is_writable",
2898
- "type": "bool"
2408
+ "name": "amount",
2409
+ "type": "u64"
2410
+ },
2411
+ {
2412
+ "name": "revert_instruction",
2413
+ "type": {
2414
+ "defined": {
2415
+ "name": "RevertInstructions"
2416
+ }
2417
+ }
2899
2418
  }
2900
2419
  ]
2901
2420
  }
@@ -3032,6 +2551,67 @@
3032
2551
  ]
3033
2552
  }
3034
2553
  },
2554
+ {
2555
+ "name": "ProtocolFeeCollected",
2556
+ "type": {
2557
+ "kind": "struct",
2558
+ "fields": [
2559
+ {
2560
+ "name": "payer",
2561
+ "type": "pubkey"
2562
+ },
2563
+ {
2564
+ "name": "amount_lamports",
2565
+ "type": "u64"
2566
+ },
2567
+ {
2568
+ "name": "native_amount_before",
2569
+ "type": "u64"
2570
+ },
2571
+ {
2572
+ "name": "native_amount_after",
2573
+ "type": "u64"
2574
+ }
2575
+ ]
2576
+ }
2577
+ },
2578
+ {
2579
+ "name": "ProtocolFeeReimbursed",
2580
+ "type": {
2581
+ "kind": "struct",
2582
+ "fields": [
2583
+ {
2584
+ "name": "sub_tx_id",
2585
+ "type": {
2586
+ "array": [
2587
+ "u8",
2588
+ 32
2589
+ ]
2590
+ }
2591
+ },
2592
+ {
2593
+ "name": "relayer",
2594
+ "type": "pubkey"
2595
+ },
2596
+ {
2597
+ "name": "amount_lamports",
2598
+ "type": "u64"
2599
+ }
2600
+ ]
2601
+ }
2602
+ },
2603
+ {
2604
+ "name": "ProtocolFeeUpdated",
2605
+ "type": {
2606
+ "kind": "struct",
2607
+ "fields": [
2608
+ {
2609
+ "name": "new_fee_lamports",
2610
+ "type": "u64"
2611
+ }
2612
+ ]
2613
+ }
2614
+ },
3035
2615
  {
3036
2616
  "name": "RateLimitConfig",
3037
2617
  "docs": [
@@ -3073,7 +2653,7 @@
3073
2653
  "kind": "struct",
3074
2654
  "fields": [
3075
2655
  {
3076
- "name": "fund_recipient",
2656
+ "name": "revert_recipient",
3077
2657
  "type": "pubkey"
3078
2658
  },
3079
2659
  {
@@ -3092,7 +2672,16 @@
3092
2672
  "kind": "struct",
3093
2673
  "fields": [
3094
2674
  {
3095
- "name": "tx_id",
2675
+ "name": "sub_tx_id",
2676
+ "type": {
2677
+ "array": [
2678
+ "u8",
2679
+ 32
2680
+ ]
2681
+ }
2682
+ },
2683
+ {
2684
+ "name": "universal_tx_id",
3096
2685
  "type": {
3097
2686
  "array": [
3098
2687
  "u8",
@@ -3101,7 +2690,7 @@
3101
2690
  }
3102
2691
  },
3103
2692
  {
3104
- "name": "fund_recipient",
2693
+ "name": "revert_recipient",
3105
2694
  "type": "pubkey"
3106
2695
  },
3107
2696
  {
@@ -3123,22 +2712,6 @@
3123
2712
  ]
3124
2713
  }
3125
2714
  },
3126
- {
3127
- "name": "TSSAddressUpdated",
3128
- "type": {
3129
- "kind": "struct",
3130
- "fields": [
3131
- {
3132
- "name": "old_tss",
3133
- "type": "pubkey"
3134
- },
3135
- {
3136
- "name": "new_tss",
3137
- "type": "pubkey"
3138
- }
3139
- ]
3140
- }
3141
- },
3142
2715
  {
3143
2716
  "name": "TokenRateLimit",
3144
2717
  "docs": [
@@ -3187,33 +2760,11 @@
3187
2760
  ]
3188
2761
  }
3189
2762
  },
3190
- {
3191
- "name": "TokenWhitelist",
3192
- "docs": [
3193
- "SPL token whitelist state.",
3194
- "PDA: `[b\"whitelist\"]`. Simple list of supported SPL mints."
3195
- ],
3196
- "type": {
3197
- "kind": "struct",
3198
- "fields": [
3199
- {
3200
- "name": "tokens",
3201
- "type": {
3202
- "vec": "pubkey"
3203
- }
3204
- },
3205
- {
3206
- "name": "bump",
3207
- "type": "u8"
3208
- }
3209
- ]
3210
- }
3211
- },
3212
2763
  {
3213
2764
  "name": "TssPda",
3214
2765
  "docs": [
3215
2766
  "TSS state PDA for ECDSA verification (Ethereum-style secp256k1).",
3216
- "Stores 20-byte ETH address, chain id (Solana cluster pubkey as String), and replay-protection nonce."
2767
+ "Stores 20-byte ETH address and chain id (Solana cluster pubkey as String)."
3217
2768
  ],
3218
2769
  "type": {
3219
2770
  "kind": "struct",
@@ -3231,12 +2782,12 @@
3231
2782
  "name": "chain_id",
3232
2783
  "type": "string"
3233
2784
  },
3234
- {
3235
- "name": "nonce",
3236
- "type": "u64"
3237
- },
3238
2785
  {
3239
2786
  "name": "authority",
2787
+ "docs": [
2788
+ "Legacy field — set at init_tss but no longer used for authorization.",
2789
+ "update_tss now checks config.admin. Kept for account layout compatibility."
2790
+ ],
3240
2791
  "type": "pubkey"
3241
2792
  },
3242
2793
  {
@@ -3305,12 +2856,8 @@
3305
2856
  "type": "bytes"
3306
2857
  },
3307
2858
  {
3308
- "name": "revert_instruction",
3309
- "type": {
3310
- "defined": {
3311
- "name": "RevertInstructions"
3312
- }
3313
- }
2859
+ "name": "revert_recipient",
2860
+ "type": "pubkey"
3314
2861
  },
3315
2862
  {
3316
2863
  "name": "tx_type",
@@ -3323,20 +2870,24 @@
3323
2870
  {
3324
2871
  "name": "signature_data",
3325
2872
  "type": "bytes"
2873
+ },
2874
+ {
2875
+ "name": "from_cea",
2876
+ "type": "bool"
3326
2877
  }
3327
2878
  ]
3328
2879
  }
3329
2880
  },
3330
2881
  {
3331
- "name": "UniversalTxExecuted",
2882
+ "name": "UniversalTxFinalized",
3332
2883
  "docs": [
3333
- "Execute event (parity with EVM `UniversalTxExecuted`)."
2884
+ "Execute event (parity with EVM `UniversalTxFinalized`)."
3334
2885
  ],
3335
2886
  "type": {
3336
2887
  "kind": "struct",
3337
2888
  "fields": [
3338
2889
  {
3339
- "name": "tx_id",
2890
+ "name": "sub_tx_id",
3340
2891
  "type": {
3341
2892
  "array": [
3342
2893
  "u8",
@@ -3345,7 +2896,16 @@
3345
2896
  }
3346
2897
  },
3347
2898
  {
3348
- "name": "sender",
2899
+ "name": "universal_tx_id",
2900
+ "type": {
2901
+ "array": [
2902
+ "u8",
2903
+ 32
2904
+ ]
2905
+ }
2906
+ },
2907
+ {
2908
+ "name": "push_account",
3349
2909
  "type": {
3350
2910
  "array": [
3351
2911
  "u8",
@@ -3402,12 +2962,8 @@
3402
2962
  "type": "bytes"
3403
2963
  },
3404
2964
  {
3405
- "name": "revert_instruction",
3406
- "type": {
3407
- "defined": {
3408
- "name": "RevertInstructions"
3409
- }
3410
- }
2965
+ "name": "revert_recipient",
2966
+ "type": "pubkey"
3411
2967
  },
3412
2968
  {
3413
2969
  "name": "signature_data",
@@ -3448,47 +3004,6 @@
3448
3004
  }
3449
3005
  ]
3450
3006
  }
3451
- },
3452
- {
3453
- "name": "WithdrawToken",
3454
- "docs": [
3455
- "Withdraw event (parity with EVM `WithdrawToken`)."
3456
- ],
3457
- "type": {
3458
- "kind": "struct",
3459
- "fields": [
3460
- {
3461
- "name": "tx_id",
3462
- "type": {
3463
- "array": [
3464
- "u8",
3465
- 32
3466
- ]
3467
- }
3468
- },
3469
- {
3470
- "name": "origin_caller",
3471
- "type": {
3472
- "array": [
3473
- "u8",
3474
- 20
3475
- ]
3476
- }
3477
- },
3478
- {
3479
- "name": "token",
3480
- "type": "pubkey"
3481
- },
3482
- {
3483
- "name": "to",
3484
- "type": "pubkey"
3485
- },
3486
- {
3487
- "name": "amount",
3488
- "type": "u64"
3489
- }
3490
- ]
3491
- }
3492
3007
  }
3493
3008
  ]
3494
3009
  }