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