@layerzerolabs/protocol-stellar-v2 0.2.15 → 0.2.19

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 (262) hide show
  1. package/.turbo/turbo-build.log +365 -297
  2. package/.turbo/turbo-lint.log +142 -110
  3. package/.turbo/turbo-test.log +1273 -1222
  4. package/Cargo.lock +20 -5
  5. package/Cargo.toml +4 -1
  6. package/contracts/ERROR_SPEC.md +44 -0
  7. package/contracts/common-macros/src/auth.rs +113 -0
  8. package/contracts/common-macros/src/contract_ttl.rs +84 -0
  9. package/contracts/common-macros/src/lib.rs +181 -30
  10. package/contracts/common-macros/src/lz_contract.rs +83 -0
  11. package/contracts/common-macros/src/tests/{ownable.rs → auth.rs} +48 -15
  12. package/contracts/common-macros/src/tests/contract_ttl.rs +662 -0
  13. package/contracts/common-macros/src/tests/mod.rs +2 -2
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_multisig_code.snap +20 -0
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__auth__snapshot_generated_ownable_code.snap +24 -0
  16. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap → common_macros__tests__auth__snapshot_only_auth_preserves_function_signature.snap} +4 -4
  17. package/contracts/common-macros/src/tests/snapshots/{common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap → common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap} +3 -3
  18. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contracttrait_code.snap +69 -0
  19. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +7 -21
  20. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +2 -2
  21. package/contracts/common-macros/src/ttl_configurable.rs +19 -34
  22. package/contracts/common-macros/src/ttl_extendable.rs +36 -0
  23. package/contracts/common-macros/src/upgradeable.rs +5 -5
  24. package/contracts/common-macros/src/utils.rs +9 -0
  25. package/contracts/endpoint-v2/src/constants.rs +4 -4
  26. package/contracts/endpoint-v2/src/endpoint_v2.rs +38 -40
  27. package/contracts/endpoint-v2/src/errors.rs +4 -3
  28. package/contracts/endpoint-v2/src/events.rs +1 -1
  29. package/contracts/endpoint-v2/src/message_lib_manager.rs +18 -5
  30. package/contracts/endpoint-v2/src/messaging_channel.rs +11 -1
  31. package/contracts/endpoint-v2/src/messaging_composer.rs +11 -1
  32. package/contracts/endpoint-v2/src/storage.rs +1 -1
  33. package/contracts/endpoint-v2/src/tests/endpoint_v2/pay_messaging_fees.rs +3 -3
  34. package/contracts/endpoint-v2/src/tests/endpoint_v2/quote.rs +1 -1
  35. package/contracts/endpoint-v2/src/tests/endpoint_v2/require_oapp_auth.rs +2 -2
  36. package/contracts/endpoint-v2/src/tests/endpoint_v2/send.rs +3 -3
  37. package/contracts/endpoint-v2/src/tests/endpoint_v2/set_zro.rs +4 -4
  38. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_receive_lib_for_eid.rs +3 -3
  39. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_registered.rs +1 -1
  40. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_send_lib_for_eid.rs +3 -3
  41. package/contracts/endpoint-v2/src/tests/message_lib_manager/require_supported_eid.rs +1 -1
  42. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +4 -4
  43. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +1 -1
  44. package/contracts/layerzero-views/src/layerzero_view.rs +3 -6
  45. package/contracts/macro-integration-tests/tests/runtime/ownable/mod.rs +2 -2
  46. package/contracts/macro-integration-tests/tests/runtime/ownable/{only_owner_guard.rs → only_auth_guard.rs} +1 -1
  47. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/configuration.rs +1 -1
  48. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/freeze.rs +1 -1
  49. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/mod.rs +0 -1
  50. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.rs → only_auth_missing_env.rs} +3 -3
  51. package/contracts/macro-integration-tests/tests/ui/ownable/fail/{only_owner_missing_env.stderr → only_auth_missing_env.stderr} +4 -4
  52. package/contracts/macro-integration-tests/tests/ui/ownable/pass/namespacing_and_imports.rs +2 -3
  53. package/contracts/macro-integration-tests/tests/ui/ownable/pass/{only_owner_env_param_variants.rs → only_auth_env_param_variants.rs} +9 -9
  54. package/contracts/macro-integration-tests/tests/ui/ttl_configurable/pass/minimal_contract.rs +6 -6
  55. package/contracts/message-libs/message-lib-common/src/errors.rs +7 -2
  56. package/contracts/message-libs/message-lib-common/src/tests/packet_codec_v1/decode_packet_header.rs +3 -3
  57. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_lz_receive_option.rs +1 -2
  58. package/contracts/message-libs/message-lib-common/src/tests/worker_options/append_native_drop_option.rs +1 -2
  59. package/contracts/message-libs/message-lib-common/src/tests/worker_options/convert_legacy_options.rs +9 -9
  60. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +1 -1
  61. package/contracts/message-libs/message-lib-common/src/tests/worker_options/left_pad_to_bytes32.rs +1 -1
  62. package/contracts/message-libs/message-lib-common/src/tests/worker_options/split_worker_options.rs +2 -2
  63. package/contracts/message-libs/simple-message-lib/src/simple_message_lib.rs +7 -9
  64. package/contracts/message-libs/treasury/src/errors.rs +2 -2
  65. package/contracts/message-libs/treasury/src/events.rs +1 -1
  66. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +2 -2
  67. package/contracts/message-libs/treasury/src/storage.rs +1 -1
  68. package/contracts/message-libs/treasury/src/tests/treasury_tests.rs +1 -1
  69. package/contracts/message-libs/treasury/src/treasury.rs +14 -16
  70. package/contracts/message-libs/uln-302/src/receive_uln.rs +13 -2
  71. package/contracts/message-libs/uln-302/src/send_uln.rs +24 -4
  72. package/contracts/message-libs/uln-302/src/uln302.rs +6 -24
  73. package/contracts/oapps/counter/Cargo.toml +14 -1
  74. package/contracts/oapps/counter/integration_tests/mod.rs +4 -1
  75. package/contracts/oapps/counter/integration_tests/{setup.rs → setup_sml.rs} +48 -80
  76. package/contracts/oapps/counter/integration_tests/setup_uln.rs +997 -0
  77. package/contracts/oapps/counter/integration_tests/signing.rs +62 -0
  78. package/contracts/oapps/counter/integration_tests/test_with_sml.rs +24 -55
  79. package/contracts/oapps/counter/integration_tests/test_with_uln.rs +314 -0
  80. package/contracts/oapps/counter/integration_tests/utils.rs +196 -53
  81. package/contracts/oapps/counter/src/counter.rs +67 -43
  82. package/contracts/oapps/counter/src/tests/mod.rs +0 -13
  83. package/contracts/oapps/counter/src/tests/test_counter.rs +5 -7
  84. package/contracts/oapps/oapp/src/errors.rs +5 -1
  85. package/contracts/oapps/oapp/src/macro_tests/test_macros.rs +93 -78
  86. package/contracts/oapps/oapp/src/oapp_core.rs +36 -21
  87. package/contracts/oapps/oapp/src/oapp_options_type3.rs +48 -12
  88. package/contracts/oapps/oapp/src/oapp_receiver.rs +106 -41
  89. package/contracts/oapps/oapp/src/oapp_sender.rs +26 -34
  90. package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +9 -8
  91. package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +25 -17
  92. package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +7 -7
  93. package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +14 -15
  94. package/contracts/oapps/oapp-macros/src/generators.rs +128 -0
  95. package/contracts/oapps/oapp-macros/src/lib.rs +113 -56
  96. package/contracts/oapps/oft/Cargo.toml +10 -7
  97. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_oft_fee.rs +3 -4
  98. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_pausable.rs +2 -3
  99. package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_rate_limiter.rs +1 -1
  100. package/contracts/oapps/oft/integration-tests/mod.rs +1 -1
  101. package/contracts/oapps/oft/integration-tests/setup.rs +29 -110
  102. package/contracts/oapps/oft/integration-tests/utils.rs +254 -21
  103. package/contracts/oapps/oft/src/extensions/oft_fee.rs +13 -14
  104. package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
  105. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +5 -5
  106. package/contracts/oapps/oft/src/lib.rs +11 -13
  107. package/contracts/oapps/oft/src/oft.rs +147 -225
  108. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -13
  109. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +31 -14
  110. package/contracts/oapps/oft/src/oft_types/mod.rs +13 -0
  111. package/contracts/oapps/{oft-std → oft-core}/Cargo.toml +6 -4
  112. package/contracts/oapps/{oft-std → oft-core}/integration-tests/mod.rs +1 -1
  113. package/contracts/oapps/{oft-std → oft-core}/integration-tests/setup.rs +129 -30
  114. package/contracts/oapps/{oft → oft-core}/integration-tests/test_with_sml.rs +3 -3
  115. package/contracts/oapps/oft-core/integration-tests/utils.rs +201 -0
  116. package/contracts/oapps/oft-core/src/errors.rs +13 -0
  117. package/contracts/oapps/oft-core/src/lib.rs +18 -0
  118. package/contracts/oapps/oft-core/src/oft_core.rs +439 -0
  119. package/contracts/oapps/{oft → oft-core}/src/storage.rs +2 -0
  120. package/contracts/oapps/{oft → oft-core}/src/tests/mod.rs +0 -2
  121. package/contracts/oapps/{oft → oft-core}/src/tests/test_decimals.rs +2 -2
  122. package/contracts/oapps/{oft → oft-core}/src/tests/test_lz_receive.rs +7 -7
  123. package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_msg_codec.rs +4 -5
  124. package/contracts/oapps/{oft → oft-core}/src/tests/test_resolve_address.rs +3 -3
  125. package/contracts/oapps/{oft → oft-core}/src/tests/test_utils.rs +78 -37
  126. package/contracts/oapps/oft-core/src/types.rs +58 -0
  127. package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
  128. package/contracts/upgrader/src/lib.rs +4 -4
  129. package/contracts/utils/src/auth.rs +44 -0
  130. package/contracts/utils/src/errors.rs +31 -5
  131. package/contracts/utils/src/lib.rs +3 -0
  132. package/contracts/utils/src/multisig.rs +211 -0
  133. package/contracts/utils/src/ownable.rs +137 -13
  134. package/contracts/utils/src/tests/buffer_reader.rs +6 -6
  135. package/contracts/utils/src/tests/buffer_writer.rs +6 -6
  136. package/contracts/utils/src/tests/bytes_ext.rs +2 -4
  137. package/contracts/utils/src/tests/mod.rs +1 -0
  138. package/contracts/utils/src/tests/multisig.rs +731 -0
  139. package/contracts/utils/src/tests/option_ext.rs +2 -5
  140. package/contracts/utils/src/tests/ownable.rs +456 -7
  141. package/contracts/utils/src/tests/ttl_configurable.rs +27 -16
  142. package/contracts/utils/src/tests/upgradeable.rs +4 -2
  143. package/contracts/utils/src/ttl_configurable.rs +23 -8
  144. package/contracts/utils/src/ttl_extendable.rs +27 -0
  145. package/contracts/utils/src/upgradeable.rs +2 -0
  146. package/contracts/workers/dvn/Cargo.toml +1 -1
  147. package/contracts/workers/dvn/src/auth.rs +7 -7
  148. package/contracts/workers/dvn/src/dvn.rs +10 -38
  149. package/contracts/workers/dvn/src/errors.rs +0 -7
  150. package/contracts/workers/dvn/src/events.rs +1 -14
  151. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  152. package/contracts/workers/dvn/src/interfaces/mod.rs +0 -2
  153. package/contracts/workers/dvn/src/storage.rs +3 -13
  154. package/contracts/workers/dvn/src/tests/auth.rs +4 -4
  155. package/contracts/workers/dvn/src/tests/dvn.rs +1 -2
  156. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +7 -8
  157. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +11 -8
  158. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +11 -12
  159. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  160. package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
  161. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -6
  162. package/contracts/workers/executor/src/auth.rs +80 -16
  163. package/contracts/workers/executor/src/executor.rs +5 -31
  164. package/contracts/workers/executor/src/storage.rs +2 -9
  165. package/contracts/workers/executor-fee-lib/Cargo.toml +1 -1
  166. package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +3 -6
  167. package/contracts/workers/executor-helper/Cargo.toml +1 -1
  168. package/contracts/workers/executor-helper/src/executor_helper.rs +53 -73
  169. package/contracts/workers/price-feed/Cargo.toml +1 -1
  170. package/contracts/workers/price-feed/src/price_feed.rs +7 -10
  171. package/contracts/workers/worker/src/errors.rs +4 -0
  172. package/contracts/workers/worker/src/tests/worker.rs +7 -6
  173. package/contracts/workers/worker/src/worker.rs +20 -16
  174. package/package.json +7 -5
  175. package/sdk/.turbo/turbo-build.log +1 -0
  176. package/sdk/.turbo/turbo-test.log +1019 -0
  177. package/sdk/dist/generated/bml.d.ts +95 -8
  178. package/sdk/dist/generated/bml.js +95 -36
  179. package/sdk/dist/generated/counter.d.ts +289 -44
  180. package/sdk/dist/generated/counter.js +119 -49
  181. package/sdk/dist/generated/dvn.d.ts +312 -229
  182. package/sdk/dist/generated/dvn.js +144 -83
  183. package/sdk/dist/generated/dvn_fee_lib.d.ts +258 -63
  184. package/sdk/dist/generated/dvn_fee_lib.js +95 -26
  185. package/sdk/dist/generated/endpoint.d.ts +219 -24
  186. package/sdk/dist/generated/endpoint.js +108 -41
  187. package/sdk/dist/generated/executor.d.ts +239 -87
  188. package/sdk/dist/generated/executor.js +135 -63
  189. package/sdk/dist/generated/executor_fee_lib.d.ts +278 -74
  190. package/sdk/dist/generated/executor_fee_lib.js +135 -59
  191. package/sdk/dist/generated/executor_helper.d.ts +163 -21
  192. package/sdk/dist/generated/executor_helper.js +124 -52
  193. package/sdk/dist/generated/oft.d.ts +1842 -0
  194. package/sdk/dist/generated/oft.js +345 -0
  195. package/sdk/dist/generated/price_feed.d.ts +258 -63
  196. package/sdk/dist/generated/price_feed.js +95 -26
  197. package/sdk/dist/generated/sml.d.ts +235 -34
  198. package/sdk/dist/generated/sml.js +126 -53
  199. package/sdk/dist/generated/treasury.d.ts +1016 -0
  200. package/sdk/dist/generated/treasury.js +248 -0
  201. package/sdk/dist/generated/uln302.d.ts +235 -34
  202. package/sdk/dist/generated/uln302.js +126 -53
  203. package/sdk/dist/generated/upgrader.d.ts +17 -2
  204. package/sdk/dist/generated/upgrader.js +19 -1
  205. package/sdk/dist/index.d.ts +2 -1
  206. package/sdk/dist/index.js +2 -1
  207. package/sdk/package.json +6 -3
  208. package/sdk/src/index.ts +2 -1
  209. package/sdk/test/counter-sml.test.ts +376 -0
  210. package/sdk/test/counter-uln.test.ts +493 -0
  211. package/sdk/test/{oft.test.ts → oft-sml.test.ts} +196 -321
  212. package/sdk/test/suites/constants.ts +22 -2
  213. package/sdk/test/suites/globalSetup.ts +450 -0
  214. package/sdk/test/suites/localnet.ts +23 -6
  215. package/sdk/test/upgrader.test.ts +7 -16
  216. package/sdk/test/utils.ts +558 -85
  217. package/sdk/turbo.json +8 -0
  218. package/sdk/vitest.config.ts +21 -0
  219. package/tools/ts-bindings-gen/Cargo.toml +2 -0
  220. package/tools/ts-bindings-gen/src/main.rs +52 -4
  221. package/contracts/common-macros/src/contract_impl.rs +0 -52
  222. package/contracts/common-macros/src/ownable.rs +0 -41
  223. package/contracts/common-macros/src/tests/contract_impl.rs +0 -386
  224. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +0 -12
  225. package/contracts/macro-integration-tests/tests/runtime/ttl_configurable/extend_instance_ttl.rs +0 -50
  226. package/contracts/oapps/oapp-macros/src/oapp_core.rs +0 -41
  227. package/contracts/oapps/oapp-macros/src/oapp_full.rs +0 -21
  228. package/contracts/oapps/oapp-macros/src/oapp_options_type3.rs +0 -31
  229. package/contracts/oapps/oapp-macros/src/oapp_receiver.rs +0 -48
  230. package/contracts/oapps/oapp-macros/src/oapp_sender.rs +0 -21
  231. package/contracts/oapps/oapp-macros/src/util.rs +0 -107
  232. package/contracts/oapps/oft/src/constants.rs +0 -5
  233. package/contracts/oapps/oft/src/default_oft_impl.rs +0 -152
  234. package/contracts/oapps/oft/src/errors.rs +0 -8
  235. package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +0 -23
  236. package/contracts/oapps/oft/src/interfaces/mod.rs +0 -3
  237. package/contracts/oapps/oft/src/tests/extensions/mod.rs +0 -11
  238. package/contracts/oapps/oft/src/tests/extensions/setup.rs +0 -903
  239. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +0 -749
  240. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +0 -432
  241. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +0 -1078
  242. package/contracts/oapps/oft/src/types.rs +0 -38
  243. package/contracts/oapps/oft-std/integration-tests/utils.rs +0 -427
  244. package/contracts/oapps/oft-std/src/lib.rs +0 -16
  245. package/contracts/oapps/oft-std/src/oft.rs +0 -156
  246. package/contracts/workers/dvn/src/interfaces/multisig.rs +0 -56
  247. package/contracts/workers/dvn/src/multisig.rs +0 -157
  248. package/sdk/dist/generated/oft_std.d.ts +0 -1544
  249. package/sdk/dist/generated/oft_std.js +0 -271
  250. package/sdk/test/index.test.ts +0 -375
  251. /package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/mod.rs +0 -0
  252. /package/contracts/oapps/{oft → oft-core}/src/codec/mod.rs +0 -0
  253. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_compose_msg_codec.rs +0 -0
  254. /package/contracts/oapps/{oft → oft-core}/src/codec/oft_msg_codec.rs +0 -0
  255. /package/contracts/oapps/{oft → oft-core}/src/events.rs +0 -0
  256. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_compose_msg_codec.rs +0 -0
  257. /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_version.rs +0 -0
  258. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_oft.rs +0 -0
  259. /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_send.rs +0 -0
  260. /package/contracts/oapps/{oft → oft-core}/src/tests/test_send.rs +0 -0
  261. /package/contracts/oapps/{oft → oft-core}/src/tests/test_token.rs +0 -0
  262. /package/sdk/test/suites/{testUpgradeable.ts → dummyContractClient.ts} +0 -0
