@layerzerolabs/protocol-stellar-v2 0.2.11 → 0.2.13
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 +202 -194
- package/.turbo/turbo-lint.log +38 -38
- package/.turbo/turbo-test.log +891 -891
- package/Cargo.lock +1 -1
- package/contracts/common-macros/src/lib.rs +3 -36
- package/contracts/endpoint-v2/src/endpoint_v2.rs +4 -4
- package/contracts/endpoint-v2/src/events.rs +40 -22
- package/contracts/endpoint-v2/src/interfaces/message_lib.rs +2 -2
- package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +2 -2
- package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +2 -2
- package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
- package/contracts/endpoint-v2/src/interfaces/send_lib.rs +2 -2
- package/contracts/endpoint-v2/src/message_lib_manager.rs +3 -3
- package/contracts/endpoint-v2/src/messaging_channel.rs +1 -1
- package/contracts/endpoint-v2/src/messaging_composer.rs +1 -1
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +4 -8
- package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +3 -7
- package/contracts/message-libs/{block-message-lib → blocked-message-lib}/Cargo.toml +1 -1
- package/contracts/message-libs/treasury/src/events.rs +9 -6
- package/contracts/message-libs/uln-302/src/events.rs +19 -11
- package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +2 -2
- package/contracts/message-libs/uln-302/src/interfaces/send_uln.rs +2 -2
- package/contracts/message-libs/uln-302/src/receive_uln.rs +2 -2
- package/contracts/message-libs/uln-302/src/send_uln.rs +3 -3
- package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +5 -5
- package/contracts/message-libs/uln-302/src/tests/setup.rs +3 -3
- package/contracts/message-libs/uln-302/src/types.rs +24 -24
- package/contracts/message-libs/uln-302/src/uln302.rs +1 -1
- package/contracts/oapps/counter/integration_tests/utils.rs +1 -1
- package/contracts/oapps/oapp/src/oapp_core.rs +4 -3
- package/contracts/oapps/oapp/src/oapp_options_type3.rs +4 -3
- package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
- package/contracts/oapps/oft/src/events.rs +5 -4
- package/contracts/oapps/oft/src/extensions/oft_fee.rs +10 -6
- package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
- package/contracts/oapps/oft/src/extensions/rate_limiter.rs +8 -6
- package/contracts/utils/src/ownable.rs +6 -4
- package/contracts/utils/src/tests/testing_utils.rs +7 -5
- package/contracts/utils/src/ttl.rs +5 -4
- package/contracts/workers/dvn/src/auth.rs +59 -45
- package/contracts/workers/dvn/src/dvn.rs +84 -16
- package/contracts/workers/dvn/src/errors.rs +10 -13
- package/contracts/workers/dvn/src/events.rs +7 -5
- package/contracts/workers/dvn/src/interfaces/dvn.rs +29 -1
- package/contracts/workers/dvn/src/multisig.rs +94 -71
- package/contracts/workers/dvn/src/storage.rs +9 -12
- package/contracts/workers/dvn/src/tests/auth.rs +56 -26
- package/contracts/workers/dvn/src/tests/dvn.rs +37 -37
- package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +8 -8
- package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +9 -9
- package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +6 -6
- package/contracts/workers/dvn/src/tests/setup.rs +5 -5
- package/contracts/workers/executor/src/auth.rs +93 -0
- package/contracts/workers/executor/src/events.rs +5 -4
- package/contracts/workers/executor/src/{lz_executor.rs → executor.rs} +25 -98
- package/contracts/workers/executor/src/interfaces/mod.rs +1 -1
- package/contracts/workers/executor/src/lib.rs +6 -5
- package/contracts/workers/worker/src/events.rs +23 -13
- package/contracts/workers/worker/src/worker.rs +32 -21
- package/package.json +3 -3
- package/sdk/dist/generated/bml.js +23 -23
- package/sdk/dist/generated/counter.js +25 -25
- package/sdk/dist/generated/endpoint.js +23 -23
- package/sdk/dist/generated/sml.js +23 -23
- package/sdk/dist/generated/uln302.d.ts +1 -1
- package/sdk/dist/generated/uln302.js +33 -33
- package/sdk/package.json +1 -1
- package/sdk/test/index.test.ts +1 -1
- package/sdk/test/oft.test.ts +847 -0
- package/sdk/test/suites/scan.ts +20 -4
- package/tools/ts-bindings-gen/src/main.rs +2 -1
- package/contracts/common-macros/src/event.rs +0 -16
- /package/contracts/message-libs/{block-message-lib → blocked-message-lib}/src/lib.rs +0 -0
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
use crate::tests::setup::{TestSetup, VID};
|
|
2
|
-
use crate::{
|
|
2
|
+
use crate::{
|
|
3
|
+
dvn::auth::{Sender, TransactionAuthData},
|
|
4
|
+
errors::DvnError,
|
|
5
|
+
};
|
|
3
6
|
use ed25519_dalek::{Signer, SigningKey};
|
|
4
7
|
use rand::thread_rng;
|
|
5
8
|
use soroban_sdk::{auth::Context, vec, Bytes, BytesN, Env, IntoVal, Vec};
|
|
@@ -49,13 +52,18 @@ fn test_check_auth_success() {
|
|
|
49
52
|
let auth_contexts: Vec<Context> = Vec::new(&env);
|
|
50
53
|
|
|
51
54
|
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
52
|
-
let
|
|
53
|
-
let
|
|
55
|
+
let public_key = admin_kp.public_key(&env);
|
|
56
|
+
let signature = admin_kp.sign(&env, &payload.to_array());
|
|
54
57
|
|
|
55
58
|
let hash = hash_auth_data(&env, VID, expiration, &auth_contexts);
|
|
56
59
|
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
57
60
|
|
|
58
|
-
let tx_auth = TransactionAuthData {
|
|
61
|
+
let tx_auth = TransactionAuthData {
|
|
62
|
+
vid: VID,
|
|
63
|
+
expiration,
|
|
64
|
+
signatures: vec![&env, sig],
|
|
65
|
+
sender: Sender::Admin(public_key, signature),
|
|
66
|
+
};
|
|
59
67
|
|
|
60
68
|
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
61
69
|
&setup.contract_id,
|
|
@@ -78,13 +86,18 @@ fn test_check_auth_not_admin() {
|
|
|
78
86
|
let auth_contexts: Vec<Context> = Vec::new(&env);
|
|
79
87
|
|
|
80
88
|
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
81
|
-
let
|
|
82
|
-
let
|
|
89
|
+
let public_key = non_admin_kp.public_key(&env);
|
|
90
|
+
let signature = non_admin_kp.sign(&env, &payload.to_array());
|
|
83
91
|
|
|
84
92
|
let hash = hash_auth_data(&env, VID, expiration, &auth_contexts);
|
|
85
93
|
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
86
94
|
|
|
87
|
-
let tx_auth = TransactionAuthData {
|
|
95
|
+
let tx_auth = TransactionAuthData {
|
|
96
|
+
vid: VID,
|
|
97
|
+
expiration,
|
|
98
|
+
signatures: vec![&env, sig],
|
|
99
|
+
sender: Sender::Admin(public_key, signature),
|
|
100
|
+
};
|
|
88
101
|
|
|
89
102
|
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
90
103
|
&setup.contract_id,
|
|
@@ -108,24 +121,28 @@ fn test_check_auth_wrong_signer_fails() {
|
|
|
108
121
|
let auth_contexts: Vec<Context> = Vec::new(&env);
|
|
109
122
|
|
|
110
123
|
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
111
|
-
let
|
|
112
|
-
let
|
|
124
|
+
let public_key = admin_kp.public_key(&env);
|
|
125
|
+
let signature = admin_kp.sign(&env, &payload.to_array());
|
|
113
126
|
|
|
114
127
|
let hash = hash_auth_data(&env, VID, expiration, &auth_contexts);
|
|
115
128
|
let wrong_sig = crate::tests::key_pair::KeyPair::generate().sign_bytes(&env, &hash);
|
|
116
129
|
|
|
117
|
-
let tx_auth =
|
|
118
|
-
|
|
130
|
+
let tx_auth = TransactionAuthData {
|
|
131
|
+
vid: VID,
|
|
132
|
+
expiration,
|
|
133
|
+
signatures: vec![&env, wrong_sig],
|
|
134
|
+
sender: Sender::Admin(public_key, signature),
|
|
135
|
+
};
|
|
119
136
|
|
|
120
|
-
// verify_signatures panics with
|
|
121
|
-
let res = env.try_invoke_contract_check_auth::<
|
|
137
|
+
// verify_signatures panics with DvnError::SignerNotFound when signer is not found
|
|
138
|
+
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
122
139
|
&setup.contract_id,
|
|
123
140
|
&payload,
|
|
124
141
|
tx_auth.into_val(&env),
|
|
125
142
|
&auth_contexts,
|
|
126
143
|
);
|
|
127
144
|
|
|
128
|
-
assert_eq!(res, Err(Ok(
|
|
145
|
+
assert_eq!(res, Err(Ok(DvnError::SignerNotFound)));
|
|
129
146
|
}
|
|
130
147
|
|
|
131
148
|
#[test]
|
|
@@ -141,14 +158,18 @@ fn test_check_auth_invalid_vid_fails() {
|
|
|
141
158
|
let auth_contexts: Vec<Context> = Vec::new(&env);
|
|
142
159
|
|
|
143
160
|
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
144
|
-
let
|
|
145
|
-
let
|
|
161
|
+
let public_key = admin_kp.public_key(&env);
|
|
162
|
+
let signature = admin_kp.sign(&env, &payload.to_array());
|
|
146
163
|
|
|
147
164
|
let hash = hash_auth_data(&env, wrong_vid, expiration, &auth_contexts);
|
|
148
165
|
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
149
166
|
|
|
150
|
-
let tx_auth =
|
|
151
|
-
|
|
167
|
+
let tx_auth = TransactionAuthData {
|
|
168
|
+
vid: wrong_vid,
|
|
169
|
+
expiration,
|
|
170
|
+
signatures: vec![&env, sig],
|
|
171
|
+
sender: Sender::Admin(public_key, signature),
|
|
172
|
+
};
|
|
152
173
|
|
|
153
174
|
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
154
175
|
&setup.contract_id,
|
|
@@ -172,13 +193,18 @@ fn test_check_auth_expired_fails() {
|
|
|
172
193
|
let auth_contexts: Vec<Context> = Vec::new(&env);
|
|
173
194
|
|
|
174
195
|
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
175
|
-
let
|
|
176
|
-
let
|
|
196
|
+
let public_key = admin_kp.public_key(&env);
|
|
197
|
+
let signature = admin_kp.sign(&env, &payload.to_array());
|
|
177
198
|
|
|
178
199
|
let hash = hash_auth_data(&env, VID, expiration, &auth_contexts);
|
|
179
200
|
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
180
201
|
|
|
181
|
-
let tx_auth = TransactionAuthData {
|
|
202
|
+
let tx_auth = TransactionAuthData {
|
|
203
|
+
vid: VID,
|
|
204
|
+
expiration,
|
|
205
|
+
signatures: vec![&env, sig],
|
|
206
|
+
sender: Sender::Admin(public_key, signature),
|
|
207
|
+
};
|
|
182
208
|
|
|
183
209
|
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
184
210
|
&setup.contract_id,
|
|
@@ -202,8 +228,8 @@ fn test_check_auth_hash_already_used_fails() {
|
|
|
202
228
|
let auth_contexts: Vec<Context> = Vec::new(&env);
|
|
203
229
|
|
|
204
230
|
let payload = BytesN::from_array(&env, &[0u8; 32]);
|
|
205
|
-
let
|
|
206
|
-
let
|
|
231
|
+
let public_key = admin_kp.public_key(&env);
|
|
232
|
+
let signature = admin_kp.sign(&env, &payload.to_array());
|
|
207
233
|
|
|
208
234
|
let hash = hash_auth_data(&env, VID, expiration, &auth_contexts);
|
|
209
235
|
let sig = setup.key_pairs[0].sign_bytes(&env, &hash);
|
|
@@ -212,8 +238,7 @@ fn test_check_auth_hash_already_used_fails() {
|
|
|
212
238
|
vid: VID,
|
|
213
239
|
expiration,
|
|
214
240
|
signatures: vec![&env, sig.clone()],
|
|
215
|
-
|
|
216
|
-
admin_signature: admin_signature.clone(),
|
|
241
|
+
sender: Sender::Admin(public_key.clone(), signature.clone()),
|
|
217
242
|
};
|
|
218
243
|
|
|
219
244
|
let res = env.try_invoke_contract_check_auth::<DvnError>(
|
|
@@ -224,7 +249,12 @@ fn test_check_auth_hash_already_used_fails() {
|
|
|
224
249
|
);
|
|
225
250
|
assert!(res.is_ok());
|
|
226
251
|
|
|
227
|
-
let tx_auth2 = TransactionAuthData {
|
|
252
|
+
let tx_auth2 = TransactionAuthData {
|
|
253
|
+
vid: VID,
|
|
254
|
+
expiration,
|
|
255
|
+
signatures: vec![&env, sig],
|
|
256
|
+
sender: Sender::Admin(public_key, signature),
|
|
257
|
+
};
|
|
228
258
|
|
|
229
259
|
let res2 = env.try_invoke_contract_check_auth::<DvnError>(
|
|
230
260
|
&setup.contract_id,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
use crate::tests::setup::TestSetup;
|
|
2
|
-
use crate::{dvn::
|
|
2
|
+
use crate::{dvn::LzDVN, DVNClient, DstConfig, DstConfigParam, IDVN};
|
|
3
3
|
use endpoint_v2::FeeRecipient;
|
|
4
4
|
use message_lib_common::interfaces::ILayerZeroDVN;
|
|
5
5
|
use soroban_sdk::{
|
|
@@ -22,7 +22,7 @@ fn new_addr(env: &Env) -> Address {
|
|
|
22
22
|
|
|
23
23
|
fn grant_allowlist(setup: &TestSetup, oapp: &Address) {
|
|
24
24
|
with_contract(setup, || {
|
|
25
|
-
|
|
25
|
+
LzDVN::set_allowlist(&setup.env, oapp, true);
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
|
|
@@ -30,17 +30,17 @@ fn configure_dst_config(setup: &TestSetup, dst_eid: u32, config: DstConfig) {
|
|
|
30
30
|
let admin = setup.admins.get(0).unwrap();
|
|
31
31
|
let params = vec![&setup.env, DstConfigParam { dst_eid, config }];
|
|
32
32
|
with_contract(setup, || {
|
|
33
|
-
|
|
33
|
+
LzDVN::set_dst_config(&setup.env, &admin, ¶ms);
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
fn configure_fee_lib(setup: &TestSetup, fee_lib: &Address, default_multiplier: u32) {
|
|
38
38
|
let admin = setup.admins.get(0).unwrap();
|
|
39
39
|
with_contract(setup, || {
|
|
40
|
-
|
|
40
|
+
LzDVN::set_worker_fee_lib(&setup.env, &admin, fee_lib);
|
|
41
41
|
});
|
|
42
42
|
with_contract(setup, || {
|
|
43
|
-
|
|
43
|
+
LzDVN::set_default_multiplier_bps(&setup.env, &admin, default_multiplier);
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -59,7 +59,7 @@ fn test_dst_config_not_set_returns_none() {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
#[test]
|
|
62
|
-
#[should_panic(expected = "Error(Contract, #
|
|
62
|
+
#[should_panic(expected = "Error(Contract, #2)")] // DvnError::EidNotSupported
|
|
63
63
|
fn test_get_fee_missing_dst_config_panics() {
|
|
64
64
|
let setup = TestSetup::new(1);
|
|
65
65
|
let send_lib = new_addr(&setup.env);
|
|
@@ -69,7 +69,7 @@ fn test_get_fee_missing_dst_config_panics() {
|
|
|
69
69
|
let options = Bytes::new(&setup.env);
|
|
70
70
|
|
|
71
71
|
with_contract(&setup, || {
|
|
72
|
-
|
|
72
|
+
LzDVN::get_fee(&setup.env, &send_lib, &sender, 999, &packet_header, &payload_hash, 1, &options);
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -87,7 +87,7 @@ fn test_get_fee_not_allowed_due_to_allowlist() {
|
|
|
87
87
|
let options = Bytes::new(&setup.env);
|
|
88
88
|
|
|
89
89
|
with_contract(&setup, || {
|
|
90
|
-
|
|
90
|
+
LzDVN::get_fee(&setup.env, &send_lib, &sender, 1, &packet_header, &payload_hash, 1, &options);
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
|
|
@@ -99,7 +99,7 @@ fn test_get_fee_uses_default_multiplier_when_dst_multiplier_zero() {
|
|
|
99
99
|
configure_dst_config(&setup, 42, DstConfig { gas: 1, multiplier_bps: 0, floor_margin_usd: 0 });
|
|
100
100
|
|
|
101
101
|
let fee = with_contract(&setup, || {
|
|
102
|
-
|
|
102
|
+
LzDVN::get_fee(
|
|
103
103
|
&setup.env,
|
|
104
104
|
&new_addr(&setup.env),
|
|
105
105
|
&new_addr(&setup.env),
|
|
@@ -122,7 +122,7 @@ fn test_get_fee_prefers_dst_multiplier_when_nonzero() {
|
|
|
122
122
|
configure_dst_config(&setup, 43, DstConfig { gas: 1, multiplier_bps: 9_000, floor_margin_usd: 0 });
|
|
123
123
|
|
|
124
124
|
let fee = with_contract(&setup, || {
|
|
125
|
-
|
|
125
|
+
LzDVN::get_fee(
|
|
126
126
|
&setup.env,
|
|
127
127
|
&new_addr(&setup.env),
|
|
128
128
|
&new_addr(&setup.env),
|
|
@@ -144,54 +144,54 @@ fn test_pause_and_setters_happy_paths() {
|
|
|
144
144
|
let other = new_addr(&setup.env);
|
|
145
145
|
|
|
146
146
|
with_contract(&setup, || {
|
|
147
|
-
|
|
147
|
+
LzDVN::set_paused(&setup.env, true);
|
|
148
148
|
});
|
|
149
149
|
with_contract(&setup, || {
|
|
150
|
-
assert!(
|
|
150
|
+
assert!(LzDVN::paused(&setup.env));
|
|
151
151
|
});
|
|
152
152
|
with_contract(&setup, || {
|
|
153
|
-
|
|
153
|
+
LzDVN::set_paused(&setup.env, false);
|
|
154
154
|
});
|
|
155
155
|
with_contract(&setup, || {
|
|
156
|
-
assert!(!
|
|
156
|
+
assert!(!LzDVN::paused(&setup.env));
|
|
157
157
|
});
|
|
158
158
|
|
|
159
159
|
with_contract(&setup, || {
|
|
160
|
-
|
|
160
|
+
LzDVN::set_default_multiplier_bps(&setup.env, &admin, 1234);
|
|
161
161
|
});
|
|
162
162
|
with_contract(&setup, || {
|
|
163
|
-
assert_eq!(
|
|
163
|
+
assert_eq!(LzDVN::default_multiplier_bps(&setup.env), 1234);
|
|
164
164
|
});
|
|
165
165
|
|
|
166
166
|
with_contract(&setup, || {
|
|
167
|
-
|
|
167
|
+
LzDVN::set_deposit_address(&setup.env, &admin, &other);
|
|
168
168
|
});
|
|
169
169
|
with_contract(&setup, || {
|
|
170
|
-
assert_eq!(
|
|
170
|
+
assert_eq!(LzDVN::deposit_address(&setup.env), other);
|
|
171
171
|
});
|
|
172
172
|
|
|
173
173
|
let pf = new_addr(&setup.env);
|
|
174
174
|
with_contract(&setup, || {
|
|
175
|
-
|
|
175
|
+
LzDVN::set_price_feed(&setup.env, &admin, &pf);
|
|
176
176
|
});
|
|
177
177
|
with_contract(&setup, || {
|
|
178
|
-
assert_eq!(
|
|
178
|
+
assert_eq!(LzDVN::price_feed(&setup.env), pf);
|
|
179
179
|
});
|
|
180
180
|
|
|
181
181
|
let opts = Bytes::from_array(&setup.env, &[1, 2, 3]);
|
|
182
182
|
with_contract(&setup, || {
|
|
183
|
-
|
|
183
|
+
LzDVN::set_supported_option_types(&setup.env, &admin, 77, opts.clone());
|
|
184
184
|
});
|
|
185
185
|
with_contract(&setup, || {
|
|
186
|
-
assert_eq!(
|
|
186
|
+
assert_eq!(LzDVN::get_supported_option_types(&setup.env, 77), Some(opts));
|
|
187
187
|
});
|
|
188
188
|
|
|
189
189
|
let fee_lib = new_addr(&setup.env);
|
|
190
190
|
with_contract(&setup, || {
|
|
191
|
-
|
|
191
|
+
LzDVN::set_worker_fee_lib(&setup.env, &admin, &fee_lib);
|
|
192
192
|
});
|
|
193
193
|
with_contract(&setup, || {
|
|
194
|
-
assert_eq!(
|
|
194
|
+
assert_eq!(LzDVN::worker_fee_lib(&setup.env), fee_lib);
|
|
195
195
|
});
|
|
196
196
|
}
|
|
197
197
|
|
|
@@ -200,9 +200,9 @@ fn test_acl_and_allowlist_size_reads() {
|
|
|
200
200
|
let setup = TestSetup::new(1);
|
|
201
201
|
let addr = setup.admins.get(0).unwrap();
|
|
202
202
|
|
|
203
|
-
let has_acl = with_contract(&setup, ||
|
|
203
|
+
let has_acl = with_contract(&setup, || LzDVN::has_acl(&setup.env, &addr));
|
|
204
204
|
assert!(has_acl);
|
|
205
|
-
let allowlist_size = with_contract(&setup, ||
|
|
205
|
+
let allowlist_size = with_contract(&setup, || LzDVN::allowlist_size(&setup.env));
|
|
206
206
|
assert_eq!(allowlist_size, 0);
|
|
207
207
|
}
|
|
208
208
|
|
|
@@ -250,14 +250,14 @@ fn test_assign_job_auth_verification() {
|
|
|
250
250
|
configure_dst_config(&setup, dst_eid, DstConfig { gas: 1, multiplier_bps: 10_000, floor_margin_usd: 0 });
|
|
251
251
|
|
|
252
252
|
with_contract(&setup, || {
|
|
253
|
-
|
|
253
|
+
LzDVN::set_deposit_address(&setup.env, &admin, &deposit_addr);
|
|
254
254
|
});
|
|
255
255
|
with_contract(&setup, || {
|
|
256
|
-
|
|
256
|
+
LzDVN::set_supported_message_lib(&setup.env, &send_lib, true);
|
|
257
257
|
});
|
|
258
258
|
|
|
259
259
|
let result = setup.env.as_contract(&setup.contract_id, || {
|
|
260
|
-
|
|
260
|
+
LzDVN::assign_job(&setup.env, &send_lib, &sender, dst_eid, &packet_header, &payload_hash, 1, &options)
|
|
261
261
|
});
|
|
262
262
|
|
|
263
263
|
assert_eq!(result, FeeRecipient { amount: 10_000, to: deposit_addr.clone() });
|
|
@@ -274,16 +274,16 @@ fn test_set_admin_add() {
|
|
|
274
274
|
let new_admin = new_addr(&setup.env);
|
|
275
275
|
|
|
276
276
|
// Verify new_admin is not an admin initially
|
|
277
|
-
let is_admin = with_contract(&setup, ||
|
|
277
|
+
let is_admin = with_contract(&setup, || LzDVN::is_admin(&setup.env, &new_admin));
|
|
278
278
|
assert!(!is_admin);
|
|
279
279
|
|
|
280
280
|
// Add new admin by existing admin
|
|
281
281
|
with_contract(&setup, || {
|
|
282
|
-
|
|
282
|
+
LzDVN::set_admin(&setup.env, &existing_admin, &new_admin, true);
|
|
283
283
|
});
|
|
284
284
|
|
|
285
285
|
// Verify new_admin is now an admin
|
|
286
|
-
let is_admin = with_contract(&setup, ||
|
|
286
|
+
let is_admin = with_contract(&setup, || LzDVN::is_admin(&setup.env, &new_admin));
|
|
287
287
|
assert!(is_admin);
|
|
288
288
|
}
|
|
289
289
|
|
|
@@ -295,16 +295,16 @@ fn test_set_admin_remove() {
|
|
|
295
295
|
|
|
296
296
|
// Add new admin first
|
|
297
297
|
with_contract(&setup, || {
|
|
298
|
-
|
|
298
|
+
LzDVN::set_admin(&setup.env, &existing_admin, &new_admin, true);
|
|
299
299
|
});
|
|
300
300
|
|
|
301
301
|
// Remove the new admin
|
|
302
302
|
with_contract(&setup, || {
|
|
303
|
-
|
|
303
|
+
LzDVN::set_admin(&setup.env, &existing_admin, &new_admin, false);
|
|
304
304
|
});
|
|
305
305
|
|
|
306
306
|
// Verify new_admin is no longer an admin
|
|
307
|
-
let is_admin = with_contract(&setup, ||
|
|
307
|
+
let is_admin = with_contract(&setup, || LzDVN::is_admin(&setup.env, &new_admin));
|
|
308
308
|
assert!(!is_admin);
|
|
309
309
|
}
|
|
310
310
|
|
|
@@ -317,7 +317,7 @@ fn test_set_admin_unauthorized() {
|
|
|
317
317
|
|
|
318
318
|
// Attempt to add admin by non-admin should fail
|
|
319
319
|
with_contract(&setup, || {
|
|
320
|
-
|
|
320
|
+
LzDVN::set_admin(&setup.env, &non_admin, &new_admin, true);
|
|
321
321
|
});
|
|
322
322
|
}
|
|
323
323
|
|
|
@@ -329,7 +329,7 @@ fn test_set_admin_cannot_remove_last_admin() {
|
|
|
329
329
|
|
|
330
330
|
// Attempt to remove the only admin should fail
|
|
331
331
|
with_contract(&setup, || {
|
|
332
|
-
|
|
332
|
+
LzDVN::set_admin(&setup.env, &existing_admin, &existing_admin, false);
|
|
333
333
|
});
|
|
334
334
|
}
|
|
335
335
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
use crate::errors::
|
|
2
|
-
use crate::storage::
|
|
1
|
+
use crate::errors::DvnError;
|
|
2
|
+
use crate::storage::DvnStorage;
|
|
3
3
|
use crate::tests::setup::TestSetup;
|
|
4
4
|
use soroban_sdk::{
|
|
5
5
|
testutils::{AuthorizedFunction, BytesN as _},
|
|
@@ -12,7 +12,7 @@ fn random_signer(env: &Env) -> BytesN<20> {
|
|
|
12
12
|
|
|
13
13
|
fn clear_signers(setup: &TestSetup) {
|
|
14
14
|
setup.env.as_contract(&setup.contract_id, || {
|
|
15
|
-
|
|
15
|
+
DvnStorage::remove_signers(&setup.env);
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -48,7 +48,7 @@ fn test_set_signer_duplicate_fails() {
|
|
|
48
48
|
setup.multisig_client.set_signer(&signer, &true);
|
|
49
49
|
let res = setup.multisig_client.try_set_signer(&signer, &true);
|
|
50
50
|
|
|
51
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
51
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::SignerAlreadyExists.into());
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
#[test]
|
|
@@ -69,7 +69,7 @@ fn test_set_signer_remove_not_found() {
|
|
|
69
69
|
let signer = random_signer(&setup.env);
|
|
70
70
|
|
|
71
71
|
let res = setup.multisig_client.try_set_signer(&signer, &false);
|
|
72
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
72
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::SignerNotFound.into());
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
#[test]
|
|
@@ -78,7 +78,7 @@ fn test_set_signer_invalid_signer_zero_address() {
|
|
|
78
78
|
let zero = BytesN::from_array(&setup.env, &[0u8; 20]);
|
|
79
79
|
|
|
80
80
|
let res = setup.multisig_client.try_set_signer(&zero, &true);
|
|
81
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
81
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::InvalidSigner.into());
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
#[test]
|
|
@@ -115,7 +115,7 @@ fn test_remove_signer_when_no_signers() {
|
|
|
115
115
|
|
|
116
116
|
let signer = random_signer(&setup.env);
|
|
117
117
|
let res = setup.multisig_client.try_set_signer(&signer, &false);
|
|
118
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
118
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::SignerNotFound.into());
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
#[test]
|
|
@@ -129,5 +129,5 @@ fn test_remove_signer_violates_threshold() {
|
|
|
129
129
|
|
|
130
130
|
// Removing a signer should fail because it would leave only 1 signer with threshold 2
|
|
131
131
|
let res = setup.multisig_client.try_set_signer(&signer_to_remove, &false);
|
|
132
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
132
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::TotalSignersLessThanThreshold.into());
|
|
133
133
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
use crate::tests::setup::{TestSetup, DEFAULT_MULTIPLIER_BPS, VID};
|
|
2
|
-
use crate::{dvn::
|
|
2
|
+
use crate::{dvn::LzDVN, errors::DvnError, storage::DvnStorage};
|
|
3
3
|
use soroban_sdk::{
|
|
4
4
|
testutils::{Address as _, AuthorizedFunction, BytesN as _},
|
|
5
5
|
vec, Address, BytesN, Env, IntoVal, Symbol, Vec,
|
|
@@ -21,7 +21,7 @@ fn register_dvn(env: &Env, signer_count: usize, threshold: u32) {
|
|
|
21
21
|
let deposit_address: Address = Address::generate(env);
|
|
22
22
|
|
|
23
23
|
let _ = env.register(
|
|
24
|
-
|
|
24
|
+
LzDVN,
|
|
25
25
|
(
|
|
26
26
|
&VID,
|
|
27
27
|
&signers,
|
|
@@ -29,8 +29,8 @@ fn register_dvn(env: &Env, signer_count: usize, threshold: u32) {
|
|
|
29
29
|
&admins,
|
|
30
30
|
&supported_msglibs,
|
|
31
31
|
&price_feed,
|
|
32
|
-
&worker_fee_lib,
|
|
33
32
|
&DEFAULT_MULTIPLIER_BPS,
|
|
33
|
+
&worker_fee_lib,
|
|
34
34
|
&deposit_address,
|
|
35
35
|
),
|
|
36
36
|
);
|
|
@@ -66,7 +66,7 @@ fn test_set_threshold_zero_fails() {
|
|
|
66
66
|
let setup = TestSetup::new(1);
|
|
67
67
|
|
|
68
68
|
let res = setup.multisig_client.try_set_threshold(&0);
|
|
69
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
69
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::ZeroThreshold.into());
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
#[test]
|
|
@@ -74,7 +74,7 @@ fn test_set_threshold_above_signers_fails() {
|
|
|
74
74
|
let setup = TestSetup::new(2);
|
|
75
75
|
|
|
76
76
|
let res = setup.multisig_client.try_set_threshold(&3);
|
|
77
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
77
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::TotalSignersLessThanThreshold.into());
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
#[test]
|
|
@@ -82,15 +82,15 @@ fn test_set_threshold_with_no_signers_fails() {
|
|
|
82
82
|
let setup = TestSetup::new(1);
|
|
83
83
|
|
|
84
84
|
setup.env.as_contract(&setup.contract_id, || {
|
|
85
|
-
|
|
85
|
+
DvnStorage::remove_signers(&setup.env);
|
|
86
86
|
});
|
|
87
87
|
|
|
88
88
|
let res = setup.multisig_client.try_set_threshold(&1);
|
|
89
|
-
assert_eq!(res.err().unwrap().ok().unwrap(),
|
|
89
|
+
assert_eq!(res.err().unwrap().ok().unwrap(), DvnError::TotalSignersLessThanThreshold.into());
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
#[test]
|
|
93
|
-
#[should_panic(expected = "Error(Contract, #
|
|
93
|
+
#[should_panic(expected = "Error(Contract, #13)")] // DvnError::ZeroThreshold
|
|
94
94
|
fn test_constructor_threshold_zero_panics() {
|
|
95
95
|
let env = Env::default();
|
|
96
96
|
env.mock_all_auths();
|
|
@@ -99,7 +99,7 @@ fn test_constructor_threshold_zero_panics() {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
#[test]
|
|
102
|
-
#[should_panic(expected = "Error(Contract, #
|
|
102
|
+
#[should_panic(expected = "Error(Contract, #11)")] // DvnError::TotalSignersLessThanThreshold
|
|
103
103
|
fn test_constructor_signers_less_than_threshold_panics() {
|
|
104
104
|
let env = Env::default();
|
|
105
105
|
env.mock_all_auths();
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
extern crate std;
|
|
2
2
|
|
|
3
|
-
use crate::storage::
|
|
3
|
+
use crate::storage::DvnStorage;
|
|
4
4
|
use crate::tests::key_pair::KeyPair;
|
|
5
5
|
use crate::tests::setup::TestSetup;
|
|
6
6
|
use soroban_sdk::{vec, Bytes, BytesN, Vec};
|
|
@@ -59,7 +59,7 @@ fn test_verify_signatures_raw_v_path() {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
#[test]
|
|
62
|
-
#[should_panic(expected = "Error(Contract, #
|
|
62
|
+
#[should_panic(expected = "Error(Contract, #10)")] // DvnError::SignerNotFound
|
|
63
63
|
fn test_verify_signatures_with_wrong_signer() {
|
|
64
64
|
let setup = TestSetup::new(1);
|
|
65
65
|
let digest = hash(&setup.env, b"test");
|
|
@@ -71,7 +71,7 @@ fn test_verify_signatures_with_wrong_signer() {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
#[test]
|
|
74
|
-
#[should_panic(expected = "Error(Contract, #
|
|
74
|
+
#[should_panic(expected = "Error(Contract, #8)")] // DvnError::SignatureError
|
|
75
75
|
fn test_verify_signatures_insufficient_signatures() {
|
|
76
76
|
let setup = TestSetup::new(2);
|
|
77
77
|
let digest = hash(&setup.env, b"insufficient");
|
|
@@ -82,7 +82,7 @@ fn test_verify_signatures_insufficient_signatures() {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
#[test]
|
|
85
|
-
#[should_panic(expected = "Error(Contract, #
|
|
85
|
+
#[should_panic(expected = "Error(Contract, #12)")] // DvnError::UnsortedSigners
|
|
86
86
|
fn test_verify_signatures_duplicate_signer() {
|
|
87
87
|
let setup = TestSetup::new(2);
|
|
88
88
|
let digest = hash(&setup.env, b"duplicate");
|
|
@@ -94,12 +94,12 @@ fn test_verify_signatures_duplicate_signer() {
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
#[test]
|
|
97
|
-
#[should_panic(expected = "Error(Contract, #
|
|
97
|
+
#[should_panic(expected = "Error(Contract, #13)")] // DvnError::ZeroThreshold
|
|
98
98
|
fn test_verify_signatures_threshold_zero() {
|
|
99
99
|
let setup = TestSetup::new(1);
|
|
100
100
|
// Force threshold to 0 via storage to hit ZeroThreshold branch
|
|
101
101
|
setup.env.as_contract(&setup.contract_id, || {
|
|
102
|
-
|
|
102
|
+
DvnStorage::set_threshold(&setup.env, &0);
|
|
103
103
|
});
|
|
104
104
|
let digest = hash(&setup.env, b"threshold_zero");
|
|
105
105
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
extern crate std;
|
|
4
4
|
|
|
5
5
|
use crate::tests::key_pair::KeyPair;
|
|
6
|
-
use crate::{dvn::
|
|
6
|
+
use crate::{dvn::LzDVN, interfaces::MultiSigClient};
|
|
7
7
|
use soroban_sdk::{address_payload::AddressPayload, testutils::Address as _, vec, Address, BytesN, Env, Vec};
|
|
8
8
|
use std::vec::Vec as StdVec;
|
|
9
9
|
|
|
@@ -44,7 +44,7 @@ impl<'a> TestSetup<'a> {
|
|
|
44
44
|
let deposit_address: Address = Address::generate(&env);
|
|
45
45
|
|
|
46
46
|
let contract_id = env.register(
|
|
47
|
-
|
|
47
|
+
LzDVN,
|
|
48
48
|
(
|
|
49
49
|
&VID,
|
|
50
50
|
&signers,
|
|
@@ -52,8 +52,8 @@ impl<'a> TestSetup<'a> {
|
|
|
52
52
|
&admins,
|
|
53
53
|
&supported_msglibs,
|
|
54
54
|
&price_feed,
|
|
55
|
-
&worker_fee_lib,
|
|
56
55
|
&DEFAULT_MULTIPLIER_BPS,
|
|
56
|
+
&worker_fee_lib,
|
|
57
57
|
&deposit_address,
|
|
58
58
|
),
|
|
59
59
|
);
|
|
@@ -88,7 +88,7 @@ impl<'a> TestSetup<'a> {
|
|
|
88
88
|
let deposit_address: Address = Address::generate(&env);
|
|
89
89
|
|
|
90
90
|
let contract_id = env.register(
|
|
91
|
-
|
|
91
|
+
LzDVN,
|
|
92
92
|
(
|
|
93
93
|
&VID,
|
|
94
94
|
&signers,
|
|
@@ -96,8 +96,8 @@ impl<'a> TestSetup<'a> {
|
|
|
96
96
|
&admins,
|
|
97
97
|
&supported_msglibs,
|
|
98
98
|
&price_feed,
|
|
99
|
-
&worker_fee_lib,
|
|
100
99
|
&DEFAULT_MULTIPLIER_BPS,
|
|
100
|
+
&worker_fee_lib,
|
|
101
101
|
&deposit_address,
|
|
102
102
|
),
|
|
103
103
|
);
|