@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
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
use super::*;
|
|
2
|
+
|
|
3
|
+
use soroban_sdk::{
|
|
4
|
+
address_payload::AddressPayload,
|
|
5
|
+
auth::{Context, CustomAccountInterface},
|
|
6
|
+
contractimpl, contracttype,
|
|
7
|
+
crypto::Hash,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Authentication Data Types
|
|
12
|
+
// ============================================================================
|
|
13
|
+
|
|
14
|
+
/// Signature data for Custom Account authorization.
|
|
15
|
+
/// Contains the admin's public key and their Ed25519 signature over the authorization payload.
|
|
16
|
+
#[contracttype]
|
|
17
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
18
|
+
pub struct ExecutorSignature {
|
|
19
|
+
/// Admin's Ed25519 public key (32 bytes) - must correspond to a registered admin
|
|
20
|
+
pub public_key: BytesN<32>,
|
|
21
|
+
/// Ed25519 signature (64 bytes) over the signature_payload
|
|
22
|
+
pub signature: BytesN<64>,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Custom Account Interface Implementation
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
#[contractimpl]
|
|
30
|
+
impl CustomAccountInterface for LzExecutor {
|
|
31
|
+
type Signature = ExecutorSignature;
|
|
32
|
+
type Error = ExecutorError;
|
|
33
|
+
|
|
34
|
+
/// Verifies authorization for the executor contract.
|
|
35
|
+
///
|
|
36
|
+
/// The public key must correspond to a registered admin and must have signed the signature_payload.
|
|
37
|
+
/// Uses Ed25519 signature verification.
|
|
38
|
+
/// Only whitelisted function calls are authorized.
|
|
39
|
+
fn __check_auth(
|
|
40
|
+
env: Env,
|
|
41
|
+
signature_payload: Hash<32>,
|
|
42
|
+
auth_data: Self::Signature,
|
|
43
|
+
auth_contexts: Vec<Context>,
|
|
44
|
+
) -> Result<(), Self::Error> {
|
|
45
|
+
Self::verify_admin_signature(&env, &signature_payload, &auth_data)?;
|
|
46
|
+
Self::validate_auth_contexts(&env, &auth_contexts)?;
|
|
47
|
+
Ok(())
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// Internal Helper Functions
|
|
53
|
+
// ============================================================================
|
|
54
|
+
|
|
55
|
+
impl LzExecutor {
|
|
56
|
+
/// Verifies that the signature is from a registered admin.
|
|
57
|
+
///
|
|
58
|
+
/// Converts the public key to an address, checks admin registration,
|
|
59
|
+
/// and verifies the Ed25519 signature over the payload.
|
|
60
|
+
fn verify_admin_signature(
|
|
61
|
+
env: &Env,
|
|
62
|
+
signature_payload: &Hash<32>,
|
|
63
|
+
auth_data: &ExecutorSignature,
|
|
64
|
+
) -> Result<(), ExecutorError> {
|
|
65
|
+
let admin = Address::from_payload(env, AddressPayload::AccountIdPublicKeyEd25519(auth_data.public_key.clone()));
|
|
66
|
+
if !Self::is_admin(env, &admin) {
|
|
67
|
+
return Err(ExecutorError::Unauthorized);
|
|
68
|
+
}
|
|
69
|
+
env.crypto().ed25519_verify(&auth_data.public_key, &signature_payload.clone().into(), &auth_data.signature);
|
|
70
|
+
Ok(())
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/// Validates that the first auth context is a whitelisted (contract, function) pair.
|
|
74
|
+
/// Sub-invocations are trusted since they're controlled by the whitelisted contract.
|
|
75
|
+
fn validate_auth_contexts(env: &Env, contexts: &Vec<Context>) -> Result<(), ExecutorError> {
|
|
76
|
+
let first_context = contexts.first().ok_or(ExecutorError::UnauthorizedContext)?;
|
|
77
|
+
|
|
78
|
+
match first_context {
|
|
79
|
+
Context::Contract(contract_context) => {
|
|
80
|
+
// Check if (contract, fn_name) pair is whitelisted
|
|
81
|
+
if !Self::is_whitelisted_fn(env, &contract_context.contract, &contract_context.fn_name) {
|
|
82
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Contract creation is not allowed
|
|
86
|
+
Context::CreateContractHostFn(_) | Context::CreateContractWithCtorHostFn(_) => {
|
|
87
|
+
return Err(ExecutorError::UnauthorizedContext);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
Ok(())
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
use common_macros::event;
|
|
2
1
|
use endpoint_v2::Origin;
|
|
3
|
-
use soroban_sdk::{Address, Vec};
|
|
2
|
+
use soroban_sdk::{contractevent, Address, Vec};
|
|
4
3
|
|
|
5
4
|
use crate::interfaces::{NativeDropParams, SetDstConfigParam};
|
|
6
5
|
|
|
7
|
-
#[
|
|
6
|
+
#[contractevent]
|
|
7
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
8
8
|
pub struct DstConfigSet {
|
|
9
9
|
pub params: Vec<SetDstConfigParam>,
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
#[
|
|
12
|
+
#[contractevent]
|
|
13
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
13
14
|
pub struct NativeDropApplied {
|
|
14
15
|
pub origin: Origin,
|
|
15
16
|
pub dst_eid: u32,
|
|
@@ -8,14 +8,7 @@ use crate::{
|
|
|
8
8
|
use common_macros::{contract_impl, only_owner, ttl_configurable};
|
|
9
9
|
use endpoint_v2::{FeeRecipient, LayerZeroEndpointV2Client, Origin};
|
|
10
10
|
use message_lib_common::interfaces::ILayerZeroExecutor;
|
|
11
|
-
use soroban_sdk::{
|
|
12
|
-
address_payload::AddressPayload,
|
|
13
|
-
auth::{Context, CustomAccountInterface},
|
|
14
|
-
contract, contractimpl, contracttype,
|
|
15
|
-
crypto::Hash,
|
|
16
|
-
token::TokenClient,
|
|
17
|
-
vec, Address, Bytes, BytesN, Env, Symbol, Vec,
|
|
18
|
-
};
|
|
11
|
+
use soroban_sdk::{contract, token::TokenClient, vec, Address, Bytes, BytesN, Env, Symbol, Vec};
|
|
19
12
|
use utils::option_ext::OptionExt;
|
|
20
13
|
use utils::ownable::Ownable;
|
|
21
14
|
use worker::{
|
|
@@ -23,29 +16,6 @@ use worker::{
|
|
|
23
16
|
ExecutorFeeLibClient, FeeParams, Worker,
|
|
24
17
|
};
|
|
25
18
|
|
|
26
|
-
/// Signature data for Custom Account authorization.
|
|
27
|
-
/// Contains the admin's public key and their Ed25519 signature over the authorization payload.
|
|
28
|
-
#[contracttype]
|
|
29
|
-
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
30
|
-
pub struct ExecutorSignature {
|
|
31
|
-
/// Admin's Ed25519 public key (32 bytes) - must correspond to a registered admin
|
|
32
|
-
pub public_key: BytesN<32>,
|
|
33
|
-
/// Ed25519 signature (64 bytes) over the signature_payload
|
|
34
|
-
pub signature: BytesN<64>,
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/// Whitelist entry for authorized (contract, function) pairs.
|
|
38
|
-
///
|
|
39
|
-
/// Used to configure which contracts and functions can trigger Executor authorization.
|
|
40
|
-
#[contracttype]
|
|
41
|
-
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
42
|
-
pub struct WhitelistEntry {
|
|
43
|
-
/// Contract address that is allowed to call the function.
|
|
44
|
-
pub contract: Address,
|
|
45
|
-
/// Function name that is whitelisted for this contract.
|
|
46
|
-
pub fn_name: Symbol,
|
|
47
|
-
}
|
|
48
|
-
|
|
49
19
|
/// LayerZero Executor contract for cross-chain message execution.
|
|
50
20
|
#[contract]
|
|
51
21
|
#[ttl_configurable]
|
|
@@ -65,6 +35,8 @@ impl LzExecutor {
|
|
|
65
35
|
/// * `price_feed` - Price feed contract address for fee calculations
|
|
66
36
|
/// * `default_multiplier_bps` - Default fee multiplier in basis points (10000 = 1x)
|
|
67
37
|
/// * `whitelist` - Initial whitelisted (contract, function) pairs for authorization
|
|
38
|
+
/// * `worker_fee_lib` - Worker fee library contract address
|
|
39
|
+
/// * `deposit_address` - Address to receive fee payments
|
|
68
40
|
pub fn __constructor(
|
|
69
41
|
env: &Env,
|
|
70
42
|
endpoint: &Address,
|
|
@@ -73,15 +45,25 @@ impl LzExecutor {
|
|
|
73
45
|
message_libs: &Vec<Address>,
|
|
74
46
|
price_feed: &Address,
|
|
75
47
|
default_multiplier_bps: u32,
|
|
76
|
-
whitelist: &Vec<
|
|
48
|
+
whitelist: &Vec<(Address, Symbol)>,
|
|
49
|
+
worker_fee_lib: &Address,
|
|
50
|
+
deposit_address: &Address,
|
|
77
51
|
) {
|
|
78
52
|
Self::init_owner(env, owner);
|
|
79
|
-
init_worker::<Self>(
|
|
53
|
+
init_worker::<Self>(
|
|
54
|
+
env,
|
|
55
|
+
admins,
|
|
56
|
+
message_libs,
|
|
57
|
+
price_feed,
|
|
58
|
+
default_multiplier_bps,
|
|
59
|
+
worker_fee_lib,
|
|
60
|
+
deposit_address,
|
|
61
|
+
);
|
|
80
62
|
ExecutorStorage::set_endpoint(env, endpoint);
|
|
81
63
|
|
|
82
64
|
// Set initial whitelisted functions
|
|
83
|
-
for
|
|
84
|
-
ExecutorStorage::set_whitelisted_fn(env, &
|
|
65
|
+
for (contract, fn_name) in whitelist.iter() {
|
|
66
|
+
ExecutorStorage::set_whitelisted_fn(env, &contract, &fn_name, &true);
|
|
85
67
|
}
|
|
86
68
|
}
|
|
87
69
|
|
|
@@ -239,70 +221,15 @@ impl ILayerZeroExecutor for LzExecutor {
|
|
|
239
221
|
}
|
|
240
222
|
|
|
241
223
|
// ============================================================================
|
|
242
|
-
//
|
|
224
|
+
// Worker Implementation
|
|
243
225
|
// ============================================================================
|
|
244
226
|
|
|
245
|
-
#[contractimpl]
|
|
246
|
-
impl CustomAccountInterface for LzExecutor {
|
|
247
|
-
type Signature = ExecutorSignature;
|
|
248
|
-
type Error = ExecutorError;
|
|
249
|
-
|
|
250
|
-
/// Verifies authorization for the executor contract.
|
|
251
|
-
///
|
|
252
|
-
/// The public key must correspond to a registered admin and must have signed the signature_payload.
|
|
253
|
-
/// Uses Ed25519 signature verification.
|
|
254
|
-
/// Only whitelisted function calls are authorized.
|
|
255
|
-
fn __check_auth(
|
|
256
|
-
env: Env,
|
|
257
|
-
signature_payload: Hash<32>,
|
|
258
|
-
auth_data: Self::Signature,
|
|
259
|
-
auth_contexts: Vec<Context>,
|
|
260
|
-
) -> Result<(), Self::Error> {
|
|
261
|
-
Self::verify_admin_signature(&env, &signature_payload, &auth_data)?;
|
|
262
|
-
Self::validate_auth_contexts(&env, &auth_contexts)?;
|
|
263
|
-
Ok(())
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
impl LzExecutor {
|
|
268
|
-
/// Verifies that the signature is from a registered admin.
|
|
269
|
-
///
|
|
270
|
-
/// Converts the public key to an address, checks admin registration,
|
|
271
|
-
/// and verifies the Ed25519 signature over the payload.
|
|
272
|
-
fn verify_admin_signature(
|
|
273
|
-
env: &Env,
|
|
274
|
-
signature_payload: &Hash<32>,
|
|
275
|
-
auth_data: &ExecutorSignature,
|
|
276
|
-
) -> Result<(), ExecutorError> {
|
|
277
|
-
let admin = Address::from_payload(env, AddressPayload::AccountIdPublicKeyEd25519(auth_data.public_key.clone()));
|
|
278
|
-
if !Self::is_admin(env, &admin) {
|
|
279
|
-
return Err(ExecutorError::Unauthorized);
|
|
280
|
-
}
|
|
281
|
-
env.crypto().ed25519_verify(&auth_data.public_key, &signature_payload.clone().into(), &auth_data.signature);
|
|
282
|
-
Ok(())
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/// Validates that the first auth context is a whitelisted (contract, function) pair.
|
|
286
|
-
/// Sub-invocations are trusted since they're controlled by the whitelisted contract.
|
|
287
|
-
fn validate_auth_contexts(env: &Env, contexts: &Vec<Context>) -> Result<(), ExecutorError> {
|
|
288
|
-
let first_context = contexts.first().ok_or(ExecutorError::UnauthorizedContext)?;
|
|
289
|
-
|
|
290
|
-
match first_context {
|
|
291
|
-
Context::Contract(contract_context) => {
|
|
292
|
-
// Check if (contract, fn_name) pair is whitelisted
|
|
293
|
-
if !Self::is_whitelisted_fn(env, &contract_context.contract, &contract_context.fn_name) {
|
|
294
|
-
return Err(ExecutorError::UnauthorizedContext);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
// Contract creation is not allowed
|
|
298
|
-
Context::CreateContractHostFn(_) | Context::CreateContractWithCtorHostFn(_) => {
|
|
299
|
-
return Err(ExecutorError::UnauthorizedContext);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
Ok(())
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
227
|
#[contract_impl(contracttrait)]
|
|
308
228
|
impl Worker for LzExecutor {}
|
|
229
|
+
|
|
230
|
+
// ============================================================================
|
|
231
|
+
// Include SubModules
|
|
232
|
+
// ============================================================================
|
|
233
|
+
|
|
234
|
+
#[path = "auth.rs"]
|
|
235
|
+
pub mod auth;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
#![no_std]
|
|
2
2
|
|
|
3
|
-
mod
|
|
3
|
+
pub mod errors;
|
|
4
|
+
pub mod events;
|
|
5
|
+
pub mod interfaces;
|
|
6
|
+
|
|
4
7
|
pub use interfaces::*;
|
|
5
8
|
|
|
6
9
|
cfg_if::cfg_if! {
|
|
7
10
|
// Include implementation when NOT in library mode, OR when testutils is enabled (for tests)
|
|
8
11
|
if #[cfg(any(not(feature = "library"), feature = "testutils"))] {
|
|
9
|
-
mod errors;
|
|
10
|
-
mod events;
|
|
11
12
|
mod storage;
|
|
12
|
-
mod
|
|
13
|
+
mod executor;
|
|
13
14
|
|
|
14
|
-
pub use
|
|
15
|
+
pub use executor::*;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
|
|
@@ -1,62 +1,72 @@
|
|
|
1
|
-
use
|
|
2
|
-
use soroban_sdk::{Address, Bytes};
|
|
1
|
+
use soroban_sdk::{contractevent, Address, Bytes};
|
|
3
2
|
|
|
4
|
-
#[
|
|
3
|
+
#[contractevent]
|
|
4
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
5
5
|
pub struct SetAdmin {
|
|
6
6
|
pub admin: Address,
|
|
7
7
|
pub active: bool,
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
#[
|
|
10
|
+
#[contractevent]
|
|
11
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
11
12
|
pub struct SetSupportedMessageLib {
|
|
12
13
|
pub message_lib: Address,
|
|
13
14
|
pub supported: bool,
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
#[
|
|
17
|
+
#[contractevent]
|
|
18
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
17
19
|
pub struct SetAllowlist {
|
|
18
20
|
pub oapp: Address,
|
|
19
21
|
pub allowed: bool,
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
#[
|
|
24
|
+
#[contractevent]
|
|
25
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
23
26
|
pub struct SetDenylist {
|
|
24
27
|
pub oapp: Address,
|
|
25
28
|
pub denied: bool,
|
|
26
29
|
}
|
|
27
30
|
|
|
28
|
-
#[
|
|
31
|
+
#[contractevent]
|
|
32
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
29
33
|
pub struct Paused {
|
|
30
34
|
pub pauser: Address,
|
|
31
35
|
}
|
|
32
36
|
|
|
33
|
-
#[
|
|
37
|
+
#[contractevent]
|
|
38
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
34
39
|
pub struct Unpaused {
|
|
35
40
|
pub unpauser: Address,
|
|
36
41
|
}
|
|
37
42
|
|
|
38
|
-
#[
|
|
43
|
+
#[contractevent]
|
|
44
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
39
45
|
pub struct SetDefaultMultiplierBps {
|
|
40
46
|
pub multiplier_bps: u32,
|
|
41
47
|
}
|
|
42
48
|
|
|
43
|
-
#[
|
|
49
|
+
#[contractevent]
|
|
50
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
44
51
|
pub struct SetDepositAddress {
|
|
45
52
|
pub deposit_address: Address,
|
|
46
53
|
}
|
|
47
54
|
|
|
48
|
-
#[
|
|
55
|
+
#[contractevent]
|
|
56
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
49
57
|
pub struct SetPriceFeed {
|
|
50
58
|
pub price_feed: Address,
|
|
51
59
|
}
|
|
52
60
|
|
|
53
|
-
#[
|
|
61
|
+
#[contractevent]
|
|
62
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
54
63
|
pub struct SetSupportedOptionTypes {
|
|
55
64
|
pub dst_eid: u32,
|
|
56
65
|
pub option_types: Bytes,
|
|
57
66
|
}
|
|
58
67
|
|
|
59
|
-
#[
|
|
68
|
+
#[contractevent]
|
|
69
|
+
#[derive(Clone, Debug, Eq, PartialEq)]
|
|
60
70
|
pub struct SetWorkerFeeLib {
|
|
61
71
|
pub fee_lib: Address,
|
|
62
72
|
}
|
|
@@ -296,12 +296,16 @@ pub trait Worker: Ownable + Sized {
|
|
|
296
296
|
/// * `message_libs` - Supported message library addresses
|
|
297
297
|
/// * `price_feed` - Price feed contract address
|
|
298
298
|
/// * `default_multiplier_bps` - Default fee multiplier in basis points
|
|
299
|
+
/// * `worker_fee_lib` - Worker fee library contract address
|
|
300
|
+
/// * `deposit_address` - Address to receive fee payments
|
|
299
301
|
pub fn init_worker<T: Worker>(
|
|
300
302
|
env: &Env,
|
|
301
303
|
admins: &Vec<Address>,
|
|
302
304
|
message_libs: &Vec<Address>,
|
|
303
305
|
price_feed: &Address,
|
|
304
306
|
default_multiplier_bps: u32,
|
|
307
|
+
worker_fee_lib: &Address,
|
|
308
|
+
deposit_address: &Address,
|
|
305
309
|
) {
|
|
306
310
|
assert_with_error!(env, T::admins(env).is_empty(), WorkerError::ReInitialize);
|
|
307
311
|
assert_with_error!(env, !admins.is_empty(), WorkerError::NoAdminsProvided);
|
|
@@ -316,6 +320,9 @@ pub fn init_worker<T: Worker>(
|
|
|
316
320
|
|
|
317
321
|
set_price_feed_no_auth(env, price_feed);
|
|
318
322
|
set_default_multiplier_bps_no_auth(env, default_multiplier_bps);
|
|
323
|
+
|
|
324
|
+
WorkerStorage::set_worker_fee_lib(env, worker_fee_lib);
|
|
325
|
+
WorkerStorage::set_deposit_address(env, deposit_address);
|
|
319
326
|
}
|
|
320
327
|
|
|
321
328
|
// ============================================================================================
|
|
@@ -364,6 +371,31 @@ pub fn assert_supported_message_lib<T: Worker>(env: &Env, message_lib: &Address)
|
|
|
364
371
|
assert_with_error!(env, T::is_supported_message_lib(env, message_lib), WorkerError::UnsupportedMessageLib);
|
|
365
372
|
}
|
|
366
373
|
|
|
374
|
+
// ============================================================================================
|
|
375
|
+
// Admin Setter Functions with authentication
|
|
376
|
+
// ============================================================================================
|
|
377
|
+
|
|
378
|
+
/// Sets admin status for an address by owner.
|
|
379
|
+
///
|
|
380
|
+
/// # Arguments
|
|
381
|
+
/// * `admin` - The address to set admin status for
|
|
382
|
+
/// * `active` - `true` to add admin, `false` to remove
|
|
383
|
+
pub fn set_admin_by_owner<T: Worker>(env: &Env, admin: &Address, active: bool) {
|
|
384
|
+
require_owner_auth::<T>(env);
|
|
385
|
+
set_admin_no_auth::<T>(env, admin, active);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/// Sets admin status for an address by admin.
|
|
389
|
+
///
|
|
390
|
+
/// # Arguments
|
|
391
|
+
/// * `caller` - The admin calling this function (must provide authorization)
|
|
392
|
+
/// * `admin` - The address to set admin status for
|
|
393
|
+
/// * `active` - `true` to add admin, `false` to remove
|
|
394
|
+
pub fn set_admin_by_admin<T: Worker>(env: &Env, caller: &Address, admin: &Address, active: bool) {
|
|
395
|
+
require_admin_auth::<T>(env, caller);
|
|
396
|
+
set_admin_no_auth::<T>(env, admin, active);
|
|
397
|
+
}
|
|
398
|
+
|
|
367
399
|
// ============================================================================================
|
|
368
400
|
// Internal Functions
|
|
369
401
|
// ============================================================================================
|
|
@@ -393,27 +425,6 @@ fn set_admin_no_auth<T: Worker>(env: &Env, admin: &Address, active: bool) {
|
|
|
393
425
|
SetAdmin { admin: admin.clone(), active }.publish(env);
|
|
394
426
|
}
|
|
395
427
|
|
|
396
|
-
/// Sets admin status for an address by owner.
|
|
397
|
-
///
|
|
398
|
-
/// # Arguments
|
|
399
|
-
/// * `admin` - The address to set admin status for
|
|
400
|
-
/// * `active` - `true` to add admin, `false` to remove
|
|
401
|
-
pub fn set_admin_by_owner<T: Worker>(env: &Env, admin: &Address, active: bool) {
|
|
402
|
-
require_owner_auth::<T>(env);
|
|
403
|
-
set_admin_no_auth::<T>(env, admin, active);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
/// Sets admin status for an address by admin.
|
|
407
|
-
///
|
|
408
|
-
/// # Arguments
|
|
409
|
-
/// * `caller` - The admin calling this function (must provide authorization)
|
|
410
|
-
/// * `admin` - The address to set admin status for
|
|
411
|
-
/// * `active` - `true` to add admin, `false` to remove
|
|
412
|
-
pub fn set_admin_by_admin<T: Worker>(env: &Env, caller: &Address, admin: &Address, active: bool) {
|
|
413
|
-
require_admin_auth::<T>(env, caller);
|
|
414
|
-
set_admin_no_auth::<T>(env, admin, active);
|
|
415
|
-
}
|
|
416
|
-
|
|
417
428
|
/// Sets message library support status without authentication.
|
|
418
429
|
///
|
|
419
430
|
/// Adds or removes a message library from the supported libraries list.
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/protocol-stellar-v2",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.13",
|
|
4
4
|
"private": false,
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@types/node": "^22.18.6",
|
|
7
7
|
"tsx": "^4.19.3",
|
|
8
8
|
"typescript": "^5.8.2",
|
|
9
|
-
"@layerzerolabs/common-node-utils": "0.2.
|
|
10
|
-
"@layerzerolabs/vm-tooling-stellar": "0.2.
|
|
9
|
+
"@layerzerolabs/common-node-utils": "0.2.13",
|
|
10
|
+
"@layerzerolabs/vm-tooling-stellar": "0.2.13"
|
|
11
11
|
},
|
|
12
12
|
"publishConfig": {
|
|
13
13
|
"access": "restricted",
|
|
@@ -63,25 +63,25 @@ export class Client extends ContractClient {
|
|
|
63
63
|
"AAAAAAAAACNBbHdheXMgcGFuaWNzIC0gcXVvdGluZyBpcyBibG9ja2VkLgAAAAAFcXVvdGUAAAAAAAADAAAAAAAAAAZwYWNrZXQAAAAAB9AAAAAOT3V0Ym91bmRQYWNrZXQAAAAAAAAAAAAHb3B0aW9ucwAAAAAOAAAAAAAAAApwYXlfaW5fenJvAAAAAAABAAAAAQAAB9AAAAAMTWVzc2FnaW5nRmVl",
|
|
64
64
|
"AAAAAAAAACNBbHdheXMgcGFuaWNzIC0gc2VuZGluZyBpcyBibG9ja2VkLgAAAAAEc2VuZAAAAAMAAAAAAAAABnBhY2tldAAAAAAH0AAAAA5PdXRib3VuZFBhY2tldAAAAAAAAAAAAAdvcHRpb25zAAAAAA4AAAAAAAAACnBheV9pbl96cm8AAAAAAAEAAAABAAAH0AAAAA1GZWVzQW5kUGFja2V0AAAA",
|
|
65
65
|
"AAAABAAAAAAAAAAAAAAADUVuZHBvaW50RXJyb3IAAAAAAAAYAAAAAAAAABFBbHJlYWR5UmVnaXN0ZXJlZAAAAAAAAAEAAAAAAAAADUNvbXBvc2VFeGlzdHMAAAAAAAACAAAAAAAAAA9Db21wb3NlTm90Rm91bmQAAAAAAwAAAAAAAAAcRGVmYXVsdFJlY2VpdmVMaWJVbmF2YWlsYWJsZQAAAAQAAAAAAAAAGURlZmF1bHRTZW5kTGliVW5hdmFpbGFibGUAAAAAAAAFAAAAAAAAABVJbnN1ZmZpY2llbnROYXRpdmVGZWUAAAAAAAAGAAAAAAAAABJJbnN1ZmZpY2llbnRaUk9GZWUAAAAAAAcAAAAAAAAADUludmFsaWRFeHBpcnkAAAAAAAAIAAAAAAAAAAxJbnZhbGlkSW5kZXgAAAAJAAAAAAAAAAxJbnZhbGlkTm9uY2UAAAAKAAAAAAAAABJJbnZhbGlkUGF5bG9hZEhhc2gAAAAAAAsAAAAAAAAAFUludmFsaWRSZWNlaXZlTGlicmFyeQAAAAAAAAwAAAAAAAAAEU9ubHlOb25EZWZhdWx0TGliAAAAAAAADQAAAAAAAAAOT25seVJlY2VpdmVMaWIAAAAAAA4AAAAAAAAAEU9ubHlSZWdpc3RlcmVkTGliAAAAAAAADwAAAAAAAAALT25seVNlbmRMaWIAAAAAEAAAAAAAAAAUUGF0aE5vdEluaXRpYWxpemFibGUAAAARAAAAAAAAABFQYXRoTm90VmVyaWZpYWJsZQAAAAAAABIAAAAAAAAAE1BheWxvYWRIYXNoTm90Rm91bmQAAAAAEwAAAAAAAAAJU2FtZVZhbHVlAAAAAAAAFAAAAAAAAAAMVW5hdXRob3JpemVkAAAAFQAAAAAAAAAOVW5zdXBwb3J0ZWRFaWQAAAAAABYAAAAAAAAAClplcm9aUk9GZWUAAAAAABcAAAAAAAAADlpST1VuYXZhaWxhYmxlAAAAAAAY",
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
66
|
+
"AAAABQAAAAAAAAAAAAAAClBhY2tldFNlbnQAAAAAAAEAAAALcGFja2V0X3NlbnQAAAAAAwAAAAAAAAAOZW5jb2RlZF9wYWNrZXQAAAAAAA4AAAAAAAAAAAAAAAdvcHRpb25zAAAAAA4AAAAAAAAAAAAAAAxzZW5kX2xpYnJhcnkAAAATAAAAAAAAAAI=",
|
|
67
|
+
"AAAABQAAAAAAAAAAAAAADlBhY2tldFZlcmlmaWVkAAAAAAABAAAAD3BhY2tldF92ZXJpZmllZAAAAAADAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAABAAAAAAAAAAhyZWNlaXZlcgAAABMAAAABAAAAAAAAAAxwYXlsb2FkX2hhc2gAAAPuAAAAIAAAAAAAAAAC",
|
|
68
|
+
"AAAABQAAAAAAAAAAAAAAD1BhY2tldERlbGl2ZXJlZAAAAAABAAAAEHBhY2tldF9kZWxpdmVyZWQAAAACAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAABAAAAAAAAAAhyZWNlaXZlcgAAABMAAAABAAAAAg==",
|
|
69
|
+
"AAAABQAAAAAAAAAAAAAADkx6UmVjZWl2ZUFsZXJ0AAAAAAABAAAAEGx6X3JlY2VpdmVfYWxlcnQAAAAJAAAAAAAAAAhyZWNlaXZlcgAAABMAAAABAAAAAAAAAAhleGVjdXRvcgAAABMAAAABAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAABAAAAAAAAAARndWlkAAAD7gAAACAAAAABAAAAAAAAAANnYXMAAAAACwAAAAAAAAAAAAAABXZhbHVlAAAAAAAACwAAAAAAAAAAAAAAB21lc3NhZ2UAAAAADgAAAAAAAAAAAAAACmV4dHJhX2RhdGEAAAAAAA4AAAAAAAAAAAAAAAZyZWFzb24AAAAAAA4AAAAAAAAAAg==",
|
|
70
|
+
"AAAABQAAAAAAAAAAAAAABlpST1NldAAAAAAAAQAAAAd6cm9fc2V0AAAAAAEAAAAAAAAAA3pybwAAAAATAAAAAAAAAAI=",
|
|
71
|
+
"AAAABQAAAAAAAAAAAAAAC0RlbGVnYXRlU2V0AAAAAAEAAAAMZGVsZWdhdGVfc2V0AAAAAgAAAAAAAAAEb2FwcAAAABMAAAABAAAAAAAAAAhkZWxlZ2F0ZQAAA+gAAAATAAAAAAAAAAI=",
|
|
72
|
+
"AAAABQAAAAAAAAAAAAAAE0luYm91bmROb25jZVNraXBwZWQAAAAAAQAAABVpbmJvdW5kX25vbmNlX3NraXBwZWQAAAAAAAAEAAAAAAAAAAdzcmNfZWlkAAAAAAQAAAABAAAAAAAAAAZzZW5kZXIAAAAAA+4AAAAgAAAAAQAAAAAAAAAIcmVjZWl2ZXIAAAATAAAAAQAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAQAAAAI=",
|
|
73
|
+
"AAAABQAAAAAAAAAAAAAADlBhY2tldE5pbGlmaWVkAAAAAAABAAAAD3BhY2tldF9uaWxpZmllZAAAAAAFAAAAAAAAAAdzcmNfZWlkAAAAAAQAAAABAAAAAAAAAAZzZW5kZXIAAAAAA+4AAAAgAAAAAQAAAAAAAAAIcmVjZWl2ZXIAAAATAAAAAQAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAQAAAAAAAAAMcGF5bG9hZF9oYXNoAAAD6AAAA+4AAAAgAAAAAAAAAAI=",
|
|
74
|
+
"AAAABQAAAAAAAAAAAAAAC1BhY2tldEJ1cm50AAAAAAEAAAAMcGFja2V0X2J1cm50AAAABQAAAAAAAAAHc3JjX2VpZAAAAAAEAAAAAQAAAAAAAAAGc2VuZGVyAAAAAAPuAAAAIAAAAAEAAAAAAAAACHJlY2VpdmVyAAAAEwAAAAEAAAAAAAAABW5vbmNlAAAAAAAABgAAAAEAAAAAAAAADHBheWxvYWRfaGFzaAAAA+4AAAAgAAAAAAAAAAI=",
|
|
75
|
+
"AAAABQAAAAAAAAAAAAAAEUxpYnJhcnlSZWdpc3RlcmVkAAAAAAAAAQAAABJsaWJyYXJ5X3JlZ2lzdGVyZWQAAAAAAAEAAAAAAAAAB25ld19saWIAAAAAEwAAAAAAAAAC",
|
|
76
|
+
"AAAABQAAAAAAAAAAAAAAFURlZmF1bHRTZW5kTGlicmFyeVNldAAAAAAAAAEAAAAYZGVmYXVsdF9zZW5kX2xpYnJhcnlfc2V0AAAAAgAAAAAAAAAHZHN0X2VpZAAAAAAEAAAAAQAAAAAAAAAHbmV3X2xpYgAAAAATAAAAAAAAAAI=",
|
|
77
|
+
"AAAABQAAAAAAAAAAAAAAGERlZmF1bHRSZWNlaXZlTGlicmFyeVNldAAAAAEAAAAbZGVmYXVsdF9yZWNlaXZlX2xpYnJhcnlfc2V0AAAAAAIAAAAAAAAAB3NyY19laWQAAAAABAAAAAEAAAAAAAAAB25ld19saWIAAAAAEwAAAAAAAAAC",
|
|
78
|
+
"AAAABQAAAAAAAAAAAAAAG0RlZmF1bHRSZWNlaXZlTGliVGltZW91dFNldAAAAAABAAAAH2RlZmF1bHRfcmVjZWl2ZV9saWJfdGltZW91dF9zZXQAAAAAAgAAAAAAAAAHc3JjX2VpZAAAAAAEAAAAAQAAAAAAAAAHdGltZW91dAAAAAPoAAAH0AAAAAdUaW1lb3V0AAAAAAAAAAAC",
|
|
79
|
+
"AAAABQAAAAAAAAAAAAAADlNlbmRMaWJyYXJ5U2V0AAAAAAABAAAAEHNlbmRfbGlicmFyeV9zZXQAAAADAAAAAAAAAAZzZW5kZXIAAAAAABMAAAABAAAAAAAAAAdkc3RfZWlkAAAAAAQAAAABAAAAAAAAAAduZXdfbGliAAAAA+gAAAATAAAAAAAAAAI=",
|
|
80
|
+
"AAAABQAAAAAAAAAAAAAAEVJlY2VpdmVMaWJyYXJ5U2V0AAAAAAAAAQAAABNyZWNlaXZlX2xpYnJhcnlfc2V0AAAAAAMAAAAAAAAACHJlY2VpdmVyAAAAEwAAAAEAAAAAAAAAB3NyY19laWQAAAAABAAAAAEAAAAAAAAAB25ld19saWIAAAAD6AAAABMAAAAAAAAAAg==",
|
|
81
|
+
"AAAABQAAAAAAAAAAAAAAGFJlY2VpdmVMaWJyYXJ5VGltZW91dFNldAAAAAEAAAAbcmVjZWl2ZV9saWJyYXJ5X3RpbWVvdXRfc2V0AAAAAAMAAAAAAAAACHJlY2VpdmVyAAAAEwAAAAEAAAAAAAAAA2VpZAAAAAAEAAAAAQAAAAAAAAAHdGltZW91dAAAAAPoAAAH0AAAAAdUaW1lb3V0AAAAAAAAAAAC",
|
|
82
|
+
"AAAABQAAAAAAAAAAAAAAC0NvbXBvc2VTZW50AAAAAAEAAAAMY29tcG9zZV9zZW50AAAABQAAAAAAAAAEZnJvbQAAABMAAAABAAAAAAAAAAJ0bwAAAAAAEwAAAAEAAAAAAAAABGd1aWQAAAPuAAAAIAAAAAEAAAAAAAAABWluZGV4AAAAAAAABAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAADgAAAAAAAAAC",
|
|
83
|
+
"AAAABQAAAAAAAAAAAAAAEENvbXBvc2VEZWxpdmVyZWQAAAABAAAAEWNvbXBvc2VfZGVsaXZlcmVkAAAAAAAABAAAAAAAAAAEZnJvbQAAABMAAAABAAAAAAAAAAJ0bwAAAAAAEwAAAAEAAAAAAAAABGd1aWQAAAPuAAAAIAAAAAEAAAAAAAAABWluZGV4AAAAAAAABAAAAAEAAAAC",
|
|
84
|
+
"AAAABQAAAAAAAAAAAAAADkx6Q29tcG9zZUFsZXJ0AAAAAAABAAAAEGx6X2NvbXBvc2VfYWxlcnQAAAAKAAAAAAAAAARmcm9tAAAAEwAAAAEAAAAAAAAAAnRvAAAAAAATAAAAAQAAAAAAAAAIZXhlY3V0b3IAAAATAAAAAQAAAAAAAAAEZ3VpZAAAA+4AAAAgAAAAAQAAAAAAAAAFaW5kZXgAAAAAAAAEAAAAAQAAAAAAAAADZ2FzAAAAAAsAAAAAAAAAAAAAAAV2YWx1ZQAAAAAAAAsAAAAAAAAAAAAAAAdtZXNzYWdlAAAAAA4AAAAAAAAAAAAAAApleHRyYV9kYXRhAAAAAAAOAAAAAAAAAAAAAAAGcmVhc29uAAAAAAAOAAAAAAAAAAI=",
|
|
85
85
|
"AAAAAQAAAC1QYXJhbWV0ZXJzIGZvciBzZW5kaW5nIGEgY3Jvc3MtY2hhaW4gbWVzc2FnZS4AAAAAAAAAAAAAD01lc3NhZ2luZ1BhcmFtcwAAAAAFAAAAK0Rlc3RpbmF0aW9uIGVuZHBvaW50IElEIChjaGFpbiBpZGVudGlmaWVyKS4AAAAAB2RzdF9laWQAAAAABAAAABxUaGUgbWVzc2FnZSBwYXlsb2FkIHRvIHNlbmQuAAAAB21lc3NhZ2UAAAAADgAAACFFbmNvZGVkIGV4ZWN1dG9yIGFuZCBEVk4gb3B0aW9ucy4AAAAAAAAHb3B0aW9ucwAAAAAOAAAAOVdoZXRoZXIgdG8gcGF5IGZlZXMgaW4gWlJPIHRva2VuIGluc3RlYWQgb2YgbmF0aXZlIHRva2VuLgAAAAAAAApwYXlfaW5fenJvAAAAAAABAAAANVJlY2VpdmVyIGFkZHJlc3Mgb24gdGhlIGRlc3RpbmF0aW9uIGNoYWluICgzMiBieXRlcykuAAAAAAAACHJlY2VpdmVyAAAD7gAAACA=",
|
|
86
86
|
"AAAAAQAAAE1Tb3VyY2UgbWVzc2FnZSBpbmZvcm1hdGlvbiBpZGVudGlmeWluZyB3aGVyZSBhIGNyb3NzLWNoYWluIG1lc3NhZ2UgY2FtZSBmcm9tLgAAAAAAAAAAAAAGT3JpZ2luAAAAAAADAAAAF05vbmNlIGZvciB0aGlzIHBhdGh3YXkuAAAAAAVub25jZQAAAAAAAAYAAAAuU2VuZGVyIGFkZHJlc3Mgb24gdGhlIHNvdXJjZSBjaGFpbiAoMzIgYnl0ZXMpLgAAAAAABnNlbmRlcgAAAAAD7gAAACAAAAAmU291cmNlIGVuZHBvaW50IElEIChjaGFpbiBpZGVudGlmaWVyKS4AAAAAAAdzcmNfZWlkAAAAAAQ=",
|
|
87
87
|
"AAAAAQAAAChGZWUgc3RydWN0dXJlIGZvciBjcm9zcy1jaGFpbiBtZXNzYWdpbmcuAAAAAAAAAAxNZXNzYWdpbmdGZWUAAAACAAAAH0ZlZSBwYWlkIGluIG5hdGl2ZSB0b2tlbiAoWExNKS4AAAAACm5hdGl2ZV9mZWUAAAAAAAsAAAAoRmVlIHBhaWQgaW4gWlJPIHRva2VuIChMYXllclplcm8gdG9rZW4pLgAAAAd6cm9fZmVlAAAAAAs=",
|
|
@@ -99,13 +99,13 @@ export class Client extends ContractClient {
|
|
|
99
99
|
"AAAABAAAAAAAAAAAAAAACFR0bEVycm9yAAAAAwAAAAAAAAAQSW52YWxpZFR0bENvbmZpZwAABLAAAAAAAAAAD1R0bENvbmZpZ0Zyb3plbgAAAASxAAAAAAAAABZUdGxDb25maWdBbHJlYWR5RnJvemVuAAAAAASy",
|
|
100
100
|
"AAAABAAAAAAAAAAAAAAADE93bmFibGVFcnJvcgAAAAIAAAAAAAAAD093bmVyQWxyZWFkeVNldAAAAAUUAAAAAAAAAAtPd25lck5vdFNldAAAAAUV",
|
|
101
101
|
"AAAABAAAAAAAAAAAAAAADUJ5dGVzRXh0RXJyb3IAAAAAAAABAAAAAAAAAA5MZW5ndGhNaXNtYXRjaAAAAAAFeA==",
|
|
102
|
-
"
|
|
103
|
-
"
|
|
102
|
+
"AAAABQAAACxFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHRyYW5zZmVycmVkLgAAAAAAAAAUT3duZXJzaGlwVHJhbnNmZXJyZWQAAAABAAAAFW93bmVyc2hpcF90cmFuc2ZlcnJlZAAAAAAAAAIAAAAAAAAACW9sZF9vd25lcgAAAAAAABMAAAAAAAAAAAAAAAluZXdfb3duZXIAAAAAAAATAAAAAAAAAAI=",
|
|
103
|
+
"AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHJlbm91bmNlZC4AAAAAAAAAAAAST3duZXJzaGlwUmVub3VuY2VkAAAAAAABAAAAE293bmVyc2hpcF9yZW5vdW5jZWQAAAAAAQAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAC",
|
|
104
104
|
"AAAAAgAAAAAAAAAAAAAAFURlZmF1bHRPd25hYmxlU3RvcmFnZQAAAAAAAAEAAAAAAAAAAAAAAAVPd25lcgAAAA==",
|
|
105
105
|
"AAAAAQAAAFdBIHBhaXIgb2YgVFRMIHZhbHVlczogdGhyZXNob2xkICh3aGVuIHRvIHRyaWdnZXIgZXh0ZW5zaW9uKSBhbmQgZXh0ZW5kX3RvICh0YXJnZXQgVFRMKS4AAAAAAAAAAAlUdGxDb25maWcAAAAAAAACAAAAKFRhcmdldCBUVEwgYWZ0ZXIgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAJZXh0ZW5kX3RvAAAAAAAABAAAADNUVEwgdGhyZXNob2xkIHRoYXQgdHJpZ2dlcnMgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAACXRocmVzaG9sZAAAAAAAAAQ=",
|
|
106
106
|
"AAAAAgAAAAAAAAAAAAAAEFR0bENvbmZpZ1N0b3JhZ2UAAAADAAAAAAAAAAAAAAAGRnJvemVuAAAAAAAAAAAAAAAAAAhJbnN0YW5jZQAAAAAAAAAAAAAAClBlcnNpc3RlbnQAAA==",
|
|
107
|
-
"
|
|
108
|
-
"
|
|
107
|
+
"AAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIHNldC4AAAAAAAAAAA1UdGxDb25maWdzU2V0AAAAAAAAAQAAAA90dGxfY29uZmlnc19zZXQAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAAAAAApwZXJzaXN0ZW50AAAAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAg==",
|
|
108
|
+
"AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIGZyb3plbi4AAAAAAAAAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAEAAAASdHRsX2NvbmZpZ3NfZnJvemVuAAAAAAAAAAAAAg=="]), options);
|
|
109
109
|
this.options = options;
|
|
110
110
|
}
|
|
111
111
|
fromJSON = {
|