@layerzerolabs/protocol-stellar-v2 0.2.10 → 0.2.12

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 (129) hide show
  1. package/.turbo/turbo-build.log +273 -219
  2. package/.turbo/turbo-lint.log +79 -107
  3. package/.turbo/turbo-test.log +1016 -840
  4. package/Cargo.lock +14 -6
  5. package/contracts/common-macros/src/contract_impl.rs +6 -3
  6. package/contracts/common-macros/src/error.rs +9 -17
  7. package/contracts/common-macros/src/lib.rs +4 -37
  8. package/contracts/common-macros/src/ownable.rs +9 -5
  9. package/contracts/common-macros/src/tests/contract_impl.rs +178 -86
  10. package/contracts/common-macros/src/tests/error.rs +168 -0
  11. package/contracts/common-macros/src/tests/mod.rs +2 -4
  12. package/contracts/common-macros/src/tests/ownable.rs +37 -60
  13. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_impl__snapshot_generated_contract_impl_code.snap +16 -6
  14. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__error__snapshot_generated_contract_error_code.snap +20 -0
  15. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_generated_ownable_code.snap +3 -1
  16. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ownable__snapshot_only_owner_preserves_function_signature.snap +12 -2
  17. package/contracts/common-macros/src/tests/snapshots/common_macros__tests__ttl_configurable__snapshot_generated_ttl_configurable_code.snap +5 -1
  18. package/contracts/common-macros/src/tests/utils.rs +267 -0
  19. package/contracts/common-macros/src/ttl_configurable.rs +15 -12
  20. package/contracts/common-macros/src/utils.rs +35 -6
  21. package/contracts/endpoint-v2/src/endpoint_v2.rs +4 -4
  22. package/contracts/endpoint-v2/src/events.rs +40 -22
  23. package/contracts/endpoint-v2/src/interfaces/message_lib.rs +2 -2
  24. package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +2 -2
  25. package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +2 -2
  26. package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
  27. package/contracts/endpoint-v2/src/interfaces/send_lib.rs +2 -2
  28. package/contracts/endpoint-v2/src/message_lib_manager.rs +3 -3
  29. package/contracts/endpoint-v2/src/messaging_channel.rs +1 -1
  30. package/contracts/endpoint-v2/src/messaging_composer.rs +1 -1
  31. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +4 -8
  32. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +3 -7
  33. package/contracts/message-libs/{block-message-lib → blocked-message-lib}/Cargo.toml +1 -1
  34. package/contracts/message-libs/treasury/src/events.rs +9 -6
  35. package/contracts/message-libs/uln-302/src/events.rs +19 -11
  36. package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +2 -2
  37. package/contracts/message-libs/uln-302/src/interfaces/send_uln.rs +2 -2
  38. package/contracts/message-libs/uln-302/src/receive_uln.rs +2 -2
  39. package/contracts/message-libs/uln-302/src/send_uln.rs +3 -3
  40. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +5 -5
  41. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +5 -5
  42. package/contracts/message-libs/uln-302/src/tests/setup.rs +3 -3
  43. package/contracts/message-libs/uln-302/src/types.rs +24 -24
  44. package/contracts/message-libs/uln-302/src/uln302.rs +2 -2
  45. package/contracts/oapp-macros/src/oapp_core.rs +1 -1
  46. package/contracts/oapps/counter/integration_tests/utils.rs +1 -1
  47. package/contracts/oapps/oapp/src/oapp_core.rs +4 -3
  48. package/contracts/oapps/oapp/src/oapp_options_type3.rs +4 -3
  49. package/contracts/oapps/oft/integration-tests/setup.rs +4 -3
  50. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  51. package/contracts/oapps/oft/src/default_oft_impl.rs +146 -0
  52. package/contracts/oapps/oft/src/events.rs +5 -4
  53. package/contracts/oapps/oft/src/extensions/mod.rs +3 -0
  54. package/contracts/oapps/oft/src/extensions/oft_fee.rs +168 -0
  55. package/contracts/oapps/oft/src/extensions/pausable.rs +50 -0
  56. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +200 -0
  57. package/contracts/oapps/oft/src/lib.rs +2 -3
  58. package/contracts/oapps/oft/src/oft.rs +16 -85
  59. package/contracts/oapps/oft/src/oft_types/mint_burn.rs +1 -1
  60. package/contracts/oapps/oft/src/tests/extensions/mod.rs +11 -0
  61. package/contracts/oapps/oft/src/tests/extensions/setup.rs +888 -0
  62. package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +749 -0
  63. package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +432 -0
  64. package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +1078 -0
  65. package/contracts/oapps/oft/src/tests/mod.rs +2 -0
  66. package/contracts/oapps/oft/src/tests/test_utils.rs +24 -6
  67. package/contracts/oapps/{oft-mint-burn → oft-std}/Cargo.toml +1 -8
  68. package/contracts/oapps/oft-std/src/lib.rs +5 -0
  69. package/contracts/oapps/oft-std/src/oft.rs +59 -0
  70. package/contracts/utils/src/ownable.rs +8 -6
  71. package/contracts/utils/src/tests/ownable.rs +0 -63
  72. package/contracts/utils/src/tests/testing_utils.rs +7 -5
  73. package/contracts/utils/src/ttl.rs +21 -2
  74. package/contracts/workers/dvn/src/auth.rs +108 -30
  75. package/contracts/workers/dvn/src/dvn.rs +103 -33
  76. package/contracts/workers/dvn/src/errors.rs +10 -13
  77. package/contracts/workers/dvn/src/events.rs +7 -5
  78. package/contracts/workers/dvn/src/interfaces/dvn.rs +76 -3
  79. package/contracts/workers/dvn/src/interfaces/multisig.rs +41 -0
  80. package/contracts/workers/dvn/src/lib.rs +6 -8
  81. package/contracts/workers/dvn/src/multisig.rs +98 -72
  82. package/contracts/workers/dvn/src/storage.rs +9 -12
  83. package/contracts/workers/dvn/src/tests/auth.rs +56 -26
  84. package/contracts/workers/dvn/src/tests/dvn.rs +40 -41
  85. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +8 -8
  86. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +9 -9
  87. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +6 -6
  88. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  89. package/contracts/workers/dvn-fee-lib/Cargo.toml +2 -1
  90. package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +4 -3
  91. package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +8 -6
  92. package/contracts/workers/executor/src/auth.rs +93 -0
  93. package/contracts/workers/executor/src/events.rs +5 -4
  94. package/contracts/workers/executor/src/{lz_executor.rs → executor.rs} +30 -103
  95. package/contracts/workers/executor/src/interfaces/executor.rs +5 -2
  96. package/contracts/workers/executor/src/interfaces/mod.rs +1 -1
  97. package/contracts/workers/executor/src/lib.rs +6 -5
  98. package/contracts/workers/price-feed/Cargo.toml +21 -0
  99. package/contracts/workers/price-feed/src/errors.rs +9 -0
  100. package/contracts/workers/price-feed/src/events.rs +30 -0
  101. package/contracts/workers/price-feed/src/lib.rs +11 -0
  102. package/contracts/workers/price-feed/src/price_feed.rs +265 -0
  103. package/contracts/workers/price-feed/src/storage.rs +42 -0
  104. package/contracts/workers/price-feed/src/types.rs +59 -0
  105. package/contracts/workers/worker/src/events.rs +23 -13
  106. package/contracts/workers/worker/src/interfaces/dvn_fee_lib.rs +2 -1
  107. package/contracts/workers/worker/src/worker.rs +32 -21
  108. package/package.json +3 -3
  109. package/sdk/dist/generated/bml.js +24 -22
  110. package/sdk/dist/generated/counter.d.ts +102 -0
  111. package/sdk/dist/generated/counter.js +36 -24
  112. package/sdk/dist/generated/endpoint.js +24 -22
  113. package/sdk/dist/generated/sml.js +24 -22
  114. package/sdk/dist/generated/uln302.d.ts +1 -1
  115. package/sdk/dist/generated/uln302.js +34 -32
  116. package/sdk/package.json +1 -1
  117. package/sdk/test/index.test.ts +1 -1
  118. package/sdk/test/oft.test.ts +847 -0
  119. package/sdk/test/suites/scan.ts +20 -4
  120. package/tools/ts-bindings-gen/src/main.rs +2 -1
  121. package/contracts/common-macros/src/event.rs +0 -16
  122. package/contracts/oapps/oft/src/macro_tests/mod.rs +0 -2
  123. package/contracts/oapps/oft/src/macro_tests/test_all_default.rs +0 -41
  124. package/contracts/oapps/oft/src/macro_tests/test_override.rs +0 -83
  125. package/contracts/oapps/oft-mint-burn/src/lib.rs +0 -3
  126. package/contracts/oapps/oft-mint-burn/src/oft.rs +0 -28
  127. package/contracts/oapps/oft-mint-burn/src/tests/mod.rs +0 -1
  128. package/contracts/workers/dvn/src/types.rs +0 -26
  129. /package/contracts/message-libs/{block-message-lib → blocked-message-lib}/src/lib.rs +0 -0
