@layerzerolabs/protocol-stellar-v2 0.2.13 → 0.2.18

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 (435) hide show
  1. package/.turbo/turbo-build.log +484 -337
  2. package/.turbo/turbo-lint.log +126 -56
  3. package/.turbo/turbo-test.log +1403 -984
  4. package/Cargo.lock +142 -3
  5. package/Cargo.toml +5 -1
  6. package/contracts/ERROR_SPEC.md +44 -0
  7. package/contracts/common-macros/src/auth.rs +113 -0
  8. package/contracts/common-macros/src/contract_ttl.rs +84 -0
  9. package/contracts/common-macros/src/lib.rs +219 -29
  10. package/contracts/common-macros/src/lz_contract.rs +83 -0
  11. package/contracts/common-macros/src/storage.rs +1 -1
  12. package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
  13. package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
  14. package/contracts/common-macros/src/tests/mod.rs +3 -2
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
  17. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
  18. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +26 -10
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
  21. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -41
  22. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
  23. package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
  24. package/contracts/common-macros/src/ttl_configurable.rs +21 -66
  25. package/contracts/common-macros/src/ttl_extendable.rs +36 -0
  26. package/contracts/common-macros/src/upgradeable.rs +76 -0
  27. package/contracts/common-macros/src/utils.rs +9 -0
  28. package/contracts/endpoint-v2/src/constants.rs +4 -4
  29. package/contracts/endpoint-v2/src/endpoint_v2.rs +58 -36
  30. package/contracts/endpoint-v2/src/errors.rs +4 -3
  31. package/contracts/endpoint-v2/src/events.rs +1 -1
  32. package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
  33. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
  34. package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
  35. package/contracts/endpoint-v2/src/storage.rs +1 -1
  36. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
  42. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
  43. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
  44. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
  45. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
  46. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
  47. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
  48. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
  49. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
  50. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
  51. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +62 -10
  52. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
  53. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
  54. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
  55. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
  56. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
  67. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
  68. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
  69. package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
  70. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
  71. package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
  72. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
  73. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +4 -6
  74. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
  75. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +16 -2
  76. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
  77. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
  78. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
  79. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
  80. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
  81. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
  82. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
  83. package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
  84. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
  85. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
  86. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
  87. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
  88. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
  89. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
  90. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
  91. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
  92. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
  93. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
  94. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
  95. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
  96. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
  97. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
  98. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
  99. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
  100. package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
  101. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
  102. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
  103. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
  104. package/contracts/layerzero-views/Cargo.toml +35 -0
  105. package/contracts/layerzero-views/src/errors.rs +10 -0
  106. package/contracts/layerzero-views/src/layerzero_view.rs +226 -0
  107. package/contracts/layerzero-views/src/lib.rs +38 -0
  108. package/contracts/layerzero-views/src/storage.rs +18 -0
  109. package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
  110. package/contracts/layerzero-views/src/tests/mod.rs +4 -0
  111. package/contracts/layerzero-views/src/tests/setup.rs +377 -0
  112. package/contracts/layerzero-views/src/types.rs +50 -0
  113. package/contracts/macro-integration-tests/Cargo.toml +30 -0
  114. package/contracts/macro-integration-tests/src/lib.rs +1 -0
  115. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
  116. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
  117. package/contracts/macro-integration-tests/tests/runtime/ownable/only_auth_guard.rs +97 -0
  118. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
  119. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
  120. package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
  121. package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
  122. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
  123. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
  124. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
  125. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
  126. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +2 -0
  127. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  128. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
  129. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
  130. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
  131. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
  132. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
  133. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
  134. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
  135. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
  136. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
  137. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
  138. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
  139. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +22 -0
  140. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +16 -0
  141. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
  142. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +21 -0
  143. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +46 -0
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
  153. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
  155. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
  156. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
  157. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
  158. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
  159. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
  160. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
  161. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
  162. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
  163. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
  164. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
  165. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
  166. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
  167. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
  168. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
  169. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
  170. package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
  171. package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
  172. package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
  173. package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
  174. package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
  175. package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
  176. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
  177. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
  178. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
  179. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
  180. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
  181. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
  182. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
  183. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
  184. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +49 -0
  185. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +73 -0
  186. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
  187. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
  188. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
  189. package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
  190. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
  191. package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
  192. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
  193. package/contracts/message-libs/treasury/src/errors.rs +2 -3
  194. package/contracts/message-libs/treasury/src/events.rs +1 -1
  195. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
  196. package/contracts/message-libs/treasury/src/lib.rs +3 -3
  197. package/contracts/message-libs/treasury/src/storage.rs +3 -1
  198. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
  199. package/contracts/message-libs/treasury/src/treasury.rs +23 -26
  200. package/contracts/message-libs/uln-302/Cargo.toml +1 -1
  201. package/contracts/message-libs/uln-302/src/errors.rs +0 -5
  202. package/contracts/message-libs/uln-302/src/events.rs +5 -6
  203. package/contracts/message-libs/uln-302/src/receive_uln.rs +37 -56
  204. package/contracts/message-libs/uln-302/src/send_uln.rs +112 -138
  205. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  206. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
  207. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
  208. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
  209. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  210. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
  211. package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
  212. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
  213. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
  214. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
  215. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
  216. package/contracts/message-libs/uln-302/src/uln302.rs +10 -25
  217. package/contracts/oapps/counter/Cargo.toml +14 -1
  218. package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
  219. package/contracts/oapps/counter/integration_tests/setup_sml.rs +169 -0
  220. package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
  221. package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
  222. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
  223. package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
  224. package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
  225. package/contracts/oapps/counter/src/counter.rs +67 -44
  226. package/contracts/oapps/counter/src/tests/mod.rs +0 -13
  227. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
  228. package/contracts/oapps/oapp/src/errors.rs +5 -1
  229. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +318 -221
  230. package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
  231. package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
  232. package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
  233. package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
  234. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -9
  235. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -18
  236. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -8
  237. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -16
  238. package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
  239. package/contracts/oapps/oapp-macros/src/lib.rs +211 -0
  240. package/contracts/oapps/oft/integration-tests/setup.rs +34 -9
  241. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  242. package/contracts/oapps/oft/src/errors.rs +6 -1
  243. package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -13
  244. package/contracts/oapps/oft/src/extensions/pausable.rs +5 -5
  245. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +23 -23
  246. package/contracts/oapps/oft/src/lib.rs +4 -2
  247. package/contracts/oapps/oft/src/oft.rs +31 -71
  248. package/contracts/oapps/oft/src/oft_impl.rs +201 -0
  249. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +2 -4
  250. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -4
  251. package/contracts/oapps/oft/src/storage.rs +2 -0
  252. package/contracts/oapps/oft/src/tests/extensions/setup.rs +60 -31
  253. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +5 -3
  254. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +5 -3
  255. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +6 -4
  256. package/contracts/oapps/oft/src/tests/test_decimals.rs +2 -2
  257. package/contracts/oapps/oft/src/tests/test_oft_msg_codec.rs +1 -2
  258. package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
  259. package/contracts/oapps/oft/src/tests/test_utils.rs +122 -81
  260. package/contracts/oapps/oft/src/types.rs +20 -0
  261. package/contracts/oapps/oft-std/Cargo.toml +6 -0
  262. package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
  263. package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
  264. package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
  265. package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
  266. package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
  267. package/contracts/oapps/{counter/integration_tests → oft-std/integration-tests}/setup.rs +76 -30
  268. package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
  269. package/contracts/oapps/oft-std/src/lib.rs +12 -1
  270. package/contracts/oapps/oft-std/src/oft.rs +141 -26
  271. package/contracts/upgrader/Cargo.toml +19 -0
  272. package/contracts/upgrader/src/lib.rs +96 -0
  273. package/contracts/upgrader/src/tests/mod.rs +1 -0
  274. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  275. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  276. package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
  277. package/contracts/utils/src/auth.rs +44 -0
  278. package/contracts/utils/src/errors.rs +32 -5
  279. package/contracts/utils/src/lib.rs +5 -1
  280. package/contracts/utils/src/multisig.rs +211 -0
  281. package/contracts/utils/src/ownable.rs +50 -60
  282. package/contracts/utils/src/tests/buffer_reader.rs +6 -6
  283. package/contracts/utils/src/tests/buffer_writer.rs +6 -6
  284. package/contracts/utils/src/tests/bytes_ext.rs +2 -4
  285. package/contracts/utils/src/tests/mod.rs +4 -1
  286. package/contracts/utils/src/tests/multisig.rs +731 -0
  287. package/contracts/utils/src/tests/option_ext.rs +18 -0
  288. package/contracts/utils/src/tests/ownable.rs +22 -70
  289. package/contracts/utils/src/tests/ttl_configurable.rs +607 -0
  290. package/contracts/utils/src/tests/upgradeable.rs +290 -0
  291. package/contracts/utils/src/ttl_configurable.rs +153 -0
  292. package/contracts/utils/src/ttl_extendable.rs +27 -0
  293. package/contracts/utils/src/upgradeable.rs +56 -0
  294. package/contracts/workers/dvn/Cargo.toml +2 -2
  295. package/contracts/workers/dvn/src/auth.rs +24 -35
  296. package/contracts/workers/dvn/src/dvn.rs +23 -14
  297. package/contracts/workers/dvn/src/errors.rs +1 -7
  298. package/contracts/workers/dvn/src/events.rs +1 -14
  299. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  300. package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
  301. package/contracts/workers/dvn/src/storage.rs +3 -13
  302. package/contracts/workers/dvn/src/tests/auth.rs +4 -4
  303. package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
  304. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
  305. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
  306. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
  307. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  308. package/contracts/workers/dvn-fee-lib/Cargo.toml +0 -1
  309. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +45 -16
  310. package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
  311. package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
  312. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
  313. package/contracts/workers/executor/src/auth.rs +80 -16
  314. package/contracts/workers/executor/src/executor.rs +17 -29
  315. package/contracts/workers/executor/src/storage.rs +2 -9
  316. package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
  317. package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
  318. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +153 -121
  319. package/contracts/workers/executor-helper/Cargo.toml +1 -6
  320. package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
  321. package/contracts/workers/executor-helper/src/lib.rs +1 -7
  322. package/contracts/workers/price-feed/Cargo.toml +1 -2
  323. package/contracts/workers/price-feed/src/errors.rs +3 -2
  324. package/contracts/workers/price-feed/src/lib.rs +5 -6
  325. package/contracts/workers/price-feed/src/price_feed.rs +42 -23
  326. package/contracts/workers/worker/Cargo.toml +4 -0
  327. package/contracts/workers/worker/src/errors.rs +4 -0
  328. package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
  329. package/contracts/workers/worker/src/lib.rs +2 -2
  330. package/contracts/workers/worker/src/tests/mod.rs +4 -0
  331. package/contracts/workers/worker/src/tests/setup.rs +147 -0
  332. package/contracts/workers/worker/src/tests/worker.rs +502 -0
  333. package/contracts/workers/worker/src/worker.rs +28 -30
  334. package/package.json +8 -5
  335. package/sdk/.turbo/turbo-build.log +1 -0
  336. package/sdk/.turbo/turbo-test.log +1009 -0
  337. package/sdk/dist/generated/bml.d.ts +104 -37
  338. package/sdk/dist/generated/bml.js +83 -42
  339. package/sdk/dist/generated/counter.d.ts +334 -175
  340. package/sdk/dist/generated/counter.js +109 -63
  341. package/sdk/dist/generated/dvn.d.ts +1985 -0
  342. package/sdk/dist/generated/dvn.js +326 -0
  343. package/sdk/dist/generated/dvn_fee_lib.d.ts +690 -0
  344. package/sdk/dist/generated/dvn_fee_lib.js +163 -0
  345. package/sdk/dist/generated/endpoint.d.ts +155 -46
  346. package/sdk/dist/generated/endpoint.js +93 -50
  347. package/sdk/dist/generated/executor.d.ts +1841 -0
  348. package/sdk/dist/generated/executor.js +312 -0
  349. package/sdk/dist/generated/executor_fee_lib.d.ts +1083 -0
  350. package/sdk/dist/generated/executor_fee_lib.js +255 -0
  351. package/sdk/dist/generated/executor_helper.d.ts +981 -0
  352. package/sdk/dist/generated/executor_helper.js +236 -0
  353. package/sdk/dist/generated/oft_std.d.ts +1722 -0
  354. package/sdk/dist/generated/oft_std.js +316 -0
  355. package/sdk/dist/generated/price_feed.d.ts +1077 -0
  356. package/sdk/dist/generated/price_feed.js +210 -0
  357. package/sdk/dist/generated/sml.d.ts +171 -56
  358. package/sdk/dist/generated/sml.js +111 -62
  359. package/sdk/dist/generated/treasury.d.ts +896 -0
  360. package/sdk/dist/generated/treasury.js +219 -0
  361. package/sdk/dist/generated/uln302.d.ts +175 -75
  362. package/sdk/dist/generated/uln302.js +126 -82
  363. package/sdk/dist/generated/upgrader.d.ts +70 -0
  364. package/sdk/dist/generated/upgrader.js +19 -0
  365. package/sdk/dist/index.d.ts +10 -0
  366. package/sdk/dist/index.js +14 -0
  367. package/sdk/dist/wasm/blocked-message-lib.d.ts +1 -0
  368. package/sdk/dist/wasm/blocked-message-lib.js +2 -0
  369. package/sdk/dist/wasm/counter.d.ts +1 -0
  370. package/sdk/dist/wasm/counter.js +2 -0
  371. package/sdk/dist/wasm/dvn-fee-lib.d.ts +1 -0
  372. package/sdk/dist/wasm/dvn-fee-lib.js +2 -0
  373. package/sdk/dist/wasm/dvn.d.ts +1 -0
  374. package/sdk/dist/wasm/dvn.js +2 -0
  375. package/sdk/dist/wasm/endpoint-v2.d.ts +1 -0
  376. package/sdk/dist/wasm/endpoint-v2.js +2 -0
  377. package/sdk/dist/wasm/executor-fee-lib.d.ts +1 -0
  378. package/sdk/dist/wasm/executor-fee-lib.js +2 -0
  379. package/sdk/dist/wasm/executor-helper.d.ts +1 -0
  380. package/sdk/dist/wasm/executor-helper.js +2 -0
  381. package/sdk/dist/wasm/executor.d.ts +1 -0
  382. package/sdk/dist/wasm/executor.js +2 -0
  383. package/sdk/dist/wasm/layerzero-views.d.ts +1 -0
  384. package/sdk/dist/wasm/layerzero-views.js +2 -0
  385. package/sdk/dist/wasm/oft-std.d.ts +1 -0
  386. package/sdk/dist/wasm/oft-std.js +2 -0
  387. package/sdk/dist/wasm/price-feed.d.ts +1 -0
  388. package/sdk/dist/wasm/price-feed.js +2 -0
  389. package/sdk/dist/wasm/simple-message-lib.d.ts +1 -0
  390. package/sdk/dist/wasm/simple-message-lib.js +2 -0
  391. package/sdk/dist/wasm/treasury.d.ts +1 -0
  392. package/sdk/dist/wasm/treasury.js +2 -0
  393. package/sdk/dist/wasm/uln302.d.ts +1 -0
  394. package/sdk/dist/wasm/uln302.js +2 -0
  395. package/sdk/dist/wasm/upgrader.d.ts +1 -0
  396. package/sdk/dist/wasm/upgrader.js +2 -0
  397. package/sdk/dist/wasm.d.ts +15 -0
  398. package/sdk/dist/wasm.js +15 -0
  399. package/sdk/package.json +7 -4
  400. package/sdk/src/index.ts +17 -0
  401. package/sdk/test/counter-sml.test.ts +376 -0
  402. package/sdk/test/counter-uln.test.ts +493 -0
  403. package/sdk/test/{oft.test.ts → oft-sml.test.ts} +187 -323
  404. package/sdk/test/suites/constants.ts +22 -2
  405. package/sdk/test/suites/dummyContractClient.ts +169 -0
  406. package/sdk/test/suites/globalSetup.ts +450 -0
  407. package/sdk/test/suites/localnet.ts +23 -6
  408. package/sdk/test/upgrader.test.ts +300 -0
  409. package/sdk/test/utils.ts +558 -85
  410. package/sdk/vitest.config.ts +21 -0
  411. package/tools/ts-bindings-gen/src/main.rs +12 -1
  412. package/turbo.json +2 -0
  413. package/contracts/common-macros/src/contract_impl.rs +0 -47
  414. package/contracts/common-macros/src/ownable.rs +0 -59
  415. package/contracts/common-macros/src/tests/contract_impl.rs +0 -381
  416. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -32
  417. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
  418. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
  419. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
  420. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
  421. package/contracts/oapp-macros/src/lib.rs +0 -154
  422. package/contracts/oapp-macros/src/oapp_core.rs +0 -40
  423. package/contracts/oapp-macros/src/oapp_full.rs +0 -21
  424. package/contracts/oapp-macros/src/oapp_options_type3.rs +0 -31
  425. package/contracts/oapp-macros/src/oapp_receiver.rs +0 -48
  426. package/contracts/oapp-macros/src/oapp_sender.rs +0 -21
  427. package/contracts/oapp-macros/src/util.rs +0 -107
  428. package/contracts/oapps/oft/src/constants.rs +0 -5
  429. package/contracts/oapps/oft/src/default_oft_impl.rs +0 -146
  430. package/contracts/utils/src/tests/ttl.rs +0 -421
  431. package/contracts/utils/src/ttl.rs +0 -123
  432. package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
  433. package/contracts/workers/dvn/src/multisig.rs +0 -153
  434. package/sdk/test/index.test.ts +0 -376
  435. /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
