@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,137 @@
1
+ // Runtime test: unkeyed (unit variant) roundtrip for all storage types.
2
+ //
3
+ // Purpose:
4
+ // - Validates all three storage types (instance, persistent, temporary) work correctly
5
+ // with unit variants (no key fields).
6
+ // - Validates complete lifecycle: set -> has -> get -> remove -> get returns default/None.
7
+ // - Validates default attribute behavior.
8
+
9
+ use soroban_sdk::{contract, contractimpl, Env};
10
+
11
+ #[common_macros::storage]
12
+ pub enum InstanceKey {
13
+ #[instance(u32)]
14
+ #[default(0)]
15
+ Counter,
16
+ }
17
+
18
+ #[common_macros::storage]
19
+ pub enum PersistentKey {
20
+ #[persistent(u64)]
21
+ Counter,
22
+ }
23
+
24
+ #[common_macros::storage]
25
+ pub enum PersistentKeyWithDefault {
26
+ #[persistent(u64)]
27
+ #[default(42)]
28
+ Value,
29
+ }
30
+
31
+ #[common_macros::storage]
32
+ pub enum TemporaryKey {
33
+ #[temporary(bool)]
34
+ Flag,
35
+ }
36
+
37
+ #[contract]
38
+ pub struct TestContract;
39
+
40
+ #[contractimpl]
41
+ impl TestContract {}
42
+
43
+ #[test]
44
+ fn all_storage_types_unkeyed_roundtrip() {
45
+ let env = Env::default();
46
+ let contract_id = env.register(TestContract, ());
47
+
48
+ env.as_contract(&contract_id, || {
49
+ // ====================================================================
50
+ // Instance storage (with default)
51
+ // ====================================================================
52
+ {
53
+ // Default when not set
54
+ assert_eq!(InstanceKey::counter(&env), 0);
55
+ assert_eq!(InstanceKey::has_counter(&env), false);
56
+
57
+ // Set value
58
+ InstanceKey::set_counter(&env, &5);
59
+ assert_eq!(InstanceKey::has_counter(&env), true);
60
+ assert_eq!(InstanceKey::counter(&env), 5);
61
+
62
+ // set_or_remove with Some updates value
63
+ InstanceKey::set_or_remove_counter(&env, &Some(10));
64
+ assert_eq!(InstanceKey::counter(&env), 10);
65
+
66
+ // set_or_remove with None removes value
67
+ InstanceKey::set_or_remove_counter(&env, &None);
68
+ assert_eq!(InstanceKey::has_counter(&env), false);
69
+ assert_eq!(InstanceKey::counter(&env), 0);
70
+ }
71
+
72
+ // ====================================================================
73
+ // Persistent storage (without default)
74
+ // ====================================================================
75
+ {
76
+ // Initially absent, returns None
77
+ assert_eq!(PersistentKey::counter(&env), None);
78
+ assert_eq!(PersistentKey::has_counter(&env), false);
79
+
80
+ // set_or_remove with Some sets value
81
+ PersistentKey::set_or_remove_counter(&env, &Some(100));
82
+ assert_eq!(PersistentKey::has_counter(&env), true);
83
+ assert_eq!(PersistentKey::counter(&env), Some(100));
84
+
85
+ // Update value
86
+ PersistentKey::set_counter(&env, &200);
87
+ assert_eq!(PersistentKey::counter(&env), Some(200));
88
+
89
+ // set_or_remove with None removes value
90
+ PersistentKey::set_or_remove_counter(&env, &None);
91
+ assert_eq!(PersistentKey::has_counter(&env), false);
92
+ assert_eq!(PersistentKey::counter(&env), None);
93
+ }
94
+
95
+ // ====================================================================
96
+ // Persistent storage (with default)
97
+ // ====================================================================
98
+ {
99
+ // Returns default value when not set
100
+ assert_eq!(PersistentKeyWithDefault::value(&env), 42);
101
+ assert_eq!(PersistentKeyWithDefault::has_value(&env), false);
102
+
103
+ // Set value overrides default
104
+ PersistentKeyWithDefault::set_value(&env, &100);
105
+ assert_eq!(PersistentKeyWithDefault::has_value(&env), true);
106
+ assert_eq!(PersistentKeyWithDefault::value(&env), 100);
107
+
108
+ // Remove value returns to default
109
+ PersistentKeyWithDefault::remove_value(&env);
110
+ assert_eq!(PersistentKeyWithDefault::has_value(&env), false);
111
+ assert_eq!(PersistentKeyWithDefault::value(&env), 42);
112
+ }
113
+
114
+ // ====================================================================
115
+ // Temporary storage (without default)
116
+ // ====================================================================
117
+ {
118
+ // Initially absent, returns None
119
+ assert_eq!(TemporaryKey::flag(&env), None);
120
+ assert_eq!(TemporaryKey::has_flag(&env), false);
121
+
122
+ // set_or_remove with Some sets value
123
+ TemporaryKey::set_or_remove_flag(&env, &Some(true));
124
+ assert_eq!(TemporaryKey::has_flag(&env), true);
125
+ assert_eq!(TemporaryKey::flag(&env), Some(true));
126
+
127
+ // Update value
128
+ TemporaryKey::set_flag(&env, &false);
129
+ assert_eq!(TemporaryKey::flag(&env), Some(false));
130
+
131
+ // set_or_remove with None removes value
132
+ TemporaryKey::set_or_remove_flag(&env, &None);
133
+ assert_eq!(TemporaryKey::has_flag(&env), false);
134
+ assert_eq!(TemporaryKey::flag(&env), None);
135
+ }
136
+ });
137
+ }
@@ -0,0 +1,113 @@
1
+ // Runtime tests: TTL configuration read/write behavior.
2
+ //
3
+ // Tests covered:
4
+ // - `ttl_configs()` and `is_ttl_configs_frozen()` callable without auth.
5
+ // - `set_ttl_configs` requires owner authorization.
6
+ // - Invalid TTL config (threshold > extend_to) is rejected.
7
+
8
+ use common_macros::{ownable, ttl_configurable};
9
+ use soroban_sdk::{
10
+ contract, contractimpl,
11
+ testutils::{Address as _, MockAuth, MockAuthInvoke},
12
+ xdr::{ScErrorCode, ScErrorType},
13
+ Address, Env, Error, IntoVal,
14
+ };
15
+ use utils::{errors::TtlConfigurableError, ttl_configurable::TtlConfig};
16
+
17
+ #[contract]
18
+ #[ttl_configurable]
19
+ #[ownable]
20
+ pub struct TestContract;
21
+
22
+ #[contractimpl]
23
+ impl TestContract {
24
+ pub fn init(env: Env, owner: Address) {
25
+ Self::init_owner(&env, &owner);
26
+ }
27
+ }
28
+
29
+ #[test]
30
+ fn read_without_auth() {
31
+ let env = Env::default();
32
+ let contract_id = env.register(TestContract, ());
33
+ let client = TestContractClient::new(&env, &contract_id);
34
+
35
+ // Read methods should be callable without initialization/auth
36
+ client.ttl_configs();
37
+ assert!(!client.is_ttl_configs_frozen());
38
+
39
+ // Also works after owner initialization
40
+ let owner = Address::generate(&env);
41
+ client.init(&owner);
42
+
43
+ client.ttl_configs();
44
+ assert!(!client.is_ttl_configs_frozen());
45
+ }
46
+
47
+ #[test]
48
+ fn set_requires_auth() {
49
+ let env = Env::default();
50
+ let contract_id = env.register(TestContract, ());
51
+ let client = TestContractClient::new(&env, &contract_id);
52
+
53
+ let owner = Address::generate(&env);
54
+ client.init(&owner);
55
+
56
+ let before = client.ttl_configs();
57
+
58
+ let instance = Some(TtlConfig::new(1, 2));
59
+ let persistent = None::<TtlConfig>;
60
+
61
+ // Unauthorized set should fail
62
+ let unauthorized = client.try_set_ttl_configs(&instance, &persistent);
63
+ assert_eq!(
64
+ unauthorized.unwrap_err().unwrap(),
65
+ Error::from_type_and_code(ScErrorType::Context, ScErrorCode::InvalidAction)
66
+ );
67
+
68
+ // Authorized set should succeed
69
+ client
70
+ .mock_auths(&[MockAuth {
71
+ address: &owner,
72
+ invoke: &MockAuthInvoke {
73
+ contract: &contract_id,
74
+ fn_name: "set_ttl_configs",
75
+ args: (&instance, &persistent).into_val(&env),
76
+ sub_invokes: &[],
77
+ },
78
+ }])
79
+ .set_ttl_configs(&instance, &persistent);
80
+
81
+ // Config should be updated
82
+ let after = client.ttl_configs();
83
+ assert_ne!(before, after);
84
+ assert_eq!(after, (instance, persistent));
85
+ }
86
+
87
+ #[test]
88
+ fn invalid_config_rejected() {
89
+ let env = Env::default();
90
+ let contract_id = env.register(TestContract, ());
91
+ let client = TestContractClient::new(&env, &contract_id);
92
+
93
+ let owner = Address::generate(&env);
94
+ client.init(&owner);
95
+
96
+ // Invalid config: threshold > extend_to
97
+ let invalid_instance = Some(TtlConfig::new(100, 50)); // threshold=100 > extend_to=50
98
+ let none: Option<TtlConfig> = None::<TtlConfig>;
99
+
100
+ let result = client
101
+ .mock_auths(&[MockAuth {
102
+ address: &owner,
103
+ invoke: &MockAuthInvoke {
104
+ contract: &contract_id,
105
+ fn_name: "set_ttl_configs",
106
+ args: (&invalid_instance, &none).into_val(&env),
107
+ sub_invokes: &[],
108
+ },
109
+ }])
110
+ .try_set_ttl_configs(&invalid_instance, &none);
111
+
112
+ assert_eq!(result.unwrap_err().unwrap(), TtlConfigurableError::InvalidTtlConfig.into());
113
+ }
@@ -0,0 +1,139 @@
1
+ // Runtime tests: TTL config freeze behavior.
2
+ //
3
+ // Tests covered:
4
+ // - `freeze_ttl_configs` requires owner authorization.
5
+ // - After freeze, `set_ttl_configs` fails even with auth.
6
+ // - Double freeze fails with TtlConfigAlreadyFrozen.
7
+
8
+ use common_macros::{ownable, ttl_configurable};
9
+ use soroban_sdk::{
10
+ contract, contractimpl,
11
+ testutils::{Address as _, MockAuth, MockAuthInvoke},
12
+ xdr::{ScErrorCode, ScErrorType},
13
+ Address, Env, Error, IntoVal,
14
+ };
15
+ use utils::{errors::TtlConfigurableError, ttl_configurable::TtlConfig};
16
+
17
+ #[contract]
18
+ #[ttl_configurable]
19
+ #[ownable]
20
+ pub struct TestContract;
21
+
22
+ #[contractimpl]
23
+ impl TestContract {
24
+ pub fn init(env: Env, owner: Address) {
25
+ Self::init_owner(&env, &owner);
26
+ }
27
+ }
28
+
29
+ #[test]
30
+ fn freeze_requires_auth() {
31
+ let env = Env::default();
32
+ let contract_id = env.register(TestContract, ());
33
+ let client = TestContractClient::new(&env, &contract_id);
34
+
35
+ let owner = Address::generate(&env);
36
+ client.init(&owner);
37
+
38
+ // Unauthorized freeze should fail
39
+ assert_eq!(
40
+ client.try_freeze_ttl_configs().unwrap_err().unwrap(),
41
+ Error::from_type_and_code(ScErrorType::Context, ScErrorCode::InvalidAction)
42
+ );
43
+
44
+ // Authorized freeze should succeed
45
+ client
46
+ .mock_auths(&[MockAuth {
47
+ address: &owner,
48
+ invoke: &MockAuthInvoke {
49
+ contract: &contract_id,
50
+ fn_name: "freeze_ttl_configs",
51
+ args: ().into_val(&env),
52
+ sub_invokes: &[],
53
+ },
54
+ }])
55
+ .freeze_ttl_configs();
56
+
57
+ assert!(client.is_ttl_configs_frozen());
58
+ }
59
+
60
+ #[test]
61
+ fn freeze_blocks_set() {
62
+ let env = Env::default();
63
+ let contract_id = env.register(TestContract, ());
64
+ let client = TestContractClient::new(&env, &contract_id);
65
+
66
+ let owner = Address::generate(&env);
67
+ client.init(&owner);
68
+
69
+ // Freeze the config
70
+ client
71
+ .mock_auths(&[MockAuth {
72
+ address: &owner,
73
+ invoke: &MockAuthInvoke {
74
+ contract: &contract_id,
75
+ fn_name: "freeze_ttl_configs",
76
+ args: ().into_val(&env),
77
+ sub_invokes: &[],
78
+ },
79
+ }])
80
+ .freeze_ttl_configs();
81
+
82
+ // After freeze, set should fail even with auth
83
+ let instance = Some(TtlConfig::new(1, 2));
84
+ let none = None::<TtlConfig>;
85
+
86
+ let result = client
87
+ .mock_auths(&[MockAuth {
88
+ address: &owner,
89
+ invoke: &MockAuthInvoke {
90
+ contract: &contract_id,
91
+ fn_name: "set_ttl_configs",
92
+ args: (&instance, &none).into_val(&env),
93
+ sub_invokes: &[],
94
+ },
95
+ }])
96
+ .try_set_ttl_configs(&instance, &none);
97
+
98
+ assert_eq!(result.unwrap_err().unwrap(), TtlConfigurableError::TtlConfigFrozen.into());
99
+ }
100
+
101
+ #[test]
102
+ fn double_freeze_fails() {
103
+ let env = Env::default();
104
+ let contract_id = env.register(TestContract, ());
105
+ let client = TestContractClient::new(&env, &contract_id);
106
+
107
+ let owner = Address::generate(&env);
108
+ client.init(&owner);
109
+
110
+ // First freeze should succeed
111
+ client
112
+ .mock_auths(&[MockAuth {
113
+ address: &owner,
114
+ invoke: &MockAuthInvoke {
115
+ contract: &contract_id,
116
+ fn_name: "freeze_ttl_configs",
117
+ args: ().into_val(&env),
118
+ sub_invokes: &[],
119
+ },
120
+ }])
121
+ .freeze_ttl_configs();
122
+
123
+ assert!(client.is_ttl_configs_frozen());
124
+
125
+ // Second freeze should fail (TtlConfigAlreadyFrozen)
126
+ let result = client
127
+ .mock_auths(&[MockAuth {
128
+ address: &owner,
129
+ invoke: &MockAuthInvoke {
130
+ contract: &contract_id,
131
+ fn_name: "freeze_ttl_configs",
132
+ args: ().into_val(&env),
133
+ sub_invokes: &[],
134
+ },
135
+ }])
136
+ .try_freeze_ttl_configs();
137
+
138
+ assert_eq!(result.unwrap_err().unwrap(), TtlConfigurableError::TtlConfigAlreadyFrozen.into());
139
+ }
@@ -0,0 +1,2 @@
1
+ mod configuration;
2
+ mod freeze;
@@ -0,0 +1,5 @@
1
+ mod runtime {
2
+ mod ownable;
3
+ mod storage;
4
+ mod ttl_configurable;
5
+ }
@@ -0,0 +1,12 @@
1
+ // UI (trybuild) negative test: `#[contract_error]` does not accept arguments.
2
+ //
3
+ // Purpose:
4
+ // - Ensures passing arguments to the attribute causes a compile-time failure.
5
+ // - The macro asserts the attribute token stream is empty.
6
+
7
+ #[common_macros::contract_error(foo)]
8
+ pub enum MyError {
9
+ A,
10
+ }
11
+
12
+ fn main() {}
@@ -0,0 +1,7 @@
1
+ error: custom attribute panicked
2
+ --> tests/ui/error/fail/attr_not_empty.rs:7:1
3
+ |
4
+ 7 | #[common_macros::contract_error(foo)]
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ = help: message: contract_error attribute is not supported
@@ -0,0 +1,12 @@
1
+ // UI (trybuild) negative test: discriminant values must be monotonically increasing.
2
+ //
3
+ // Purpose:
4
+ // - Ensures the macro rejects explicit discriminants that decrease relative to the previous value.
5
+
6
+ #[common_macros::contract_error]
7
+ pub enum MyError {
8
+ A = 10,
9
+ B = 9,
10
+ }
11
+
12
+ fn main() {}
@@ -0,0 +1,7 @@
1
+ error: custom attribute panicked
2
+ --> tests/ui/error/fail/decreasing_discriminant.rs:6:1
3
+ |
4
+ 6 | #[common_macros::contract_error]
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ = help: message: Error enum discriminant must be greater than the previous discriminant
@@ -0,0 +1,21 @@
1
+ // UI (trybuild) negative test: only integer discriminants are supported.
2
+ //
3
+ // Purpose:
4
+ // - Ensures non-integer discriminants (string literal, expression, const path) are rejected.
5
+ // - The macro expects a literal integer discriminant.
6
+
7
+ const X: u32 = 7;
8
+
9
+ #[common_macros::contract_error]
10
+ pub enum MyError {
11
+ // Not an integer literal (string)
12
+ A = "1",
13
+
14
+ // Not a literal int expression (path)
15
+ B = X,
16
+
17
+ // Not a literal int expression (binary expression)
18
+ C = 1 + 2,
19
+ }
20
+
21
+ fn main() {}
@@ -0,0 +1,7 @@
1
+ error: custom attribute panicked
2
+ --> tests/ui/error/fail/non_int_discriminant.rs:9:1
3
+ |
4
+ 9 | #[common_macros::contract_error]
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ = help: message: Error enum discriminant must be an integer literal
@@ -0,0 +1,13 @@
1
+ // UI (trybuild) negative test: non-unit variants are rejected.
2
+ //
3
+ // Purpose:
4
+ // - Ensures tuple variants and struct variants cause a compile-time failure.
5
+ // - The macro only supports unit variants.
6
+
7
+ #[common_macros::contract_error]
8
+ pub enum MyError {
9
+ Tuple(u32),
10
+ Struct { x: u32 },
11
+ }
12
+
13
+ fn main() {}
@@ -0,0 +1,7 @@
1
+ error: custom attribute panicked
2
+ --> tests/ui/error/fail/non_unit_variant.rs:7:1
3
+ |
4
+ 7 | #[common_macros::contract_error]
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ = help: message: Error enum variants must be unit variants
@@ -0,0 +1,20 @@
1
+ // UI (trybuild) test: variant attributes are preserved/allowed.
2
+ //
3
+ // Purpose:
4
+ // - Ensures attributes on variants (e.g., doc strings) do not break macro processing.
5
+ // - The macro implementation forwards variant attributes; this test catches regressions.
6
+ // - Avoids attributes that may introduce warnings (e.g., `#[deprecated]`) to keep CI output clean.
7
+
8
+ #[common_macros::contract_error]
9
+ pub enum MyError {
10
+ #[doc = "A documented error variant."]
11
+ A,
12
+
13
+ #[doc = "Another documented error variant (used to ensure multiple attrs are handled)."]
14
+ B,
15
+
16
+ #[doc = "A third documented error variant."]
17
+ C,
18
+ }
19
+
20
+ fn main() {}
@@ -0,0 +1,15 @@
1
+ // UI (trybuild) test: `#[contract_error]` on a unit-only enum without explicit discriminants compiles.
2
+ //
3
+ // Purpose:
4
+ // - Covers the happy path where all variants are unit variants.
5
+ // - Ensures the macro auto-assigns monotonically increasing integer discriminants starting at 1.
6
+ // - Avoids snapshotting token output; compilation success is sufficient for this integration contract.
7
+
8
+ #[common_macros::contract_error]
9
+ pub enum MyError {
10
+ A,
11
+ B,
12
+ C,
13
+ }
14
+
15
+ fn main() {}
@@ -0,0 +1,16 @@
1
+ // UI (trybuild) test: `#[contract_error]` supports a mix of explicit and implicit discriminants.
2
+ //
3
+ // Purpose:
4
+ // - Ensures explicit integer discriminants are accepted.
5
+ // - Ensures subsequent variants without discriminants are auto-assigned based on the last explicit value.
6
+ // - Example shape: A=10, B(implicit), C=20, D(implicit).
7
+
8
+ #[common_macros::contract_error]
9
+ pub enum MyError {
10
+ A = 10,
11
+ B,
12
+ C = 20,
13
+ D,
14
+ }
15
+
16
+ fn main() {}
@@ -0,0 +1,22 @@
1
+ // UI (trybuild) negative test: `#[only_auth]` requires an `Env` parameter.
2
+ //
3
+ // Purpose:
4
+ // - Ensures the macro fails compilation when applied to a function that does not accept `Env`.
5
+ // - Validates the downstream UX: macro misuse should surface as a compile-time error.
6
+
7
+ use soroban_sdk::{contract, contractimpl, Address};
8
+
9
+ #[contract]
10
+ #[common_macros::ownable]
11
+ pub struct MyContract;
12
+
13
+ #[contractimpl]
14
+ impl MyContract {
15
+ // Intentionally missing `Env`: should fail during macro expansion.
16
+ #[common_macros::only_auth]
17
+ pub fn bad(x: u32) {
18
+ let _ = x;
19
+ }
20
+ }
21
+
22
+ fn main() {}
@@ -0,0 +1,16 @@
1
+ error: custom attribute panicked
2
+ --> tests/ui/ownable/fail/only_auth_missing_env.rs:16:5
3
+ |
4
+ 16 | #[common_macros::only_auth]
5
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^
6
+ |
7
+ = help: message: function must have an Env argument
8
+
9
+ error[E0599]: no function or associated item named `bad` found for struct `MyContract` in the current scope
10
+ --> tests/ui/ownable/fail/only_auth_missing_env.rs:17:12
11
+ |
12
+ 11 | pub struct MyContract;
13
+ | --------------------- function or associated item `bad` not found for this struct
14
+ ...
15
+ 17 | pub fn bad(x: u32) {
16
+ | ^^^ function or associated item not found in `MyContract`
@@ -0,0 +1,26 @@
1
+ // UI (trybuild) test: minimal ownable usage compiles.
2
+ //
3
+ // Purpose:
4
+ // - Verifies `#[common_macros::ownable]` can be applied on a contract struct.
5
+ // - Verifies macro-generated items exist and are type-checkable from downstream code:
6
+ // - `Self::init_owner(&Env, &Address)` helper
7
+ // - `utils::ownable::Ownable` trait impl for the contract
8
+
9
+ use soroban_sdk::{contract, contractimpl, Address, Env};
10
+
11
+ #[contract]
12
+ #[common_macros::ownable]
13
+ pub struct MyContract;
14
+
15
+ #[contractimpl]
16
+ impl MyContract {
17
+ pub fn init(env: Env, owner: Address) {
18
+ // `init_owner` is generated by `#[ownable]` as a helper on the contract type.
19
+ Self::init_owner(&env, &owner);
20
+
21
+ // Ensure the trait impl exists (type-check only).
22
+ let _ = <Self as utils::ownable::Ownable>::owner(&env);
23
+ }
24
+ }
25
+
26
+ fn main() {}
@@ -0,0 +1,21 @@
1
+ // UI (trybuild) test: macro expansion works with fully-qualified trait paths.
2
+ //
3
+ // Purpose:
4
+ // - Ensures a downstream crate can use the generated `Ownable` trait impl via a fully-qualified path
5
+ // without importing `utils::ownable::Ownable` into scope.
6
+
7
+ use soroban_sdk::{contract, contractimpl, Address, Env};
8
+
9
+ #[contract]
10
+ #[common_macros::ownable]
11
+ pub struct MyContract;
12
+
13
+ #[contractimpl]
14
+ impl MyContract {
15
+ pub fn foo(env: Env) {
16
+ // Call using the fully-qualified trait path without importing the trait.
17
+ let _ = <Self as utils::ownable::Ownable>::owner(&env);
18
+ }
19
+ }
20
+
21
+ fn main() {}