@@ -43,23 +43,15 @@
43
43
  // inside this crate and in external crates implementing the OFT trait.
44
44
  extern crate self as oft;
45
45
 
46
- use crate::{
47
- codec::{oft_compose_msg_codec::OFTComposeMsg, oft_msg_codec::OFTMessage},
48
- constants,
49
- errors::OFTError,
50
- events::{self, OFTSent},
51
- storage::OFTStorage,
52
- types::OFTReceipt,
53
- utils::{address_to_bytes32, remove_dust, resolve_address, to_ld, to_sd},
54
- };
55
- use endpoint_v2::{MessagingComposerClient, Origin};
46
+ use crate::{errors::OFTError, storage::OFTStorage, types::OFTReceipt};
47
+ use endpoint_v2::Origin;
56
48
  use oapp::{
57
49
  oapp_core::{oapp_initialize, OAppCore},
58
50
  oapp_options_type3::OAppOptionsType3,
59
51
  oapp_receiver::OAppReceiver,
60
52
  oapp_sender::OAppSender,
61
53
  };
62
- use soroban_sdk::{assert_with_error, contracttrait, token::TokenClient, vec, Address, Bytes, BytesN, Env};
54
+ use soroban_sdk::{assert_with_error, contracttrait, token::TokenClient, Address, Bytes, BytesN, Env};
63
55
  use utils::ownable::OwnableInitializer;