@@ -1,432 +0,0 @@
1
- //! Tests for the pausable extension functionality.
2
- //!
3
- //! Tests verify that when paused:
4
- //! - `send` is blocked
5
- //! - `lz_receive` is blocked
6
- //! - `quote_send` is blocked
7
- //! - `quote_oft` works (view function, not blocked)
8
-
9
- use crate::extensions::pausable::OFTPausableError;
10
- use crate::tests::test_utils::{create_origin, create_recipient_address, encode_oft_message};
11
- use crate::utils::address_to_bytes32;
12
- use endpoint_v2::MessagingFee;
13
- use soroban_sdk::{testutils::Address as _, Address, Bytes, BytesN, Env, IntoVal};
14
-
15
- use super::setup::ExtensiveOFTTestSetup;
16
-
17
- // ==================== Pausable State Tests ====================
18
-
19
- #[test]
20
- fn test_initial_state_not_paused() {
21
- let env = Env::default();
22
- let setup = ExtensiveOFTTestSetup::new(&env);
23
-
24
- assert!(!setup.is_paused());
25
- }
26
-
27
- #[test]
28
- fn test_set_paused_true() {
29
- let env = Env::default();
30
- let setup = ExtensiveOFTTestSetup::new(&env);
31
-
32
- setup.set_paused(true);
33
- assert!(setup.is_paused());
34
- }
35
-
36
- #[test]
37
- fn test_set_paused_false_after_true() {
38
- let env = Env::default();
39
- let setup = ExtensiveOFTTestSetup::new(&env);
40
-
41
- setup.set_paused(true);
42
- assert!(setup.is_paused());
43
-
44
- setup.set_paused(false);
45
- assert!(!setup.is_paused());
46
- }
47
-
48
- #[test]
49
- fn test_set_paused_same_value_fails() {
50
- let env = Env::default();
51
- let setup = ExtensiveOFTTestSetup::new(&env);
52
-
53
- // Already not paused, setting to false should fail with PauseStatusUnchanged
54
- let result = setup.try_set_paused(false);
55
- assert_eq!(result.err().unwrap().ok().unwrap(), OFTPausableError::PauseStatusUnchanged.into());
56
- }
57
-
58
- #[test]
59
- fn test_set_paused_true_when_already_paused_fails() {
60
- let env = Env::default();
61
- let setup = ExtensiveOFTTestSetup::new(&env);
62
-
63
- // First pause the contract
64
- setup.set_paused(true);
65
- assert!(setup.is_paused());
66
-
67
- // Try to pause again - should fail with PauseStatusUnchanged
68
- let result = setup.try_set_paused(true);
69
- assert_eq!(result.err().unwrap().ok().unwrap(), OFTPausableError::PauseStatusUnchanged.into());
70
- }
71
-
72
- // ==================== Send Tests (Pausable) ====================
73
-
74
- #[test]
75
- fn test_send_succeeds_when_not_paused() {
76
- let env = Env::default();
77
- let setup = ExtensiveOFTTestSetup::new(&env);
78
-
79
- // Set fee deposit address (required by ExtensiveOFT)
80
- let fee_collector = create_recipient_address(&env);
81
- setup.set_fee_deposit_address(&fee_collector);
82
-
83
- let sender = Address::generate(&env);
84
- let dst_eid = 100u32;
85
- let peer = BytesN::from_array(&env, &[2u8; 32]);
86
- setup.set_peer(dst_eid, &peer);
87
-
88
- let amount_ld = 1_000_000i128;
89
- setup.fund_tokens(&sender, amount_ld);
90
- setup.fund_native_fees(&sender, setup.native_fee);
91
-
92
- let send_param = setup.create_send_param(dst_eid, amount_ld, amount_ld);
93
- let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
94
- let oft_receipt = setup.quote_oft(&send_param);
95
-
96
- // Should succeed when not paused
97
- let (msg_receipt, _) = setup.send(&sender, &send_param, &fee, &sender, &oft_receipt);
98
- assert!(msg_receipt.nonce > 0);
99
- }
100
-
101
- #[test]
102
- fn test_send_fails_when_paused() {
103
- let env = Env::default();
104
- let setup = ExtensiveOFTTestSetup::new(&env);
105
-
106
- // Set fee deposit address (required by ExtensiveOFT)
107
- let fee_collector = create_recipient_address(&env);
108
- setup.set_fee_deposit_address(&fee_collector);
109
-
110
- let sender = Address::generate(&env);
111
- let dst_eid = 100u32;
112
- let peer = BytesN::from_array(&env, &[2u8; 32]);
113
- setup.set_peer(dst_eid, &peer);
114
-
115
- let amount_ld = 1_000_000i128;
116
- setup.fund_tokens(&sender, amount_ld);
117
- setup.fund_native_fees(&sender, setup.native_fee);
118
-
119
- let send_param = setup.create_send_param(dst_eid, amount_ld, amount_ld);
120
- let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
121
- let oft_receipt = setup.quote_oft(&send_param);
122
-
123
- // Pause the contract
124
- setup.set_paused(true);
125
-
126
- // Should fail when paused
127
- let result = setup.try_send(&sender, &send_param, &fee, &sender, &oft_receipt);
128
- assert_eq!(result.err().unwrap().ok().unwrap(), OFTPausableError::Paused.into());
129
- }
130
-
131
- #[test]
132
- fn test_send_succeeds_after_unpause() {
133
- let env = Env::default();
134
- let setup = ExtensiveOFTTestSetup::new(&env);
135
-
136
- // Set fee deposit address (required by ExtensiveOFT)
137
- let fee_collector = create_recipient_address(&env);
138
- setup.set_fee_deposit_address(&fee_collector);
139
-
140
- let sender = Address::generate(&env);
141
- let dst_eid = 100u32;
142
- let peer = BytesN::from_array(&env, &[2u8; 32]);
143
- setup.set_peer(dst_eid, &peer);
144
-
145
- let amount_ld = 1_000_000i128;
146
- setup.fund_tokens(&sender, amount_ld);
147
- setup.fund_native_fees(&sender, setup.native_fee);
148
-
149
- // Pause then unpause
150
- setup.set_paused(true);
151
- setup.set_paused(false);
152
-
153
- let send_param = setup.create_send_param(dst_eid, amount_ld, amount_ld);
154
- let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
155
- let oft_receipt = setup.quote_oft(&send_param);
156
-
157
- // Should succeed after unpause
158
- let (msg_receipt, _) = setup.send(&sender, &send_param, &fee, &sender, &oft_receipt);
159
- assert!(msg_receipt.nonce > 0);
160
- }
161
-
162
- // ==================== lz_receive Tests (Pausable) ====================
163
-
164
- #[test]
165
- fn test_lz_receive_succeeds_when_not_paused() {
166
- let env = Env::default();
167
- let setup = ExtensiveOFTTestSetup::new(&env);
168
-
169
- let executor = Address::generate(&env);
170
- let recipient = create_recipient_address(&env);
171
- let src_eid = 100u32;
172
- let peer = BytesN::from_array(&env, &[2u8; 32]);
173
- setup.set_peer(src_eid, &peer);
174
-
175
- let amount_sd = 1_000_000u64;
176
- let recipient_bytes32 = address_to_bytes32(&recipient);
177
- let message = encode_oft_message(&env, &recipient_bytes32, amount_sd);
178
-
179
- let guid = BytesN::from_array(&env, &[1u8; 32]);
180
- let origin = create_origin(src_eid, &peer, 1);
181
- let extra_data = Bytes::new(&env);
182
-
183
- let initial_balance = setup.token_client.balance(&recipient);
184
-
185
- // Should succeed when not paused
186
- setup.lz_receive(&executor, &origin, &guid, &message, &extra_data, 0);
187
-
188
- let conversion_rate = setup.oft.decimal_conversion_rate();
189
- let expected_amount_ld = (amount_sd as i128) * conversion_rate;
190
- assert_eq!(setup.token_client.balance(&recipient), initial_balance + expected_amount_ld);
191
- }
192
-
193
- #[test]
194
- fn test_lz_receive_fails_when_paused() {
195
- let env = Env::default();
196
- let setup = ExtensiveOFTTestSetup::new(&env);
197
-
198
- let executor = Address::generate(&env);
199
- let recipient = create_recipient_address(&env);
200
- let src_eid = 100u32;
201
- let peer = BytesN::from_array(&env, &[2u8; 32]);
202
- setup.set_peer(src_eid, &peer);
203
-
204
- // Pause the contract
205
- setup.set_paused(true);
206
-
207
- let amount_sd = 1_000_000u64;
208
- let recipient_bytes32 = address_to_bytes32(&recipient);
209
- let message = encode_oft_message(&env, &recipient_bytes32, amount_sd);
210
-
211
- let guid = BytesN::from_array(&env, &[1u8; 32]);
212
- let origin = create_origin(src_eid, &peer, 1);
213
- let extra_data = Bytes::new(&env);
214
-
215
- // Should fail when paused
216
- let result = setup.try_lz_receive(&executor, &origin, &guid, &message, &extra_data, 0);
217
- assert_eq!(result.err().unwrap().ok().unwrap(), OFTPausableError::Paused.into());
218
- }
219
-
220
- #[test]
221
- fn test_lz_receive_succeeds_after_unpause() {
222
- let env = Env::default();
223
- let setup = ExtensiveOFTTestSetup::new(&env);
224
-
225
- let executor = Address::generate(&env);
226
- let recipient = create_recipient_address(&env);
227
- let src_eid = 100u32;
228
- let peer = BytesN::from_array(&env, &[2u8; 32]);
229
- setup.set_peer(src_eid, &peer);
230
-
231
- // Pause then unpause
232
- setup.set_paused(true);
233
- setup.set_paused(false);
234
-
235
- let amount_sd = 1_000_000u64;
236
- let recipient_bytes32 = address_to_bytes32(&recipient);
237
- let message = encode_oft_message(&env, &recipient_bytes32, amount_sd);
238
-
239
- let guid = BytesN::from_array(&env, &[1u8; 32]);
240
- let origin = create_origin(src_eid, &peer, 1);
241
- let extra_data = Bytes::new(&env);
242
-
243
- let initial_balance = setup.token_client.balance(&recipient);
244
-
245
- // Should succeed after unpause
246
- setup.lz_receive(&executor, &origin, &guid, &message, &extra_data, 0);
247
-
248
- let conversion_rate = setup.oft.decimal_conversion_rate();
249
- let expected_amount_ld = (amount_sd as i128) * conversion_rate;
250
- assert_eq!(setup.token_client.balance(&recipient), initial_balance + expected_amount_ld);
251
- }
252
-
253
- // ==================== quote_send Tests (Pausable) ====================
254
-
255
- #[test]
256
- fn test_quote_send_succeeds_when_not_paused() {
257
- let env = Env::default();
258
- let setup = ExtensiveOFTTestSetup::new(&env);
259
-
260
- // Set fee deposit address (required by ExtensiveOFT)
261
- let fee_collector = create_recipient_address(&env);
262
- setup.set_fee_deposit_address(&fee_collector);
263
-
264
- let sender = Address::generate(&env);
265
- let dst_eid = 100u32;
266
- let peer = BytesN::from_array(&env, &[2u8; 32]);
267
- setup.set_peer(dst_eid, &peer);
268
-
269
- let amount_ld = 1_000_000i128;
270
- let send_param = setup.create_send_param(dst_eid, amount_ld, amount_ld);
271
-
272
- // Should succeed when not paused
273
- let fee = setup.quote_send(&sender, &send_param, false);
274
- assert!(fee.native_fee > 0);
275
- }
276
-
277
- #[test]
278
- fn test_quote_send_fails_when_paused() {
279
- let env = Env::default();
280
- let setup = ExtensiveOFTTestSetup::new(&env);
281
-
282
- // Set fee deposit address (required by ExtensiveOFT)
283
- let fee_collector = create_recipient_address(&env);
284
- setup.set_fee_deposit_address(&fee_collector);
285
-
286
- let sender = Address::generate(&env);
287
- let dst_eid = 100u32;
288
- let peer = BytesN::from_array(&env, &[2u8; 32]);
289
- setup.set_peer(dst_eid, &peer);
290
-
291
- // Pause the contract
292
- setup.set_paused(true);
293
-
294
- let amount_ld = 1_000_000i128;
295
- let send_param = setup.create_send_param(dst_eid, amount_ld, amount_ld);
296
-
297
- // Should fail when paused
298
- let result = setup.try_quote_send(&sender, &send_param, false);
299
- assert_eq!(result.err().unwrap().ok().unwrap(), OFTPausableError::Paused.into());
300
- }
301
-
302
- // ==================== quote_oft Tests (Pausable) ====================
303
-
304
- #[test]
305
- fn test_quote_oft_succeeds_when_not_paused() {
306
- let env = Env::default();
307
- let setup = ExtensiveOFTTestSetup::new(&env);
308
-
309
- // Set fee deposit address (required by ExtensiveOFT)
310
- let fee_collector = create_recipient_address(&env);
311
- setup.set_fee_deposit_address(&fee_collector);
312
-
313
- let dst_eid = 100u32;
314
- let peer = BytesN::from_array(&env, &[2u8; 32]);
315
- setup.set_peer(dst_eid, &peer);
316
-
317
- let amount_ld = 1_000_000i128;
318
- let send_param = setup.create_send_param(dst_eid, amount_ld, amount_ld);
319
-
320
- // Should succeed when not paused
321
- let receipt = setup.quote_oft(&send_param);
322
- assert_eq!(receipt.amount_sent_ld, amount_ld);
323
- assert_eq!(receipt.amount_received_ld, amount_ld);
324
- }
325
-
326
- #[test]
327
- fn test_quote_oft_fails_when_paused() {
328
- let env = Env::default();
329
- let setup = ExtensiveOFTTestSetup::new(&env);
330
-
331
- // Set fee deposit address (required by ExtensiveOFT)
332
- let fee_collector = create_recipient_address(&env);
333
- setup.set_fee_deposit_address(&fee_collector);
334
-
335
- let dst_eid = 100u32;
336
- let peer = BytesN::from_array(&env, &[2u8; 32]);
337
- setup.set_peer(dst_eid, &peer);
338
-
339
- // Pause the contract
340
- setup.set_paused(true);
341
-
342
- let amount_ld = 1_000_000i128;
343
- let send_param = setup.create_send_param(dst_eid, amount_ld, amount_ld);
344
-
345
- // Should fail when paused
346
- let result = setup.try_quote_oft(&send_param);
347
- assert_eq!(result.err().unwrap().ok().unwrap(), OFTPausableError::Paused.into());
348
- }
349
-
350
- // ==================== Authentication Tests ====================
351
-
352
- #[test]
353
- fn test_set_paused_requires_owner_auth() {
354
- let env = Env::default();
355
- let setup = ExtensiveOFTTestSetup::new(&env);
356
-
357
- // Try to pause without auth
358
- let result = setup.oft.try_set_paused(&true);
359
- assert!(result.is_err());
360
-
361
- // Should still be unpaused
362
- assert!(!setup.is_paused());
363
- }
364
-
365
- #[test]
366
- fn test_set_paused_wrong_auth_fails() {
367
- let env = Env::default();
368
- let setup = ExtensiveOFTTestSetup::new(&env);
369
-
370
- let non_owner = Address::generate(&env);
371
-
372
- // Try to pause with wrong auth (non-owner)
373
- env.mock_auths(&[soroban_sdk::testutils::MockAuth {
374
- address: &non_owner,
375
- invoke: &soroban_sdk::testutils::MockAuthInvoke {
376
- contract: &setup.oft.address,
377
- fn_name: "set_paused",
378
- args: (true,).into_val(&env),
379
- sub_invokes: &[],
380
- },
381
- }]);
382
- let result = setup.oft.try_set_paused(&true);
383
- assert!(result.is_err());
384
-
385
- // Should still be unpaused
386
- assert!(!setup.is_paused());
387
- }
388
-
389
- #[test]
390
- fn test_unpause_requires_owner_auth() {
391
- let env = Env::default();
392
- let setup = ExtensiveOFTTestSetup::new(&env);
393
-
394
- // First pause as owner
395
- setup.set_paused(true);
396
- assert!(setup.is_paused());
397
-
398
- // Try to unpause without auth
399
- let result = setup.oft.try_set_paused(&false);
400
- assert!(result.is_err());
401
-
402
- // Should still be paused
403
- assert!(setup.is_paused());
404
- }
405
-
406
- #[test]
407
- fn test_unpause_wrong_auth_fails() {
408
- let env = Env::default();
409
- let setup = ExtensiveOFTTestSetup::new(&env);
410
-
411
- let non_owner = Address::generate(&env);
412
-
413
- // First pause as owner
414
- setup.set_paused(true);
415
- assert!(setup.is_paused());
416
-
417
- // Try to unpause with wrong auth (non-owner)
418
- env.mock_auths(&[soroban_sdk::testutils::MockAuth {
419
- address: &non_owner,
420
- invoke: &soroban_sdk::testutils::MockAuthInvoke {
421
- contract: &setup.oft.address,
422
- fn_name: "set_paused",
423
- args: (false,).into_val(&env),
424
- sub_invokes: &[],
425
- },
426
- }]);
427
- let result = setup.oft.try_set_paused(&false);
428
- assert!(result.is_err());
429
-
430
- // Should still be paused
431
- assert!(setup.is_paused());
432
- }