@@ -0,0 +1,21 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ // Global setup runs ONCE before all test files
6
+ globalSetup: './test/suites/globalSetup.ts',
7
+ // Run tests sequentially to avoid conflicts with shared blockchain state
8
+ sequence: {
9
+ concurrent: false,
10
+ },
11
+ // Longer timeouts for blockchain operations
12
+ testTimeout: 120000,
13
+ hookTimeout: 240000,
14
+ // Don't isolate test files - they share the same localnet
15
+ isolate: false,
16
+ // Run test files sequentially
17
+ fileParallelism: false,
18
+ // Stop on first failure
19
+ bail: 1,
20
+ },
21
+ });
@@ -31,6 +31,8 @@ export * from '@stellar/stellar-sdk'
31
31
  export * as contract from '@stellar/stellar-sdk/contract'
32
32
  export * as rpc from '@stellar/stellar-sdk/rpc'
33
33
 
34
+ export type MigrationData = void;
35
+
34
36
 
35
37
  "#
36
38
  }
@@ -45,13 +47,22 @@ fn main() -> Result<()> {
45
47
  // Configuration for each contract
46
48
  // Format: (wasm_filename, ts_filename)
47
49
  let contracts = vec![
50
+ // Protocol contracts
48
51
  ("endpoint_v2", "endpoint.ts"),
49
52
  ("simple_message_lib", "sml.ts"),
50
53
  ("blocked_message_lib", "bml.ts"),
51
54
  ("uln302", "uln302.ts"),
52
- ("counter", "counter.ts"),
55
+ ("treasury", "treasury.ts"),
56
+ ("upgrader", "upgrader.ts"),
57
+ // Worker contracts
58
+ ("dvn", "dvn.ts"),
59
+ ("dvn_fee_lib", "dvn_fee_lib.ts"),
53
60
  ("executor", "executor.ts"),
61
+ ("executor_fee_lib", "executor_fee_lib.ts"),
54
62
  ("executor_helper", "executor_helper.ts"),
63
+ ("price_feed", "price_feed.ts"),
64
+ // OApp contracts
65
+ ("counter", "counter.ts"),
55
66
  ("oft_std", "oft_std.ts"),
56
67
  // Add more contracts here as needed:
57
68
  ];
package/turbo.json CHANGED
@@ -4,6 +4,8 @@
4
4
  "build": {
5
5
  "outputs": [
6
6
  "sdk/src/generated/**",
7
+ "sdk/src/wasm/**",
8
+ "sdk/src/wasm.ts",
7
9
  "target/wasm32v1-none/release/*.wasm",
8
10
  "target/wasm32v1-none/release/*.d"
9
11
  ]
@@ -1,47 +0,0 @@
1
- use crate::utils;
2
- use proc_macro2::TokenStream;
3
- use quote::quote;
4
- use syn::{parse_quote, ImplItem, ItemImpl, Visibility};
5
-
6
- /// Generates a `#[soroban_sdk::contractimpl]` with automatic instance TTL extension.
7
- pub fn contract_impl(attr: TokenStream, input: TokenStream) -> TokenStream {
8
- let mut impl_block: ItemImpl = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse impl block: {}", e));
9
-
10
- let is_trait_impl = impl_block.trait_.is_some();
11
-
12
- for item in &mut impl_block.items {
13
- let ImplItem::Fn(method) = item else { continue };
14
-
15
- // For trait impls, process all methods; for inherent impls, only public methods
16
- if !is_trait_impl && !matches!(method.vis, Visibility::Public(_)) {
17
- continue;
18
- }
19
-
20
- // Skip methods without Env parameter
21
- let Some(env_param) = utils::find_env_param(&method.sig.inputs) else { continue };
22
-
23
- // Get a reference to env (handles both `Env` and `&Env` parameter types)
24
- let env_ref = env_param.as_ref_tokens();
25
- let env_ident = env_param.ident;
26
-
27
- // Use fully qualified syntax to call ttl_configs from TtlConfigurable trait
28
- let extend_ttl_stmt = parse_quote! {
29
- if let Some(instance_ttl) = utils::ttl::TtlConfigStorage::instance(#env_ref) {
30
- #env_ident.storage().instance().extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
31
- }
32
- };
33
- method.block.stmts.insert(0, extend_ttl_stmt);
34
- }
35
-
36
- if attr.is_empty() {
37
- quote! {
38
- #[soroban_sdk::contractimpl]
39
- #impl_block
40
- }
41
- } else {
42
- quote! {
43
- #[soroban_sdk::contractimpl(#attr)]
44
- #impl_block
45
- }
46
- }
47
- }
@@ -1,59 +0,0 @@
1
- use crate::utils;
2
- use proc_macro2::TokenStream;
3
- use quote::{quote, ToTokens};
4
- use syn::{parse_quote, ItemFn, ItemStruct};
5
-
6
- /// Generates the ownable implementation from the `#[ownable]` attribute macro.
7
- pub fn generate_ownable_impl(input: TokenStream) -> TokenStream {
8
- let item_struct: ItemStruct = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse struct: {}", e));
9
- let name = &item_struct.ident;
10
-
11
- let ownable_impl = quote! {
12
- use utils::ownable::Ownable as _;
13
- use utils::ownable::OwnableInitializer as _;
14
-
15
- /// Implement the OwnableInitializer trait for the contract.
16
- impl utils::ownable::OwnableInitializer for #name {
17
- fn init_owner(env: &soroban_sdk::Env, owner: &soroban_sdk::Address) {
18
- <utils::ownable::DefaultOwnable as utils::ownable::OwnableInitializer>::init_owner(env, owner)
19
- }
20
- }
21
-
22
- /// Implement the Ownable trait for the contract.
23
- #[common_macros::contract_impl]
24
- impl utils::ownable::Ownable for #name {
25
- fn owner(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
26
- utils::ownable::DefaultOwnable::owner(env)
27
- }
28
-
29
- #[common_macros::only_owner]
30
- fn transfer_ownership(env: &soroban_sdk::Env, new_owner: &soroban_sdk::Address) {
31
- utils::ownable::DefaultOwnable::transfer_ownership(env, new_owner)
32
- }
33
-
34
- #[common_macros::only_owner]
35
- fn renounce_ownership(env: &soroban_sdk::Env) {
36
- utils::ownable::DefaultOwnable::renounce_ownership(env)
37
- }
38
- }
39
- };
40
-
41
- quote! {
42
- #item_struct
43
- #ownable_impl
44
- }
45
- }
46
-
47
- /// Prepends an owner authentication check to a method.
48
- pub fn prepend_only_owner_check(input: TokenStream) -> TokenStream {
49
- let mut input_fn: ItemFn = syn::parse2(input).unwrap_or_else(|e| panic!("failed to parse function: {}", e));
50
-
51
- let env_param = utils::expect_env_param(&input_fn.sig.inputs);
52
-
53
- // Get a reference to env (handles both `Env` and `&Env` parameter types)
54
- let env_ref = env_param.as_ref_tokens();
55
-
56
- // Insert the owner authentication check at the beginning of the function body
57
- input_fn.block.stmts.insert(0, parse_quote!(utils::ownable::require_owner_auth::<Self>(#env_ref);));
58
- input_fn.into_token_stream()
59
- }
@@ -1,381 +0,0 @@
1
- use proc_macro2::TokenStream;
2
- use quote::quote;
3
-
4
- use crate::tests::test_helpers::assert_panics_contains;
5
-
6
- // ============================================
7
- // Snapshot Test: ContractImpl Code Generation
8
- // ============================================
9
-
10
- /// Comprehensive snapshot test covering all contract_impl macro features:
11
- /// - Inherent impl: public methods with Env (adds TTL), private/pub(crate) methods (skipped)
12
- /// - Trait impl: all methods with Env get TTL extension
13
- /// - Qualified Env types (soroban_sdk::Env)
14
- /// - Env parameter not in first position
15
- /// - Methods without Env (skipped)
16
- #[test]
17
- fn snapshot_generated_contract_impl_code() {
18
- // Test inherent impl with empty attr
19
- let empty_attr = TokenStream::new();
20
- let inherent_input = quote! {
21
- impl MyContract {
22
- /// Public method with Env - should have TTL extension
23
- pub fn public_with_env(env: Env, value: u32) -> u32 {
24
- value * 2
25
- }
26
-
27
- /// Public method with qualified Env path - should have TTL extension
28
- pub fn with_qualified_env(env: soroban_sdk::Env) -> u32 {
29
- 42
30
- }
31
-
32
- /// Public method with Env not as first parameter - should have TTL extension
33
- pub fn env_second(value: u32, env: &Env) -> u32 {
34
- value * 2
35
- }
36
-
37
- /// Public method without Env - should NOT have TTL extension
38
- pub fn public_without_env(value: u32) -> u32 {
39
- value * 4
40
- }
41
-
42
- /// Private method with Env - should NOT have TTL extension (not public)
43
- fn private_with_env(env: Env, value: u32) -> u32 {
44
- value * 5
45
- }
46
-
47
- /// Pub(crate) method with Env - should NOT have TTL extension (not fully public)
48
- pub(crate) fn pub_crate_with_env(env: Env, value: u32) -> u32 {
49
- value * 7
50
- }
51
- }
52
- };
53
-
54
- let inherent_result = crate::contract_impl::contract_impl(empty_attr.clone(), inherent_input);
55
- let inherent_formatted =
56
- prettyplease::unparse(&syn::parse2::<syn::File>(inherent_result).expect("failed to parse generated code"));
57
-
58
- // Test trait impl with empty attr
59
- let trait_input = quote! {
60
- impl SomeTrait for MyContract {
61
- /// Trait method with Env - should have TTL extension
62
- fn trait_method_with_env(env: Env, value: u32) -> u32 {
63
- value * 2
64
- }
65
-
66
- /// Trait method without Env - should NOT have TTL extension
67
- fn trait_method_without_env(value: u32) -> u32 {
68
- value * 4
69
- }
70
-
71
- /// Trait method with macro attribute - should have TTL extension
72
- #[common_macros::only_owner]
73
- fn trait_method_with_only_owner_attribute(env: Env, value: u32) -> u32 {
74
- value * 5
75
- }
76
- }
77
- };
78
-
79
- let trait_result = crate::contract_impl::contract_impl(empty_attr, trait_input);
80
- let trait_formatted =
81
- prettyplease::unparse(&syn::parse2::<syn::File>(trait_result).expect("failed to parse generated code"));
82
-
83
- // Test trait impl with contracttrait attr
84
- let contracttrait_attr = quote! { contracttrait };
85
- let contracttrait_input = quote! {
86
- impl AnotherTrait for MyContract {
87
- /// Trait method with contracttrait attr - should have TTL extension
88
- fn contracttrait_method(env: &Env, value: u32) -> u32 {
89
- value * 3
90
- }
91
- }
92
- };
93
-
94
- let contracttrait_result = crate::contract_impl::contract_impl(contracttrait_attr, contracttrait_input);
95
- let contracttrait_formatted =
96
- prettyplease::unparse(&syn::parse2::<syn::File>(contracttrait_result).expect("failed to parse generated code"));
97
-
98
- // Combine all for single snapshot
99
- let combined = format!(
100
- "// === Inherent Impl (no attr) ===\n\n{}\n\n// === Trait Impl (no attr) ===\n\n{}\n\n// === Trait Impl (contracttrait attr) ===\n\n{}",
101
- inherent_formatted, trait_formatted, contracttrait_formatted
102
- );
103
-
104
- insta::assert_snapshot!(combined);
105
- }
106
-
107
- // ============================================
108
- // Error Cases: Invalid Input
109
- // ============================================
110
-
111
- #[test]
112
- fn test_non_impl_block_input() {
113
- let invalid_inputs = vec![
114
- (
115
- "struct",
116
- quote! {
117
- struct MyStruct {
118
- field: u32,
119
- }
120
- },
121
- ),
122
- (
123
- "enum",
124
- quote! {
125
- enum MyEnum {
126
- Variant1,
127
- Variant2,
128
- }
129
- },
130
- ),
131
- ("function", quote! { fn a_function() {} }),
132
- ("const item", quote! { const A_CONST: u32 = 1; }),
133
- ("type alias", quote! { type AnAlias = u32; }),
134
- (
135
- "trait",
136
- quote! {
137
- trait ATrait {
138
- fn method(&self);
139
- }
140
- },
141
- ),
142
- ];
143
-
144
- for (case, input) in invalid_inputs {
145
- assert_panics_contains(case, "failed to parse impl block", || {
146
- crate::contract_impl::contract_impl(TokenStream::new(), input.clone());
147
- });
148
- }
149
- }
150
-
151
- // ============================================
152
- // Unit Tests: Behavior Verification
153
- // ============================================
154
-
155
- /// Verifies that the macro adds #[soroban_sdk::contractimpl] attribute without parentheses when attr is empty
156
- #[test]
157
- fn test_adds_soroban_contractimpl_attribute_without_attr() {
158
- let input = quote! {
159
- impl MyContract {
160
- pub fn my_method(env: Env) {}
161
- }
162
- };
163
-
164
- let result = crate::contract_impl::contract_impl(TokenStream::new(), input);
165
- let result_str = result.to_string();
166
-
167
- // Should have contractimpl without parentheses when attr is empty
168
- assert!(
169
- result_str.contains("# [soroban_sdk :: contractimpl]"),
170
- "should add #[soroban_sdk::contractimpl] attribute without parentheses when attr is empty. Got: {}",
171
- result_str
172
- );
173
- // Should NOT have empty parentheses
174
- assert!(
175
- !result_str.contains("contractimpl ()"),
176
- "should NOT have empty parentheses when attr is empty. Got: {}",
177
- result_str
178
- );
179
- }
180
-
181
- /// Verifies that the macro adds #[soroban_sdk::contractimpl(attr)] when attr is provided
182
- #[test]
183
- fn test_adds_soroban_contractimpl_attribute_with_attr() {
184
- let input = quote! {
185
- impl SomeTrait for MyContract {
186
- fn my_method(env: Env) {}
187
- }
188
- };
189
-
190
- let attr = quote! { contracttrait };
191
- let result = crate::contract_impl::contract_impl(attr, input);
192
- let result_str = result.to_string();
193
-
194
- // Should have contractimpl with the attr in parentheses
195
- assert!(
196
- result_str.contains("contractimpl (contracttrait)"),
197
- "should add #[soroban_sdk::contractimpl(contracttrait)] attribute. Got: {}",
198
- result_str
199
- );
200
- }
201
-
202
- /// Expected TTL extension behavior for a test case
203
- #[derive(Clone)]
204
- enum TtlExpectation {
205
- /// TTL extension should NOT be inserted
206
- None,
207
- /// TTL extension should be inserted with the given env patterns
208
- /// - `instance_arg`: pattern in `TtlConfigStorage::instance(...)` (e.g., "& env" for owned, "env" for ref)
209
- /// - `storage_ident`: identifier for `.storage()` call
210
- Present { instance_arg: &'static str, storage_ident: &'static str },
211
- }
212
-
213
- struct TtlTestCase {
214
- name: &'static str,
215
- input: TokenStream,
216
- expectation: TtlExpectation,
217
- }
218
-
219
- impl TtlTestCase {
220
- fn expect_ttl(
221
- name: &'static str,
222
- input: TokenStream,
223
- instance_arg: &'static str,
224
- storage_ident: &'static str,
225
- ) -> Self {
226
- Self { name, input, expectation: TtlExpectation::Present { instance_arg, storage_ident } }
227
- }
228
-
229
- fn expect_no_ttl(name: &'static str, input: TokenStream) -> Self {
230
- Self { name, input, expectation: TtlExpectation::None }
231
- }
232
-
233
- fn run(&self) {
234
- let result = crate::contract_impl::contract_impl(TokenStream::new(), self.input.clone());
235
- let result_str = result.to_string();
236
- let has_ttl = result_str.contains("TtlConfigStorage :: instance");
237
-
238
- match &self.expectation {
239
- TtlExpectation::None => {
240
- assert!(!has_ttl, "{}: TTL extension should NOT be present, but was found", self.name);
241
- }
242
- TtlExpectation::Present { instance_arg, storage_ident } => {
243
- assert!(has_ttl, "{}: TTL extension should be present, but was not found", self.name);
244
- assert!(result_str.contains("extend_ttl"), "{}: should insert extend_ttl call", self.name);
245
-
246
- let instance_pattern = format!("TtlConfigStorage :: instance ({})", instance_arg);
247
- assert!(
248
- result_str.contains(&instance_pattern),
249
- "{}: expected '{}' in TtlConfigStorage::instance call. Got: {}",
250
- self.name,
251
- instance_arg,
252
- result_str
253
- );
254
-
255
- let storage_pattern = format!("{} . storage ()", storage_ident);
256
- assert!(
257
- result_str.contains(&storage_pattern),
258
- "{}: expected '{}.storage()' call",
259
- self.name,
260
- storage_ident
261
- );
262
- }
263
- }
264
- }
265
- }
266
-
267
- #[test]
268
- fn test_ttl_extension_with_owned_env() {
269
- TtlTestCase::expect_ttl(
270
- "public method with owned Env",
271
- quote! {
272
- impl MyContract {
273
- pub fn my_method(env: Env) { let x = 1; }
274
- }
275
- },
276
- "& env", // instance takes reference
277
- "env", // storage called on ident
278
- )
279
- .run();
280
- }
281
-
282
- #[test]
283
- fn test_ttl_extension_with_ref_env() {
284
- TtlTestCase::expect_ttl(
285
- "public method with ref Env",
286
- quote! {
287
- impl MyContract {
288
- pub fn my_method(env: &Env) { let x = 1; }
289
- }
290
- },
291
- "env", // instance takes ident directly (already a ref)
292
- "env",
293
- )
294
- .run();
295
- }
296
-
297
- #[test]
298
- fn test_ttl_extension_with_custom_env_ident_owned() {
299
- TtlTestCase::expect_ttl(
300
- "custom Env identifier (owned)",
301
- quote! {
302
- impl MyContract {
303
- pub fn my_method(my_custom_env: Env) { let x = 1; }
304
- }
305
- },
306
- "& my_custom_env",
307
- "my_custom_env",
308
- )
309
- .run();
310
- }
311
-
312
- #[test]
313
- fn test_ttl_extension_with_custom_env_ident_ref() {
314
- TtlTestCase::expect_ttl(
315
- "custom Env identifier (ref)",
316
- quote! {
317
- impl MyContract {
318
- pub fn my_method(my_custom_env: &Env) { let x = 1; }
319
- }
320
- },
321
- "my_custom_env",
322
- "my_custom_env",
323
- )
324
- .run();
325
- }
326
-
327
- #[test]
328
- fn test_ttl_extension_for_trait_impl_owned_env() {
329
- TtlTestCase::expect_ttl(
330
- "trait impl method with owned Env",
331
- quote! {
332
- impl SomeTrait for MyContract {
333
- fn trait_method(env: Env) { let x = 1; }
334
- }
335
- },
336
- "& env",
337
- "env",
338
- )
339
- .run();
340
- }
341
-
342
- #[test]
343
- fn test_ttl_extension_for_trait_impl_ref_env() {
344
- TtlTestCase::expect_ttl(
345
- "trait impl method with ref Env",
346
- quote! {
347
- impl SomeTrait for MyContract {
348
- fn trait_method(env: &Env) { let x = 1; }
349
- }
350
- },
351
- "env",
352
- "env",
353
- )
354
- .run();
355
- }
356
-
357
- #[test]
358
- fn test_no_ttl_extension_for_private_method() {
359
- TtlTestCase::expect_no_ttl(
360
- "private method with Env",
361
- quote! {
362
- impl MyContract {
363
- fn private_method(env: Env) { let x = 1; }
364
- }
365
- },
366
- )
367
- .run();
368
- }
369
-
370
- #[test]
371
- fn test_no_ttl_extension_without_env_param() {
372
- TtlTestCase::expect_no_ttl(
373
- "public method without Env",
374
- quote! {
375
- impl MyContract {
376
- pub fn no_env_method(value: u32) -> u32 { value }
377
- }
378
- },
379
- )
380
- .run();
381
- }
@@ -1,32 +0,0 @@
1
- ---
2
- source: contracts/common-macros/src/tests/ownable.rs
3
- assertion_line: 17
4
- expression: formatted
5
- ---
6
- pub struct MyContract;
7
- use utils::ownable::Ownable as _;
8
- use utils::ownable::OwnableInitializer as _;
9
- /// Implement the OwnableInitializer trait for the contract.
10
- impl utils::ownable::OwnableInitializer for MyContract {
11
- fn init_owner(env: &soroban_sdk::Env, owner: &soroban_sdk::Address) {
12
- <utils::ownable::DefaultOwnable as utils::ownable::OwnableInitializer>::init_owner(
13
- env,
14
- owner,
15
- )
16
- }
17
- }
18
- /// Implement the Ownable trait for the contract.
19
- #[common_macros::contract_impl]
20
- impl utils::ownable::Ownable for MyContract {
21
- fn owner(env: &soroban_sdk::Env) -> Option<soroban_sdk::Address> {
22
- utils::ownable::DefaultOwnable::owner(env)
23
- }
24
- #[common_macros::only_owner]
25
- fn transfer_ownership(env: &soroban_sdk::Env, new_owner: &soroban_sdk::Address) {
26
- utils::ownable::DefaultOwnable::transfer_ownership(env, new_owner)
27
- }
28
- #[common_macros::only_owner]
29
- fn renounce_ownership(env: &soroban_sdk::Env) {
30
- utils::ownable::DefaultOwnable::renounce_ownership(env)
31
- }
32
- }