@layerzerolabs/protocol-stellar-v2 0.2.21 → 0.2.23

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 (328) hide show
  1. package/.turbo/turbo-build.log +347 -271
  2. package/.turbo/turbo-lint.log +277 -208
  3. package/.turbo/turbo-test.log +1700 -1370
  4. package/Cargo.lock +22 -51
  5. package/Cargo.toml +6 -1
  6. package/contracts/common-macros/src/auth.rs +10 -9
  7. package/contracts/common-macros/src/contract_ttl.rs +1 -4
  8. package/contracts/common-macros/src/error.rs +1 -3
  9. package/contracts/common-macros/src/lib.rs +65 -61
  10. package/contracts/common-macros/src/storage.rs +212 -65
  11. package/contracts/common-macros/src/tests/auth.rs +75 -6
  12. package/contracts/common-macros/src/tests/contract_ttl.rs +383 -350
  13. package/contracts/common-macros/src/tests/error.rs +9 -21
  14. package/contracts/common-macros/src/tests/lz_contract.rs +80 -0
  15. package/contracts/common-macros/src/tests/mod.rs +2 -0
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -3
  17. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +28 -1
  18. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +8 -43
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +6 -29
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__lz_contract__snapshot_generated_lz_contract_code.snap +31 -0
  21. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_extendable__snapshot_generated_ttl_extendable_code.snap +8 -0
  22. package/contracts/common-macros/src/tests/storage/extract_fields.rs +87 -0
  23. package/contracts/common-macros/src/tests/storage/gen_accessor_methods.rs +223 -0
  24. package/contracts/common-macros/src/tests/storage/gen_args.rs +65 -0
  25. package/contracts/common-macros/src/tests/storage/gen_enum_variant.rs +78 -0
  26. package/contracts/common-macros/src/tests/storage/gen_key.rs +108 -0
  27. package/contracts/common-macros/src/tests/storage/gen_params.rs +105 -0
  28. package/contracts/common-macros/src/tests/{storage.rs → storage/generate_storage.rs} +54 -129
  29. package/contracts/common-macros/src/tests/storage/is_primitive_type.rs +48 -0
  30. package/contracts/common-macros/src/tests/storage/mod.rs +16 -0
  31. package/contracts/common-macros/src/tests/storage/parse_default.rs +164 -0
  32. package/contracts/common-macros/src/tests/storage/parse_name.rs +159 -0
  33. package/contracts/common-macros/src/tests/storage/parse_no_ttl_extension.rs +124 -0
  34. package/contracts/common-macros/src/tests/storage/parse_storage_type.rs +174 -0
  35. package/contracts/common-macros/src/tests/storage/snapshots/common_macros__tests__storage__generate_storage__snapshot_generated_storage_code.snap +412 -0
  36. package/contracts/common-macros/src/tests/storage/storage_kind.rs +39 -0
  37. package/contracts/common-macros/src/tests/storage/test_setup.rs +25 -0
  38. package/contracts/common-macros/src/tests/storage/validate_attrs.rs +138 -0
  39. package/contracts/common-macros/src/tests/storage/variant_config.rs +226 -0
  40. package/contracts/common-macros/src/tests/test_helpers.rs +4 -10
  41. package/contracts/common-macros/src/tests/ttl_configurable.rs +2 -2
  42. package/contracts/common-macros/src/tests/ttl_extendable.rs +32 -0
  43. package/contracts/common-macros/src/tests/upgradeable.rs +118 -2
  44. package/contracts/common-macros/src/ttl_configurable.rs +1 -4
  45. package/contracts/common-macros/src/upgradeable.rs +21 -3
  46. package/contracts/endpoint-v2/Cargo.toml +0 -4
  47. package/contracts/endpoint-v2/src/endpoint_v2.rs +37 -17
  48. package/contracts/endpoint-v2/src/errors.rs +26 -1
  49. package/contracts/endpoint-v2/src/interfaces/layerzero_endpoint_v2.rs +1 -1
  50. package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +4 -4
  51. package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
  52. package/contracts/endpoint-v2/src/lib.rs +0 -1
  53. package/contracts/endpoint-v2/src/message_lib_manager.rs +39 -8
  54. package/contracts/endpoint-v2/src/messaging_channel.rs +36 -4
  55. package/contracts/endpoint-v2/src/messaging_composer.rs +18 -4
  56. package/contracts/endpoint-v2/src/storage.rs +9 -1
  57. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +2 -2
  58. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +1 -1
  59. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
  60. package/contracts/endpoint-v2/src/tests/message_lib_manager/register_library.rs +3 -3
  61. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +5 -5
  62. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +2 -2
  63. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +5 -5
  64. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +3 -3
  65. package/contracts/endpoint-v2/src/tests/messaging_channel/nilify.rs +1 -1
  66. package/contracts/endpoint-v2/src/tests/messaging_composer/clear_compose.rs +4 -3
  67. package/contracts/endpoint-v2/src/tests/messaging_composer/lz_compose_alert.rs +7 -2
  68. package/contracts/endpoint-v2/src/tests/messaging_composer/mod.rs +4 -0
  69. package/contracts/endpoint-v2/src/tests/messaging_composer/send_compose.rs +7 -2
  70. package/contracts/layerzero-views/src/layerzero_view.rs +0 -1
  71. package/contracts/layerzero-views/src/tests/mod.rs +1 -0
  72. package/contracts/layerzero-views/src/tests/types_tests.rs +31 -0
  73. package/contracts/layerzero-views/src/types.rs +2 -3
  74. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/constructor.rs +61 -0
  75. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_impl_ttl_extension.rs +97 -0
  76. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/contract_trait_ttl_extension.rs +99 -0
  77. package/contracts/macro-integration-tests/tests/runtime/contract_ttl/mod.rs +3 -0
  78. package/contracts/macro-integration-tests/tests/runtime/lz_contract/mod.rs +5 -0
  79. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_default.rs +86 -0
  80. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig.rs +47 -0
  81. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_multisig_upgradeable.rs +77 -0
  82. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable.rs +114 -0
  83. package/contracts/macro-integration-tests/tests/runtime/lz_contract/wrapper_upgradeable_no_migration.rs +105 -0
  84. package/contracts/macro-integration-tests/tests/runtime/multisig/admin_entrypoints.rs +242 -0
  85. package/contracts/macro-integration-tests/tests/runtime/multisig/mod.rs +9 -0
  86. package/contracts/macro-integration-tests/tests/runtime/multisig/self_auth.rs +54 -0
  87. package/contracts/macro-integration-tests/tests/runtime/ownable/initialization.rs +13 -0
  88. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +1 -0
  89. package/contracts/macro-integration-tests/tests/runtime/ownable/ownership_transfer.rs +70 -1
  90. package/contracts/macro-integration-tests/tests/runtime/ownable/two_step_transfer.rs +219 -0
  91. package/contracts/macro-integration-tests/tests/runtime/storage/keyed_roundtrip.rs +41 -0
  92. package/contracts/macro-integration-tests/tests/runtime/storage/ttl_extension.rs +48 -16
  93. package/contracts/macro-integration-tests/tests/runtime/storage/unkeyed_roundtrip.rs +10 -0
  94. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +96 -3
  95. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +4 -0
  96. package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/extend_instance_ttl.rs +64 -0
  97. package/contracts/macro-integration-tests/tests/runtime/ttl_extendable/mod.rs +16 -0
  98. package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs +305 -0
  99. package/contracts/macro-integration-tests/tests/runtime/upgradeable/mod.rs +3 -0
  100. package/contracts/macro-integration-tests/tests/runtime/upgradeable/no_migration.rs +59 -0
  101. package/contracts/macro-integration-tests/tests/runtime/upgradeable/upgrade_then_migrate.rs +88 -0
  102. package/contracts/macro-integration-tests/tests/runtime.rs +5 -0
  103. package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.rs +6 -0
  104. package/contracts/macro-integration-tests/tests/ui/contract_impl/fail/not_impl_item.stderr +7 -0
  105. package/contracts/macro-integration-tests/tests/ui/contract_impl/pass/basic.rs +102 -0
  106. package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.rs +6 -0
  107. package/contracts/macro-integration-tests/tests/ui/contract_trait/fail/not_a_trait.stderr +7 -0
  108. package/contracts/macro-integration-tests/tests/ui/contract_trait/pass/basic.rs +83 -0
  109. package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.rs +11 -0
  110. package/contracts/macro-integration-tests/tests/ui/error/fail/discriminant_too_large.stderr +7 -0
  111. package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.rs +11 -0
  112. package/contracts/macro-integration-tests/tests/ui/error/fail/non_enum_input.stderr +7 -0
  113. package/contracts/macro-integration-tests/tests/ui/error/pass/basic.rs +22 -0
  114. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.rs +6 -0
  115. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/invalid_option.stderr +7 -0
  116. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.rs +20 -0
  117. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/multisig_rejects_ownable_api.stderr +20 -0
  118. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.rs +8 -0
  119. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/not_a_struct.stderr +7 -0
  120. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.rs +10 -0
  121. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_invalid_inner_option.stderr +7 -0
  122. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.rs +20 -0
  123. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.stderr +86 -0
  124. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/basic.rs +45 -0
  125. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig.rs +34 -0
  126. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/multisig_upgradeable.rs +30 -0
  127. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable.rs +39 -0
  128. package/contracts/macro-integration-tests/tests/ui/lz_contract/pass/upgradeable_no_migration.rs +28 -0
  129. package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.rs +8 -0
  130. package/contracts/macro-integration-tests/tests/ui/multisig/fail/non_struct_input.stderr +7 -0
  131. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.rs +20 -0
  132. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_api.stderr +12 -0
  133. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.rs +20 -0
  134. package/contracts/macro-integration-tests/tests/ui/multisig/fail/rejects_ownable_trait.stderr +5 -0
  135. package/contracts/macro-integration-tests/tests/ui/multisig/pass/basic.rs +49 -0
  136. package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.rs +8 -0
  137. package/contracts/macro-integration-tests/tests/ui/ownable/fail/non_struct_input.stderr +7 -0
  138. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.rs +19 -0
  139. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_auth.stderr +12 -0
  140. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.rs +1 -1
  141. package/contracts/macro-integration-tests/tests/ui/ownable/fail/only_auth_missing_env.stderr +0 -8
  142. package/contracts/macro-integration-tests/tests/ui/ownable/pass/basic.rs +39 -0
  143. package/contracts/macro-integration-tests/tests/ui/ownable/pass/only_auth_env_param_variants.rs +7 -1
  144. package/contracts/macro-integration-tests/tests/ui/storage/fail/invalid_storage_type_param.stderr +1 -1
  145. package/contracts/macro-integration-tests/tests/ui/storage/fail/missing_storage_type_param.stderr +1 -1
  146. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.rs +11 -0
  147. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_default_values.stderr +7 -0
  148. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.rs +11 -0
  149. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_name_attrs.stderr +7 -0
  150. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.rs +11 -0
  151. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_no_ttl_extension.stderr +7 -0
  152. package/contracts/macro-integration-tests/tests/ui/storage/fail/multiple_type_params.stderr +1 -1
  153. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.rs +13 -0
  154. package/contracts/macro-integration-tests/tests/ui/storage/fail/no_ttl_extension_rejects_args.stderr +7 -0
  155. package/contracts/macro-integration-tests/tests/ui/storage/pass/api_surface.rs +102 -0
  156. package/contracts/macro-integration-tests/tests/ui/storage/pass/basic.rs +43 -0
  157. package/contracts/macro-integration-tests/tests/ui/storage/pass/multi_key.rs +38 -0
  158. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.rs +14 -0
  159. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/missing_auth_trait.stderr +71 -0
  160. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.rs +8 -0
  161. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/fail/non_struct_input.stderr +7 -0
  162. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/{minimal_contract.rs → basic.rs} +2 -0
  163. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/multisig_contract.rs +28 -0
  164. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/ownable_contract.rs +32 -0
  165. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.rs +8 -0
  166. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/fail/non_struct_input.stderr +7 -0
  167. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/basic.rs +23 -0
  168. package/contracts/macro-integration-tests/tests/ui/ttl_extendable/pass/no_user_contractimpl.rs +21 -0
  169. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.rs +11 -0
  170. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/attr_args.stderr +29 -0
  171. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.rs +20 -0
  172. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.stderr +71 -0
  173. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.rs +10 -0
  174. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.stderr +79 -0
  175. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.rs +8 -0
  176. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/non_struct_input.stderr +7 -0
  177. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/basic.rs +43 -0
  178. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/multisig_contract.rs +35 -0
  179. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_migration.rs +30 -0
  180. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_user_contractimpl.rs +29 -0
  181. package/contracts/macro-integration-tests/tests/ui_contract_impl.rs +12 -0
  182. package/contracts/macro-integration-tests/tests/ui_contract_trait.rs +12 -0
  183. package/contracts/macro-integration-tests/tests/ui_lz_contract.rs +11 -0
  184. package/contracts/macro-integration-tests/tests/ui_multisig.rs +11 -0
  185. package/contracts/macro-integration-tests/tests/ui_ttl_extendable.rs +12 -0
  186. package/contracts/macro-integration-tests/tests/ui_upgradeable.rs +11 -0
  187. package/contracts/message-libs/blocked-message-lib/Cargo.toml +1 -1
  188. package/contracts/message-libs/blocked-message-lib/src/lib.rs +4 -1
  189. package/contracts/message-libs/blocked-message-lib/src/tests/blocked_message_lib_tests.rs +108 -0
  190. package/contracts/message-libs/blocked-message-lib/src/tests/mod.rs +4 -0
  191. package/contracts/message-libs/blocked-message-lib/src/tests/setup.rs +40 -0
  192. package/contracts/message-libs/simple-message-lib/src/lib.rs +1 -1
  193. package/contracts/message-libs/simple-message-lib/src/tests/mod.rs +2 -0
  194. package/contracts/message-libs/simple-message-lib/src/tests/setup.rs +124 -0
  195. package/contracts/message-libs/simple-message-lib/src/tests/simple_message_lib_tests.rs +309 -0
  196. package/contracts/message-libs/uln-302/src/errors.rs +21 -0
  197. package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +1 -1
  198. package/contracts/message-libs/uln-302/src/receive_uln.rs +6 -4
  199. package/contracts/message-libs/uln-302/src/send_uln.rs +15 -6
  200. package/contracts/message-libs/uln-302/src/storage.rs +5 -5
  201. package/contracts/message-libs/uln-302/src/tests/uln302/get_config.rs +71 -0
  202. package/contracts/message-libs/uln-302/src/tests/uln302/mod.rs +1 -0
  203. package/contracts/message-libs/uln-302/src/uln302.rs +3 -0
  204. package/contracts/oapps/counter/Cargo.toml +2 -0
  205. package/contracts/oapps/counter/integration_tests/mod.rs +1 -0
  206. package/contracts/oapps/counter/integration_tests/setup_sml.rs +6 -4
  207. package/contracts/oapps/counter/integration_tests/setup_uln.rs +12 -5
  208. package/contracts/oapps/counter/integration_tests/test_with_blocked.rs +67 -0
  209. package/contracts/oapps/counter/src/tests/mod.rs +1 -0
  210. package/contracts/oapps/counter/src/tests/test_u256_ext.rs +48 -0
  211. package/contracts/oapps/oapp/src/lib.rs +0 -3
  212. package/contracts/oapps/oapp/src/tests/mod.rs +1 -0
  213. package/contracts/oapps/oft/integration-tests/setup.rs +2 -3
  214. package/contracts/oapps/oft/src/lib.rs +3 -0
  215. package/contracts/oapps/oft/src/tests/extensions/mod.rs +3 -0
  216. package/contracts/oapps/oft/src/tests/extensions/oft_fee.rs +240 -0
  217. package/contracts/oapps/oft/src/tests/extensions/pausable.rs +141 -0
  218. package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +447 -0
  219. package/contracts/oapps/oft/src/tests/mod.rs +2 -0
  220. package/contracts/oapps/oft/src/tests/oft_types/lock_unlock.rs +180 -0
  221. package/contracts/oapps/oft/src/tests/oft_types/mod.rs +1 -0
  222. package/contracts/oapps/oft-core/integration-tests/setup.rs +2 -3
  223. package/contracts/oapps/oft-core/src/lib.rs +2 -2
  224. package/contracts/oapps/oft-core/src/tests/mod.rs +1 -1
  225. package/contracts/oapps/oft-core/src/tests/{test_oft_version.rs → test_oft_version_and_approval.rs} +9 -0
  226. package/contracts/oapps/oft-core/src/tests/test_utils.rs +0 -43
  227. package/contracts/upgrader/src/tests/test_upgrader.rs +18 -0
  228. package/contracts/utils/src/auth.rs +2 -2
  229. package/contracts/utils/src/buffer_reader.rs +61 -10
  230. package/contracts/utils/src/buffer_writer.rs +35 -20
  231. package/contracts/utils/src/bytes_ext.rs +1 -2
  232. package/contracts/utils/src/errors.rs +5 -3
  233. package/contracts/utils/src/multisig.rs +59 -36
  234. package/contracts/utils/src/option_ext.rs +3 -3
  235. package/contracts/utils/src/ownable.rs +12 -6
  236. package/contracts/utils/src/tests/auth.rs +179 -0
  237. package/contracts/utils/src/tests/buffer_reader.rs +203 -1
  238. package/contracts/utils/src/tests/buffer_writer.rs +176 -5
  239. package/contracts/utils/src/tests/mod.rs +2 -0
  240. package/contracts/utils/src/tests/multisig.rs +170 -141
  241. package/contracts/utils/src/tests/option_ext.rs +1 -1
  242. package/contracts/utils/src/tests/ownable.rs +156 -161
  243. package/contracts/utils/src/tests/test_helper.rs +21 -1
  244. package/contracts/utils/src/tests/testing_utils.rs +84 -2
  245. package/contracts/utils/src/tests/ttl_configurable.rs +66 -86
  246. package/contracts/utils/src/tests/ttl_extendable.rs +64 -0
  247. package/contracts/utils/src/tests/upgradeable.rs +115 -6
  248. package/contracts/utils/src/ttl_configurable.rs +22 -12
  249. package/contracts/utils/src/ttl_extendable.rs +1 -3
  250. package/contracts/utils/src/upgradeable.rs +21 -24
  251. package/contracts/workers/dvn/src/auth.rs +1 -1
  252. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  253. package/contracts/workers/dvn/src/storage.rs +1 -1
  254. package/contracts/workers/dvn/src/tests/auth.rs +136 -3
  255. package/contracts/workers/dvn/src/tests/mod.rs +0 -1
  256. package/contracts/workers/dvn/src/tests/setup.rs +4 -10
  257. package/contracts/workers/executor-helper/src/tests/executor_helper.rs +279 -0
  258. package/contracts/workers/executor-helper/src/tests/setup.rs +106 -1
  259. package/contracts/workers/worker/src/worker.rs +1 -1
  260. package/docs/oft-guide.md +5 -5
  261. package/package.json +5 -7
  262. package/sdk/.turbo/turbo-test.log +662 -466
  263. package/sdk/LICENSE +23 -0
  264. package/sdk/dist/generated/bml.d.ts +101 -106
  265. package/sdk/dist/generated/bml.js +108 -26
  266. package/sdk/dist/generated/counter.d.ts +123 -484
  267. package/sdk/dist/generated/counter.js +103 -25
  268. package/sdk/dist/generated/dvn.d.ts +141 -699
  269. package/sdk/dist/generated/dvn.js +106 -28
  270. package/sdk/dist/generated/dvn_fee_lib.d.ts +31 -248
  271. package/sdk/dist/generated/dvn_fee_lib.js +27 -24
  272. package/sdk/dist/generated/endpoint.d.ts +158 -836
  273. package/sdk/dist/generated/endpoint.js +107 -29
  274. package/sdk/dist/generated/executor.d.ts +139 -671
  275. package/sdk/dist/generated/executor.js +106 -28
  276. package/sdk/dist/generated/executor_fee_lib.d.ts +109 -264
  277. package/sdk/dist/generated/executor_fee_lib.js +106 -28
  278. package/sdk/dist/generated/executor_helper.d.ts +95 -92
  279. package/sdk/dist/generated/executor_helper.js +103 -25
  280. package/sdk/dist/generated/layerzero_view.d.ts +178 -335
  281. package/sdk/dist/generated/layerzero_view.js +172 -33
  282. package/sdk/dist/generated/oft.d.ts +137 -680
  283. package/sdk/dist/generated/oft.js +103 -25
  284. package/sdk/dist/generated/price_feed.d.ts +45 -444
  285. package/sdk/dist/generated/price_feed.js +27 -24
  286. package/sdk/dist/generated/sml.d.ts +119 -428
  287. package/sdk/dist/generated/sml.js +103 -25
  288. package/sdk/dist/generated/treasury.d.ts +109 -288
  289. package/sdk/dist/generated/treasury.js +103 -25
  290. package/sdk/dist/generated/uln302.d.ts +190 -527
  291. package/sdk/dist/generated/uln302.js +170 -31
  292. package/sdk/dist/generated/upgrader.d.ts +14 -34
  293. package/sdk/dist/generated/upgrader.js +24 -21
  294. package/sdk/package.json +3 -4
  295. package/sdk/test/counter-sml.test.ts +218 -142
  296. package/sdk/test/counter-uln.test.ts +189 -145
  297. package/sdk/test/oft-sml.test.ts +173 -156
  298. package/sdk/test/suites/constants.ts +7 -1
  299. package/sdk/test/suites/globalSetup.ts +140 -74
  300. package/sdk/turbo.json +1 -1
  301. package/tools/ts-bindings-gen/Cargo.toml +4 -4
  302. package/tools/ts-bindings-gen/src/main.rs +4 -0
  303. package/turbo.json +3 -0
  304. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__storage__snapshot_generated_storage_code.snap +0 -1072
  305. package/contracts/endpoint-v2/src/constants.rs +0 -52
  306. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.rs +0 -12
  307. package/contracts/macro-integration-tests/tests/ui/error/fail/attr_not_empty.stderr +0 -7
  308. package/contracts/macro-integration-tests/tests/ui/error/pass/attr_on_variant_allowed.rs +0 -20
  309. package/contracts/macro-integration-tests/tests/ui/error/pass/basic_auto_discriminants.rs +0 -15
  310. package/contracts/macro-integration-tests/tests/ui/error/pass/mixed_discriminants.rs +0 -16
  311. package/contracts/macro-integration-tests/tests/ui/ownable/pass/minimal_contract.rs +0 -26
  312. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +0 -21
  313. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.rs +0 -12
  314. package/contracts/macro-integration-tests/tests/ui/storage/fail/storage_attr_rejects_args.stderr +0 -7
  315. package/contracts/macro-integration-tests/tests/ui/storage/pass/default_value_on_variant.rs +0 -14
  316. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_instance_unit_basic.rs +0 -14
  317. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_persistent_named_fields_keyed.rs +0 -16
  318. package/contracts/macro-integration-tests/tests/ui/storage/pass/enum_temporary_unit_option.rs +0 -15
  319. package/contracts/macro-integration-tests/tests/ui/storage/pass/name_override.rs +0 -14
  320. package/contracts/macro-integration-tests/tests/ui/storage/pass/no_auto_ttl_extension.rs +0 -19
  321. package/contracts/macro-integration-tests/tests/ui/storage/pass/ttl_provider_basic.rs +0 -15
  322. package/contracts/message-libs/simple-message-lib/src/test.rs +0 -280
  323. package/contracts/oapps/oapp/src/macro_tests/mod.rs +0 -1
  324. package/contracts/workers/dvn/src/tests/multisig/mod.rs +0 -3
  325. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +0 -132
  326. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +0 -109
  327. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +0 -106
  328. /package/contracts/oapps/oapp/src/{macro_tests → tests}/test_macros.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  use quote::quote;
