@layerzerolabs/protocol-stellar-v2 0.2.40 → 0.2.43

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 (129) hide show
  1. package/.turbo/turbo-build.log +312 -397
  2. package/.turbo/turbo-lint.log +185 -245
  3. package/.turbo/turbo-test.log +1846 -1942
  4. package/Cargo.lock +22 -127
  5. package/Cargo.toml +4 -6
  6. package/contracts/common-macros/src/lib.rs +38 -15
  7. package/contracts/common-macros/src/lz_contract.rs +12 -21
  8. package/contracts/common-macros/src/tests/lz_contract.rs +17 -8
  9. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__lz_contract__snapshot_generated_lz_contract_code.snap +20 -0
  10. package/contracts/common-macros/src/upgradeable.rs +37 -30
  11. package/contracts/endpoint-v2/src/endpoint_v2.rs +4 -3
  12. package/contracts/endpoint-v2/src/errors.rs +2 -2
  13. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -0
  14. package/contracts/endpoint-v2/src/messaging_composer.rs +1 -0
  15. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +12 -25
  16. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +4 -4
  17. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +50 -10
  18. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +6 -35
  19. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +2 -2
  20. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +50 -1
  21. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +78 -0
  22. package/contracts/endpoint-v2/src/tests/messaging_channel/insert_and_drain_pending_nonces.rs +272 -0
  23. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +1 -0
  24. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +10 -5
  25. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +30 -0
  26. package/contracts/macro-integration-tests/tests/runtime/oapp/mod.rs +25 -6
  27. package/contracts/macro-integration-tests/tests/runtime/oapp/oapp_core.rs +13 -11
  28. package/contracts/macro-integration-tests/tests/runtime/oapp/options_type3.rs +13 -10
  29. package/contracts/macro-integration-tests/tests/runtime/oapp/receiver.rs +15 -11
  30. package/contracts/macro-integration-tests/tests/runtime/oapp/sender.rs +5 -3
  31. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +1 -1
  32. package/contracts/macro-integration-tests/tests/runtime/ownable/two_step_transfer.rs +14 -12
  33. package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs +3 -9
  34. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.stderr +24 -1
  35. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.stderr +3 -3
  36. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable_rbac.rs +44 -0
  37. package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_auth_trait.rs +28 -0
  38. package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_auth_trait.stderr +397 -0
  39. package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_lz_receive_internal.rs +1 -0
  40. package/contracts/macro-integration-tests/tests/ui/oapp/fail/missing_lz_receive_internal.stderr +10 -10
  41. package/contracts/macro-integration-tests/tests/ui/oapp/pass/custom_all.rs +4 -0
  42. package/contracts/macro-integration-tests/tests/ui/oapp/pass/custom_single_trait.rs +7 -0
  43. package/contracts/macro-integration-tests/tests/ui/oapp/pass/minimal_contract.rs +5 -4
  44. package/contracts/macro-integration-tests/tests/ui/oapp/pass/struct_with_fields.rs +2 -0
  45. package/contracts/macro-integration-tests/tests/ui/ownable/pass/basic.rs +1 -1
  46. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.stderr +1 -1
  47. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.stderr +2 -2
  48. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.stderr +2 -2
  49. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/rbac.rs +44 -0
  50. package/contracts/oapps/counter/integration_tests/utils.rs +5 -3
  51. package/contracts/oapps/counter/src/counter.rs +4 -3
  52. package/contracts/oapps/counter/src/tests/mod.rs +16 -1
  53. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -2
  54. package/contracts/oapps/oapp/src/oapp_core.rs +22 -8
  55. package/contracts/oapps/oapp/src/oapp_options_type3.rs +7 -5
  56. package/contracts/oapps/oapp/src/tests/mod.rs +21 -0
  57. package/contracts/oapps/oapp/src/tests/oapp_core.rs +14 -11
  58. package/contracts/oapps/oapp/src/tests/oapp_options_type3.rs +17 -10
  59. package/contracts/oapps/oapp/src/tests/oapp_receiver.rs +6 -3
  60. package/contracts/oapps/oapp/src/tests/oapp_sender.rs +5 -3
  61. package/contracts/oapps/oapp/src/tests/test_macros.rs +25 -0
  62. package/contracts/oapps/oapp-macros/src/generators.rs +12 -9
  63. package/contracts/oapps/oapp-macros/src/lib.rs +1 -1
  64. package/contracts/oapps/oapp-macros/src/tests/snapshots/oapp_macros__tests__oapp__snapshot_generate_oapp.snap +15 -7
  65. package/contracts/oapps/oft/integration-tests/setup.rs +22 -4
  66. package/contracts/oapps/oft/integration-tests/utils.rs +94 -13
  67. package/contracts/oapps/oft/src/extensions/oft_fee.rs +23 -10
  68. package/contracts/oapps/oft/src/extensions/pausable.rs +31 -10
  69. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +9 -4
  70. package/contracts/oapps/oft/src/oft.rs +3 -3
  71. package/contracts/oapps/oft/src/tests/extensions/oft_fee.rs +39 -27
  72. package/contracts/oapps/oft/src/tests/extensions/pausable.rs +38 -24
  73. package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +87 -69
  74. package/contracts/oapps/oft/src/tests/oft_types/lock_unlock.rs +1 -0
  75. package/contracts/oapps/oft-core/integration-tests/setup.rs +28 -3
  76. package/contracts/oapps/oft-core/src/oft_core.rs +11 -6
  77. package/contracts/oapps/oft-core/src/tests/test_msg_inspector.rs +20 -20
  78. package/contracts/oapps/oft-core/src/tests/test_utils.rs +33 -3
  79. package/contracts/upgrader/src/lib.rs +67 -30
  80. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract3.wasm +0 -0
  81. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract4.wasm +0 -0
  82. package/contracts/upgrader/src/tests/test_upgrader.rs +50 -4
  83. package/contracts/utils/src/ownable.rs +16 -5
  84. package/contracts/utils/src/tests/ownable.rs +39 -39
  85. package/contracts/utils/src/upgradeable.rs +60 -17
  86. package/docs/oapp-guide.md +18 -13
  87. package/package.json +5 -5
  88. package/sdk/.turbo/turbo-test.log +359 -348
  89. package/sdk/dist/generated/bml.d.ts +4 -4
  90. package/sdk/dist/generated/bml.js +6 -6
  91. package/sdk/dist/generated/counter.d.ts +269 -123
  92. package/sdk/dist/generated/counter.js +45 -25
  93. package/sdk/dist/generated/dvn.d.ts +4 -6
  94. package/sdk/dist/generated/dvn.js +8 -8
  95. package/sdk/dist/generated/dvn_fee_lib.d.ts +8 -10
  96. package/sdk/dist/generated/dvn_fee_lib.js +8 -8
  97. package/sdk/dist/generated/endpoint.d.ts +9 -9
  98. package/sdk/dist/generated/endpoint.js +9 -9
  99. package/sdk/dist/generated/executor.d.ts +9 -11
  100. package/sdk/dist/generated/executor.js +11 -11
  101. package/sdk/dist/generated/executor_fee_lib.d.ts +9 -11
  102. package/sdk/dist/generated/executor_fee_lib.js +11 -11
  103. package/sdk/dist/generated/executor_helper.d.ts +4 -4
  104. package/sdk/dist/generated/executor_helper.js +6 -6
  105. package/sdk/dist/generated/layerzero_view.d.ts +9 -11
  106. package/sdk/dist/generated/layerzero_view.js +11 -11
  107. package/sdk/dist/generated/oft.d.ts +323 -156
  108. package/sdk/dist/generated/oft.js +65 -43
  109. package/sdk/dist/generated/price_feed.d.ts +8 -10
  110. package/sdk/dist/generated/price_feed.js +8 -8
  111. package/sdk/dist/generated/sac_manager.d.ts +8 -8
  112. package/sdk/dist/generated/sac_manager.js +6 -6
  113. package/sdk/dist/generated/sml.d.ts +9 -9
  114. package/sdk/dist/generated/sml.js +9 -9
  115. package/sdk/dist/generated/treasury.d.ts +9 -9
  116. package/sdk/dist/generated/treasury.js +9 -9
  117. package/sdk/dist/generated/uln302.d.ts +9 -9
  118. package/sdk/dist/generated/uln302.js +9 -9
  119. package/sdk/dist/generated/upgrader.d.ts +25 -16
  120. package/sdk/dist/generated/upgrader.js +5 -5
  121. package/sdk/package.json +1 -1
  122. package/sdk/test/counter-sml.test.ts +20 -0
  123. package/sdk/test/counter-uln.test.ts +20 -0
  124. package/sdk/test/oft-sml.test.ts +22 -0
  125. package/sdk/test/upgrader.test.ts +1 -0
  126. package/ts-bindings-gen.toml +67 -0
  127. package/turbo.json +1 -8
  128. package/tools/ts-bindings-gen/Cargo.toml +0 -16
  129. package/tools/ts-bindings-gen/src/main.rs +0 -214
