@layerzerolabs/protocol-stellar-v2 0.2.18 → 0.2.20
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 +303 -253
- package/.turbo/turbo-lint.log +66 -65
- package/.turbo/turbo-test.log +1312 -1282
- package/Cargo.lock +21 -8
- package/Cargo.toml +2 -0
- package/contracts/ERROR_SPEC.md +9 -2
- package/contracts/common-macros/src/contract_ttl.rs +18 -7
- package/contracts/common-macros/src/lib.rs +4 -4
- package/contracts/common-macros/src/tests/contract_ttl.rs +1 -1
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__contract_ttl__snapshot_generated_contractimpl_code.snap +2 -1
- package/contracts/common-macros/src/tests/snapshots/common_macros__tests__upgradeable__snapshot_generated_upgradeable_code.snap +7 -12
- package/contracts/common-macros/src/upgradeable.rs +15 -21
- package/contracts/message-libs/uln-302/src/events.rs +4 -0
- package/contracts/message-libs/uln-302/src/send_uln.rs +23 -7
- package/contracts/message-libs/uln-302/src/tests/send_uln302/send.rs +38 -64
- package/contracts/oapps/counter/Cargo.toml +1 -0
- package/contracts/oapps/counter/integration_tests/setup_uln.rs +1 -1
- package/contracts/oapps/oapp/src/oapp_receiver.rs +1 -1
- package/contracts/oapps/oapp/src/tests/test_oapp_core.rs +113 -65
- package/contracts/oapps/oapp/src/tests/test_oapp_options_type3.rs +111 -82
- package/contracts/oapps/oapp/src/tests/test_oapp_receiver.rs +293 -65
- package/contracts/oapps/oapp/src/tests/test_oapp_sender.rs +331 -56
- 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 +23 -8
- package/contracts/oapps/oft/src/extensions/pausable.rs +19 -4
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +52 -28
- package/contracts/oapps/oft/src/lib.rs +10 -14
- package/contracts/oapps/oft/src/oft.rs +143 -193
- package/contracts/oapps/oft/src/oft_types/lock_unlock.rs +9 -11
- package/contracts/oapps/oft/src/oft_types/mint_burn.rs +12 -14
- 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 +479 -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 +46 -27
- package/contracts/oapps/{oft → oft-core}/src/utils.rs +1 -1
- package/contracts/upgrader/src/lib.rs +30 -57
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract1.wasm +0 -0
- package/contracts/upgrader/src/tests/test_data/test_upgradeable_contract2.wasm +0 -0
- package/contracts/upgrader/src/tests/test_upgrader.rs +44 -35
- package/contracts/utils/src/buffer_reader.rs +1 -0
- package/contracts/utils/src/errors.rs +8 -2
- 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/contracts/utils/src/tests/upgradeable.rs +372 -175
- package/contracts/utils/src/ttl_configurable.rs +3 -3
- package/contracts/utils/src/upgradeable.rs +48 -23
- package/contracts/workers/dvn/Cargo.toml +1 -0
- package/contracts/workers/dvn/src/auth.rs +12 -42
- package/contracts/workers/dvn/src/dvn.rs +16 -31
- package/contracts/workers/dvn/src/errors.rs +0 -1
- package/contracts/workers/dvn/src/interfaces/dvn.rs +35 -0
- package/contracts/workers/dvn/src/lib.rs +4 -3
- package/contracts/workers/dvn/src/tests/auth.rs +1 -1
- package/contracts/workers/dvn/src/tests/dvn.rs +19 -15
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +2 -4
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +1 -3
- package/contracts/workers/dvn/src/tests/setup.rs +5 -9
- package/contracts/workers/dvn-fee-lib/Cargo.toml +1 -1
- package/contracts/workers/dvn-fee-lib/src/dvn_fee_lib.rs +3 -5
- package/contracts/workers/dvn-fee-lib/src/tests/dvn_fee_lib.rs +2 -3
- package/contracts/workers/executor/Cargo.toml +1 -0
- package/contracts/workers/executor/src/executor.rs +15 -26
- package/contracts/workers/executor-fee-lib/Cargo.toml +2 -1
- package/contracts/workers/executor-fee-lib/src/executor_fee_lib.rs +63 -5
- package/contracts/workers/executor-fee-lib/src/executor_option.rs +28 -1
- package/contracts/workers/executor-fee-lib/src/lib.rs +3 -0
- package/contracts/workers/executor-fee-lib/src/tests/executor_fee_lib.rs +701 -0
- package/contracts/workers/executor-fee-lib/src/tests/executor_option.rs +370 -0
- package/contracts/workers/executor-fee-lib/src/tests/mod.rs +4 -0
- package/contracts/workers/executor-fee-lib/src/tests/setup.rs +60 -0
- package/contracts/workers/executor-helper/src/lib.rs +3 -0
- package/contracts/workers/executor-helper/src/tests/executor_helper.rs +184 -0
- package/contracts/workers/executor-helper/src/tests/mod.rs +2 -0
- package/contracts/workers/executor-helper/src/tests/setup.rs +366 -0
- package/contracts/workers/fee-lib-interfaces/Cargo.toml +14 -0
- package/contracts/workers/{worker/src/interfaces/mod.rs → fee-lib-interfaces/src/lib.rs} +4 -3
- package/contracts/workers/price-feed/Cargo.toml +2 -1
- package/contracts/workers/price-feed/src/events.rs +1 -1
- package/contracts/workers/price-feed/src/lib.rs +3 -0
- package/contracts/workers/price-feed/src/price_feed.rs +6 -12
- package/contracts/workers/price-feed/src/storage.rs +1 -1
- package/contracts/workers/price-feed/src/tests/mod.rs +2 -0
- package/contracts/workers/price-feed/src/tests/price_feed.rs +869 -0
- package/contracts/workers/price-feed/src/tests/setup.rs +70 -0
- package/contracts/workers/price-feed/src/types.rs +1 -1
- package/contracts/workers/worker/src/errors.rs +0 -3
- package/contracts/workers/worker/src/lib.rs +0 -2
- package/contracts/workers/worker/src/storage.rs +32 -29
- package/contracts/workers/worker/src/tests/setup.rs +1 -7
- package/contracts/workers/worker/src/tests/worker.rs +50 -42
- package/contracts/workers/worker/src/worker.rs +49 -58
- package/package.json +4 -5
- package/sdk/.turbo/turbo-test.log +229 -217
- package/sdk/dist/generated/bml.d.ts +39 -1
- package/sdk/dist/generated/bml.js +33 -8
- package/sdk/dist/generated/counter.d.ts +131 -3
- package/sdk/dist/generated/counter.js +41 -10
- package/sdk/dist/generated/dvn.d.ts +431 -362
- package/sdk/dist/generated/dvn.js +80 -55
- package/sdk/dist/generated/dvn_fee_lib.d.ts +327 -251
- package/sdk/dist/generated/dvn_fee_lib.js +55 -57
- package/sdk/dist/generated/endpoint.d.ts +131 -3
- package/sdk/dist/generated/endpoint.js +41 -10
- package/sdk/dist/generated/executor.d.ts +503 -339
- package/sdk/dist/generated/executor.js +80 -48
- package/sdk/dist/generated/executor_fee_lib.d.ts +395 -319
- package/sdk/dist/generated/executor_fee_lib.js +54 -56
- package/sdk/dist/generated/executor_helper.d.ts +53 -187
- package/sdk/dist/generated/executor_helper.js +47 -29
- package/sdk/dist/generated/layerzero_view.d.ts +1271 -0
- package/sdk/dist/generated/layerzero_view.js +294 -0
- package/sdk/dist/generated/oft.d.ts +1851 -0
- package/sdk/dist/generated/oft.js +347 -0
- package/sdk/dist/generated/price_feed.d.ts +329 -253
- package/sdk/dist/generated/price_feed.js +55 -57
- package/sdk/dist/generated/sml.d.ts +131 -3
- package/sdk/dist/generated/sml.js +41 -10
- package/sdk/dist/generated/treasury.d.ts +131 -3
- package/sdk/dist/generated/treasury.js +41 -10
- package/sdk/dist/generated/uln302.d.ts +131 -3
- package/sdk/dist/generated/uln302.js +43 -12
- package/sdk/dist/generated/upgrader.d.ts +201 -15
- package/sdk/dist/generated/upgrader.js +99 -1
- package/sdk/dist/index.d.ts +2 -2
- package/sdk/dist/index.js +3 -3
- package/sdk/package.json +3 -2
- package/sdk/src/index.ts +3 -3
- package/sdk/test/oft-sml.test.ts +20 -20
- package/sdk/test/upgrader.test.ts +2 -3
- package/sdk/turbo.json +8 -0
- package/tools/ts-bindings-gen/Cargo.toml +2 -0
- package/tools/ts-bindings-gen/src/main.rs +53 -5
- 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
- /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/dvn_fee_lib.rs +0 -0
- /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/executor_fee_lib.rs +0 -0
- /package/contracts/workers/{worker/src/interfaces → fee-lib-interfaces/src}/price_feed.rs +0 -0
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
use endpoint_v2::Origin;
|
|
2
|
+
use executor::NativeDropParams;
|
|
3
|
+
use soroban_sdk::testutils::Address as _;
|
|
4
|
+
use soroban_sdk::{
|
|
5
|
+
contract, contractimpl, contracttype,
|
|
6
|
+
testutils::{MockAuth, MockAuthInvoke},
|
|
7
|
+
token::StellarAssetClient,
|
|
8
|
+
Address, Bytes, BytesN, Env, IntoVal, Symbol, Vec,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
use crate::{ComposeParams, ExecutionParams, ExecutorHelper, ExecutorHelperClient};
|
|
12
|
+
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Mock Endpoint (provides native_token)
|
|
15
|
+
// =============================================================================
|
|
16
|
+
|
|
17
|
+
#[contract]
|
|
18
|
+
pub struct MockEndpoint;
|
|
19
|
+
|
|
20
|
+
#[contractimpl]
|
|
21
|
+
impl MockEndpoint {
|
|
22
|
+
pub fn __constructor(env: &Env, native_token: &Address) {
|
|
23
|
+
env.storage().instance().set(&Symbol::new(env, "native_token"), native_token);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
pub fn native_token(env: &Env) -> Address {
|
|
27
|
+
env.storage().instance().get(&Symbol::new(env, "native_token")).unwrap()
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Mock Receiver (implements lz_receive)
|
|
33
|
+
// =============================================================================
|
|
34
|
+
|
|
35
|
+
#[contract]
|
|
36
|
+
pub struct MockReceiver;
|
|
37
|
+
|
|
38
|
+
#[contracttype]
|
|
39
|
+
#[derive(Clone, Debug)]
|
|
40
|
+
pub struct LzReceiveRecord {
|
|
41
|
+
pub executor: Address,
|
|
42
|
+
pub origin: Origin,
|
|
43
|
+
pub guid: BytesN<32>,
|
|
44
|
+
pub message: Bytes,
|
|
45
|
+
pub extra_data: Bytes,
|
|
46
|
+
pub value: i128,
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#[contractimpl]
|
|
50
|
+
impl MockReceiver {
|
|
51
|
+
pub fn __constructor(_env: &Env) {}
|
|
52
|
+
|
|
53
|
+
pub fn lz_receive(
|
|
54
|
+
env: &Env,
|
|
55
|
+
executor: &Address,
|
|
56
|
+
origin: &Origin,
|
|
57
|
+
guid: &BytesN<32>,
|
|
58
|
+
message: &Bytes,
|
|
59
|
+
extra_data: &Bytes,
|
|
60
|
+
value: i128,
|
|
61
|
+
) {
|
|
62
|
+
executor.require_auth();
|
|
63
|
+
let record = LzReceiveRecord {
|
|
64
|
+
executor: executor.clone(),
|
|
65
|
+
origin: origin.clone(),
|
|
66
|
+
guid: guid.clone(),
|
|
67
|
+
message: message.clone(),
|
|
68
|
+
extra_data: extra_data.clone(),
|
|
69
|
+
value,
|
|
70
|
+
};
|
|
71
|
+
env.storage().instance().set(&Symbol::new(env, "lz_receive"), &record);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
pub fn get_lz_receive(env: &Env) -> Option<LzReceiveRecord> {
|
|
75
|
+
env.storage().instance().get(&Symbol::new(env, "lz_receive"))
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// =============================================================================
|
|
80
|
+
// Mock Composer (implements lz_compose)
|
|
81
|
+
// =============================================================================
|
|
82
|
+
|
|
83
|
+
#[contract]
|
|
84
|
+
pub struct MockComposer;
|
|
85
|
+
|
|
86
|
+
#[contracttype]
|
|
87
|
+
#[derive(Clone, Debug)]
|
|
88
|
+
pub struct LzComposeRecord {
|
|
89
|
+
pub executor: Address,
|
|
90
|
+
pub from: Address,
|
|
91
|
+
pub guid: BytesN<32>,
|
|
92
|
+
pub index: u32,
|
|
93
|
+
pub message: Bytes,
|
|
94
|
+
pub extra_data: Bytes,
|
|
95
|
+
pub value: i128,
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
#[contractimpl]
|
|
99
|
+
impl MockComposer {
|
|
100
|
+
pub fn __constructor(_env: &Env) {}
|
|
101
|
+
|
|
102
|
+
pub fn lz_compose(
|
|
103
|
+
env: &Env,
|
|
104
|
+
executor: &Address,
|
|
105
|
+
from: &Address,
|
|
106
|
+
guid: &BytesN<32>,
|
|
107
|
+
index: u32,
|
|
108
|
+
message: &Bytes,
|
|
109
|
+
extra_data: &Bytes,
|
|
110
|
+
value: i128,
|
|
111
|
+
) {
|
|
112
|
+
executor.require_auth();
|
|
113
|
+
let record = LzComposeRecord {
|
|
114
|
+
executor: executor.clone(),
|
|
115
|
+
from: from.clone(),
|
|
116
|
+
guid: guid.clone(),
|
|
117
|
+
index,
|
|
118
|
+
message: message.clone(),
|
|
119
|
+
extra_data: extra_data.clone(),
|
|
120
|
+
value,
|
|
121
|
+
};
|
|
122
|
+
env.storage().instance().set(&Symbol::new(env, "lz_compose"), &record);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
pub fn get_lz_compose(env: &Env) -> Option<LzComposeRecord> {
|
|
126
|
+
env.storage().instance().get(&Symbol::new(env, "lz_compose"))
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// =============================================================================
|
|
131
|
+
// Mock Executor (provides endpoint() and native_drop())
|
|
132
|
+
// =============================================================================
|
|
133
|
+
|
|
134
|
+
#[contract]
|
|
135
|
+
pub struct MockExecutor;
|
|
136
|
+
|
|
137
|
+
#[contracttype]
|
|
138
|
+
#[derive(Clone, Debug)]
|
|
139
|
+
pub struct NativeDropRecord {
|
|
140
|
+
pub admin: Address,
|
|
141
|
+
pub origin: Origin,
|
|
142
|
+
pub dst_eid: u32,
|
|
143
|
+
pub oapp: Address,
|
|
144
|
+
pub params: Vec<NativeDropParams>,
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
#[contractimpl]
|
|
148
|
+
impl MockExecutor {
|
|
149
|
+
pub fn __constructor(env: &Env, endpoint: &Address) {
|
|
150
|
+
env.storage().instance().set(&Symbol::new(env, "endpoint"), endpoint);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
pub fn endpoint(env: &Env) -> Address {
|
|
154
|
+
env.storage().instance().get(&Symbol::new(env, "endpoint")).unwrap()
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
pub fn native_drop(
|
|
158
|
+
env: &Env,
|
|
159
|
+
admin: &Address,
|
|
160
|
+
origin: &Origin,
|
|
161
|
+
dst_eid: u32,
|
|
162
|
+
oapp: &Address,
|
|
163
|
+
params: &Vec<NativeDropParams>,
|
|
164
|
+
) {
|
|
165
|
+
admin.require_auth();
|
|
166
|
+
let record = NativeDropRecord {
|
|
167
|
+
admin: admin.clone(),
|
|
168
|
+
origin: origin.clone(),
|
|
169
|
+
dst_eid,
|
|
170
|
+
oapp: oapp.clone(),
|
|
171
|
+
params: params.clone(),
|
|
172
|
+
};
|
|
173
|
+
env.storage().instance().set(&Symbol::new(env, "native_drop"), &record);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
pub fn get_native_drop(env: &Env) -> Option<NativeDropRecord> {
|
|
177
|
+
env.storage().instance().get(&Symbol::new(env, "native_drop"))
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// =============================================================================
|
|
182
|
+
// Test Setup
|
|
183
|
+
// =============================================================================
|
|
184
|
+
|
|
185
|
+
pub struct TestSetup<'a> {
|
|
186
|
+
pub env: Env,
|
|
187
|
+
pub executor_helper_client: ExecutorHelperClient<'a>,
|
|
188
|
+
pub executor: Address,
|
|
189
|
+
pub receiver: Address,
|
|
190
|
+
pub composer: Address,
|
|
191
|
+
pub native_token: Address,
|
|
192
|
+
pub native_token_admin: Address,
|
|
193
|
+
pub native_token_admin_client: StellarAssetClient<'a>,
|
|
194
|
+
pub admin: Address,
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
impl<'a> TestSetup<'a> {
|
|
198
|
+
pub fn new() -> Self {
|
|
199
|
+
let env = Env::default();
|
|
200
|
+
|
|
201
|
+
// Native token
|
|
202
|
+
let native_token_admin = Address::generate(&env);
|
|
203
|
+
let native_token_sac = env.register_stellar_asset_contract_v2(native_token_admin.clone());
|
|
204
|
+
let native_token = native_token_sac.address();
|
|
205
|
+
let native_token_admin_client = StellarAssetClient::new(&env, &native_token);
|
|
206
|
+
|
|
207
|
+
// Mock endpoint (with native_token)
|
|
208
|
+
let endpoint = env.register(MockEndpoint, (&native_token,));
|
|
209
|
+
|
|
210
|
+
// Mock executor (with endpoint reference)
|
|
211
|
+
let executor = env.register(MockExecutor, (&endpoint,));
|
|
212
|
+
|
|
213
|
+
// Mock receiver
|
|
214
|
+
let receiver = env.register(MockReceiver, ());
|
|
215
|
+
|
|
216
|
+
// Mock composer
|
|
217
|
+
let composer = env.register(MockComposer, ());
|
|
218
|
+
|
|
219
|
+
// Admin address (value payer)
|
|
220
|
+
let admin = Address::generate(&env);
|
|
221
|
+
|
|
222
|
+
// Register ExecutorHelper contract
|
|
223
|
+
let contract_id = env.register(ExecutorHelper, ());
|
|
224
|
+
let client = ExecutorHelperClient::new(&env, &contract_id);
|
|
225
|
+
|
|
226
|
+
Self {
|
|
227
|
+
env,
|
|
228
|
+
executor_helper_client: client,
|
|
229
|
+
executor,
|
|
230
|
+
receiver,
|
|
231
|
+
composer,
|
|
232
|
+
native_token,
|
|
233
|
+
native_token_admin,
|
|
234
|
+
native_token_admin_client,
|
|
235
|
+
admin,
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
pub fn mint_native(&self, to: &Address, amount: i128) {
|
|
240
|
+
self.env.mock_auths(&[MockAuth {
|
|
241
|
+
address: &self.native_token_admin,
|
|
242
|
+
invoke: &MockAuthInvoke {
|
|
243
|
+
contract: &self.native_token,
|
|
244
|
+
fn_name: "mint",
|
|
245
|
+
args: (to, amount).into_val(&self.env),
|
|
246
|
+
sub_invokes: &[],
|
|
247
|
+
},
|
|
248
|
+
}]);
|
|
249
|
+
self.native_token_admin_client.mint(to, &amount);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
pub fn balance_native(&self, addr: &Address) -> i128 {
|
|
253
|
+
soroban_sdk::token::TokenClient::new(&self.env, &self.native_token).balance(addr)
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
pub fn mock_lz_receive_auth(&self, executor: &Address, params: &ExecutionParams) {
|
|
257
|
+
self.env.mock_auths(&[MockAuth {
|
|
258
|
+
address: executor,
|
|
259
|
+
invoke: &MockAuthInvoke {
|
|
260
|
+
contract: ¶ms.receiver,
|
|
261
|
+
fn_name: "lz_receive",
|
|
262
|
+
args: (executor, ¶ms.origin, ¶ms.guid, ¶ms.message, ¶ms.extra_data, ¶ms.value)
|
|
263
|
+
.into_val(&self.env),
|
|
264
|
+
sub_invokes: &[],
|
|
265
|
+
},
|
|
266
|
+
}]);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
pub fn mock_lz_compose_auth(&self, executor: &Address, params: &ComposeParams) {
|
|
270
|
+
self.env.mock_auths(&[MockAuth {
|
|
271
|
+
address: executor,
|
|
272
|
+
invoke: &MockAuthInvoke {
|
|
273
|
+
contract: ¶ms.to,
|
|
274
|
+
fn_name: "lz_compose",
|
|
275
|
+
args: (
|
|
276
|
+
executor,
|
|
277
|
+
¶ms.from,
|
|
278
|
+
¶ms.guid,
|
|
279
|
+
¶ms.index,
|
|
280
|
+
¶ms.message,
|
|
281
|
+
¶ms.extra_data,
|
|
282
|
+
¶ms.value,
|
|
283
|
+
)
|
|
284
|
+
.into_val(&self.env),
|
|
285
|
+
sub_invokes: &[],
|
|
286
|
+
},
|
|
287
|
+
}]);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
pub fn mock_native_drop_auth(
|
|
291
|
+
&self,
|
|
292
|
+
executor: &Address,
|
|
293
|
+
admin: &Address,
|
|
294
|
+
origin: &Origin,
|
|
295
|
+
dst_eid: u32,
|
|
296
|
+
oapp: &Address,
|
|
297
|
+
params: &Vec<NativeDropParams>,
|
|
298
|
+
) {
|
|
299
|
+
self.env.mock_auths(&[MockAuth {
|
|
300
|
+
address: admin,
|
|
301
|
+
invoke: &MockAuthInvoke {
|
|
302
|
+
contract: executor,
|
|
303
|
+
fn_name: "native_drop",
|
|
304
|
+
args: (admin, origin, &dst_eid, oapp, params).into_val(&self.env),
|
|
305
|
+
sub_invokes: &[],
|
|
306
|
+
},
|
|
307
|
+
}]);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
pub fn default_origin(&self) -> Origin {
|
|
311
|
+
Origin { src_eid: 1, sender: BytesN::from_array(&self.env, &[1u8; 32]), nonce: 1 }
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
pub fn default_guid(&self) -> BytesN<32> {
|
|
315
|
+
BytesN::from_array(&self.env, &[2u8; 32])
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
pub fn default_message(&self) -> Bytes {
|
|
319
|
+
Bytes::from_slice(&self.env, &[1, 2, 3, 4])
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
pub fn default_extra_data(&self) -> Bytes {
|
|
323
|
+
Bytes::from_slice(&self.env, &[5, 6, 7, 8])
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
pub fn default_execution_params(&self) -> ExecutionParams {
|
|
327
|
+
ExecutionParams {
|
|
328
|
+
receiver: self.receiver.clone(),
|
|
329
|
+
origin: self.default_origin(),
|
|
330
|
+
guid: self.default_guid(),
|
|
331
|
+
message: self.default_message(),
|
|
332
|
+
extra_data: self.default_extra_data(),
|
|
333
|
+
value: 0,
|
|
334
|
+
gas_limit: 100,
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
pub fn default_compose_params(&self) -> ComposeParams {
|
|
339
|
+
let from = Address::generate(&self.env);
|
|
340
|
+
ComposeParams {
|
|
341
|
+
from,
|
|
342
|
+
to: self.composer.clone(),
|
|
343
|
+
guid: self.default_guid(),
|
|
344
|
+
index: 4,
|
|
345
|
+
message: self.default_message(),
|
|
346
|
+
extra_data: self.default_extra_data(),
|
|
347
|
+
value: 0,
|
|
348
|
+
gas_limit: 100,
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/// Returns the MockReceiverClient to access mock receiver methods
|
|
353
|
+
pub fn receiver_client(&self) -> MockReceiverClient<'_> {
|
|
354
|
+
MockReceiverClient::new(&self.env, &self.receiver)
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/// Returns the MockComposerClient to access mock composer methods
|
|
358
|
+
pub fn composer_client(&self) -> MockComposerClient<'_> {
|
|
359
|
+
MockComposerClient::new(&self.env, &self.composer)
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/// Returns the MockExecutorClient to access mock executor methods
|
|
363
|
+
pub fn executor_client(&self) -> MockExecutorClient<'_> {
|
|
364
|
+
MockExecutorClient::new(&self.env, &self.executor)
|
|
365
|
+
}
|
|
366
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
[package]
|
|
2
|
+
name = "fee-lib-interfaces"
|
|
3
|
+
version.workspace = true
|
|
4
|
+
edition.workspace = true
|
|
5
|
+
license.workspace = true
|
|
6
|
+
publish = false
|
|
7
|
+
|
|
8
|
+
[lib]
|
|
9
|
+
crate-type = ["rlib"]
|
|
10
|
+
doctest = false
|
|
11
|
+
|
|
12
|
+
[dependencies]
|
|
13
|
+
soroban-sdk = { workspace = true }
|
|
14
|
+
|
|
@@ -12,9 +12,10 @@ doctest = false
|
|
|
12
12
|
[dependencies]
|
|
13
13
|
soroban-sdk = { workspace = true }
|
|
14
14
|
utils = { workspace = true }
|
|
15
|
-
|
|
15
|
+
fee-lib-interfaces = { workspace = true }
|
|
16
16
|
common-macros = { workspace = true }
|
|
17
17
|
|
|
18
18
|
[dev-dependencies]
|
|
19
19
|
soroban-sdk = { workspace = true, features = ["testutils"] }
|
|
20
|
+
utils = { workspace = true, features = ["testutils"] }
|
|
20
21
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
use common_macros::{contract_impl, lz_contract, only_auth};
|
|
2
|
+
use fee_lib_interfaces::{FeeEstimate, ILayerZeroPriceFeed, Price};
|
|
2
3
|
use soroban_sdk::{assert_with_error, panic_with_error, Address, Env, Vec};
|
|
3
4
|
use utils::upgradeable::UpgradeableInternal;
|
|
4
|
-
use worker::{FeeEstimate, ILayerZeroPriceFeed, Price};
|
|
5
5
|
|
|
6
6
|
use crate::{
|
|
7
7
|
errors::PriceFeedError,
|
|
@@ -102,9 +102,7 @@ impl LzPriceFeed {
|
|
|
102
102
|
/// Set the fee model type for destination EIDs (owner only)
|
|
103
103
|
#[only_auth]
|
|
104
104
|
pub fn set_eid_to_model_type(env: &Env, params: &Vec<SetEidToModelTypeParam>) {
|
|
105
|
-
|
|
106
|
-
PriceFeedStorage::set_eid_to_model_type(env, param.dst_eid, ¶m.model_type);
|
|
107
|
-
}
|
|
105
|
+
params.iter().for_each(|param| PriceFeedStorage::set_eid_to_model_type(env, param.dst_eid, ¶m.model_type));
|
|
108
106
|
}
|
|
109
107
|
|
|
110
108
|
// ========================================================================
|
|
@@ -115,9 +113,7 @@ impl LzPriceFeed {
|
|
|
115
113
|
pub fn set_price(env: &Env, price_updater: &Address, prices: &Vec<UpdatePrice>) {
|
|
116
114
|
Self::require_price_updater(env, price_updater);
|
|
117
115
|
|
|
118
|
-
|
|
119
|
-
Self::set_price_internal(env, update.eid, &update.price);
|
|
120
|
-
}
|
|
116
|
+
prices.iter().for_each(|update| Self::set_price_internal(env, update.eid, &update.price));
|
|
121
117
|
}
|
|
122
118
|
|
|
123
119
|
/// Set price for Arbitrum with extension (price updater or owner)
|
|
@@ -134,7 +130,7 @@ impl LzPriceFeed {
|
|
|
134
130
|
|
|
135
131
|
/// Set the native token price in USD (price updater or owner).
|
|
136
132
|
///
|
|
137
|
-
/// Kept as a standalone contract function (not part of the canonical `
|
|
133
|
+
/// Kept as a standalone contract function (not part of the canonical `fee_lib_interfaces::ILayerZeroPriceFeed` interface).
|
|
138
134
|
pub fn set_native_token_price_usd(env: &Env, price_updater: &Address, native_token_price_usd: u128) {
|
|
139
135
|
Self::require_price_updater(env, price_updater);
|
|
140
136
|
PriceFeedStorage::set_native_price_usd(env, &native_token_price_usd);
|
|
@@ -275,10 +271,8 @@ impl LzPriceFeed {
|
|
|
275
271
|
// Upgradeable Implementation
|
|
276
272
|
// ============================================================================
|
|
277
273
|
|
|
274
|
+
/// No migration logic needed for initial upgrade capability
|
|
278
275
|
impl UpgradeableInternal for LzPriceFeed {
|
|
279
276
|
type MigrationData = ();
|
|
280
|
-
|
|
281
|
-
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {
|
|
282
|
-
// No migration logic needed for initial upgrade capability
|
|
283
|
-
}
|
|
277
|
+
fn __migrate(_env: &Env, _migration_data: &Self::MigrationData) {}
|
|
284
278
|
}
|