2
2
 
3
- use crate::tests::test_helpers::{assert_panics_contains, non_enum_item_inputs};
3
+ use crate::tests::test_helpers::{assert_panics_contains, filter_item_inputs_excluding_labels};
4
4
 
5
5
  // ============================================
6
6
  // Error Cases: Invalid Inputs
@@ -8,25 +8,13 @@ use crate::tests::test_helpers::{assert_panics_contains, non_enum_item_inputs};
8
8
 
9
9
  #[test]
10
10
  fn test_contract_error_rejects_non_enum_inputs() {
11
- for (case, input) in non_enum_item_inputs() {
11
+ for (case, input) in filter_item_inputs_excluding_labels(&["enum"]) {
12
12
  assert_panics_contains(case, "failed to parse enum", || {
13
- crate::error::generate_error(quote! {}, input.clone());
13
+ crate::error::generate_error(input.clone());
14
14
  });
15
15
  }
16
16
  }
17
17
 
18
- #[test]
19
- fn test_contract_error_rejects_attr_arguments() {
20
- let input = quote! {
21
- pub enum MyError {
22
- A,
23
- }
24
- };
25
- assert_panics_contains("attr not empty", "contract_error attribute is not supported", || {
26
- crate::error::generate_error(quote! { some_attr }, input);
27
- });
28
- }
29
-
30
18
  #[test]
31
19
  fn test_contract_error_requires_unit_variants() {
32
20
  let cases = vec![("tuple variant", quote! { A(u32) }), ("struct variant", quote! { A { x: u32 } })];
@@ -38,7 +26,7 @@ fn test_contract_error_requires_unit_variants() {
38
26
  }
39
27
  };
40
28
  assert_panics_contains(case, "Error enum variants must be unit variants", || {
41
- crate::error::generate_error(quote! {}, input.clone());
29
+ crate::error::generate_error(input.clone());
42
30
  });
43
31
  }
