@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.
- package/.turbo/turbo-build.log +275 -248
- package/.turbo/turbo-lint.log +52 -58
- package/.turbo/turbo-test.log +1224 -1358
- package/Cargo.lock +8 -5
- package/Cargo.toml +1 -1
- package/contracts/ERROR_SPEC.md +1 -1
- package/contracts/message-libs/uln-302/src/send_uln.rs +1 -1
- package/contracts/oapps/oapp/src/oapp_receiver.rs +1 -1
- package/contracts/oapps/oft/Cargo.toml +10 -7
- package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_oft_fee.rs +3 -4
- package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_pausable.rs +2 -3
- package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/test_rate_limiter.rs +1 -1
- package/contracts/oapps/oft/integration-tests/mod.rs +1 -1
- package/contracts/oapps/oft/integration-tests/setup.rs +28 -127
- package/contracts/oapps/oft/integration-tests/utils.rs +254 -21
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +5 -6
- package/contracts/oapps/oft/src/lib.rs +10 -14
- package/contracts/oapps/oft/src/oft.rs +151 -189
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -11
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +32 -12
- package/contracts/oapps/oft/src/oft_types/mod.rs +13 -0
- package/contracts/oapps/{oft-std → oft-core}/Cargo.toml +6 -4
- package/contracts/oapps/{oft-std → oft-core}/integration-tests/mod.rs +1 -1
- package/contracts/oapps/{oft-std → oft-core}/integration-tests/setup.rs +126 -29
- package/contracts/oapps/{oft → oft-core}/integration-tests/test_with_sml.rs +3 -3
- package/contracts/oapps/oft-core/integration-tests/utils.rs +201 -0
- package/contracts/oapps/oft-core/src/lib.rs +18 -0
- package/contracts/oapps/oft-core/src/oft_core.rs +439 -0
- package/contracts/oapps/{oft → oft-core}/src/tests/mod.rs +0 -2
- package/contracts/oapps/{oft → oft-core}/src/tests/test_lz_receive.rs +7 -7
- package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_msg_codec.rs +4 -4
- package/contracts/oapps/{oft → oft-core}/src/tests/test_resolve_address.rs +3 -3
- package/contracts/oapps/{oft → oft-core}/src/tests/test_utils.rs +44 -25
- package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
- package/contracts/utils/src/errors.rs +5 -1
- package/contracts/utils/src/ownable.rs +125 -3
- package/contracts/utils/src/tests/option_ext.rs +1 -1
- package/contracts/utils/src/tests/ownable.rs +445 -7
- package/contracts/utils/src/tests/ttl_configurable.rs +2 -2
- package/package.json +4 -5
- package/sdk/.turbo/turbo-test.log +216 -206
- package/sdk/dist/generated/bml.d.ts +30 -0
- package/sdk/dist/generated/bml.js +28 -5
- package/sdk/dist/generated/counter.d.ts +122 -2
- package/sdk/dist/generated/counter.js +36 -7
- package/sdk/dist/generated/dvn.d.ts +30 -0
- package/sdk/dist/generated/dvn.js +28 -5
- package/sdk/dist/generated/dvn_fee_lib.d.ts +122 -2
- package/sdk/dist/generated/dvn_fee_lib.js +36 -7
- package/sdk/dist/generated/endpoint.d.ts +122 -2
- package/sdk/dist/generated/endpoint.js +36 -7
- package/sdk/dist/generated/executor.d.ts +122 -2
- package/sdk/dist/generated/executor.js +36 -7
- package/sdk/dist/generated/executor_fee_lib.d.ts +122 -2
- package/sdk/dist/generated/executor_fee_lib.js +36 -7
- package/sdk/dist/generated/executor_helper.d.ts +30 -0
- package/sdk/dist/generated/executor_helper.js +28 -5
- package/sdk/dist/generated/oft.d.ts +1842 -0
- package/sdk/dist/generated/oft.js +345 -0
- package/sdk/dist/generated/price_feed.d.ts +122 -2
- package/sdk/dist/generated/price_feed.js +36 -7
- package/sdk/dist/generated/sml.d.ts +122 -2
- package/sdk/dist/generated/sml.js +36 -7
- package/sdk/dist/generated/treasury.d.ts +122 -2
- package/sdk/dist/generated/treasury.js +36 -7
- package/sdk/dist/generated/uln302.d.ts +122 -2
- package/sdk/dist/generated/uln302.js +36 -7
- package/sdk/dist/generated/upgrader.d.ts +15 -0
- package/sdk/dist/generated/upgrader.js +18 -0
- package/sdk/dist/index.d.ts +1 -2
- package/sdk/dist/index.js +1 -3
- package/sdk/package.json +3 -2
- package/sdk/src/index.ts +1 -4
- package/sdk/test/oft-sml.test.ts +16 -16
- package/sdk/turbo.json +8 -0
- package/tools/ts-bindings-gen/Cargo.toml +2 -0
- package/tools/ts-bindings-gen/src/main.rs +51 -4
- package/turbo.json +0 -2
- package/contracts/oapps/oft/src/interfaces/mint_burn_token.rs +0 -23
- package/contracts/oapps/oft/src/interfaces/mod.rs +0 -3
- package/contracts/oapps/oft/src/oft_impl.rs +0 -201
- package/contracts/oapps/oft/src/tests/extensions/mod.rs +0 -11
- package/contracts/oapps/oft/src/tests/extensions/setup.rs +0 -917
- package/contracts/oapps/oft/src/tests/extensions/test_oft_fee.rs +0 -751
- package/contracts/oapps/oft/src/tests/extensions/test_pausable.rs +0 -434
- package/contracts/oapps/oft/src/tests/extensions/test_rate_limiter.rs +0 -1080
- package/contracts/oapps/oft-std/integration-tests/utils.rs +0 -427
- package/contracts/oapps/oft-std/src/lib.rs +0 -16
- package/contracts/oapps/oft-std/src/oft.rs +0 -174
- package/sdk/dist/generated/oft_std.d.ts +0 -1722
- package/sdk/dist/generated/oft_std.js +0 -316
- package/sdk/dist/wasm/blocked-message-lib.d.ts +0 -1
- package/sdk/dist/wasm/blocked-message-lib.js +0 -2
- package/sdk/dist/wasm/counter.d.ts +0 -1
- package/sdk/dist/wasm/counter.js +0 -2
- package/sdk/dist/wasm/dvn-fee-lib.d.ts +0 -1
- package/sdk/dist/wasm/dvn-fee-lib.js +0 -2
- package/sdk/dist/wasm/dvn.d.ts +0 -1
- package/sdk/dist/wasm/dvn.js +0 -2
- package/sdk/dist/wasm/endpoint-v2.d.ts +0 -1
- package/sdk/dist/wasm/endpoint-v2.js +0 -2
- package/sdk/dist/wasm/executor-fee-lib.d.ts +0 -1
- package/sdk/dist/wasm/executor-fee-lib.js +0 -2
- package/sdk/dist/wasm/executor-helper.d.ts +0 -1
- package/sdk/dist/wasm/executor-helper.js +0 -2
- package/sdk/dist/wasm/executor.d.ts +0 -1
- package/sdk/dist/wasm/executor.js +0 -2
- package/sdk/dist/wasm/layerzero-views.d.ts +0 -1
- package/sdk/dist/wasm/layerzero-views.js +0 -2
- package/sdk/dist/wasm/oft-std.d.ts +0 -1
- package/sdk/dist/wasm/oft-std.js +0 -2
- package/sdk/dist/wasm/price-feed.d.ts +0 -1
- package/sdk/dist/wasm/price-feed.js +0 -2
- package/sdk/dist/wasm/simple-message-lib.d.ts +0 -1
- package/sdk/dist/wasm/simple-message-lib.js +0 -2
- package/sdk/dist/wasm/treasury.d.ts +0 -1
- package/sdk/dist/wasm/treasury.js +0 -2
- package/sdk/dist/wasm/uln302.d.ts +0 -1
- package/sdk/dist/wasm/uln302.js +0 -2
- package/sdk/dist/wasm/upgrader.d.ts +0 -1
- package/sdk/dist/wasm/upgrader.js +0 -2
- package/sdk/dist/wasm.d.ts +0 -15
- package/sdk/dist/wasm.js +0 -15
- /package/contracts/oapps/{oft-std → oft}/integration-tests/extensions/mod.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/codec/mod.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/codec/oft_compose_msg_codec.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/codec/oft_msg_codec.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/errors.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/events.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/storage.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_decimals.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_compose_msg_codec.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_oft_version.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_oft.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_quote_send.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_send.rs +0 -0
- /package/contracts/oapps/{oft → oft-core}/src/tests/test_token.rs +0 -0
- /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
|
-
}
|