@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,16 +1,30 @@
1
- use crate::{
2
- codec::MsgType,
3
- integration_tests::setup::{decode_packet, ChainSetup},
4
- };
5
- use endpoint_v2::{MessagingFee, Origin, OutboundPacket};
1
+ //! Common utilities shared between SML and ULN302 integration tests.
2
+
3
+ extern crate std;
4
+
5
+ use crate::{codec::MsgType, counter::CounterClient, tests::mint_to};
6
+ use endpoint_v2::{EndpointV2Client, MessagingFee, Origin, OutboundPacket};
6
7
  use message_lib_common::packet_codec_v1;
7
8
  use soroban_sdk::{
8
9
  address_payload::AddressPayload,
9
10
  testutils::{Events, MockAuth, MockAuthInvoke},
10
- Address, Bytes, BytesN, Env, IntoVal, Map, Symbol, Val,
11
+ Address, Bytes, BytesN, Env, IntoVal, Map, Symbol, Val, Vec,
11
12
  };
13
+ use utils::buffer_reader::BufferReader;
14
+
15
+ /// Trait for common fields in chain setup structs.
16
+ /// Both SML and ULN302 ChainSetup implement this trait.
17
+ pub trait ChainSetupCommon<'a> {
18
+ fn counter(&self) -> &CounterClient<'a>;
19
+ fn endpoint(&self) -> &EndpointV2Client<'a>;
20
+ fn native_token(&self) -> &Address;
21
+ fn owner(&self) -> &Address;
22
+ /// Validates a packet using the message library's verification mechanism.
23
+ /// SML calls validate_packet, ULN302 does DVN verify + commit.
24
+ fn validate_packet(&self, env: &Env, packet_event: &(Bytes, Bytes, Address)) -> OutboundPacket;
25
+ }
12
26
 