44
32
  }
@@ -63,7 +51,7 @@ fn test_contract_error_discriminant_must_be_integer_literal() {
63
51
  }
64
52
  };
65
53
  assert_panics_contains(case, "Error enum discriminant must be an integer literal", || {
66
- crate::error::generate_error(quote! {}, input.clone());
54
+ crate::error::generate_error(input.clone());
67
55
  });
68
56
  }
69
57
  }
@@ -77,7 +65,7 @@ fn test_contract_error_discriminant_must_fit_u32() {
77
65
  };
78
66
 
79
67
  assert_panics_contains("u32::MAX + 1", "Error enum discriminant must be a valid u32 integer", || {
80
- crate::error::generate_error(quote! {}, input);
68
+ crate::error::generate_error(input);
81
69
  });
82
70
  }
83
71
 
@@ -121,7 +109,7 @@ fn test_contract_error_discriminants_ordering_rejections_table_driven() {
121
109
  }
122
110
  };
123
111
  assert_panics_contains(case, "Error enum discriminant must be greater than the previous discriminant", || {
124
- crate::error::generate_error(quote! {}, input.clone());
112
+ crate::error::generate_error(input.clone());
125
113
  });
126
114
  }
127
115
  }
@@ -135,7 +123,7 @@ fn test_contract_error_max_not_last_panics_overflow() {
135
123
  }
