@layerzerolabs/protocol-stellar-v2 0.2.29 → 0.2.30

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 (205) hide show
  1. package/.turbo/turbo-build.log +371 -321
  2. package/.turbo/turbo-lint.log +211 -202
  3. package/.turbo/turbo-test.log +1766 -1673
  4. package/Cargo.lock +11 -1
  5. package/contracts/common-macros/src/lib.rs +0 -2
  6. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +1 -0
  7. package/contracts/endpoint-v2/src/messaging_channel.rs +32 -3
  8. package/contracts/endpoint-v2/src/tests/endpoint_setup.rs +1 -1
  9. package/contracts/endpoint-v2/src/tests/messaging_channel/clear_payload.rs +1 -1
  10. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound.rs +6 -6
  11. package/contracts/endpoint-v2/src/tests/messaging_channel/inbound_payload_hash.rs +1 -1
  12. package/contracts/endpoint-v2/src/tests/messaging_channel/outbound.rs +16 -10
  13. package/contracts/macro-integration-tests/tests/runtime/oapp/options_type3.rs +10 -10
  14. package/contracts/macro-integration-tests/tests/runtime/oapp/receiver.rs +3 -3
  15. package/contracts/macro-integration-tests/tests/runtime/oapp/sender.rs +4 -3
  16. package/contracts/macro-integration-tests/tests/runtime/upgradeable/migrate_guard_and_state.rs +1 -57
  17. package/contracts/macro-integration-tests/tests/ui/lz_contract/fail/upgradeable_missing_internal.stderr +0 -30
  18. package/contracts/macro-integration-tests/tests/ui/oapp/fail/custom_wrong_value.stderr +5 -3
  19. package/contracts/macro-integration-tests/tests/ui/oapp/fail/non_struct_input.stderr +6 -4
  20. package/contracts/macro-integration-tests/tests/ui/oapp/fail/unknown_custom_option.stderr +5 -3
  21. package/contracts/macro-integration-tests/tests/ui/oapp/fail/wrong_key.stderr +5 -3
  22. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_auth_trait.stderr +0 -30
  23. package/contracts/macro-integration-tests/tests/ui/upgradeable/fail/missing_upgradeable_internal.stderr +0 -30
  24. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/basic.rs +0 -2
  25. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/multisig_contract.rs +0 -2
  26. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_migration.rs +0 -2
  27. package/contracts/macro-integration-tests/tests/ui/upgradeable/pass/no_user_contractimpl.rs +1 -3
  28. package/contracts/message-libs/message-lib-common/src/packet_codec_v1.rs +3 -6
  29. package/contracts/message-libs/message-lib-common/src/tests/worker_options/extract_type_3_options.rs +10 -0
  30. package/contracts/message-libs/message-lib-common/src/worker_options.rs +6 -2
  31. package/contracts/message-libs/treasury/src/interfaces/zro_fee_lib.rs +3 -3
  32. package/contracts/message-libs/treasury/src/lib.rs +2 -1
  33. package/contracts/message-libs/treasury/src/tests/setup.rs +1 -1
  34. package/contracts/message-libs/treasury/src/treasury.rs +5 -2
  35. package/contracts/message-libs/uln-302/src/errors.rs +2 -0
  36. package/contracts/message-libs/uln-302/src/events.rs +3 -3
  37. package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +8 -0
  38. package/contracts/message-libs/uln-302/src/lib.rs +2 -1
  39. package/contracts/message-libs/uln-302/src/receive_uln.rs +16 -13
  40. package/contracts/message-libs/uln-302/src/send_uln.rs +51 -24
  41. package/contracts/message-libs/uln-302/src/storage.rs +2 -2
  42. package/contracts/message-libs/uln-302/src/tests/receive_uln302/effective_receive_uln_config.rs +45 -1
  43. package/contracts/message-libs/uln-302/src/tests/receive_uln302/verifiable.rs +63 -0
  44. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_executor_config.rs +47 -2
  45. package/contracts/message-libs/uln-302/src/tests/send_uln302/effective_send_uln_config.rs +50 -1
  46. package/contracts/message-libs/uln-302/src/uln302.rs +0 -8
  47. package/contracts/oapps/counter/Cargo.toml +4 -4
  48. package/contracts/oapps/counter/integration_tests/setup_uln.rs +22 -2
  49. package/contracts/oapps/counter/src/counter.rs +8 -8
  50. package/contracts/oapps/oapp/src/interfaces/oapp_msg_inspector.rs +33 -10
  51. package/contracts/oapps/oapp/src/lib.rs +6 -2
  52. package/contracts/oapps/oapp/src/oapp_core.rs +49 -24
  53. package/contracts/oapps/oapp/src/oapp_options_type3.rs +21 -14
  54. package/contracts/oapps/oapp/src/oapp_receiver.rs +17 -16
  55. package/contracts/oapps/oapp/src/oapp_sender.rs +66 -15
  56. package/contracts/oapps/oapp/src/tests/oapp_core.rs +5 -5
  57. package/contracts/oapps/oapp/src/tests/oapp_options_type3.rs +18 -18
  58. package/contracts/oapps/oapp/src/tests/oapp_receiver.rs +4 -4
  59. package/contracts/oapps/oapp/src/tests/oapp_sender.rs +3 -3
  60. package/contracts/oapps/oapp-macros/Cargo.toml +0 -1
  61. package/contracts/oapps/oapp-macros/src/generators.rs +87 -46
  62. package/contracts/oapps/oapp-macros/src/lib.rs +3 -61
  63. package/contracts/oapps/oapp-macros/src/tests/oapp.rs +9 -23
  64. package/contracts/oapps/oapp-macros/src/tests/parse_custom_impls.rs +15 -11
  65. package/contracts/oapps/oft/Cargo.toml +1 -1
  66. package/contracts/oapps/oft/integration-tests/extensions/test_oft_fee.rs +3 -3
  67. package/contracts/oapps/oft/integration-tests/extensions/test_pausable.rs +4 -4
  68. package/contracts/oapps/oft/integration-tests/extensions/test_rate_limiter.rs +144 -8
  69. package/contracts/oapps/oft/integration-tests/setup.rs +4 -2
  70. package/contracts/oapps/oft/integration-tests/utils.rs +25 -11
  71. package/contracts/oapps/oft/src/extensions/oft_fee.rs +65 -63
  72. package/contracts/oapps/oft/src/extensions/pausable.rs +2 -3
  73. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +22 -5
  74. package/contracts/oapps/oft/src/interfaces/mint_burnable.rs +18 -0
  75. package/contracts/oapps/oft/src/interfaces/mod.rs +3 -0
  76. package/contracts/oapps/oft/src/lib.rs +4 -2
  77. package/contracts/oapps/oft/src/oft.rs +35 -36
  78. package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +13 -9
  79. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +14 -9
  80. package/contracts/oapps/oft/src/oft_types/mod.rs +14 -12
  81. package/contracts/oapps/oft/src/tests/extensions/oft_fee.rs +28 -20
  82. package/contracts/oapps/oft/src/tests/extensions/rate_limiter.rs +136 -2
  83. package/contracts/oapps/oft/src/tests/oft_types/lock_unlock.rs +12 -8
  84. package/contracts/oapps/oft-core/integration-tests/setup.rs +8 -9
  85. package/contracts/oapps/oft-core/integration-tests/test_with_sml.rs +7 -6
  86. package/contracts/oapps/oft-core/integration-tests/utils.rs +5 -4
  87. package/contracts/oapps/oft-core/src/codec/oft_compose_msg_codec.rs +2 -2
  88. package/contracts/oapps/oft-core/src/codec/oft_msg_codec.rs +33 -37
  89. package/contracts/oapps/oft-core/src/errors.rs +2 -1
  90. package/contracts/oapps/oft-core/src/events.rs +6 -0
  91. package/contracts/oapps/oft-core/src/lib.rs +8 -4
  92. package/contracts/oapps/oft-core/src/oft_core.rs +205 -148
  93. package/contracts/oapps/oft-core/src/storage.rs +4 -2
  94. package/contracts/oapps/oft-core/src/tests/test_decimals.rs +2 -2
  95. package/contracts/oapps/oft-core/src/tests/test_lz_receive.rs +6 -6
  96. package/contracts/oapps/oft-core/src/tests/test_msg_inspector.rs +7 -6
  97. package/contracts/oapps/oft-core/src/tests/test_oft_msg_codec.rs +11 -82
  98. package/contracts/oapps/oft-core/src/tests/test_quote_oft.rs +13 -13
  99. package/contracts/oapps/oft-core/src/tests/test_quote_send.rs +1 -1
  100. package/contracts/oapps/oft-core/src/tests/test_resolve_address.rs +2 -2
  101. package/contracts/oapps/oft-core/src/tests/test_send.rs +22 -22
  102. package/contracts/oapps/oft-core/src/tests/test_utils.rs +20 -22
  103. package/contracts/oapps/oft-core/src/utils.rs +12 -8
  104. package/contracts/sac-manager/Cargo.toml +25 -0
  105. package/contracts/sac-manager/src/errors.rs +18 -0
  106. package/contracts/sac-manager/src/extensions/mod.rs +6 -0
  107. package/contracts/sac-manager/src/extensions/redistribution.rs +109 -0
  108. package/contracts/sac-manager/src/extensions/supply_control/mod.rs +488 -0
  109. package/contracts/sac-manager/src/extensions/supply_control/rate_limit.rs +126 -0
  110. package/contracts/sac-manager/src/interfaces/mod.rs +3 -0
  111. package/contracts/sac-manager/src/interfaces/sac_manager.rs +52 -0
  112. package/contracts/sac-manager/src/lib.rs +23 -0
  113. package/contracts/sac-manager/src/sac_manager.rs +193 -0
  114. package/contracts/sac-manager/src/storage.rs +20 -0
  115. package/contracts/sac-manager/src/tests/mod.rs +14 -0
  116. package/contracts/sac-manager/src/tests/redistribution/mod.rs +1 -0
  117. package/contracts/sac-manager/src/tests/redistribution/redistribute_funds.rs +82 -0
  118. package/contracts/sac-manager/src/tests/sac_manager/admin_mint.rs +206 -0
  119. package/contracts/sac-manager/src/tests/sac_manager/burn.rs +215 -0
  120. package/contracts/sac-manager/src/tests/sac_manager/clawback.rs +209 -0
  121. package/contracts/sac-manager/src/tests/sac_manager/mint.rs +252 -0
  122. package/contracts/sac-manager/src/tests/sac_manager/mod.rs +9 -0
  123. package/contracts/sac-manager/src/tests/sac_manager/set_admin.rs +36 -0
  124. package/contracts/sac-manager/src/tests/sac_manager/set_authorized.rs +43 -0
  125. package/contracts/sac-manager/src/tests/sac_manager/set_oft_address.rs +47 -0
  126. package/contracts/sac-manager/src/tests/sac_manager/test_helper.rs +75 -0
  127. package/contracts/sac-manager/src/tests/sac_manager/view_functions.rs +60 -0
  128. package/contracts/sac-manager/src/tests/supply_control/enumerable_set.rs +256 -0
  129. package/contracts/sac-manager/src/tests/supply_control/mod.rs +8 -0
  130. package/contracts/sac-manager/src/tests/supply_control/refill.rs +90 -0
  131. package/contracts/sac-manager/src/tests/supply_control/set_mint_whitelist.rs +245 -0
  132. package/contracts/sac-manager/src/tests/supply_control/set_supply_controller.rs +267 -0
  133. package/contracts/sac-manager/src/tests/supply_control/set_supply_controller_manager.rs +122 -0
  134. package/contracts/sac-manager/src/tests/supply_control/test_helper.rs +38 -0
  135. package/contracts/sac-manager/src/tests/supply_control/update_allow_any_mint_burn.rs +114 -0
  136. package/contracts/sac-manager/src/tests/supply_control/update_limit_config.rs +257 -0
  137. package/contracts/sac-manager/src/tests/test_helper.rs +190 -0
  138. package/contracts/upgrader/src/lib.rs +2 -1
  139. package/contracts/utils/src/errors.rs +0 -1
  140. package/contracts/utils/src/tests/upgradeable.rs +0 -66
  141. package/contracts/utils/src/upgradeable.rs +0 -18
  142. package/contracts/workers/dvn/src/dvn.rs +2 -2
  143. package/contracts/workers/dvn/src/interfaces/dvn.rs +2 -2
  144. package/contracts/workers/dvn/src/lib.rs +2 -1
  145. package/contracts/workers/dvn-fee-lib/src/lib.rs +3 -1
  146. package/contracts/workers/executor/src/auth.rs +42 -26
  147. package/contracts/workers/executor/src/executor.rs +28 -3
  148. package/contracts/workers/executor/src/lib.rs +4 -2
  149. package/contracts/workers/executor/src/storage.rs +21 -1
  150. package/contracts/workers/executor/src/tests/auth.rs +64 -20
  151. package/contracts/workers/executor/src/tests/executor.rs +1 -1
  152. package/contracts/workers/executor/src/tests/setup.rs +18 -0
  153. package/contracts/workers/executor-fee-lib/src/lib.rs +4 -1
  154. package/contracts/workers/executor-helper/src/executor_helper.rs +24 -10
  155. package/contracts/workers/executor-helper/src/tests/setup.rs +147 -34
  156. package/contracts/workers/price-feed/src/lib.rs +3 -1
  157. package/contracts/workers/worker/src/lib.rs +2 -1
  158. package/contracts/workers/worker/src/worker.rs +31 -17
  159. package/docs/oapp-guide.md +17 -8
  160. package/docs/oft-guide.md +3 -3
  161. package/package.json +3 -3
  162. package/sdk/.turbo/turbo-test.log +512 -351
  163. package/sdk/dist/generated/bml.d.ts +3 -9
  164. package/sdk/dist/generated/bml.js +6 -7
  165. package/sdk/dist/generated/counter.d.ts +22 -28
  166. package/sdk/dist/generated/counter.js +11 -12
  167. package/sdk/dist/generated/dvn.d.ts +36 -54
  168. package/sdk/dist/generated/dvn.js +10 -15
  169. package/sdk/dist/generated/dvn_fee_lib.d.ts +3 -21
  170. package/sdk/dist/generated/dvn_fee_lib.js +6 -11
  171. package/sdk/dist/generated/endpoint.d.ts +3 -9
  172. package/sdk/dist/generated/endpoint.js +6 -7
  173. package/sdk/dist/generated/executor.d.ts +80 -54
  174. package/sdk/dist/generated/executor.js +16 -16
  175. package/sdk/dist/generated/executor_fee_lib.d.ts +3 -21
  176. package/sdk/dist/generated/executor_fee_lib.js +6 -11
  177. package/sdk/dist/generated/executor_helper.d.ts +36 -42
  178. package/sdk/dist/generated/executor_helper.js +9 -10
  179. package/sdk/dist/generated/layerzero_view.d.ts +20 -32
  180. package/sdk/dist/generated/layerzero_view.js +25 -26
  181. package/sdk/dist/generated/oft.d.ts +147 -79
  182. package/sdk/dist/generated/oft.js +47 -54
  183. package/sdk/dist/generated/price_feed.d.ts +20 -38
  184. package/sdk/dist/generated/price_feed.js +15 -20
  185. package/sdk/dist/generated/sac_manager.d.ts +1309 -0
  186. package/sdk/dist/generated/sac_manager.js +484 -0
  187. package/sdk/dist/generated/sml.d.ts +3 -9
  188. package/sdk/dist/generated/sml.js +6 -7
  189. package/sdk/dist/generated/treasury.d.ts +3 -9
  190. package/sdk/dist/generated/treasury.js +8 -9
  191. package/sdk/dist/generated/uln302.d.ts +20 -20
  192. package/sdk/dist/generated/uln302.js +25 -22
  193. package/sdk/dist/generated/upgrader.d.ts +3 -9
  194. package/sdk/dist/generated/upgrader.js +6 -7
  195. package/sdk/dist/index.d.ts +1 -0
  196. package/sdk/dist/index.js +1 -0
  197. package/sdk/package.json +1 -1
  198. package/sdk/src/index.ts +1 -0
  199. package/sdk/test/oft-sml.test.ts +7 -5
  200. package/sdk/test/sac-manager-redistribution.test.ts +578 -0
  201. package/sdk/test/suites/globalSetup.ts +11 -6
  202. package/sdk/test/test_data/test_upgradeable_dvn.wasm +0 -0
  203. package/sdk/test/upgrader.test.ts +75 -202
  204. package/sdk/test/utils.ts +40 -0
  205. package/tools/ts-bindings-gen/src/main.rs +1 -0