package/Cargo.lock CHANGED
@@ -23,12 +23,6 @@ dependencies = [
23
23
  "libc",
24
24
  ]
25
25
 
26
- [[package]]
27
- name = "anyhow"
28
- version = "1.0.100"
29
- source = "registry+https://github.com/rust-lang/crates.io-index"
30
- checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
31
-
32
26
  [[package]]
33
27
  name = "arbitrary"
34
28
  version = "1.3.2"
@@ -89,7 +83,7 @@ dependencies = [
89
83
  "ark-serialize",
90
84
  "ark-std",
91
85
  "derivative",
92
- "digest 0.10.7",
86
+ "digest",
93
87
  "itertools 0.10.5",
94
88
  "num-bigint",
95
89
  "num-traits",
@@ -142,7 +136,7 @@ checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5"
142
136
  dependencies = [
143
137
  "ark-serialize-derive",
144
138
  "ark-std",
145
- "digest 0.10.7",
139
+ "digest",
146
140
  "num-bigint",
147
141
  ]
148
142
 
@@ -179,12 +173,6 @@ version = "0.2.0"
179
173
  source = "registry+https://github.com/rust-lang/crates.io-index"
180
174
  checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
181
175
 
182
- [[package]]
183
- name = "base64"
184
- version = "0.21.7"
185
- source = "registry+https://github.com/rust-lang/crates.io-index"
186
- checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
187
-
188
176
  [[package]]
189
177
  name = "base64"
190
178
  version = "0.22.1"
@@ -197,15 +185,6 @@ version = "1.8.0"
197
185
  source = "registry+https://github.com/rust-lang/crates.io-index"
198
186
  checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
199
187
 
200
- [[package]]
201
- name = "block-buffer"
202
- version = "0.9.0"
203
- source = "registry+https://github.com/rust-lang/crates.io-index"
204
- checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
205
- dependencies = [
206
- "generic-array",
207
- ]
208
-
209
188
  [[package]]
210
189
  name = "block-buffer"
211
190
  version = "0.10.4"
@@ -292,7 +271,7 @@ dependencies = [
292
271
  name = "common-macros"
293
272
  version = "0.0.1"
294
273
  dependencies = [
295
- "heck 0.5.0",
274
+ "heck",
296
275
  "insta",
297
276
  "itertools 0.14.0",
298
277
  "prettyplease",
@@ -420,7 +399,7 @@ dependencies = [
420
399
  "cfg-if",
421
400
  "cpufeatures",
422
401
  "curve25519-dalek-derive",
423
- "digest 0.10.7",
402
+ "digest",
424
403
  "fiat-crypto",
425
404
  "rustc_version",
426
405
  "subtle",
@@ -556,22 +535,13 @@ dependencies = [
556
535
  "syn 2.0.108",
557
536
  ]
558
537
 
559
- [[package]]
560
- name = "digest"
561
- version = "0.9.0"
562
- source = "registry+https://github.com/rust-lang/crates.io-index"
563
- checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
564
- dependencies = [
565
- "generic-array",
566
- ]
567
-
568
538
  [[package]]
569
539
  name = "digest"
570
540
  version = "0.10.7"
571
541
  source = "registry+https://github.com/rust-lang/crates.io-index"
572
542
  checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
573
543
  dependencies = [
574
- "block-buffer 0.10.4",
544
+ "block-buffer",
575
545
  "const-oid",
576
546
  "crypto-common",
577
547
  "subtle",
@@ -640,7 +610,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
640
610
  checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
641
611
  dependencies = [
642
612
  "der",
643
- "digest 0.10.7",
613
+ "digest",
644
614
  "elliptic-curve",
645
615
  "rfc6979",
646
616
  "signature",
@@ -667,7 +637,7 @@ dependencies = [
667
637
  "ed25519",
668
638
  "rand_core",
669
639
  "serde",
670
- "sha2 0.10.9",
640
+ "sha2",
671
641
  "subtle",
672
642
  "zeroize",
673
643
  ]
@@ -686,7 +656,7 @@ checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
686
656
  dependencies = [
687
657
  "base16ct",
688
658
  "crypto-bigint",
689
- "digest 0.10.7",
659
+ "digest",
690
660
  "ff",
691
661
  "generic-array",
692
662
  "group",
@@ -887,12 +857,6 @@ dependencies = [
887
857
  "stable_deref_trait",
888
858
  ]
889
859
 
890
- [[package]]
891
- name = "heck"
892
- version = "0.4.1"
893
- source = "registry+https://github.com/rust-lang/crates.io-index"
894
- checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
895
-
896
860
  [[package]]
897
861
  name = "heck"
898
862
  version = "0.5.0"
@@ -926,7 +890,7 @@ version = "0.12.1"
926
890
  source = "registry+https://github.com/rust-lang/crates.io-index"
927
891
  checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
928
892
  dependencies = [
929
- "digest 0.10.7",
893
+ "digest",
930
894
  ]
931
895
 
932
896
  [[package]]
@@ -959,26 +923,6 @@ version = "1.0.1"
959
923
  source = "registry+https://github.com/rust-lang/crates.io-index"
960
924
  checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
961
925
 
962
- [[package]]
963
- name = "include_dir"
964
- version = "0.7.4"
965
- source = "registry+https://github.com/rust-lang/crates.io-index"
966
- checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd"
967
- dependencies = [
968
- "glob",
969
- "include_dir_macros",
970
- ]
971
-
972
- [[package]]
973
- name = "include_dir_macros"
974
- version = "0.7.4"
975
- source = "registry+https://github.com/rust-lang/crates.io-index"
976
- checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75"
977
- dependencies = [
978
- "proc-macro2",
979
- "quote",
980
- ]
981
-
982
926
  [[package]]
983
927
  name = "indexmap"
984
928
  version = "1.9.3"
@@ -1063,7 +1007,7 @@ dependencies = [
1063
1007
  "ecdsa",
1064
1008
  "elliptic-curve",
1065
1009
  "once_cell",
1066
- "sha2 0.10.9",
1010
+ "sha2",
1067
1011
  "signature",
1068
1012
  ]
1069
1013
 
@@ -1258,12 +1202,6 @@ version = "1.21.3"
1258
1202
  source = "registry+https://github.com/rust-lang/crates.io-index"
1259
1203
  checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
1260
1204
 
1261
- [[package]]
1262
- name = "opaque-debug"
1263
- version = "0.3.1"
1264
- source = "registry+https://github.com/rust-lang/crates.io-index"
1265
- checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381"
1266
-
1267
1205
  [[package]]
1268
1206
  name = "p256"
1269
1207
  version = "0.13.2"
@@ -1273,7 +1211,7 @@ dependencies = [
1273
1211
  "ecdsa",
1274
1212
  "elliptic-curve",
1275
1213
  "primeorder",
1276
- "sha2 0.10.9",
1214
+ "sha2",
1277
1215
  ]
1278
1216
 
1279
1217
  [[package]]
@@ -1560,7 +1498,7 @@ version = "3.15.1"
1560
1498
  source = "registry+https://github.com/rust-lang/crates.io-index"
1561
1499
  checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04"
1562
1500
  dependencies = [
1563
- "base64 0.22.1",
1501
+ "base64",
1564
1502
  "chrono",
1565
1503
  "hex",
1566
1504
  "indexmap 1.9.3",
@@ -1586,19 +1524,6 @@ dependencies = [
1586
1524
  "syn 2.0.108",
1587
1525
  ]
1588
1526
 
1589
- [[package]]
1590
- name = "sha2"
1591
- version = "0.9.9"
1592
- source = "registry+https://github.com/rust-lang/crates.io-index"
1593
- checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
1594
- dependencies = [
1595
- "block-buffer 0.9.0",
1596
- "cfg-if",
1597
- "cpufeatures",
1598
- "digest 0.9.0",
1599
- "opaque-debug",
1600
- ]
1601
-
1602
1527
  [[package]]
1603
1528
  name = "sha2"
1604
1529
  version = "0.10.9"
@@ -1607,7 +1532,7 @@ checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
1607
1532
  dependencies = [
1608
1533
  "cfg-if",
1609
1534
  "cpufeatures",
1610
- "digest 0.10.7",
1535
+ "digest",
1611
1536
  ]
1612
1537
 
1613
1538
  [[package]]
@@ -1616,7 +1541,7 @@ version = "0.10.8"
1616
1541
  source = "registry+https://github.com/rust-lang/crates.io-index"
1617
1542
  checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
1618
1543
  dependencies = [
1619
- "digest 0.10.7",
1544
+ "digest",
1620
1545
  "keccak",
1621
1546
  ]
1622
1547
 
@@ -1632,7 +1557,7 @@ version = "2.2.0"
1632
1557
  source = "registry+https://github.com/rust-lang/crates.io-index"
1633
1558
  checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
1634
1559
  dependencies = [
1635
- "digest 0.10.7",
1560
+ "digest",
1636
1561
  "rand_core",
1637
1562
  ]
1638
1563
 
@@ -1728,7 +1653,7 @@ dependencies = [
1728
1653
  "rand",
1729
1654
  "rand_chacha",
1730
1655
  "sec1",
1731
- "sha2 0.10.9",
1656
+ "sha2",
1732
1657
  "sha3",
1733
1658
  "soroban-builtin-sdk-macros",
1734
1659
  "soroban-env-common",
@@ -1798,12 +1723,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1798
1723
  checksum = "2a0107e34575ec704ce29407695462e79e6b0e13ce7af6431b2f15c313e34464"
1799
1724
  dependencies = [
1800
1725
  "darling 0.20.11",
1801
- "heck 0.5.0",
1726
+ "heck",
1802
1727
  "itertools 0.10.5",
1803
1728
  "macro-string",
1804
1729
  "proc-macro2",
1805
1730
  "quote",
1806
- "sha2 0.10.9",
1731
+ "sha2",
1807
1732
  "soroban-env-common",
1808
1733
  "soroban-spec",
1809
1734
  "soroban-spec-rust",
@@ -1817,7 +1742,7 @@ version = "25.1.1"
1817
1742
  source = "registry+https://github.com/rust-lang/crates.io-index"
1818
1743
  checksum = "53a1c9f6ccc6aa78518545e3cf542bd26f11d9085328a2e1c06c90514733fe15"
1819
1744
  dependencies = [
1820
- "base64 0.22.1",
1745
+ "base64",
1821
1746
  "stellar-xdr",
1822
1747
  "thiserror",
1823
1748
  "wasmparser",
@@ -1832,33 +1757,13 @@ dependencies = [
1832
1757
  "prettyplease",
1833
1758
  "proc-macro2",
1834
1759
  "quote",
1835
- "sha2 0.10.9",
1760
+ "sha2",
1836
1761
  "soroban-spec",
1837
1762
  "stellar-xdr",
1838
1763
  "syn 2.0.108",
1839
1764
  "thiserror",
1840
1765
  ]
1841
1766
 
1842
- [[package]]
1843
- name = "soroban-spec-typescript"
1844
- version = "25.1.0"
1845
- source = "registry+https://github.com/rust-lang/crates.io-index"
1846
- checksum = "25684cb264ba39bac049ba93fc66fd241993c9aefb82d60d60417736408ec61a"
1847
- dependencies = [
1848
- "base64 0.21.7",
1849
- "heck 0.4.1",
1850
- "include_dir",
1851
- "itertools 0.10.5",
1852
- "prettyplease",
1853
- "serde",
1854
- "serde_derive",
1855
- "serde_json",
1856
- "sha2 0.9.9",
1857
- "soroban-spec",
1858
- "stellar-xdr",
1859
- "thiserror",
1860
- ]
1861
-
1862
1767
  [[package]]
1863
1768
  name = "soroban-wasmi"
1864
1769
  version = "0.31.1-soroban.20.0.1"
@@ -1928,7 +1833,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1928
1833
  checksum = "10d20dafed80076b227d4b17c0c508a4bbc4d5e4c3d4c1de7cd42242df4b1eaf"
1929
1834
  dependencies = [
1930
1835
  "arbitrary",
1931
- "base64 0.22.1",
1836
+ "base64",
1932
1837
  "cfg_eval",
1933
1838
  "crate-git-revision",
1934
1839
  "escape-bytes",
@@ -1936,7 +1841,7 @@ dependencies = [
1936
1841
  "hex",
1937
1842
  "serde",
1938
1843
  "serde_with",
1939
- "sha2 0.10.9",
1844
+ "sha2",
1940
1845
  "stellar-strkey 0.0.13",
1941
1846
  ]
1942
1847
 
@@ -2105,16 +2010,6 @@ dependencies = [
2105
2010
  "toml",
2106
2011
  ]
2107
2012
 
2108
- [[package]]
2109
- name = "ts-bindings-gen"
2110
- version = "0.0.1"
2111
- dependencies = [
2112
- "anyhow",
2113
- "base64 0.22.1",
2114
- "sha2 0.10.9",
2115
- "soroban-spec-typescript",
2116
- ]
2117
-
2118
2013
  [[package]]
2119
2014
  name = "typenum"
2120
2015
  version = "1.19.0"
package/Cargo.toml CHANGED
@@ -1,11 +1,10 @@
1
1
  [workspace]
2
2
  resolver = "2"
3
3
  members = [
4
- "contracts/*",
5
- "contracts/message-libs/*",
6
- "contracts/oapps/*",
7
- "contracts/workers/*",
8
- "tools/*",
4
+ "contracts/*",
5
+ "contracts/message-libs/*",
6
+ "contracts/oapps/*",
7
+ "contracts/workers/*",
9
8
  ]
10
9
 
11
10
  [workspace.package]
@@ -15,7 +14,6 @@ version = "0.0.1"
15
14
 
16
15
  [workspace.dependencies]
17
16
  soroban-sdk = { version = "25.1.1", features = ["hazmat-address", "hazmat-crypto"] }
18
- soroban-spec-typescript = "25.1.0" # used in tools/ts-bindings-gen
19
17
 
20
18
  # Third-party dependencies (production)
21
19
  cfg-if = { version = "1.0", default-features = false }
@@ -457,23 +457,27 @@ pub fn contract_trait(attr: TokenStream, item: TokenStream) -> TokenStream {
457
457
  // Upgradeable Macro
458
458
  // ============================================================================
459
459
 
460
- /// Generates upgradeable implementation using the `Upgradeable` trait's default methods.
460
+ /// Generates upgradeable implementation using `Upgradeable` or `UpgradeableRbac` traits.
461
461
  ///
462
- /// This macro implements `Upgradeable` using the trait's default methods (which include auth).
462
+ /// `Upgradeable` uses Auth directly; `UpgradeableRbac` layers RoleBased
463
+ /// access control on top of Auth.
463
464
  ///
464
465
  /// # Requirements
465
- /// - The contract must implement the `Auth` trait (via `#[ownable]` or `#[multisig]`)
466
+ /// - `Upgradeable` (default): contract must implement `Auth` (via `#[ownable]` or `#[multisig]`)
467
+ /// - `UpgradeableRbac` (with `rbac`): contract must implement both `Auth` and `RoleBasedAccessControl` (e.g. from OApp)
466
468
  /// - By default, requires manual `UpgradeableInternal` implementation
467
469
  /// - With `no_migration` flag, auto-generates a no-op `UpgradeableInternal` impl
468
470
  ///
469
471
  /// # Options
470
- /// - `#[upgradeable]` - Requires manual `UpgradeableInternal` implementation (safety by default)
471
- /// - `#[upgradeable(no_migration)]` - Auto-generates no-op `UpgradeableInternal` (for initial deployment)
472
+ /// - `#[upgradeable]` - Implements Upgradeable, requires manual `UpgradeableInternal` (safety by default)
473
+ /// - `#[upgradeable(no_migration)]` - Implements Upgradeable, auto-generates no-op `UpgradeableInternal`
474
+ /// - `#[upgradeable(rbac)]` - Implements UpgradeableRbac, requires manual `UpgradeableInternal`
475
+ /// - `#[upgradeable(rbac, no_migration)]` - Implements UpgradeableRbac, auto-generates no-op `UpgradeableInternal`
472
476
  ///
473
477
  /// # Example
474
478
  /// ```ignore
475
- /// // Requires manual UpgradeableInternal implementation (default)
476
- /// #[ownable] // or #[multisig]
479
+ /// // Implements Upgradeable (default)
480
+ /// #[ownable]
477
481
  /// #[upgradeable]
478
482
  /// pub struct MyContract;
479
483
  ///
@@ -485,16 +489,32 @@ pub fn contract_trait(attr: TokenStream, item: TokenStream) -> TokenStream {
485
489
  /// }
486
490
  /// }
487
491
  ///
488
- /// // Auto-generates no-op UpgradeableInternal (for initial deployment)
489
- /// #[ownable] // or #[multisig]
492
+ /// // Implements Upgradeable (no migration)
493
+ /// #[ownable]
490
494
  /// #[upgradeable(no_migration)]
491
- /// pub struct MyContract;
492
- /// // No UpgradeableInternal impl needed!
495
+ /// pub struct SimpleContract;
496
+ ///
497
+ /// // Implements UpgradeableRbac (layered)
498
+ /// #[ownable]
499
+ /// #[upgradeable(rbac)]
500
+ /// pub struct RbacContract;
501
+ ///
502
+ /// impl utils::upgradeable::UpgradeableInternal for RbacContract {
503
+ /// type MigrationData = MyMigrationParams;
504
+ ///
505
+ /// fn __migrate(env: &Env, migration_data: &Self::MigrationData) {
506
+ /// // Custom migration logic here
507
+ /// }
508
+ /// }
509
+ ///
510
+ /// // Implements UpgradeableRbac (no migration)
511
+ /// #[ownable]
512
+ /// #[upgradeable(rbac, no_migration)]
513
+ /// pub struct SimpleRbacContract;
493
514
  /// ```
494
515
  ///
495
516
  /// Generated code includes:
496
- /// - `upgrade(env, new_wasm_hash)` - Upgrades the contract WASM (auth required)
497
- /// - `migrate(env, migration_data)` - Runs migration after upgrade (auth required, XDR-decodes `Bytes` to `MigrationData`)
517
+ /// - `upgrade` / `migrate` - Auth-based or Auth + RoleBased depending on options
498
518
  /// - `contractmeta!` with `binver` set to the Cargo package version (if not 0.0.0)
499
519
  #[proc_macro_attribute]
500
520
  pub fn upgradeable(attr: TokenStream, item: TokenStream) -> TokenStream {
@@ -518,8 +538,7 @@ pub fn upgradeable(attr: TokenStream, item: TokenStream) -> TokenStream {
518
538
  /// - `#[ownable]` - Single-owner access control
519
539
  ///
520
540
  /// # Options
521
- /// - `upgradeable` - Adds `#[upgradeable]`, requires manual `UpgradeableInternal` impl
522
- /// - `upgradeable(no_migration)` - Adds `#[upgradeable(no_migration)]`, auto-generates no-op impl
541
+ /// - `upgradeable(...)` - Adds `#[upgradeable(...)]`; content is passed verbatim to the upgradeable macro
523
542
  /// - `multisig` - Uses `#[multisig]` instead of `#[ownable]`
524
543
  ///
525
544
  /// # Examples
@@ -536,6 +555,10 @@ pub fn upgradeable(attr: TokenStream, item: TokenStream) -> TokenStream {
536
555
  /// #[lz_contract(upgradeable(no_migration))]
537
556
  /// pub struct DVNFeeLib;
538
557
  ///
558
+ /// // Contract with RBAC-based upgrade support
559
+ /// #[lz_contract(upgradeable(rbac))]
560
+ /// pub struct RbacOft;
561
+ ///
539
562
  /// // Contract with multisig auth and upgrade support (no migration)
540
563
  /// #[lz_contract(multisig, upgradeable(no_migration))]
541
564
  /// pub struct DVN;
@@ -16,21 +16,20 @@ use syn::{
16
16
  pub struct LzContractConfig {
17
17
  /// If true, adds `#[upgradeable]` for contract upgrade support.
18
18
  pub upgradeable: bool,
19
- /// If true, generates a default no-op `UpgradeableInternal` implementation.
20
- /// Only valid when `upgradeable` is also true.
21
- pub no_migration: bool,
19
+ /// Raw tokens inside `upgradeable(...)`, passed verbatim to the upgradeable macro.
20
+ /// Empty when `upgradeable` has no parentheses.
21
+ pub upgradeable_attr: TokenStream,
22
22
  /// If true, uses `#[multisig]` instead of `#[ownable]` for auth.
23
23
  pub multisig: bool,
24
24
  }
25
25
 
26
26
  impl Parse for LzContractConfig {
27
27
  fn parse(input: ParseStream) -> syn::Result<Self> {
28
+ let mut config = Self::default();
28
29
  if input.is_empty() {
29
- return Ok(Self::default());
30
+ return Ok(config);
30
31
  }
31
32
 
32
- let mut config = Self::default();
33
-
34
33
  // Parse comma-separated items, handling nested parentheses for upgradeable(no_migration)
35
34
  while !input.is_empty() {
36
35
  let ident: Ident = input.parse()?;
@@ -38,19 +37,11 @@ impl Parse for LzContractConfig {
38
37
  match ident.to_string().as_str() {
39
38
  "upgradeable" => {
40
39
  config.upgradeable = true;
41
- // Check for optional (no_migration) suffix
40
+ // Pass through optional (...) content verbatim to the upgradeable macro
42
41
  if input.peek(syn::token::Paren) {
43
42
  let content;
44
43
  parenthesized!(content in input);
45
- let inner_ident: Ident = content.parse()?;
46
- if inner_ident == "no_migration" {
47
- config.no_migration = true;
48
- } else {
49
- return Err(Error::new(inner_ident.span(), "expected `no_migration`"));
50
- }
51
- if !content.is_empty() {
52
- return Err(Error::new(content.span(), "unexpected tokens in `upgradeable(...)`"));
53
- }
44
+ config.upgradeable_attr = content.parse()?;
54
45
  }
55
46
  }
56
47
  "multisig" => config.multisig = true,
@@ -79,8 +70,7 @@ impl Parse for LzContractConfig {
79
70
  /// - `#[common_macros::ownable]` - Single-owner access control
80
71
  ///
81
72
  /// # Options
82
- /// - `upgradeable` - Adds `#[upgradeable]`, requires manual `UpgradeableInternal` impl
83
- /// - `upgradeable(no_migration)` - Adds `#[upgradeable(no_migration)]`, auto-generates no-op impl
73
+ /// - `upgradeable(...)` - Adds `#[upgradeable(...)]`; content is passed verbatim to the upgradeable macro
84
74
  /// - `multisig` - Uses `#[multisig]` instead of `#[ownable]`
85
75
  pub fn generate_lz_contract(attr: TokenStream, input: TokenStream) -> TokenStream {
86
76
  let config: LzContractConfig =
@@ -94,10 +84,11 @@ pub fn generate_lz_contract(attr: TokenStream, input: TokenStream) -> TokenStrea
94
84
  };
95
85
 
96
86
  let upgrade = if config.upgradeable {
97
- if config.no_migration {
98
- quote! { #[common_macros::upgradeable(no_migration)] }
99
- } else {
87
+ if config.upgradeable_attr.is_empty() {
100
88
  quote! { #[common_macros::upgradeable] }
89
+ } else {
90
+ let upgradeable_attr = &config.upgradeable_attr;
91
+ quote! { #[common_macros::upgradeable(#upgradeable_attr)] }
101
92
  }
102
93
  } else {
103
94
  quote! {}
@@ -30,9 +30,24 @@ fn snapshot_generated_lz_contract_code() {
30
30
  &syn::parse2::<syn::File>(upgradeable_no_migration_result).expect("failed to parse generated code"),
31
31
  );
32
32
 
33
+ let upgradeable_rbac_result =
34
+ crate::lz_contract::generate_lz_contract(quote! { upgradeable(rbac) }, quote! { pub struct MyContract; });
35
+ let upgradeable_rbac_formatted = prettyplease::unparse(
36
+ &syn::parse2::<syn::File>(upgradeable_rbac_result).expect("failed to parse generated code"),
37
+ );
38
+
39
+ // Pass-through: order and content preserved verbatim
40
+ let upgradeable_rbac_no_migration_result = crate::lz_contract::generate_lz_contract(
41
+ quote! { upgradeable(rbac, no_migration) },
42
+ quote! { pub struct MyContract; },
43
+ );
44
+ let upgradeable_rbac_no_migration_formatted = prettyplease::unparse(
45
+ &syn::parse2::<syn::File>(upgradeable_rbac_no_migration_result).expect("failed to parse generated code"),
46
+ );
47
+
33
48
  let combined = format!(
34
- "// === Default (ownable) ===\n\n{}\n\n// === MultiSig + Upgradeable ===\n\n{}\n\n// === Upgradeable (no_migration) ===\n\n{}",
35
- default_formatted, multisig_upgradeable_formatted, upgradeable_no_migration_formatted
49
+ "// === Default (ownable) ===\n\n{}\n\n// === MultiSig + Upgradeable ===\n\n{}\n\n// === Upgradeable (no_migration) ===\n\n{}\n\n// === Upgradeable (rbac) ===\n\n{}\n\n// === Upgradeable (rbac, no_migration) pass-through ===\n\n{}",
50
+ default_formatted, multisig_upgradeable_formatted, upgradeable_no_migration_formatted, upgradeable_rbac_formatted, upgradeable_rbac_no_migration_formatted
36
51
  );
37
52
 
38
53
  insta::assert_snapshot!(combined);
@@ -49,12 +64,6 @@ fn test_lz_contract_invalid_config_table_driven() {
49
64
  let cases: Vec<(&str, TokenStream, &str)> = vec![
50
65
  ("unknown option", quote! { not_a_real_option }, "expected one of `upgradeable`, `multisig`"),
51
66
  ("invalid attr syntax", quote! { 123 }, "failed to parse lz_contract config"),
52
- ("upgradeable(bad_inner)", quote! { upgradeable(not_migration) }, "expected `no_migration`"),
53
- (
54
- "upgradeable(extra_tokens)",
55
- quote! { upgradeable(no_migration, extra) },
56
- "unexpected tokens in `upgradeable(...)`",
57
- ),
58
67
  ];
59
68
 
60
69
  for (case, attr, expected_substring) in cases {
@@ -29,3 +29,23 @@ pub struct MyContract;
29
29
  #[common_macros::ownable]
30
30
  #[common_macros::upgradeable(no_migration)]
31
31
  pub struct MyContract;
32
+
33
+
34
+ // === Upgradeable (rbac) ===
35
+
36
+ #[soroban_sdk::contract]
37
+ #[common_macros::ttl_configurable]
38
+ #[common_macros::ttl_extendable]
39
+ #[common_macros::ownable]
40
+ #[common_macros::upgradeable(rbac)]
41
+ pub struct MyContract;
42
+
43
+
44
+ // === Upgradeable (rbac, no_migration) pass-through ===
45
+
46
+ #[soroban_sdk::contract]
47
+ #[common_macros::ttl_configurable]
48
+ #[common_macros::ttl_extendable]
49
+ #[common_macros::ownable]
50
+ #[common_macros::upgradeable(rbac, no_migration)]
51
+ pub struct MyContract;