136
124
  };
137
125
  assert_panics_contains("max not last overflows", "attempt to add with overflow", || {
138
- crate::error::generate_error(quote! {}, input);
126
+ crate::error::generate_error(input);
139
127
  });
140
128
  }
141
129
 
@@ -161,7 +149,7 @@ fn snapshot_generated_contract_error_code() {
161
149
  }
162
150
  };
163
151
 
164
- let result = crate::error::generate_error(quote! {}, input);
152
+ let result = crate::error::generate_error(input);
165
153
  let formatted = prettyplease::unparse(&syn::parse2::<syn::File>(result).expect("failed to parse generated code"));
166
154
 
167
155
  insta::assert_snapshot!(formatted);
@@ -0,0 +1,80 @@
1
+ use proc_macro2::TokenStream;
2
+ use quote::quote;
3
+
4
+ use crate::tests::test_helpers::{assert_panics_contains, filter_item_inputs_excluding_labels};
5
+
6
+ // ============================================
7
+ // Snapshot Tests: lz_contract Code Generation
8
+ // ============================================
9
+
10
+ #[test]
11
+ fn snapshot_generated_lz_contract_code() {
12
+ let input = quote! {
13
+ pub struct MyContract;
14
+ };
15
+
16
+ let default_result = crate::lz_contract::generate_lz_contract(TokenStream::new(), input.clone());
17
+ let default_formatted =
18
+ prettyplease::unparse(&syn::parse2::<syn::File>(default_result).expect("failed to parse generated code"));
19
+
20
+ let multisig_upgradeable_result = crate::lz_contract::generate_lz_contract(quote! { multisig, upgradeable }, input);
21
+ let multisig_upgradeable_formatted = prettyplease::unparse(
22
+ &syn::parse2::<syn::File>(multisig_upgradeable_result).expect("failed to parse generated code"),
23
+ );
24
+
25
+ let upgradeable_no_migration_result =
26
+ crate::lz_contract::generate_lz_contract(quote! { upgradeable(no_migration) }, quote! { pub struct MyContract; });
27
+ let upgradeable_no_migration_formatted = prettyplease::unparse(
28
+ &syn::parse2::<syn::File>(upgradeable_no_migration_result).expect("failed to parse generated code"),
29
+ );
30
+
31
+ let combined = format!(
32
+ "// === Default (ownable) ===\n\n{}\n\n// === MultiSig + Upgradeable ===\n\n{}\n\n// === Upgradeable (no_migration) ===\n\n{}",
33
+ default_formatted, multisig_upgradeable_formatted, upgradeable_no_migration_formatted
34
+ );
35
+
36
+ insta::assert_snapshot!(combined);
37
+ }
38
+
39
+ // ============================================
40
+ // Error Cases: Invalid Config
41
+ // ============================================
42
+
43
+ #[test]
44
+ fn test_lz_contract_invalid_config_table_driven() {
45
+ let input = quote! { pub struct MyContract; };
46
+
47
+ let cases: Vec<(&str, TokenStream, &str)> = vec![
48
+ (
49
+ "unknown option",
50
+ quote! { not_a_real_option },
51
+ "expected one of `upgradeable`, `multisig`",
52
+ ),
53
+ ("invalid attr syntax", quote! { 123 }, "failed to parse lz_contract config"),
54
+ ("upgradeable(bad_inner)", quote! { upgradeable(not_migration) }, "expected `no_migration`"),
55
+ (
56
+ "upgradeable(extra_tokens)",
57
+ quote! { upgradeable(no_migration, extra) },
58
+ "unexpected tokens in `upgradeable(...)`",
59
+ ),
60
+ ];
61
+
62
+ for (case, attr, expected_substring) in cases {
63
+ assert_panics_contains(case, expected_substring, || {
64
+ crate::lz_contract::generate_lz_contract(attr.clone(), input.clone());
65
+ });
66
+ }
67
+ }
68
+
69
+ // ============================================
70
+ // Error Cases: Non-Struct Input
71
+ // ============================================
72
+
73
+ #[test]
74
+ fn test_lz_contract_rejects_non_struct_inputs() {
75
+ for (case, input) in filter_item_inputs_excluding_labels(&["struct"]) {
76
+ assert_panics_contains(case, "failed to parse struct", || {
77
+ crate::lz_contract::generate_lz_contract(TokenStream::new(), input.clone());
78
+ });
79
+ }
80
+ }
@@ -1,8 +1,10 @@
1
1
  mod auth;