@@ -26,7 +26,7 @@ fn run_lz_receive_test(setup: &OFTTestSetup, recipient: &Address, amount_sd: u64
26
26
  if setup.is_lock_unlock() { Some(setup.token_client.balance(&setup.oft.address)) } else { None };
27
27
 
28
28
  // Create OFT message
29
- let recipient_bytes32 = address_payload(recipient);
29
+ let recipient_bytes32 = address_payload(env, recipient);
30
30
  let message = encode_oft_message(env, &recipient_bytes32, amount_sd);
31
31
 
32
32
  let guid = BytesN::from_array(env, &[1u8; 32]);
@@ -111,8 +111,8 @@ fn test_mint_burn_lz_receive_with_compose() {
111
111
  setup.set_peer(src_eid, &peer);
112
112
 
113
113
  // Create OFT message with compose
114
- let recipient_bytes32 = address_payload(&recipient);
115
- let compose_from = address_payload(&sender_on_src);
114
+ let recipient_bytes32 = address_payload(&env, &recipient);
115
+ let compose_from = address_payload(&env, &sender_on_src);
116
116
  let compose_msg = Bytes::from_array(&env, b"test compose payload");
117
117
  let amount_sd = 1000000u64;
118
118
  let message = encode_oft_message_with_compose(&env, &recipient_bytes32, amount_sd, &compose_from, &compose_msg);
@@ -204,8 +204,8 @@ fn test_lock_unlock_lz_receive_with_compose() {
204
204
  setup.set_peer(src_eid, &peer);
205
205
 
206
206
  // Create OFT message with compose
207
- let recipient_bytes32 = address_payload(&recipient);
208
- let compose_from = address_payload(&sender_on_src);
207
+ let recipient_bytes32 = address_payload(&env, &recipient);
208
+ let compose_from = address_payload(&env, &sender_on_src);
209
209
  let compose_msg = Bytes::from_array(&env, b"test compose payload");
210
210
  let amount_sd = 1000000u64;
211
211
  let message = encode_oft_message_with_compose(&env, &recipient_bytes32, amount_sd, &compose_from, &compose_msg);
@@ -261,7 +261,7 @@ fn test_lz_receive_without_giving_authorization() {
261
261
  assert_eq!(setup.token_client.balance(&recipient), 0);
262
262
 
263
263
  // Create OFT message
264
- let recipient_bytes32 = address_payload(&recipient);
264
+ let recipient_bytes32 = address_payload(&env, &recipient);
265
265
  let amount_sd = 1000000u64; // 1 token in shared decimals
266
266
  let message = encode_oft_message(&env, &recipient_bytes32, amount_sd);
267
267
 
@@ -3,7 +3,7 @@
3
3
  use crate::tests::test_utils::{create_send_param, OFTTestSetup};
4
4
  use common_macros::contract_error;
5
5
  use endpoint_v2::MessagingFee;
6
- use oapp::interfaces::IOAppMsgInspector;
6
+ use oapp::IOAppMsgInspector;
7
7
  use soroban_sdk::{
8
8
  contract, contractimpl, panic_with_error,
9
9
  testutils::{Address as _, MockAuth, MockAuthInvoke},
@@ -18,8 +18,9 @@ pub struct PassingInspector;
18
18
 
19
19
  #[contractimpl]
20
20
  impl IOAppMsgInspector for PassingInspector {
21
- fn inspect(_env: &Env, _oapp: &Address, _message: &Bytes, _options: &Bytes) {
21
+ fn inspect(_env: &Env, _oapp: &Address, _message: &Bytes, _options: &Bytes) -> bool {
22
22
  // Do nothing - inspection passes
23
+ true
23
24
  }
24
25
  }
25
26
 
@@ -34,7 +35,7 @@ pub struct FailingInspector;
34
35
 
35
36
  #[contractimpl]
36
37
  impl IOAppMsgInspector for FailingInspector {
37
- fn inspect(env: &Env, _oapp: &Address, _message: &Bytes, _options: &Bytes) {
38
+ fn inspect(env: &Env, _oapp: &Address, _message: &Bytes, _options: &Bytes) -> bool {
38
39
  panic_with_error!(env, InspectorError::InspectionFailed);
39
40
  }
40
41
  }
@@ -162,7 +163,7 @@ fn test_send_without_inspector_succeeds() {
162
163
 
163
164
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
164
165
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
165
- let oft_receipt = setup.quote_oft(&send_param);
166
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
166
167
 
167
168
  // Send without inspector set - should succeed
168
169
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &oft_receipt);
@@ -202,7 +203,7 @@ fn test_send_with_passing_inspector() {
202
203
 
203
204
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
204
205
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
205
- let oft_receipt = setup.quote_oft(&send_param);
206
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
206
207
 
207
208
  // Send with passing inspector - should succeed
208
209
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &oft_receipt);
@@ -242,7 +243,7 @@ fn test_send_with_failing_inspector() {
242
243
 
243
244
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
244
245
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
245
- let oft_receipt = setup.quote_oft(&send_param);
246
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
246
247
 
247
248
  // Send with failing inspector - should fail
248
249
  let result = setup.try_send(&sender, &send_param, &fee, &sender, &oft_receipt);
@@ -1,4 +1,5 @@
1
- use crate::{codec::oft_msg_codec::OFTMessage, utils::address_payload};
1
+ use crate::codec::oft_msg_codec::{ComposeData, OFTMessage};
2
+ use crate::utils::address_payload;
2
3
  use soroban_sdk::{testutils::Address as _, Address, Bytes, BytesN, Env};
3
4
 
4
5
  #[test]
@@ -7,19 +8,14 @@ fn test_encode_and_decode_without_compose() {
7
8
  let send_to_addr = BytesN::from_array(&env, &[1u8; 32]);
8
9
  let amount_sd_val = 1000u64;
9
10
 
10
- let msg =
11
- OFTMessage { send_to: send_to_addr.clone(), amount_sd: amount_sd_val, compose_from: None, compose_msg: None };
12
- let (encoded, has_compose) = msg.encode(&env);
13
-
14
- assert_eq!(has_compose, false);
11
+ let msg = OFTMessage { send_to: send_to_addr.clone(), amount_sd: amount_sd_val, compose: None };
12
+ let encoded = msg.encode(&env);
15
13
 
16
14
  // Test decode function
17
15
  let decoded = OFTMessage::decode(&encoded);
18
16
  assert_eq!(decoded.send_to, send_to_addr);
19
17
  assert_eq!(decoded.amount_sd, amount_sd_val);
20
- assert_eq!(decoded.compose_from.is_none(), true);
21
- assert_eq!(decoded.compose_msg.is_none(), true);
22
- assert_eq!(decoded.is_composed(), false);
18
+ assert!(decoded.compose.is_none());
23
19
  }
24
20
 
25
21
  #[test]
@@ -33,90 +29,23 @@ fn test_encode_and_decode_with_compose() {
33
29
  let msg = OFTMessage {
34
30
  send_to: send_to_addr.clone(),
35
31
  amount_sd: amount_sd_val,
36
- compose_from: Some(address_payload(&sender)),
37
- compose_msg: Some(compose_msg_val),
32
+ compose: Some(ComposeData { from: address_payload(&env, &sender), msg: compose_msg_val }),
38
33
  };
39
- let (encoded, has_compose) = msg.encode(&env);
40
-
41
- assert_eq!(has_compose, true);
34
+ let encoded = msg.encode(&env);
42
35
 
43
36
  // Test decode function
44
37
  let decoded = OFTMessage::decode(&encoded);
45
38
  assert_eq!(decoded.send_to, send_to_addr);
46
39
  assert_eq!(decoded.amount_sd, amount_sd_val);
47
- assert_eq!(decoded.compose_from.is_some(), true);
48
- assert_eq!(decoded.compose_msg.is_some(), true);
49
- assert_eq!(decoded.compose_msg.as_ref().unwrap().len(), 4);
50
- assert_eq!(decoded.is_composed(), true);
40
+ let compose = decoded.compose.as_ref().unwrap();
41
+ assert_eq!(compose.msg.len(), 4);
51
42
 
52
43
  // Verify compose message structure: sender's bytes32 (32 bytes) + compose_msg (4 bytes)
53
- let compose_from_len = decoded.compose_from.as_ref().unwrap().to_array().len() as u32;
54
- let compose_msg_len = decoded.compose_msg.as_ref().unwrap().len();
44
+ let compose_from_len = compose.from.to_array().len() as u32;
45
+ let compose_msg_len = compose.msg.len();
55
46
  assert_eq!(compose_from_len + compose_msg_len, 36);
56
47
  }
57
48
 
58
- #[test]
59
- fn test_is_composed_false_when_only_compose_from() {
60
- let env = Env::default();
61
- let sender = Address::generate(&env);
62
- let send_to_addr = BytesN::from_array(&env, &[1u8; 32]);
63
- let amount_sd_val = 100u64;
64
-
65
- // Manually construct invalid state: only compose_from, no compose_msg
66
- let msg = OFTMessage {
67
- send_to: send_to_addr,
68
- amount_sd: amount_sd_val,
69
- compose_from: Some(address_payload(&sender)),
70
- compose_msg: None,
71
- };
72
-
73
- // Should return false - both fields are required for compose
74
- assert_eq!(msg.is_composed(), false);
75
- }
76
-
77
- #[test]
78
- fn test_is_composed_false_when_only_compose_msg() {
79
- let env = Env::default();
80
- let send_to_addr = BytesN::from_array(&env, &[1u8; 32]);
81
- let amount_sd_val = 100u64;
82
- let compose_msg_val = Bytes::from_array(&env, &[1u8, 2u8, 3u8]);
83
-
84
- // Manually construct invalid state: only compose_msg, no compose_from
85
- let msg = OFTMessage {
86
- send_to: send_to_addr,
87
- amount_sd: amount_sd_val,
88
- compose_from: None,
89
- compose_msg: Some(compose_msg_val),
90
- };
91
-
92
- // Should return false - both fields are required for compose
93
- assert_eq!(msg.is_composed(), false);
94
- }
95
-
96
- #[test]
97
- fn test_is_composed_false_when_compose_msg_empty() {
98
- let env = Env::default();
99
- let sender = Address::generate(&env);
100
- let send_to_addr = BytesN::from_array(&env, &[1u8; 32]);
101
- let amount_sd_val = 100u64;
102
- let empty_compose_msg = Bytes::new(&env); // Empty bytes, not None
103
-
104
- // Manually construct state with empty compose_msg
105
- let msg = OFTMessage {
106
- send_to: send_to_addr.clone(),
107
- amount_sd: amount_sd_val,
108
- compose_from: Some(address_payload(&sender)),
109
- compose_msg: Some(empty_compose_msg),
110
- };
111
-
112
- // Should return false - compose_msg must have data
113
- assert_eq!(msg.is_composed(), false);
114
-
115
- // Verify encoding also treats it as non-composed
116
- let (_, has_compose) = msg.encode(&env);
117
- assert_eq!(has_compose, false);
118
- }
119
-
120
49
  #[test]
121
50
  #[should_panic]
122
51
  fn test_decode_panic_on_empty_data() {
@@ -15,11 +15,11 @@ fn test_quote_oft_basic() {
15
15
  let dust_removed = (amount_ld / conversion_rate) * conversion_rate; // No dust with last digit 0
16
16
  let send_param = create_send_param(&env, 1, amount_ld, dust_removed);
17
17
 
18
- let (limit, fees, receipt) = setup.oft.quote_oft(&send_param);
18
+ let (limit, fees, receipt) = setup.oft.quote_oft(&setup.owner, &send_param);
19
19
 
20
20
  // Check limits
21
21
  assert_eq!(limit.min_amount_ld, 0);
22
- assert_eq!(limit.max_amount_ld, i128::MAX);
22
+ assert_eq!(limit.max_amount_ld, u64::MAX as i128);
23
23
 
24
24
  // Check fees (should be empty for basic OFT)
25
25
  assert_eq!(fees.len(), 0);
@@ -40,11 +40,11 @@ fn test_quote_oft_with_dust_removal() {
40
40
  let dust_removed = (amount_ld / conversion_rate) * conversion_rate;
41
41
  let send_param = create_send_param(&env, 1, amount_ld, dust_removed);
42
42
 
43
- let (limit, fees, receipt) = setup.oft.quote_oft(&send_param);
43
+ let (limit, fees, receipt) = setup.oft.quote_oft(&setup.owner, &send_param);
44
44
 
45
45
  // Check limits
46
46
  assert_eq!(limit.min_amount_ld, 0);
47
- assert_eq!(limit.max_amount_ld, i128::MAX);
47
+ assert_eq!(limit.max_amount_ld, u64::MAX as i128);
48
48
 
49
49
  // Check fees (should be empty for basic OFT)
50
50
  assert_eq!(fees.len(), 0);
@@ -61,12 +61,12 @@ fn test_quote_oft_zero_amount() {
61
61
 
62
62
  let send_param = create_send_param(&env, 1, 0, 0);
63
63
 
64
- let (limit, fees, receipt) = setup.oft.quote_oft(&send_param);
64
+ let (limit, fees, receipt) = setup.oft.quote_oft(&setup.owner, &send_param);
65
65
 
66
66
  assert_eq!(receipt.amount_sent_ld, 0);
67
67
  assert_eq!(receipt.amount_received_ld, 0);
68
68
  assert_eq!(limit.min_amount_ld, 0);
69
- assert_eq!(limit.max_amount_ld, i128::MAX);
69
+ assert_eq!(limit.max_amount_ld, u64::MAX as i128);
70
70
  assert_eq!(fees.len(), 0);
71
71
  }
72
72
 
@@ -80,7 +80,7 @@ fn test_quote_oft_dust_only_amount() {
80
80
  let amount_ld = conversion_rate - 1; // Less than conversion rate
81
81
  let send_param = create_send_param(&env, 1, amount_ld, 0);
82
82
 
83
- let (_, _, receipt) = setup.oft.quote_oft(&send_param);
83
+ let (_, _, receipt) = setup.oft.quote_oft(&setup.owner, &send_param);
84
84
 
85
85
  // All dust should be removed
86
86
  assert_eq!(receipt.amount_sent_ld, 0);
@@ -97,11 +97,11 @@ fn test_quote_oft_different_dst_eids() {
97
97
  // Test with different destination EIDs
98
98
  for dst_eid in [1u32, 100, 10000, u32::MAX] {
99
99
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
100
- let (limit, fees, receipt) = setup.oft.quote_oft(&send_param);
100
+ let (limit, fees, receipt) = setup.oft.quote_oft(&setup.owner, &send_param);
101
101
 
102
102
  // Results should be the same regardless of dst_eid
103
103
  assert_eq!(limit.min_amount_ld, 0);
104
- assert_eq!(limit.max_amount_ld, i128::MAX);
104
+ assert_eq!(limit.max_amount_ld, u64::MAX as i128);
105
105
  assert_eq!(fees.len(), 0);
106
106
  assert_eq!(receipt.amount_sent_ld, amount_ld);
107
107
  assert_eq!(receipt.amount_received_ld, amount_ld);
@@ -117,10 +117,10 @@ fn test_quote_oft_large_amounts() {
117
117
  let amount_ld = 1_000_000_000_000_000_000i128;
118
118
  let send_param = create_send_param(&env, 1, amount_ld, amount_ld);
119
119
 
120
- let (limit, fees, receipt) = setup.oft.quote_oft(&send_param);
120
+ let (limit, fees, receipt) = setup.oft.quote_oft(&setup.owner, &send_param);
121
121
 
122
122
  assert_eq!(limit.min_amount_ld, 0);
123
- assert_eq!(limit.max_amount_ld, i128::MAX);
123
+ assert_eq!(limit.max_amount_ld, u64::MAX as i128);
124
124
  assert_eq!(fees.len(), 0);
125
125
  assert_eq!(receipt.amount_sent_ld, amount_ld);
126
126
  assert_eq!(receipt.amount_received_ld, amount_ld);
@@ -139,7 +139,7 @@ fn test_quote_oft_slippage_less_than_received() {
139
139
  // min_amount_ld is less than what will be received
140
140
  let send_param = create_send_param(&env, 1, amount_ld, dust_removed - conversion_rate);
141
141
 
142
- let (_, _, receipt) = setup.oft.quote_oft(&send_param);
142
+ let (_, _, receipt) = setup.oft.quote_oft(&setup.owner, &send_param);
143
143
 
144
144
  assert_eq!(receipt.amount_sent_ld, dust_removed);
145
145
  assert_eq!(receipt.amount_received_ld, dust_removed);
@@ -154,6 +154,6 @@ fn test_quote_oft_slippage_exceeded() {
154
154
  // min_amount_ld is higher than what can be received after dust removal
155
155
  let send_param = create_send_param(&env, 1, amount_ld, amount_ld);
156
156
 
157
- let result = setup.oft.try_quote_oft(&send_param);
157
+ let result = setup.oft.try_quote_oft(&setup.owner, &send_param);
158
158
  assert_eq!(result.err().unwrap().ok().unwrap(), OFTError::SlippageExceeded.into());
159
159
  }
@@ -1,5 +1,5 @@
1
1
  use crate::{errors::OFTError, types::SendParam};
2
- use oapp::errors::OAppError;
2
+ use oapp::OAppError;
3
3
  use soroban_sdk::{bytes, testutils::Address as _, Address, Bytes, BytesN, Env};
4
4
 
5
5
  use super::test_utils::{create_send_param, OFTTestSetup};
@@ -12,7 +12,7 @@ fn test_resolve_address_contract_exists() {
12
12
  let contract_address = create_recipient_address(&env);
13
13
 
14
14
  // Convert to bytes32
15
- let bytes32 = address_payload(&contract_address);
15
+ let bytes32 = address_payload(&env, &contract_address);
16
16
 
17
17
  // Resolve back - should return the same contract address
18
18
  let resolved = resolve_address(&env, &bytes32);
@@ -28,7 +28,7 @@ fn test_resolve_address_contract_not_exists_fallback_to_g_address() {
28
28
  let g_address = generate_g_address(&env);
29
29
 
30
30
  // Convert to bytes32
31
- let bytes32 = address_payload(&g_address);
31
+ let bytes32 = address_payload(&env, &g_address);
32
32
 
33
33
  // Resolve - should fallback to G-address since contract doesn't exist
34
34
  let resolved = resolve_address(&env, &bytes32);
@@ -5,7 +5,7 @@ use crate::{
5
5
  types::{OFTReceipt, SendParam},
6
6
  };
7
7
  use endpoint_v2::MessagingFee;
8
- use oapp::errors::OAppError;
8
+ use oapp::OAppError;
9
9
  use soroban_sdk::{
10
10
  bytes,
11
11
  testutils::{Address as _, MockAuth, MockAuthInvoke},
@@ -41,7 +41,7 @@ fn test_send_basic() {
41
41
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
42
42
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
43
43
  let refund_address = sender.clone();
44
- let oft_receipt = setup.quote_oft(&send_param);
44
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
45
45
 
46
46
  // Send tokens
47
47
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &refund_address, &oft_receipt);
@@ -81,7 +81,7 @@ fn test_send_burns_tokens() {
81
81
 
82
82
  let send_param = create_send_param(&env, dst_eid, send_amount, send_amount);
83
83
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
84
- let oft_receipt = setup.quote_oft(&send_param);
84
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
85
85
 
86
86
  setup.send(&sender, &send_param, &fee, &sender, &oft_receipt);
87
87
 
@@ -111,7 +111,7 @@ fn test_send_with_dust_removal() {
111
111
  // min_amount_ld should be the dust-removed amount
112
112
  let send_param = create_send_param(&env, dst_eid, amount_with_dust, expected_dust_removed);
113
113
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
114
- let quoted_receipt = setup.quote_oft(&send_param);
114
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
115
115
 
116
116
  let (_, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
117
117
 
@@ -143,7 +143,7 @@ fn test_send_slippage_exactly_met() {
143
143
  // min_amount_ld exactly equals amount after dust removal
144
144
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
145
145
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
146
- let quoted_receipt = setup.quote_oft(&send_param);
146
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
147
147
 
148
148
  let (_, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
149
149
 
@@ -172,7 +172,7 @@ fn test_send_slippage_exceeded() {
172
172
  let send_param = create_send_param(&env, dst_eid, amount_with_dust, min_amount_too_high);
173
173
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
174
174
  // Use a receipt with dust-removed amount for auth (even though it will fail slippage check)
175
- let quoted_receipt = setup.quote_oft(&create_send_param(&env, dst_eid, amount_with_dust, 0));
175
+ let quoted_receipt = setup.quote_oft(&sender, &create_send_param(&env, dst_eid, amount_with_dust, 0));
176
176
 
177
177
  // Should fail due to slippage
178
178
  let result = setup.try_send(&sender, &send_param, &fee, &sender, &quoted_receipt);
@@ -199,7 +199,7 @@ fn test_send_slippage_less_than_received() {
199
199
 
200
200
  let send_param = create_send_param(&env, dst_eid, amount_ld, min_amount_low);
201
201
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
202
- let quoted_receipt = setup.quote_oft(&send_param);
202
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
203
203
 
204
204
  let (_, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
205
205
 
@@ -247,7 +247,7 @@ fn test_send_zero_amount() {
247
247
  // Send zero tokens
248
248
  let send_param = create_send_param(&env, dst_eid, 0, 0);
249
249
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
250
- let quoted_receipt = setup.quote_oft(&send_param);
250
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
251
251
 
252
252
  let (_, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
253
253
 
@@ -313,7 +313,7 @@ fn test_send_with_compose_msg() {
313
313
  };
314
314
 
315
315
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
316
- let quoted_receipt = setup.quote_oft(&send_param);
316
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
317
317
 
318
318
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
319
319
 
@@ -344,7 +344,7 @@ fn test_send_emits_oft_sent_event() {
344
344
 
345
345
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
346
346
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
347
- let quoted_receipt = setup.quote_oft(&send_param);
347
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
348
348
 
349
349
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
350
350
 
@@ -387,7 +387,7 @@ fn test_send_multiple_times() {
387
387
  for amount in send_amounts.iter() {
388
388
  let send_param = create_send_param(&env, dst_eid, *amount, *amount);
389
389
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
390
- let quoted_receipt = setup.quote_oft(&send_param);
390
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
391
391
 
392
392
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
393
393
 
@@ -426,7 +426,7 @@ fn test_send_to_multiple_destinations() {
426
426
  for dst_eid in dst_eids.iter() {
427
427
  let send_param = create_send_param(&env, *dst_eid, amount_per_send, amount_per_send);
428
428
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
429
- let quoted_receipt = setup.quote_oft(&send_param);
429
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
430
430
 
431
431
  let (_, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
432
432
 
@@ -462,7 +462,7 @@ fn test_send_different_amounts() {
462
462
 
463
463
  let send_param = create_send_param(&env, dst_eid, *amount, *amount);
464
464
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
465
- let quoted_receipt = setup.quote_oft(&send_param);
465
+ let quoted_receipt = setup.quote_oft(&test_sender, &send_param);
466
466
 
467
467
  let (_, oft_receipt) = setup.send(&test_sender, &send_param, &fee, &test_sender, &quoted_receipt);
468
468
 
@@ -493,7 +493,7 @@ fn test_send_large_amount() {
493
493
 
494
494
  let send_param = create_send_param(&env, dst_eid, large_amount, large_amount);
495
495
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
496
- let quoted_receipt = setup.quote_oft(&send_param);
496
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
497
497
 
498
498
  let (_, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
499
499
 
@@ -522,7 +522,7 @@ fn test_send_with_zro_fee() {
522
522
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
523
523
  // Include ZRO fee
524
524
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: setup.zro_fee };
525
- let quoted_receipt = setup.quote_oft(&send_param);
525
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
526
526
 
527
527
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
528
528
 
@@ -552,7 +552,7 @@ fn test_send_with_custom_fees() {
552
552
 
553
553
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
554
554
  let fee = MessagingFee { native_fee: custom_native_fee, zro_fee: custom_zro_fee };
555
- let quoted_receipt = setup.quote_oft(&send_param);
555
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
556
556
 
557
557
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &sender, &quoted_receipt);
558
558
 
@@ -583,7 +583,7 @@ fn test_send_with_different_refund_address() {
583
583
 
584
584
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
585
585
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
586
- let quoted_receipt = setup.quote_oft(&send_param);
586
+ let quoted_receipt = setup.quote_oft(&sender, &send_param);
587
587
 
588
588
  // Use different refund address
589
589
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &refund_address, &quoted_receipt);
@@ -620,7 +620,7 @@ fn test_send_lock_unlock_strategy() {
620
620
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
621
621
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
622
622
  let refund_address = sender.clone();
623
- let oft_receipt = setup.quote_oft(&send_param);
623
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
624
624
 
625
625
  // Send tokens
626
626
  let (msg_receipt, oft_receipt) = setup.send(&sender, &send_param, &fee, &refund_address, &oft_receipt);
@@ -737,7 +737,7 @@ fn test_giving_partial_authorization_with_burn_wrong_arguments() {
737
737
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
738
738
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
739
739
  let refund_address = sender.clone();
740
- let oft_receipt = setup.quote_oft(&send_param);
740
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
741
741
 
742
742
  // Send tokens
743
743
  env.mock_auths(&[MockAuth {
@@ -782,7 +782,7 @@ fn test_giving_partial_authorization_without_native_fee_authorizations() {
782
782
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
783
783
  let fee = MessagingFee { native_fee: setup.native_fee, zro_fee: 0 };
784
784
  let refund_address = sender.clone();
785
- let oft_receipt = setup.quote_oft(&send_param);
785
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
786
786
 
787
787
  // Send tokens
788
788
  env.mock_auths(&[MockAuth {
@@ -826,7 +826,7 @@ fn test_giving_partial_authorization_without_zro_fee_authorizations() {
826
826
 
827
827
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
828
828
  let refund_address = sender.clone();
829
- let oft_receipt = setup.quote_oft(&send_param);
829
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
830
830
  let fee = setup.oft.quote_send(&sender, &send_param, &true);
831
831
 
832
832
  // Send tokens
@@ -879,7 +879,7 @@ fn test_giving_full_authorization() {
879
879
 
880
880
  let send_param = create_send_param(&env, dst_eid, amount_ld, amount_ld);
881
881
  let refund_address = sender.clone();
882
- let oft_receipt = setup.quote_oft(&send_param);
882
+ let oft_receipt = setup.quote_oft(&sender, &send_param);
883
883
  let fee = setup.oft.quote_send(&sender, &send_param, &true);
884
884
 
885
885
  // Send tokens
@@ -75,8 +75,8 @@ pub fn generate_g_address(env: &Env) -> Address {
75
75
  }
76
76
 
77
77
  pub fn encode_oft_message(env: &Env, send_to: &BytesN<32>, amount_sd: u64) -> Bytes {
78
- let msg = OFTMessage { send_to: send_to.clone(), amount_sd, compose_from: None, compose_msg: None };
79
- msg.encode(env).0
78
+ let msg = OFTMessage { send_to: send_to.clone(), amount_sd, compose: None };
79
+ msg.encode(env)
80
80
  }
81
81
 
82
82
  pub fn encode_oft_message_with_compose(
@@ -86,13 +86,13 @@ pub fn encode_oft_message_with_compose(
86
86
  compose_from: &BytesN<32>,
87
87
  compose_msg: &Bytes,
88
88
  ) -> Bytes {
89
+ use crate::codec::oft_msg_codec::ComposeData;
89
90
  let msg = OFTMessage {
90
91
  send_to: send_to.clone(),
91
92
  amount_sd,
92
- compose_from: Some(compose_from.clone()),
93
- compose_msg: Some(compose_msg.clone()),
93
+ compose: Some(ComposeData { from: compose_from.clone(), msg: compose_msg.clone() }),
94
94
  };
95
- msg.encode(env).0
95
+ msg.encode(env)
96
96
  }
97
97
 
98
98
  pub fn create_origin(src_eid: u32, sender: &BytesN<32>, nonce: u64) -> Origin {
@@ -105,7 +105,6 @@ mod test_mint_burn_oft {
105
105
  use crate::{
106
106
  self as oft_core,
107
107
  oft_core::{OFTCore, OFTInternal},
108
- types::OFTReceipt,
109
108
  };
110
109
  use endpoint_v2::Origin;
111
110
  use oapp::oapp_receiver::LzReceiveInternal;
@@ -128,10 +127,10 @@ mod test_mint_burn_oft {
128
127
  token: &Address,
129
128
  owner: &Address,
130
129
  endpoint: &Address,
131
- delegate: &Option<Address>,
130
+ delegate: &Address,
132
131
  shared_decimals: u32,
133
132
  ) {
134
- Self::__initialize_oft(env, owner, token, endpoint, delegate, shared_decimals)
133
+ Self::__initialize_oft(env, token, shared_decimals, owner, endpoint, delegate)
135
134
  }
136
135
  }
137
136
 
@@ -153,11 +152,11 @@ mod test_mint_burn_oft {
153
152
  }
154
153
 
155
154
  impl OFTInternal for TestMintBurnOFT {
156
- fn __debit(env: &Env, sender: &Address, amount_ld: i128, min_amount_ld: i128, dst_eid: u32) -> OFTReceipt {
155
+ fn __debit(env: &Env, sender: &Address, amount_ld: i128, min_amount_ld: i128, dst_eid: u32) -> (i128, i128) {
157
156
  // Inline mint_burn::debit implementation
158
- let receipt = Self::__debit_view(env, amount_ld, min_amount_ld, dst_eid);
159
- MintBurnTokenClient::new(env, &Self::token(env)).burn(sender, &receipt.amount_received_ld);
160
- receipt
157
+ let (amount_sent_ld, amount_received_ld) = Self::__debit_view(env, amount_ld, min_amount_ld, dst_eid);
158
+ MintBurnTokenClient::new(env, &Self::token(env)).burn(sender, &amount_received_ld);
159
+ (amount_sent_ld, amount_received_ld)
161
160
  }
162
161
 
163
162
  fn __credit(env: &Env, to: &Address, amount_ld: i128, _src_eid: u32) -> i128 {
@@ -173,7 +172,6 @@ mod test_lock_unlock_oft {
173
172
  use crate::{
174
173
  self as oft_core,
175
174
  oft_core::{OFTCore, OFTInternal},
176
- types::OFTReceipt,
177
175
  };
178
176
  use endpoint_v2::Origin;
179
177
  use oapp::oapp_receiver::{LzReceiveInternal, OAppReceiver};
@@ -189,10 +187,10 @@ mod test_lock_unlock_oft {
189
187
  token: &Address,
190
188
  owner: &Address,
191
189
  endpoint: &Address,
192
- delegate: &Option<Address>,
190
+ delegate: &Address,
193
191
  shared_decimals: u32,
194
192
  ) {
195
- Self::__initialize_oft(env, owner, token, endpoint, delegate, shared_decimals)
193
+ Self::__initialize_oft(env, token, shared_decimals, owner, endpoint, delegate)
196
194
  }
197
195
  }
198
196
 
@@ -218,15 +216,15 @@ mod test_lock_unlock_oft {
218
216
  impl OAppReceiver for TestLockUnlockOFT {}
219
217
 
220
218
  impl OFTInternal for TestLockUnlockOFT {
221
- fn __debit(env: &Env, sender: &Address, amount_ld: i128, min_amount_ld: i128, dst_eid: u32) -> OFTReceipt {
219
+ fn __debit(env: &Env, sender: &Address, amount_ld: i128, min_amount_ld: i128, dst_eid: u32) -> (i128, i128) {
222
220
  // Inline lock_unlock::debit implementation
223
- let receipt: OFTReceipt = Self::__debit_view(env, amount_ld, min_amount_ld, dst_eid);
221
+ let (amount_sent_ld, amount_received_ld) = Self::__debit_view(env, amount_ld, min_amount_ld, dst_eid);
224
222
  TokenClient::new(env, &Self::token(env)).transfer(
225
223
  sender,
226
224
  env.current_contract_address(),
227
- &receipt.amount_received_ld,
225
+ &amount_received_ld,
228
226
  );
229
- receipt
227
+ (amount_sent_ld, amount_received_ld)
230
228
  }
231
229
 
232
230
  fn __credit(env: &Env, to: &Address, amount_ld: i128, _src_eid: u32) -> i128 {
@@ -582,7 +580,7 @@ impl<'a> OFTTestSetupBuilder<'a> {
582
580
  let endpoint_client = MockEndpointWithComposeClient::new(env, &endpoint_address);
583
581
 
584
582
  // Register OFT based on type
585
- let delegate: Option<Address> = Some(owner.clone());
583
+ let delegate = owner.clone();
586
584
  let oft_address = match oft_type {
587
585
  OFTType::MintBurn => {
588
586
  env.register(TestMintBurnOFT, (&token, &owner, &endpoint_address, &delegate, &self.shared_decimals))
@@ -732,8 +730,8 @@ impl<'a> OFTTestSetup<'a> {
732
730
  }
733
731
 
734
732
  /// Quote OFT to get the receipt for authorization
735
- pub fn quote_oft(&self, send_param: &SendParam) -> OFTReceipt {
736
- let (_, _, receipt) = self.oft.quote_oft(send_param);
733
+ pub fn quote_oft(&self, from: &Address, send_param: &SendParam) -> OFTReceipt {
734
+ let (_, _, receipt) = self.oft.quote_oft(from, send_param);
737
735
  receipt
738
736
  }
739
737