13
- /// Helper to extract BytesN<32> payload from an Address
27
+ /// Converts an Address into its 32-byte payload.
14
28
  pub fn address_to_bytes32(address: &Address) -> BytesN<32> {
15
29
  match address.to_payload().unwrap() {
16
30
  AddressPayload::AccountIdPublicKeyEd25519(payload) => payload,
@@ -18,13 +32,76 @@ pub fn address_to_bytes32(address: &Address) -> BytesN<32> {
18
32
  }
19
33
  }
20
34
 
21
- pub fn quote(chain: &ChainSetup<'_>, dst_eid: u32, msg_type: MsgType, options: &Bytes) -> MessagingFee {
22
- chain.counter.quote(&dst_eid, &(msg_type as u32), options, &false)
35
+ /// Sets the ZRO token on the endpoint with owner authorization.
36
+ pub fn set_zro(env: &Env, owner: &Address, endpoint: &EndpointV2Client<'_>, zro_token: &Address) {
37
+ env.mock_auths(&[MockAuth {
38
+ address: owner,
39
+ invoke: &MockAuthInvoke {
40
+ contract: &endpoint.address,
41
+ fn_name: "set_zro",
42
+ args: (zro_token,).into_val(env),
43
+ sub_invokes: &[],
44
+ },
45
+ }]);
46
+ endpoint.set_zro(zro_token);
47
+ }
48
+
49
+ /// Registers a message library on the endpoint with owner authorization.
50
+ pub fn register_library(env: &Env, owner: &Address, endpoint: &EndpointV2Client<'_>, lib: &Address) {
51
+ env.mock_auths(&[MockAuth {
52
+ address: owner,
53
+ invoke: &MockAuthInvoke {
54
+ contract: &endpoint.address,
55
+ fn_name: "register_library",
56
+ args: (lib,).into_val(env),
57
+ sub_invokes: &[],
58
+ },
59
+ }]);
60
+ endpoint.register_library(lib);
61
+ }
62
+
63
+ /// Sets the peer address for a counter on a destination EID.
64
+ pub fn set_peer(env: &Env, owner: &Address, counter: &CounterClient<'_>, dst_eid: u32, peer: &BytesN<32>) {
65
+ let peer_option = Some(peer.clone());
66
+ env.mock_auths(&[MockAuth {
67
+ address: owner,
68
+ invoke: &MockAuthInvoke {
69
+ contract: &counter.address,
70
+ fn_name: "set_peer",
71
+ args: (&dst_eid, &peer_option).into_val(env),
72
+ sub_invokes: &[],
73
+ },
74
+ }]);
75
+ counter.set_peer(&dst_eid, &peer_option);
76
+ }
77
+
78
+ /// Decodes an outbound packet emitted by the endpoint.
79
+ pub fn decode_packet(env: &Env, encoded_packet: &Bytes) -> OutboundPacket {
80
+ let header = packet_codec_v1::decode_packet_header(env, &encoded_packet.slice(0..packet_codec_v1::HEADER_LENGTH));
81
+ let payload = encoded_packet.slice(packet_codec_v1::HEADER_LENGTH..);
82
+
83
+ let mut payload_reader = BufferReader::new(&payload);
84
+ let guid = payload_reader.read_bytes_n::<32>();
85
+ let message = payload_reader.read_bytes_until_end();
86
+
87
+ OutboundPacket {
88
+ nonce: header.nonce,
89
+ src_eid: header.src_eid,
90
+ sender: Address::from_payload(env, AddressPayload::ContractIdHash(header.sender)),
91
+ dst_eid: header.dst_eid,
92
+ receiver: header.receiver,
93
+ guid,
94
+ message,
95
+ }
96
+ }
97
+
98
+ pub fn quote<'a, C: ChainSetupCommon<'a>>(chain: &C, dst_eid: u32, msg_type: MsgType, options: &Bytes) -> MessagingFee {
99
+ chain.counter().quote(&dst_eid, &(msg_type as u32), options, &false)
23
100
  }
24
101
 
25
- pub fn increment(
102
+ pub fn increment<'a, C: ChainSetupCommon<'a>>(
26
103
  env: &Env,
27
- chain: &ChainSetup<'_>,
104
+ chain: &C,
28
105
  sender: &Address,
29
106
  dst_eid: u32,
30
107
  msg_type: MsgType,
@@ -35,87 +112,89 @@ pub fn increment(
35
112
  env.mock_auths(&[MockAuth {
36
113
  address: sender,
37
114
  invoke: &MockAuthInvoke {
38
- contract: &chain.counter.address,
115
+ contract: &chain.counter().address,
39
116
  fn_name: "increment",
40
117
  args: (sender, &dst_eid, &msg_type, options, fee).into_val(env),
41
118
  sub_invokes: &[MockAuthInvoke {
42
- contract: &chain.native_token,
119
+ contract: chain.native_token(),
43
120
  fn_name: "transfer",
44
- args: (sender, &chain.endpoint.address, &fee.native_fee).into_val(env),
121
+ args: (sender, &chain.endpoint().address, &fee.native_fee).into_val(env),
45
122
  sub_invokes: &[],
46
123
  }],
47
124
  },
48
125
  }]);
49
- chain.counter.increment(sender, &dst_eid, &msg_type, options, fee);
126
+ chain.counter().increment(sender, &dst_eid, &msg_type, options, fee);
50
127
  }
51
128
 
52
- pub fn validate_packet(env: &Env, chain: &ChainSetup<'_>, packet_event: &(Bytes, Bytes, Address)) {
53
- let packet = decode_packet(env, &packet_event.0);
54
- let encoded_header = packet_codec_v1::encode_packet_header(env, &packet);
55
- let payload_hash = packet_codec_v1::payload_hash(env, &packet);
56
-
57
- env.mock_auths(&[MockAuth {
58
- address: &chain.owner,
59
- invoke: &MockAuthInvoke {
60
- contract: &chain.sml.address,
61
- fn_name: "validate_packet",
62
- args: (&encoded_header, &payload_hash).into_val(env),
63
- sub_invokes: &[],
64
- },
65
- }]);
66
- chain.sml.validate_packet(&encoded_header, &payload_hash);
67
- }
68
-
69
- pub fn lz_receive(
129
+ /// Execute lz_receive on the counter contract.
130
+ /// Automatically mints native tokens to the executor if value > 0.
131
+ pub fn lz_receive<'a, C: ChainSetupCommon<'a>>(
70
132
  env: &Env,
71
- chain: &ChainSetup<'_>,
133
+ chain: &C,
72
134
  executor: &Address,
73
135
  packet: &OutboundPacket,
74
136
  value: i128,
75
- _aba: bool,
76
137
  ) {
138
+ // Mint native tokens to executor if value > 0
139
+ if value > 0 {
140
+ mint_to(env, chain.owner(), chain.native_token(), executor, value);
141
+ }
142
+
77
143
  let origin = Origin { src_eid: packet.src_eid, sender: address_to_bytes32(&packet.sender), nonce: packet.nonce };
78
144
 
79
145
  let sub_invokes_with_transfer = [MockAuthInvoke {
80
- contract: &chain.native_token,
146
+ contract: chain.native_token(),
81
147
  fn_name: "transfer",
82
- args: (executor, &chain.counter.address, &value).into_val(env),
148
+ args: (executor, &chain.counter().address, &value).into_val(env),
83
149
  sub_invokes: &[],
84
150
  }];
85
151
 
86
152
  env.mock_auths(&[MockAuth {
87
153
  address: executor,
88
154
  invoke: &MockAuthInvoke {
89
- contract: &chain.counter.address,
155
+ contract: &chain.counter().address,
90
156
  fn_name: "lz_receive",
91
157
  args: (executor, &origin, &packet.guid, &packet.message, &Bytes::new(env), &value).into_val(env),
92
158
  sub_invokes: if value > 0 { &sub_invokes_with_transfer } else { &[] },
93
159
  },
94
160
  }]);
95
- chain.counter.lz_receive(executor, &origin, &packet.guid, &packet.message, &Bytes::new(env), &value);
161
+ chain.counter().lz_receive(executor, &origin, &packet.guid, &packet.message, &Bytes::new(env), &value);
96
162
  }
97
163
 
98
- pub fn lz_compose(env: &Env, chain: &ChainSetup<'_>, executor: &Address, packet: &OutboundPacket, value: i128) {
164
+ /// Execute lz_compose on the counter contract.
165
+ /// Automatically mints native tokens to the executor if value > 0.
166
+ pub fn lz_compose<'a, C: ChainSetupCommon<'a>>(
167
+ env: &Env,
168
+ chain: &C,
169
+ executor: &Address,
170
+ packet: &OutboundPacket,
171
+ value: i128,
172
+ ) {
173
+ // Mint native tokens to executor if value > 0
174
+ if value > 0 {
175
+ mint_to(env, chain.owner(), chain.native_token(), executor, value);
176
+ }
177
+
99
178
  let sub_invokes_with_transfer = [MockAuthInvoke {
100
- contract: &chain.native_token,
101
- fn_name: "transfer_from",
102
- args: (executor, executor, &chain.counter.address, &value).into_val(env),
179
+ contract: chain.native_token(),
180
+ fn_name: "transfer",
181
+ args: (executor, &chain.counter().address, &value).into_val(env),
103
182
  sub_invokes: &[],
104
183
  }];
105
184
 
106
185
  env.mock_auths(&[MockAuth {
107
186
  address: executor,
108
187
  invoke: &MockAuthInvoke {
109
- contract: &chain.counter.address,
188
+ contract: &chain.counter().address,
110
189
  fn_name: "lz_compose",
111
- args: (executor, &chain.counter.address, &packet.guid, &0_u32, &packet.message, &Bytes::new(env), &value)
190
+ args: (executor, &chain.counter().address, &packet.guid, &0_u32, &packet.message, &Bytes::new(env), &value)
112
191
  .into_val(env),
113
192
  sub_invokes: if value > 0 { &sub_invokes_with_transfer } else { &[] },
114
193
  },
115
194
  }]);
116
- chain.counter.lz_compose(
195
+ chain.counter().lz_compose(
117
196
  executor,
118
- &chain.counter.address,
197
+ &chain.counter().address,
119
198
  &packet.guid,
120
199
  &0,
121
200
  &packet.message,
@@ -124,11 +203,24 @@ pub fn lz_compose(env: &Env, chain: &ChainSetup<'_>, executor: &Address, packet:
124
203
  );
125
204
  }
126
205
 
127
- // returns (encoded_payload, options, send_library)
206
+ /// Validates a packet using the chain's message library verification mechanism.
207
+ /// This is a convenience wrapper around the trait method.
208
+ pub fn validate_packet<'a, C: ChainSetupCommon<'a>>(
209
+ env: &Env,
210
+ chain: &C,
211
+ packet_event: &(Bytes, Bytes, Address),
212
+ ) -> OutboundPacket {
213
+ chain.validate_packet(env, packet_event)
214
+ }
215
+
216
+ /// Scans for the latest packet_sent event and returns (encoded_payload, options, send_library).
128
217
  pub fn scan_packet_sent_event(env: &Env, endpoint: &Address) -> Option<(Bytes, Bytes, Address)> {
129
- let mut packet = None;
130
- for (emitter, topics, data) in env.events().all() {
131
- let packet_sent_symbol = Symbol::new(env, "packet_sent").to_val();
218
+ let events = env.events().all();
219
+ let packet_sent_symbol = Symbol::new(env, "packet_sent").to_val();
220
+
221
+ // Iterate in reverse to find the most recent packet sent event
222
+ for i in (0..events.len()).rev() {
223
+ let (emitter, topics, data) = events.get(i).unwrap();
132
224
  if emitter == *endpoint && topics.contains(packet_sent_symbol) {
133
225
  let map: Map<Symbol, Val> = data.into_val(env);
134
226
 
@@ -136,9 +228,60 @@ pub fn scan_packet_sent_event(env: &Env, endpoint: &Address) -> Option<(Bytes, B
136
228
  let options: Bytes = map.get(Symbol::new(env, "options")).unwrap().into_val(env);
137
229
  let send_library: Address = map.get(Symbol::new(env, "send_library")).unwrap().into_val(env);
138
230
 
139
- packet = Some((encoded_payload, options, send_library));
231
+ return Some((encoded_payload, options, send_library));
232
+ }
233
+ }
234
+
235
+ None
236
+ }
237
+
238
+ /// Scans for ALL packet_sent events from an endpoint and returns them in chronological order.
239
+ /// NOTE: In Soroban test environment, events from previous contract calls may be cleared.
240
+ /// Use this only after all messages have been sent in a single "transaction" or collect events incrementally.
241
+ #[allow(dead_code)]
242
+ pub fn scan_all_packet_sent_events(env: &Env, endpoint: &Address) -> Vec<(Bytes, Bytes, Address)> {
243
+ let events = env.events().all();
244
+ let packet_sent_symbol = Symbol::new(env, "packet_sent").to_val();
245
+ let mut result = Vec::new(env);
246
+
247
+ for i in 0..events.len() {
248
+ let (emitter, topics, data) = events.get(i).unwrap();
249
+ if emitter == *endpoint && topics.contains(packet_sent_symbol) {
250
+ let map: Map<Symbol, Val> = data.into_val(env);
251
+
252
+ let encoded_payload: Bytes = map.get(Symbol::new(env, "encoded_packet")).unwrap().into_val(env);
253
+ let options: Bytes = map.get(Symbol::new(env, "options")).unwrap().into_val(env);
254
+ let send_library: Address = map.get(Symbol::new(env, "send_library")).unwrap().into_val(env);
255
+
256
+ result.push_back((encoded_payload, options, send_library));
257
+ }
258
+ }
259
+
260
+ result
261
+ }
262
+
263
+ /// Compose sent event data: (from, to, guid, index, message)
264
+ pub type ComposeSentEvent = (Address, Address, BytesN<32>, u32, Bytes);
265
+
266
+ /// Scans for the latest compose_sent event and returns (from, to, guid, index, message).
267
+ pub fn scan_compose_sent_event(env: &Env, endpoint: &Address) -> Option<ComposeSentEvent> {
268
+ let events = env.events().all();
269
+ let compose_sent_symbol = Symbol::new(env, "compose_sent").to_val();
270
+
271
+ // Iterate in reverse to find the most recent compose sent event
272
+ for i in (0..events.len()).rev() {
273
+ let (emitter, topics, data) = events.get(i).unwrap();
274
+ if emitter == *endpoint && topics.contains(compose_sent_symbol) {
275
+ let map: Map<Symbol, Val> = data.into_val(env);
276
+ let from: Address = topics.get(1).unwrap().into_val(env);
277
+ let to: Address = topics.get(2).unwrap().into_val(env);
278
+ let guid: BytesN<32> = topics.get(3).unwrap().into_val(env);
279
+ let index: u32 = topics.get(4).unwrap().into_val(env);
280
+ let message: Bytes = map.get(Symbol::new(env, "message")).unwrap().into_val(env);
281
+
282
+ return Some((from, to, guid, index, message));
140
283
  }
141
284
  }
142
285
 
143
- packet
286
+ None
144
287
  }
@@ -4,33 +4,32 @@ use crate::{
4
4
  options,
5
5
  storage::CounterStorage,
6
6
  };
7
- use common_macros::{contract_impl, only_owner};
7
+ use common_macros::{contract_impl, only_auth};
8
8
  use endpoint_v2::{
9
9
  ILayerZeroComposer, LayerZeroEndpointV2Client, MessagingChannelClient, MessagingComposerClient, MessagingFee,
10
10
  Origin,
11
11
  };
12
12
  use oapp::{
13
- oapp_core::{oapp_initialize, OAppCore},
14
- oapp_receiver::{self, OAppReceiver},
15
- oapp_sender::OAppSender,
13
+ oapp_core::{initialize_oapp, OAppCore},
14
+ oapp_receiver::{LzReceiveInternal, OAppReceiver},
15
+ oapp_sender::OAppSenderInternal,
16
16
  };
17
- use oapp_macros::{oapp, oapp_manual_impl};
17
+ use oapp_macros::oapp;
18
18
  use soroban_sdk::{assert_with_error, panic_with_error, token::TokenClient, Address, Bytes, BytesN, Env};
19
19
 
20
- #[oapp]
21
- #[oapp_manual_impl(receiver)]
20
+ #[oapp(custom = [receiver])]
22
21
  pub struct Counter;
23
22
 
24
23
  #[contract_impl]
25
24
  impl Counter {
26
25
  pub fn __constructor(env: &Env, owner: &Address, endpoint: &Address, delegate: &Address) {
27
- oapp_initialize::<Self>(env, owner, endpoint, &Some(delegate.clone()));
26
+ initialize_oapp::<Self>(env, owner, endpoint, &Some(delegate.clone()));
28
27
  let endpoint_client = LayerZeroEndpointV2Client::new(env, endpoint);
29
28
  CounterStorage::set_eid(env, &endpoint_client.eid());
30
29
  }
31
30
 
32
31
  pub fn quote(env: &Env, dst_eid: u32, msg_type: u32, options: &Bytes, pay_in_zro: bool) -> MessagingFee {
33
- Self::lz_quote(env, dst_eid, &codec::encode(env, (msg_type as u8).into(), Self::eid(env)), options, pay_in_zro)
32
+ Self::__quote(env, dst_eid, &codec::encode(env, (msg_type as u8).into(), Self::eid(env)), options, pay_in_zro)
34
33
  }
35
34
 
36
35
  pub fn increment(env: &Env, caller: &Address, dst_eid: u32, msg_type: u32, options: &Bytes, fee: &MessagingFee) {
@@ -42,19 +41,19 @@ impl Counter {
42
41
 
43
42
  // Send the message
44
43
  let message = codec::encode(env, (msg_type as u8).into(), Self::eid(env));
45
- Self::lz_send(env, caller, dst_eid, &message, options, fee, caller);
44
+ Self::__lz_send(env, dst_eid, &message, options, caller, fee, caller);
46
45
  }
47
46
 
48
47
  // ============================================================================================
49
48
  // Owner functions
50
49
  // ============================================================================================
51
50
 
52
- #[only_owner]
51
+ #[only_auth]
53
52
  pub fn set_ordered_nonce(env: &Env, ordered_nonce: bool) {
54
53
  CounterStorage::set_ordered_nonce(env, &ordered_nonce);
55
54
  }
56
55
 
57
- #[only_owner]
56
+ #[only_auth]
58
57
  pub fn skip_inbound_nonce(env: &Env, src_eid: u32, sender: &BytesN<32>, nonce: u64) {
59
58
  let contract_address = env.current_contract_address();
60
59
 
@@ -109,30 +108,19 @@ impl Counter {
109
108
  }
110
109
 
111
110
  // ============================================================================================
112
- // OAppReceiver implementation
111
+ // LzReceiveInternal implementation
113
112
  // ============================================================================================
114
113
 
115
- #[contract_impl(contracttrait)]
116
- impl OAppReceiver for Counter {
117
- fn next_nonce(env: &Env, src_eid: u32, sender: &BytesN<32>) -> u64 {
118
- if CounterStorage::ordered_nonce(env) {
119
- CounterStorage::max_received_nonce(env, src_eid, sender) + 1
120
- } else {
121
- 0
122
- }
123
- }
124
-
125
- fn lz_receive(
114
+ impl LzReceiveInternal for Counter {
115
+ fn __lz_receive(
126
116
  env: &Env,
127
- executor: &Address,
128
117
  origin: &Origin,
129
118
  guid: &BytesN<32>,
130
119
  message: &Bytes,
131
120
  _extra_data: &Bytes,
121
+ _executor: &Address,
132
122
  value: i128,
133
123
  ) {
134
- oapp_receiver::verify_and_clear_payload::<Self>(env, executor, origin, guid, message, value);
135
-
136
124
  // handle the message
137
125
  Self::__accept_nonce(env, origin.src_eid, &origin.sender, origin.nonce);
138
126
 
@@ -166,12 +154,12 @@ impl OAppReceiver for Counter {
166
154
 
167
155
  // Send the response message
168
156
  let options = options::executor_lz_receive_option(env, 200000, 10);
169
- Self::lz_send(
157
+ Self::__lz_send(
170
158
  env,
171
- &contract_address,
172
159
  origin.src_eid,
173
160
  &codec::encode_with_value(env, MsgType::Vanilla, Self::eid(env), 10),
174
161
  &options,
162
+ &contract_address,
175
163
  &MessagingFee { native_fee: value, zro_fee: 0 },
176
164
  &contract_address,
177
165
  );
@@ -180,6 +168,21 @@ impl OAppReceiver for Counter {
180
168
  }
181
169
  }
182
170
 
171
+ // ============================================================================================
172
+ // Custom OAppReceiver implementation
173
+ // ============================================================================================
174
+
175
+ #[contract_impl(contracttrait)]
176
+ impl OAppReceiver for Counter {
177
+ fn next_nonce(env: &Env, src_eid: u32, sender: &BytesN<32>) -> u64 {
178
+ if CounterStorage::ordered_nonce(env) {
179
+ CounterStorage::max_received_nonce(env, src_eid, sender) + 1
180
+ } else {
181
+ 0
182
+ }
183
+ }
184
+ }
185
+
183
186
  // ============================================================================================
184
187
  // ILayerZeroComposer implementation
185
188
  // ============================================================================================
@@ -196,28 +199,18 @@ impl ILayerZeroComposer for Counter {
196
199
  _extra_data: &Bytes,
197
200
  value: i128,
198
201
  ) {
199
- executor.require_auth();
202
+ // Clear compose message, transfer value, and require executor auth
203
+ clear_compose_and_transfer::<Self>(env, executor, from, guid, index, message, value);
200
204
 
201
205
  let msg_type = codec::msg_type(message);
202
206
  if msg_type != MsgType::Composed && msg_type != MsgType::ComposedABA {
203
207
  panic_with_error!(env, CounterError::InvalidMsgType);
204
208
  }
205
209
 
206
- let curr_address = env.current_contract_address();
207
- let endpoint_address = Self::endpoint(env);
208
-
209
- // Transfer value from executor to current contract
210
- if value > 0 {
211
- let native_token = LayerZeroEndpointV2Client::new(env, &endpoint_address).native_token();
212
- TokenClient::new(env, &native_token).transfer_from(executor, executor, &curr_address, &value);
213
- }
214
210
  // Assert the value is sufficient
215
211
  let expected_msg_value = codec::value(env, message);
216
212
  assert_with_error!(env, value >= expected_msg_value, CounterError::InsufficientValue);
217
213
 
218
- // Clear the compose message
219
- MessagingComposerClient::new(env, &endpoint_address).clear_compose(&curr_address, from, guid, &index, message);
220
-
221
214
  // Increment the composed count
222
215
  CounterStorage::set_composed_count(env, &(Self::composed_count(env) + 1));
223
216
 
@@ -229,15 +222,46 @@ impl ILayerZeroComposer for Counter {
229
222
  CounterStorage::set_outbound_count(env, src_eid, &(Self::outbound_count(env, src_eid) + 1));
230
223
 
231
224
  // Send the response message
232
- Self::lz_send(
225
+ let curr_address = env.current_contract_address();
226
+ Self::__lz_send(
233
227
  env,
234
- &curr_address,
235
228
  src_eid,
236
229
  &codec::encode(env, MsgType::Vanilla, Self::eid(env)),
237
230
  &options::executor_lz_receive_option(env, 200000, 0),
231
+ &curr_address,
238
232
  &MessagingFee { native_fee: value, zro_fee: 0 },
239
233
  &curr_address,
240
234
  );
241
235
  }
242
236
  }
243
237
  }
238
+
239
+ /// Clears a compose message and transfers native token value from executor to the OApp.
240
+ ///
241
+ /// This helper handles the common pattern in `lz_compose` implementations:
242
+ /// 1. Requires executor authorization
243
+ /// 2. Clears the compose message from the endpoint
244
+ /// 3. Transfers native token from executor to OApp if value > 0
245
+ pub fn clear_compose_and_transfer<T: OAppCore>(
246
+ env: &Env,
247
+ executor: &Address,
248
+ from: &Address,
249
+ guid: &BytesN<32>,
250
+ index: u32,
251
+ message: &Bytes,
252
+ value: i128,
253
+ ) {
254
+ executor.require_auth();
255
+
256
+ let curr_address = env.current_contract_address();
257
+ let endpoint = T::endpoint(env);
258
+
259
+ // Clear the compose message
260
+ MessagingComposerClient::new(env, &endpoint).clear_compose(&curr_address, from, guid, &index, message);
261
+
262
+ // Transfer value from executor to current contract
263
+ if value > 0 {
264
+ let native_token = LayerZeroEndpointV2Client::new(env, &endpoint).native_token();
265
+ TokenClient::new(env, &native_token).transfer(executor, &curr_address, &value);
266
+ }
267
+ }
@@ -22,16 +22,3 @@ pub fn mint_to(env: &Env, owner: &Address, native_token: &Address, to: &Address,
22
22
  sac.mint(to, &amount);
23
23
  }
24
24
 
25
- pub fn approve(env: &Env, from: &Address, native_token: &Address, amount: i128) {
26
- env.mock_auths(&[MockAuth {
27
- address: from,
28
- invoke: &MockAuthInvoke {
29
- contract: native_token,
30
- fn_name: "approve",
31
- args: (from, from, amount, 10_u32).into_val(env),
32
- sub_invokes: &[],
33
- },
34
- }]);
35
- let sac = StellarAssetClient::new(env, native_token);
36
- sac.approve(from, from, &amount, &10_u32);
37
- }
@@ -11,7 +11,7 @@ use crate::{
11
11
  codec::{self, MsgType},
12
12
  counter::{Counter, CounterClient},
13
13
  errors::CounterError,
14
- tests::{approve, mint_to},
14
+ tests::mint_to,
15
15
  };
16
16
 
17
17
  struct TestSetup<'a> {
@@ -252,11 +252,10 @@ fn test_lz_compose() {
252
252
  let extra_data = Bytes::new(&env);
253
253
 
254
254
  mint_to(&env, &owner, &native_token, &executor, value as i128);
255
- approve(&env, &executor, &native_token, value as i128);
256
255
  let sub_invokes_with_transfer = MockAuthInvoke {
257
256
  contract: &native_token,
258
- fn_name: "transfer_from",
259
- args: (&executor, &executor, &counter.address, &(value as i128)).into_val(&env),
257
+ fn_name: "transfer",
258
+ args: (&executor, &counter.address, &(value as i128)).into_val(&env),
260
259
  sub_invokes: &[],
261
260
  };
262
261
  env.mock_auths(&[MockAuth {
@@ -304,11 +303,10 @@ fn test_lz_compose_aba() {
304
303
 
305
304
  setup_mock_peer(&env, &owner, &counter, origin.src_eid);
306
305
  mint_to(&env, &owner, &native_token, &executor, value as i128);
307
- approve(&env, &executor, &native_token, value as i128);
308
306
  let sub_invokes_with_transfer = MockAuthInvoke {
309
307
  contract: &native_token,
310
- fn_name: "transfer_from",
311
- args: (&executor, &executor, &counter.address, &(value as i128)).into_val(&env),
308
+ fn_name: "transfer",
309
+ args: (&executor, &counter.address, &(value as i128)).into_val(&env),
312
310
  sub_invokes: &[],
313
311
  };
314
312
  env.mock_auths(&[MockAuth {
@@ -1,9 +1,13 @@
1
1
  use common_macros::contract_error;
2
2
 
3
+ // OApp library error codes: 2000-2099
4
+ // See ERROR_SPEC.md for allocation rules
5
+
6
+ /// OAppError: 2000-2099
3
7
  #[contract_error]
4
8
  pub enum OAppError {
5
9
  InvalidOptions = 2000,
6
10
  NoPeer,
7
11
  OnlyPeer,
8
- ZROTokenUnavailable,
12
+ ZroTokenUnavailable,
9
13
  }