2
2
  mod contract_ttl;
3
3
  mod error;
4
+ mod lz_contract;
4
5
  mod storage;
5
6
  mod test_helpers;
6
7
  mod ttl_configurable;
8
+ mod ttl_extendable;
7
9
  mod upgradeable;
8
10
  mod utils;
@@ -1,9 +1,11 @@
1
1
  ---
2
2
  source: contracts/common-macros/src/tests/auth.rs
3
- expression: formatted
3
+ expression: combined
4
4
  ---
5
+ // === Unit struct ===
6
+
5
7
  pub struct MyContract;
6
- use utils::{auth::Auth as _, multisig::Multisig as _};
8
+ use utils::{auth::Auth as _, multisig::MultiSig as _};
7
9
  #[common_macros::contract_impl]
8
10
  impl utils::auth::Auth for MyContract {
9
11
  fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
@@ -11,4 +13,19 @@ impl utils::auth::Auth for MyContract {
11
13
  }
12
14
  }
13
15
  #[common_macros::contract_impl(contracttrait)]
14
- impl utils::multisig::Multisig for MyContract {}
16
+ impl utils::multisig::MultiSig for MyContract {}
17
+
18
+
19
+ // === Tuple struct ===
20
+
21
+ #[derive(Copy, Clone)]
22
+ pub struct MyContract(pub u32);
23
+ use utils::{auth::Auth as _, multisig::MultiSig as _};
24
+ #[common_macros::contract_impl]
25
+ impl utils::auth::Auth for MyContract {
26
+ fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
27
+ env.current_contract_address()
28
+ }
29
+ }
30
+ #[common_macros::contract_impl(contracttrait)]
31
+ impl utils::multisig::MultiSig for MyContract {}
@@ -1,7 +1,9 @@
1
1
  ---