64
56
 
65
57
  // =====================================================
@@ -74,12 +66,12 @@ pub fn oft_initialize<T: OFT + OwnableInitializer>(
74
66
  token: &Address,
75
67
  endpoint: &Address,
76
68
  delegate: &Option<Address>,
69
+ shared_decimals: u32,
77
70
  ) {
78
71
  // Initialize OApp (includes owner initialization)
79
72
  oapp_initialize::<T>(env, owner, endpoint, delegate);
80
73
 
81
74
  let local_decimals = TokenClient::new(env, token).decimals();
82
- let shared_decimals = T::shared_decimals(env);
83
75
  assert_with_error!(env, local_decimals >= shared_decimals, OFTError::InvalidLocalDecimals);
84
76
 
85
77
  // Initialize OFT storage
@@ -142,14 +134,8 @@ pub trait OFTInner: OAppCore {
142
134
  // =========================================================================
143
135
 
144
136
  /// Calculates debit amounts without executing (view function).
145
- fn __debit_view(env: &Env, amount_ld: i128, min_amount_ld: i128, _dst_eid: u32) -> OFTReceipt {
146
- let conversion_rate = OFTStorage::decimal_conversion_rate(env).unwrap();
147
- let amount_sent_ld = remove_dust(amount_ld, conversion_rate);
148
- let amount_received_ld = amount_sent_ld;
149
-
150
- assert_with_error!(env, amount_received_ld >= min_amount_ld, OFTError::SlippageExceeded);
151
-
152
- OFTReceipt { amount_sent_ld, amount_received_ld }
137
+ fn __debit_view(env: &Env, amount_ld: i128, min_amount_ld: i128, dst_eid: u32) -> OFTReceipt {
138
+ crate::default_oft_impl::default_debit_view(env, amount_ld, min_amount_ld, dst_eid)
153
139
  }
154
140
 
155
141
  /// Builds OFT message and combines options for cross-chain transfer.
@@ -162,18 +148,7 @@ pub trait OFTInner: OAppCore {
162
148
  where
163
149
  Self: OAppOptionsType3,
164
150
  {
165
- let has_compose = !send_param.compose_msg.is_empty();
166
- let conversion_rate = OFTStorage::decimal_conversion_rate(env).unwrap();
167
- let msg = OFTMessage {
168
- send_to: send_param.to.clone(),
169
- amount_sd: to_sd(env, amount_ld, conversion_rate),
170
- compose_from: if has_compose { Some(address_to_bytes32(sender)) } else { None },
171
- compose_msg: if has_compose { Some(send_param.compose_msg.clone()) } else { None },
172
- };
173
- let (msg, _) = msg.encode(env);
174
- let msg_type = if has_compose { constants::SEND_AND_CALL } else { constants::SEND };
175
-
176
- (msg, Self::combine_options(env, send_param.dst_eid, msg_type, &send_param.extra_options))
151
+ crate::default_oft_impl::default_build_msg_and_options::<Self>(env, sender, send_param, amount_ld)
177
152
  }
178
153
 
179
154
  /// Handles OFT receive logic.
@@ -186,29 +161,7 @@ pub trait OFTInner: OAppCore {
186
161
  _extra_data: &Bytes,
187
162
  _value: i128,
188
163
  ) {
189
- let oft_msg = OFTMessage::decode(message);
190
- let send_to = resolve_address(env, &oft_msg.send_to);
191
-
192
- let conversion_rate = OFTStorage::decimal_conversion_rate(env).unwrap();
193
- let amount_received_ld =
194
- Self::__credit(env, &send_to, to_ld(oft_msg.amount_sd, conversion_rate), origin.src_eid);
195
-
196
- if oft_msg.is_composed() {
197
- let compose_msg = OFTComposeMsg {
198
- nonce: origin.nonce,
199
- src_eid: origin.src_eid,
200
- amount_ld: amount_received_ld,
201
- compose_from: oft_msg.compose_from.unwrap(),
202
- compose_msg: oft_msg.compose_msg.unwrap(),
203
- }
204
- .encode(env);
205
-
206
- let endpoint = MessagingComposerClient::new(env, &Self::endpoint(env));
207
- endpoint.send_compose(&env.current_contract_address(), &send_to, guid, &0, &compose_msg);
208
- }
209
-
210
- events::OFTReceived { guid: guid.clone(), src_eid: origin.src_eid, to: send_to, amount_received_ld }
211
- .publish(env);
164
+ crate::default_oft_impl::default_lz_receive::<Self>(env, _executor, origin, guid, message, _extra_data, _value)
212
165
  }
213
166
  }
214
167
 
@@ -236,8 +189,11 @@ pub trait OFT: OFTInner + OAppReceiver + OAppSender + OAppOptionsType3 {
236
189
  }
237
190
 
238
191
  /// Retrieves the shared decimals used for cross-chain normalization.
239
- fn shared_decimals(_env: &Env) -> u32 {
240
- 6
192
+ fn shared_decimals(env: &Env) -> u32 {
193
+ let token = Self::token(env);
194
+ let local_decimals = soroban_sdk::token::TokenClient::new(env, &token).decimals();
195
+ let conversion_rate = Self::decimal_conversion_rate(env);
196
+ local_decimals - conversion_rate.ilog10()
241
197
  }
242
198
 
243
199
  /// Retrieves the decimal conversion rate used for cross-chain normalization.
@@ -264,8 +220,7 @@ pub trait OFT: OFTInner + OAppReceiver + OAppSender + OAppOptionsType3 {
264
220
  env: &Env,
265
221
  send_param: &oft::types::SendParam,
266
222
  ) -> (oft::types::OFTLimit, soroban_sdk::Vec<oft::types::OFTFeeDetail>, oft::types::OFTReceipt) {
267
- let oft_receipt = Self::__debit_view(env, send_param.amount_ld, send_param.min_amount_ld, send_param.dst_eid);
268
- (oft::types::OFTLimit { min_amount_ld: 0, max_amount_ld: i128::MAX }, vec![env], oft_receipt)
223
+ crate::default_oft_impl::default_quote_oft::<Self>(env, send_param)
269
224
  }
270
225
 
271
226
  /// Quotes a send operation including LayerZero messaging fees.
@@ -275,11 +230,7 @@ pub trait OFT: OFTInner + OAppReceiver + OAppSender + OAppOptionsType3 {
275
230
  send_param: &oft::types::SendParam,
276
231
  pay_in_zro: bool,
277
232
  ) -> endpoint_v2::MessagingFee {
278
- let oft::types::OFTReceipt { amount_received_ld, .. } =
279
- Self::__debit_view(env, send_param.amount_ld, send_param.min_amount_ld, send_param.dst_eid);
280
-
281
- let (msg, options) = Self::__build_msg_and_options(env, sender, send_param, amount_received_ld);
282
- Self::lz_quote(env, send_param.dst_eid, &msg, &options, pay_in_zro)
233
+ crate::default_oft_impl::default_quote_send::<Self>(env, sender, send_param, pay_in_zro)
283
234
  }
284
235
 
285
236
  /// Sends tokens cross-chain to another endpoint.
@@ -295,26 +246,6 @@ pub trait OFT: OFTInner + OAppReceiver + OAppSender + OAppOptionsType3 {
295
246
  fee: &endpoint_v2::MessagingFee,
296
247
  refund_address: &Address,
297
248
  ) -> (endpoint_v2::MessagingReceipt, oft::types::OFTReceipt) {
298
- sender.require_auth();
299
-
300
- let oft_receipt =
301
- Self::__debit(env, sender, send_param.amount_ld, send_param.min_amount_ld, send_param.dst_eid);
302
-
303
- let (msg, options) = Self::__build_msg_and_options(env, sender, send_param, oft_receipt.amount_received_ld);
304
- let msg_receipt = Self::lz_send(env, sender, send_param.dst_eid, &msg, &options, fee, refund_address);
305
-
306
- OFTSent {
307
- guid: msg_receipt.guid.clone(),
308
- dst_eid: send_param.dst_eid,
309
- from: sender.clone(),
310
- amount_sent_ld: oft_receipt.amount_sent_ld,
311
- amount_received_ld: oft_receipt.amount_received_ld,
312
- }
313
- .publish(env);
314
-
315
- (msg_receipt, oft_receipt)
249
+ crate::default_oft_impl::default_send::<Self>(env, sender, send_param, fee, refund_address)
316
250
  }
317
-
318
- // NOTE: `next_nonce`, `lz_receive`, etc. are inherited from OAppReceiver supertrait.
319
- // Do NOT redefine them here to avoid method conflicts.
320
251
  }
@@ -22,7 +22,7 @@ use crate::types::OFTReceipt;
22
22
  /// `OFTReceipt` containing the amount sent and amount received
23
23
  pub fn debit<T: OFT>(env: &Env, sender: &Address, amount_ld: i128, min_amount_ld: i128, dst_eid: u32) -> OFTReceipt {
24
24
  let receipt = T::__debit_view(env, amount_ld, min_amount_ld, dst_eid);
25
- MintBurnTokenClient::new(env, &T::token(env)).burn(sender, &receipt.amount_sent_ld);
25
+ MintBurnTokenClient::new(env, &T::token(env)).burn(sender, &receipt.amount_received_ld);
26
26
  receipt
27
27
  }
28
28
 
@@ -0,0 +1,11 @@
1
+ //! Extension tests module.
2
+ //!
3
+ //! This module contains tests for OFT extensions (pausable, oft_fee, rate_limiter).
4
+
5
+ pub mod setup;
6
+ pub mod test_oft_fee;
7
+ pub mod test_pausable;
8
+ pub mod test_rate_limiter;
9
+
10
+ // Re-export commonly used items for convenience
11
+ pub use setup::{ExtensiveOFT, ExtensiveOFTClient, ExtensiveOFTTestSetup};