@layerzerolabs/protocol-stellar-v2 0.2.12 → 0.2.15

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 (319) hide show
  1. package/.turbo/turbo-build.log +384 -278
  2. package/.turbo/turbo-lint.log +110 -78
  3. package/.turbo/turbo-test.log +1248 -1014
  4. package/Cargo.lock +130 -3
  5. package/Cargo.toml +2 -1
  6. package/contracts/common-macros/src/contract_impl.rs +6 -1
  7. package/contracts/common-macros/src/lib.rs +47 -8
  8. package/contracts/common-macros/src/ownable.rs +7 -25
  9. package/contracts/common-macros/src/storage.rs +1 -1
  10. package/contracts/common-macros/src/tests/contract_impl.rs +5 -0
  11. package/contracts/common-macros/src/tests/mod.rs +1 -0
  12. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +23 -7
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +5 -25
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +48 -48
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +5 -25
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +21 -0
  17. package/contracts/common-macros/src/tests/upgradeable.rs +31 -0
  18. package/contracts/common-macros/src/ttl_configurable.rs +14 -44
  19. package/contracts/common-macros/src/upgradeable.rs +76 -0
  20. package/contracts/endpoint-v2/src/endpoint_v2.rs +25 -1
  21. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +175 -8
  22. package/contracts/endpoint-v2/src/tests/endpoint_v2/build_outbound_packet.rs +76 -0
  23. package/contracts/endpoint-v2/src/tests/endpoint_v2/clear.rs +342 -159
  24. package/contracts/endpoint-v2/src/tests/endpoint_v2/delegate.rs +3 -15
  25. package/contracts/endpoint-v2/src/tests/endpoint_v2/initializable.rs +20 -31
  26. package/contracts/endpoint-v2/src/tests/endpoint_v2/lz_receive_alert.rs +126 -164
  27. package/contracts/endpoint-v2/src/tests/endpoint_v2/mod.rs +1 -0
  28. package/contracts/endpoint-v2/src/tests/endpoint_v2/native_token.rs +0 -1
  29. package/contracts/endpoint-v2/src/tests/endpoint_v2/owner.rs +0 -1
  30. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +311 -304
  31. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +423 -96
  32. package/contracts/endpoint-v2/src/tests/endpoint_v2/recover_token.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +47 -20
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +373 -403
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_delegate.rs +96 -22
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +61 -9
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/transfer_ownership.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/endpoint_v2/ttl_config.rs +8 -11
  39. package/contracts/endpoint-v2/src/tests/endpoint_v2/verifiable.rs +81 -30
  40. package/contracts/endpoint-v2/src/tests/endpoint_v2/verify.rs +209 -76
  41. package/contracts/endpoint-v2/src/tests/endpoint_v2/zro.rs +0 -1
  42. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library.rs +24 -0
  43. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_receive_library_timeout.rs +40 -0
  44. package/contracts/endpoint-v2/src/tests/message_lib_manager/default_send_library.rs +24 -0
  45. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_config.rs +108 -0
  46. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_library_index.rs +52 -0
  47. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_receive_library.rs +92 -0
  48. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_registered_libraries.rs +74 -0
  49. package/contracts/endpoint-v2/src/tests/message_lib_manager/get_send_library.rs +83 -0
  50. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_registered_library.rs +32 -0
  51. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_supported_eid.rs +28 -0
  52. package/contracts/endpoint-v2/src/tests/message_lib_manager/is_valid_receive_library.rs +261 -0
  53. package/contracts/endpoint-v2/src/tests/message_lib_manager/mod.rs +16 -0
  54. package/contracts/endpoint-v2/src/tests/message_lib_manager/receive_library_timeout.rs +62 -0
  55. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +65 -43
  56. package/contracts/endpoint-v2/src/tests/message_lib_manager/registered_libraries_count.rs +42 -0
  57. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +61 -0
  58. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +3 -5
  59. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +59 -0
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +15 -1
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_config.rs +155 -51
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +114 -92
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +235 -132
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_send_library.rs +93 -87
  65. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library.rs +346 -245
  66. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_receive_library_timeout.rs +406 -60
  67. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_send_library.rs +252 -78
  68. package/contracts/endpoint-v2/src/tests/message_lib_manager/timeout.rs +102 -0
  69. package/contracts/endpoint-v2/src/tests/messaging_channel/burn.rs +212 -273
  70. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +203 -0
  71. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +94 -0
  72. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_nonce.rs +78 -248
  73. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +7 -282
  74. package/contracts/endpoint-v2/src/tests/messaging_channel/lazy_inbound_nonce.rs +6 -274
  75. package/contracts/endpoint-v2/src/tests/messaging_channel/mod.rs +3 -2
  76. package/contracts/endpoint-v2/src/tests/messaging_channel/next_guid.rs +86 -178
  77. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +328 -212
  78. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +68 -0
  79. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound_nonce.rs +6 -209
  80. package/contracts/endpoint-v2/src/tests/messaging_channel/skip.rs +207 -159
  81. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +142 -153
  82. package/contracts/endpoint-v2/src/tests/messaging_composer/compose_queue.rs +6 -179
  83. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +163 -221
  84. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +90 -121
  85. package/contracts/endpoint-v2/src/tests/mock.rs +18 -4
  86. package/contracts/endpoint-v2/src/tests/util/build_payload.rs +4 -70
  87. package/contracts/endpoint-v2/src/tests/util/compute_guid.rs +2 -1
  88. package/contracts/endpoint-v2/src/tests/util/keccak256.rs +17 -106
  89. package/contracts/layerzero-views/Cargo.toml +35 -0
  90. package/contracts/layerzero-views/src/errors.rs +10 -0
  91. package/contracts/layerzero-views/src/layerzero_view.rs +229 -0
  92. package/contracts/layerzero-views/src/lib.rs +38 -0
  93. package/contracts/layerzero-views/src/storage.rs +18 -0
  94. package/contracts/layerzero-views/src/tests/layerzero_view_tests.rs +423 -0
  95. package/contracts/layerzero-views/src/tests/mod.rs +4 -0
  96. package/contracts/layerzero-views/src/tests/setup.rs +377 -0
  97. package/contracts/layerzero-views/src/types.rs +50 -0
  98. package/contracts/macro-integration-tests/Cargo.toml +30 -0
  99. package/contracts/macro-integration-tests/src/lib.rs +1 -0
  100. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +62 -0
  101. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +22 -0
  102. package/contracts/macro-integration-tests/tests/runtime/ownable/only_owner_guard.rs +97 -0
  103. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +101 -0
  104. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +225 -0
  105. package/contracts/macro-integration-tests/tests/runtime/storage/mod.rs +4 -0
  106. package/contracts/macro-integration-tests/tests/runtime/storage/name_override_runtime.rs +52 -0
  107. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +261 -0
  108. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +137 -0
  109. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +113 -0
  110. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +50 -0
  111. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +139 -0
  112. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +3 -0
  113. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  114. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +12 -0
  115. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +7 -0
  116. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.rs +12 -0
  117. package/contracts/macro-integration-tests/tests/ui/error/fail/decreasing_discriminant.stderr +7 -0
  118. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.rs +21 -0
  119. package/contracts/macro-integration-tests/tests/ui/error/fail/non_int_discriminant.stderr +7 -0
  120. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.rs +13 -0
  121. package/contracts/macro-integration-tests/tests/ui/error/fail/non_unit_variant.stderr +7 -0
  122. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +20 -0
  123. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +15 -0
  124. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +16 -0
  125. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.rs +22 -0
  126. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_owner_missing_env.stderr +16 -0
  127. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +26 -0
  128. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +22 -0
  129. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_owner_env_param_variants.rs +46 -0
  130. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.rs +13 -0
  131. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +7 -0
  132. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.rs +13 -0
  133. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +7 -0
  134. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.rs +10 -0
  135. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_storage_kinds.stderr +7 -0
  136. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.rs +12 -0
  137. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +7 -0
  138. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.rs +10 -0
  139. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_on_non_persistent.stderr +7 -0
  140. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.rs +10 -0
  141. package/contracts/macro-integration-tests/tests/ui/storage/fail/non_enum_input.stderr +7 -0
  142. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +12 -0
  143. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +7 -0
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.rs +13 -0
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/tuple_variant_rejected.stderr +7 -0
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.rs +13 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/unknown_variant_attr.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +14 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +14 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +16 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +15 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +14 -0
  153. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +19 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +15 -0
  155. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +44 -0
  156. package/contracts/macro-integration-tests/tests/ui_error.rs +11 -0
  157. package/contracts/macro-integration-tests/tests/ui_ownable.rs +11 -0
  158. package/contracts/macro-integration-tests/tests/ui_storage.rs +11 -0
  159. package/contracts/macro-integration-tests/tests/ui_ttl_configurable.rs +12 -0
  160. package/contracts/message-libs/blocked-message-lib/src/lib.rs +17 -17
  161. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +64 -0
  162. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet.rs +58 -0
  163. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/encode_packet_header.rs +138 -0
  164. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/mod.rs +6 -0
  165. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload.rs +30 -0
  166. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/payload_hash.rs +15 -0
  167. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/test_helper.rs +39 -0
  168. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_dvn_option.rs +57 -0
  169. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +50 -0
  170. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +74 -0
  171. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +280 -0
  172. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +126 -0
  173. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +48 -0
  174. package/contracts/message-libs/message-lib-common/src/tests/worker_options/mod.rs +7 -0
  175. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +139 -0
  176. package/contracts/message-libs/message-lib-common/src/worker_options.rs +31 -1
  177. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +2 -2
  178. package/contracts/message-libs/treasury/src/errors.rs +0 -1
  179. package/contracts/message-libs/treasury/src/lib.rs +3 -3
  180. package/contracts/message-libs/treasury/src/storage.rs +2 -0
  181. package/contracts/message-libs/treasury/src/treasury.rs +12 -13
  182. package/contracts/message-libs/uln-302/Cargo.toml +1 -1
  183. package/contracts/message-libs/uln-302/src/errors.rs +0 -5
  184. package/contracts/message-libs/uln-302/src/events.rs +5 -6
  185. package/contracts/message-libs/uln-302/src/receive_uln.rs +24 -54
  186. package/contracts/message-libs/uln-302/src/send_uln.rs +89 -135
  187. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  188. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +5 -7
  189. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +3 -3
  190. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +6 -9
  191. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_executor_configs.rs +2 -2
  192. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +3 -3
  193. package/contracts/message-libs/uln-302/src/tests/setup.rs +9 -0
  194. package/contracts/message-libs/uln-302/src/tests/testing_utils.rs +5 -0
  195. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_receive_uln_config.rs +1 -2
  196. package/contracts/message-libs/uln-302/src/tests/uln302/get_app_send_uln_config.rs +1 -2
  197. package/contracts/message-libs/uln-302/src/tests/uln302/set_config.rs +37 -55
  198. package/contracts/message-libs/uln-302/src/uln302.rs +8 -5
  199. package/contracts/oapps/counter/src/counter.rs +0 -1
  200. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +306 -224
  201. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +0 -1
  202. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +0 -1
  203. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +0 -1
  204. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +0 -1
  205. package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_core.rs +1 -0
  206. package/contracts/oapps/oft/integration-tests/setup.rs +10 -3
  207. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  208. package/contracts/oapps/oft/src/default_oft_impl.rs +9 -3
  209. package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -5
  210. package/contracts/oapps/oft/src/extensions/pausable.rs +1 -1
  211. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +18 -18
  212. package/contracts/oapps/oft/src/oft.rs +9 -9
  213. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +1 -1
  214. package/contracts/oapps/oft/src/tests/extensions/setup.rs +26 -11
  215. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1 -1
  216. package/contracts/oapps/oft/src/tests/test_send.rs +4 -4
  217. package/contracts/oapps/oft/src/tests/test_utils.rs +93 -74
  218. package/contracts/oapps/oft-std/Cargo.toml +6 -0
  219. package/contracts/oapps/oft-std/integration-tests/extensions/mod.rs +3 -0
  220. package/contracts/oapps/oft-std/integration-tests/extensions/test_oft_fee.rs +157 -0
  221. package/contracts/oapps/oft-std/integration-tests/extensions/test_pausable.rs +162 -0
  222. package/contracts/oapps/oft-std/integration-tests/extensions/test_rate_limiter.rs +186 -0
  223. package/contracts/oapps/oft-std/integration-tests/mod.rs +3 -0
  224. package/contracts/oapps/oft-std/integration-tests/setup.rs +245 -0
  225. package/contracts/oapps/oft-std/integration-tests/utils.rs +427 -0
  226. package/contracts/oapps/oft-std/src/lib.rs +12 -1
  227. package/contracts/oapps/oft-std/src/oft.rs +122 -25
  228. package/contracts/upgrader/Cargo.toml +19 -0
  229. package/contracts/upgrader/src/lib.rs +96 -0
  230. package/contracts/upgrader/src/tests/mod.rs +1 -0
  231. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
  232. package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
  233. package/contracts/upgrader/src/tests/test_upgrader.rs +120 -0
  234. package/contracts/utils/src/errors.rs +6 -1
  235. package/contracts/utils/src/lib.rs +2 -1
  236. package/contracts/utils/src/ownable.rs +49 -61
  237. package/contracts/utils/src/tests/mod.rs +3 -1
  238. package/contracts/utils/src/tests/option_ext.rs +21 -0
  239. package/contracts/utils/src/tests/ownable.rs +10 -69
  240. package/contracts/utils/src/tests/ttl_configurable.rs +596 -0
  241. package/contracts/utils/src/tests/upgradeable.rs +288 -0
  242. package/contracts/utils/src/{ttl.rs → ttl_configurable.rs} +67 -52
  243. package/contracts/utils/src/upgradeable.rs +54 -0
  244. package/contracts/workers/dvn/Cargo.toml +1 -1
  245. package/contracts/workers/dvn/src/auth.rs +21 -32
  246. package/contracts/workers/dvn/src/dvn.rs +40 -3
  247. package/contracts/workers/dvn/src/errors.rs +1 -0
  248. package/contracts/workers/dvn/src/multisig.rs +10 -6
  249. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -2
  250. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +4 -4
  251. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -2
  252. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +46 -14
  253. package/contracts/workers/dvn-fee-lib/src/errors.rs +3 -2
  254. package/contracts/workers/dvn-fee-lib/src/lib.rs +5 -11
  255. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +30 -16
  256. package/contracts/workers/executor/src/executor.rs +16 -2
  257. package/contracts/workers/executor-fee-lib/src/errors.rs +9 -7
  258. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +154 -119
  259. package/contracts/workers/executor-helper/Cargo.toml +0 -5
  260. package/contracts/workers/executor-helper/src/lib.rs +1 -7
  261. package/contracts/workers/price-feed/Cargo.toml +0 -1
  262. package/contracts/workers/price-feed/src/errors.rs +3 -2
  263. package/contracts/workers/price-feed/src/lib.rs +5 -6
  264. package/contracts/workers/price-feed/src/price_feed.rs +39 -17
  265. package/contracts/workers/worker/Cargo.toml +4 -0
  266. package/contracts/workers/worker/src/interfaces/price_feed.rs +3 -3
  267. package/contracts/workers/worker/src/lib.rs +2 -2
  268. package/contracts/workers/worker/src/tests/mod.rs +4 -0
  269. package/contracts/workers/worker/src/tests/setup.rs +147 -0
  270. package/contracts/workers/worker/src/tests/worker.rs +501 -0
  271. package/contracts/workers/worker/src/worker.rs +10 -16
  272. package/package.json +3 -3
  273. package/sdk/dist/generated/bml.d.ts +40 -30
  274. package/sdk/dist/generated/bml.js +16 -11
  275. package/sdk/dist/generated/counter.d.ts +168 -134
  276. package/sdk/dist/generated/counter.js +26 -21
  277. package/sdk/dist/generated/dvn.d.ts +1932 -0
  278. package/sdk/dist/generated/dvn.js +288 -0
  279. package/sdk/dist/generated/dvn_fee_lib.d.ts +615 -0
  280. package/sdk/dist/generated/dvn_fee_lib.js +123 -0
  281. package/sdk/dist/generated/endpoint.d.ts +75 -41
  282. package/sdk/dist/generated/endpoint.js +22 -17
  283. package/sdk/dist/generated/executor.d.ts +1809 -0
  284. package/sdk/dist/generated/executor.js +269 -0
  285. package/sdk/dist/generated/executor_fee_lib.d.ts +999 -0
  286. package/sdk/dist/generated/executor_fee_lib.js +208 -0
  287. package/sdk/dist/generated/executor_helper.d.ts +869 -0
  288. package/sdk/dist/generated/executor_helper.js +187 -0
  289. package/sdk/dist/generated/oft_std.d.ts +1544 -0
  290. package/sdk/dist/generated/oft_std.js +271 -0
  291. package/sdk/dist/generated/price_feed.d.ts +1002 -0
  292. package/sdk/dist/generated/price_feed.js +170 -0
  293. package/sdk/dist/generated/sml.d.ts +75 -41
  294. package/sdk/dist/generated/sml.js +22 -17
  295. package/sdk/dist/generated/uln302.d.ts +79 -60
  296. package/sdk/dist/generated/uln302.js +37 -37
  297. package/sdk/dist/generated/upgrader.d.ts +70 -0
  298. package/sdk/dist/generated/upgrader.js +19 -0
  299. package/sdk/dist/index.d.ts +8 -0
  300. package/sdk/dist/index.js +11 -0
  301. package/sdk/package.json +4 -3
  302. package/sdk/src/index.ts +13 -0
  303. package/sdk/test/index.test.ts +0 -1
  304. package/sdk/test/oft.test.ts +12 -23
  305. package/sdk/test/suites/testUpgradeable.ts +169 -0
  306. package/sdk/test/upgrader.test.ts +309 -0
  307. package/tools/ts-bindings-gen/src/main.rs +11 -1
  308. package/contracts/endpoint-v2/src/tests/messaging_channel/clear.rs +0 -316
  309. package/contracts/endpoint-v2/src/tests/messaging_channel/internal.rs +0 -388
  310. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1.rs +0 -162
  311. package/contracts/message-libs/message-lib-common/src/tests/worker_options.rs +0 -319
  312. package/contracts/utils/src/tests/ttl.rs +0 -421
  313. /package/contracts/{oapp-macros → oapps/oapp-macros}/Cargo.toml +0 -0
  314. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/lib.rs +0 -0
  315. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_full.rs +0 -0
  316. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_options_type3.rs +0 -0
  317. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_receiver.rs +0 -0
  318. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/oapp_sender.rs +0 -0
  319. /package/contracts/{oapp-macros → oapps/oapp-macros}/src/util.rs +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;
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,50 @@
1
+ // Runtime tests: `extend_instance_ttl` behavior.
2
+ //
3
+ // Tests covered:
4
+ // - `extend_instance_ttl` exists on `#[ttl_configurable]` contracts and manually extends instance TTL.
5
+
6
+ use common_macros::{ownable, ttl_configurable};
7
+ use soroban_sdk::{
8
+ contract, contractimpl,
9
+ testutils::{storage::Instance as _, Address as _, Ledger as _},
10
+ Address, Env,
11
+ };
12
+
13
+ #[contract]
14
+ #[ttl_configurable]
15
+ #[ownable]
16
+ pub struct TestContract;
17
+
18
+ #[contractimpl]
19
+ impl TestContract {
20
+ pub fn init(env: Env, owner: Address) {
21
+ Self::init_owner(&env, &owner);
22
+ }
23
+ }
24
+
25
+ #[test]
26
+ fn extend_instance_ttl_extends() {
27
+ let env = Env::default();
28
+ let contract_id = env.register(TestContract, ());
29
+ let client = TestContractClient::new(&env, &contract_id);
30
+
31
+ // Write something to ensure instance storage exists and has a TTL.
32
+ let owner = Address::generate(&env);
33
+ client.init(&owner);
34
+
35
+ let (ttl_before, seq_before) =
36
+ env.as_contract(&contract_id, || (env.storage().instance().get_ttl(), env.ledger().sequence()));
37
+ let live_until = seq_before + ttl_before;
38
+
39
+ // Choose a threshold near the current TTL and extend further.
40
+ let threshold = ttl_before.saturating_sub(1);
41
+ let extend_to = ttl_before + 50;
42
+
43
+ // Set sequence so remaining TTL == threshold (i.e. at the trigger point).
44
+ env.ledger().set_sequence_number(live_until - threshold);
45
+
46
+ client.extend_instance_ttl(&threshold, &extend_to);
47
+
48
+ let ttl_after = env.as_contract(&contract_id, || env.storage().instance().get_ttl());
49
+ assert_eq!(ttl_after, extend_to);
50
+ }
@@ -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;
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,3 @@
1
+ mod configuration;
2
+ mod extend_instance_ttl;
3
+ 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_owner]` 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};
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_owner]
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_owner_missing_env.rs:16:5
3
+ |
4
+ 16 | #[common_macros::only_owner]
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_owner_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() {}