2
2
  source: contracts/common-macros/src/tests/auth.rs
3
- expression: formatted
3
+ expression: combined
4
4
  ---
5
+ // === Unit struct ===
6
+
5
7
  pub struct MyContract;
6
8
  use utils::{
7
9
  auth::Auth as _, option_ext::OptionExt as _,
@@ -17,3 +19,28 @@ impl utils::auth::Auth for MyContract {
17
19
  }
18
20
  #[common_macros::contract_impl(contracttrait)]
19
21
  impl utils::ownable::Ownable for MyContract {}
22
+
23
+
24
+ // === Generics + fields ===
25
+
26
+ #[derive(Clone, Debug)]
27
+ pub struct MyContract<T>
28
+ where
29
+ T: Clone,
30
+ {
31
+ pub value: T,
32
+ }
33
+ use utils::{
34
+ auth::Auth as _, option_ext::OptionExt as _,
35
+ ownable::{Ownable as _, OwnableInitializer as _},
36
+ };
37
+ impl utils::ownable::OwnableInitializer for MyContract {}
38
+ #[common_macros::contract_impl]
39
+ impl utils::auth::Auth for MyContract {
40
+ fn authorizer(env: &soroban_sdk::Env) -> soroban_sdk::Address {
41
+ <Self as utils::ownable::Ownable>::owner(env)
42
+ .unwrap_or_panic(env, utils::errors::OwnableError::OwnerNotSet)
43
+ }
44
+ }
45
+ #[common_macros::contract_impl(contracttrait)]
46
+ impl utils::ownable::Ownable for MyContract {}
@@ -1,43 +1,26 @@
1
1
  ---
2
2
  source: contracts/common-macros/src/tests/contract_ttl.rs
3
- assertion_line: 109
4
3
  expression: combined
5
4
  ---
6
5
  // === Inherent Impl (no attr) ===
7
6
 
8
7
  #[soroban_sdk::contractimpl]
9
8
  impl MyContract {
9
+ const A_CONST: u32 = 1;
10
+ type Alias = u32;
10
11
  /// Public method with Env - should have TTL extension
11
12
  pub fn public_with_env(env: Env, value: u32) -> u32 {
12
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
13
- &env,
14
- ) {
15
- env.storage()
16
- .instance()
17
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
18
- }
13
+ utils::ttl_configurable::extend_instance_ttl(&env);
19
14
  value * 2
20
15
  }
21
16
  /// Public method with qualified Env path - should have TTL extension
22
17
  pub fn with_qualified_env(env: soroban_sdk::Env) -> u32 {
23
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
24
- &env,
25
- ) {
26
- env.storage()
27
- .instance()
28
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
29
- }
18
+ utils::ttl_configurable::extend_instance_ttl(&env);
30
19
  42
31
20
  }
32
21
  /// Public method with Env not as first parameter - should have TTL extension
33
22
  pub fn env_second(value: u32, env: &Env) -> u32 {
34
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
35
- env,
36
- ) {
37
- env.storage()
38
- .instance()
39
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
40
- }
23
+ utils::ttl_configurable::extend_instance_ttl(env);
41
24
  value * 2
42
25
  }
43
26
  /// Public method without Env - should NOT have TTL extension
@@ -66,13 +49,7 @@ impl MyContract {
66
49
  impl SomeTrait for MyContract {
67
50
  /// Trait method with Env - should have TTL extension
68
51
  fn trait_method_with_env(env: Env, value: u32) -> u32 {
69
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
70
- &env,
71
- ) {
72
- env.storage()
73
- .instance()
74
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
75
- }
52
+ utils::ttl_configurable::extend_instance_ttl(&env);
76
53
  value * 2
77
54
  }
78
55
  /// Trait method without Env - should NOT have TTL extension
@@ -82,13 +59,7 @@ impl SomeTrait for MyContract {
82
59
  /// Trait method with macro attribute - should have TTL extension
83
60
  #[common_macros::only_auth]
84
61
  fn trait_method_with_only_auth_attribute(env: Env, value: u32) -> u32 {
85
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
86
- &env,
87
- ) {
88
- env.storage()
89
- .instance()
90
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
91
- }
62
+ utils::ttl_configurable::extend_instance_ttl(&env);
92
63
  value * 5
93
64
  }
94
65
  }
@@ -100,13 +71,7 @@ impl SomeTrait for MyContract {
100
71
  impl AnotherTrait for MyContract {
101
72
  /// Trait method with contracttrait attr - should have TTL extension
102
73
  fn contracttrait_method(env: &Env, value: u32) -> u32 {
103
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
104
- env,
105
- ) {
106
- env.storage()
107
- .instance()
108
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
109
- }
74
+ utils::ttl_configurable::extend_instance_ttl(env);
110
75
  value * 3
111
76
  }
112
77
  }
@@ -1,43 +1,26 @@
1
1
  ---
2
2
  source: contracts/common-macros/src/tests/contract_ttl.rs
3
- assertion_line: 75
4
3
  expression: combined
5
4
  ---
6
5
  // === Trait (no attr) ===
7
6
 
8
7
  #[soroban_sdk::contracttrait]
9
8
  pub trait MyTrait: Sized {
9
+ const A_CONST: u32;
10
+ type Alias;
10
11
  /// Default method with Env - should have TTL extension
11
12
  fn default_with_env(env: Env, value: u32) -> u32 {
12
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
13
- &env,
14
- ) {
15
- env.storage()
16
- .instance()
17
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
18
- }
13
+ utils::ttl_configurable::extend_instance_ttl(&env);
19
14
  value * 2
20
15
  }
21
16
  /// Default method with qualified Env path - should have TTL extension
22
17
  fn with_qualified_env(env: soroban_sdk::Env) -> u32 {
23
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
24
- &env,
25
- ) {
26
- env.storage()
27
- .instance()
28
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
29
- }
18
+ utils::ttl_configurable::extend_instance_ttl(&env);
30
19
  42
31
20
  }
32
21
  /// Default method with Env not as first parameter - should have TTL extension
33
22
  fn env_second(value: u32, env: &Env) -> u32 {
34
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
35
- env,
36
- ) {
37
- env.storage()
38
- .instance()
39
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
40
- }
23
+ utils::ttl_configurable::extend_instance_ttl(env);
41
24
  value * 2
42
25
  }
43
26
  /// Default method without Env - should NOT have TTL extension
@@ -57,13 +40,7 @@ pub trait MyTrait: Sized {
57
40
  pub trait AnotherTrait {
58
41
  /// Default method with Env - should have TTL extension
59
42
  fn method_with_env(env: &Env, value: u32) -> u32 {
60
- if let Some(instance_ttl) = utils::ttl_configurable::TtlConfigStorage::instance(
61
- env,
62
- ) {
63
- env.storage()
64
- .instance()
65
- .extend_ttl(instance_ttl.threshold, instance_ttl.extend_to);
66
- }
43
+ utils::ttl_configurable::extend_instance_ttl(env);
67
44
  value * 3
68
45
  }
69
46
  }
@@ -0,0 +1,31 @@
1
+ ---
2
+ source: contracts/common-macros/src/tests/lz_contract.rs
3
+ expression: combined
4
+ ---
5
+ // === Default (ownable) ===
6
+
7
+ #[soroban_sdk::contract]
8
+ #[common_macros::ttl_configurable]
9
+ #[common_macros::ttl_extendable]
10
+ #[common_macros::ownable]
11
+ pub struct MyContract;
12
+
13
+
14
+ // === MultiSig + Upgradeable ===
15
+
16
+ #[soroban_sdk::contract]
17
+ #[common_macros::ttl_configurable]
18
+ #[common_macros::ttl_extendable]
19
+ #[common_macros::multisig]
20
+ #[common_macros::upgradeable]
21
+ pub struct MyContract;
22
+
23
+
24
+ // === Upgradeable (no_migration) ===
25
+
26
+ #[soroban_sdk::contract]
27
+ #[common_macros::ttl_configurable]
28
+ #[common_macros::ttl_extendable]
29
+ #[common_macros::ownable]
30
+ #[common_macros::upgradeable(no_migration)]
31
+ pub struct MyContract;
@@ -0,0 +1,8 @@
1
+ ---
2
+ source: contracts/common-macros/src/tests/ttl_extendable.rs
3
+ expression: formatted
4
+ ---
5
+ pub struct MyContract;
6
+ use utils::ttl_extendable::TtlExtendable as _;
7
+ #[soroban_sdk::contractimpl(contracttrait)]
8
+ impl utils::ttl_extendable::TtlExtendable for MyContract {}
@@ -0,0 +1,87 @@
1
+ //! Unit tests for the `extract_fields` function.
2
+
3
+ use crate::storage::test::extract_fields_for_test;
4
+ use crate::tests::test_helpers::assert_panics_contains;
5
+ use quote::{quote, ToTokens};
6
+
7
+ use super::test_setup::parse_variant;
8
+
9
+ #[test]
10
+ fn test_unit_variant_returns_empty() {
11
+ let variant = parse_variant(quote! {
12
+ enum Test {
13
+ #[persistent(u32)]
14
+ UnitVariant,
15
+ }
16
+ });
17
+
18
+ let fields = extract_fields_for_test(&variant);
19
+ assert!(fields.is_empty(), "unit variant should have no fields");
20
+ }
21
+
22
+ #[test]
23
+ fn test_named_variant_single_field() {
24
+ let variant = parse_variant(quote! {
25
+ enum Test {
26
+ #[persistent(u32)]
27
+ NamedVariant { key: Address },
28
+ }
29
+ });
30
+
31
+ let fields = extract_fields_for_test(&variant);
32
+ assert_eq!(fields.len(), 1, "should have exactly one field");
33
+ assert_eq!(fields[0].0.to_string(), "key");
34
+ assert_eq!(fields[0].1.to_token_stream().to_string(), "Address");
35
+ }
36
+
37
+ #[test]
38
+ fn test_named_variant_multiple_fields() {
39
+ let variant = parse_variant(quote! {
40
+ enum Test {
41
+ #[persistent(u32)]
42
+ NamedVariant { first: u32, second: String, third: Address },
43
+ }
44
+ });
45
+
46
+ let fields = extract_fields_for_test(&variant);
47
+ assert_eq!(fields.len(), 3, "should have exactly three fields");
48
+ assert_eq!(fields[0].0.to_string(), "first");
49
+ assert_eq!(fields[1].0.to_string(), "second");
50
+ assert_eq!(fields[2].0.to_string(), "third");
51
+
52
+ assert_eq!(fields[0].1.to_token_stream().to_string(), "u32");
53
+ assert_eq!(fields[1].1.to_token_stream().to_string(), "String");
54
+ assert_eq!(fields[2].1.to_token_stream().to_string(), "Address");
55
+ }
56
+
57
+ #[test]
58
+ fn test_tuple_variant_panics() {
59
+ let variant = parse_variant(quote! {
60
+ enum Test {
61
+ TupleVariant(u32, String),
62
+ }
63
+ });
64
+
65
+ assert_panics_contains("tuple variant", "only unit variants or named fields are supported", || {
66
+ extract_fields_for_test(&variant);
67
+ });
68
+ }
69
+
70
+ #[test]
71
+ fn test_preserves_field_order() {
72
+ let variant = parse_variant(quote! {
73
+ enum Test {
74
+ #[persistent(u32)]
75
+ OrderedVariant { alpha: u32, beta: String, gamma: Address, delta: bool },
76
+ }
77
+ });
78
+
79
+ let fields = extract_fields_for_test(&variant);
80
+ let names: Vec<_> = fields.iter().map(|(name, _)| name.to_string()).collect();
81
+ assert_eq!(names, vec!["alpha", "beta", "gamma", "delta"]);
82
+
83
+ assert_eq!(fields[0].1.to_token_stream().to_string(), "u32");
84
+ assert_eq!(fields[1].1.to_token_stream().to_string(), "String");
85
+ assert_eq!(fields[2].1.to_token_stream().to_string(), "Address");
86
+ assert_eq!(fields[3].1.to_token_stream().to_string(), "bool");
87
+ }