@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.
Files changed (74) hide show
  1. package/.turbo/turbo-build.log +202 -194
  2. package/.turbo/turbo-lint.log +38 -38
  3. package/.turbo/turbo-test.log +891 -891
  4. package/Cargo.lock +1 -1
  5. package/contracts/common-macros/src/lib.rs +3 -36
  6. package/contracts/endpoint-v2/src/endpoint_v2.rs +4 -4
  7. package/contracts/endpoint-v2/src/events.rs +40 -22
  8. package/contracts/endpoint-v2/src/interfaces/message_lib.rs +2 -2
  9. package/contracts/endpoint-v2/src/interfaces/message_lib_manager.rs +2 -2
  10. package/contracts/endpoint-v2/src/interfaces/messaging_channel.rs +2 -2
  11. package/contracts/endpoint-v2/src/interfaces/messaging_composer.rs +2 -2
  12. package/contracts/endpoint-v2/src/interfaces/send_lib.rs +2 -2
  13. package/contracts/endpoint-v2/src/message_lib_manager.rs +3 -3
  14. package/contracts/endpoint-v2/src/messaging_channel.rs +1 -1
  15. package/contracts/endpoint-v2/src/messaging_composer.rs +1 -1
  16. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_lib_timeout.rs +4 -8
  17. package/contracts/endpoint-v2/src/tests/message_lib_manager/set_default_receive_library.rs +3 -7
  18. package/contracts/message-libs/{block-message-lib → blocked-message-lib}/Cargo.toml +1 -1
  19. package/contracts/message-libs/treasury/src/events.rs +9 -6
  20. package/contracts/message-libs/uln-302/src/events.rs +19 -11
  21. package/contracts/message-libs/uln-302/src/interfaces/receive_uln.rs +2 -2
  22. package/contracts/message-libs/uln-302/src/interfaces/send_uln.rs +2 -2
  23. package/contracts/message-libs/uln-302/src/receive_uln.rs +2 -2
  24. package/contracts/message-libs/uln-302/src/send_uln.rs +3 -3
  25. package/contracts/message-libs/uln-302/src/tests/receive_uln302/set_default_receive_uln_configs.rs +5 -5
  26. package/contracts/message-libs/uln-302/src/tests/send_uln302/set_default_send_uln_configs.rs +5 -5
  27. package/contracts/message-libs/uln-302/src/tests/setup.rs +3 -3
  28. package/contracts/message-libs/uln-302/src/types.rs +24 -24
  29. package/contracts/message-libs/uln-302/src/uln302.rs +1 -1
  30. package/contracts/oapps/counter/integration_tests/utils.rs +1 -1
  31. package/contracts/oapps/oapp/src/oapp_core.rs +4 -3
  32. package/contracts/oapps/oapp/src/oapp_options_type3.rs +4 -3
  33. package/contracts/oapps/oft/integration-tests/utils.rs +1 -1
  34. package/contracts/oapps/oft/src/events.rs +5 -4
  35. package/contracts/oapps/oft/src/extensions/oft_fee.rs +10 -6
  36. package/contracts/oapps/oft/src/extensions/pausable.rs +4 -4
  37. package/contracts/oapps/oft/src/extensions/rate_limiter.rs +8 -6
  38. package/contracts/utils/src/ownable.rs +6 -4
  39. package/contracts/utils/src/tests/testing_utils.rs +7 -5
  40. package/contracts/utils/src/ttl.rs +5 -4
  41. package/contracts/workers/dvn/src/auth.rs +59 -45
  42. package/contracts/workers/dvn/src/dvn.rs +84 -16
  43. package/contracts/workers/dvn/src/errors.rs +10 -13
  44. package/contracts/workers/dvn/src/events.rs +7 -5
  45. package/contracts/workers/dvn/src/interfaces/dvn.rs +29 -1
  46. package/contracts/workers/dvn/src/multisig.rs +94 -71
  47. package/contracts/workers/dvn/src/storage.rs +9 -12
  48. package/contracts/workers/dvn/src/tests/auth.rs +56 -26
  49. package/contracts/workers/dvn/src/tests/dvn.rs +37 -37
  50. package/contracts/workers/dvn/src/tests/multisig/set_signer.rs +8 -8
  51. package/contracts/workers/dvn/src/tests/multisig/set_threshold.rs +9 -9
  52. package/contracts/workers/dvn/src/tests/multisig/verify_signatures.rs +6 -6
  53. package/contracts/workers/dvn/src/tests/setup.rs +5 -5
  54. package/contracts/workers/executor/src/auth.rs +93 -0
  55. package/contracts/workers/executor/src/events.rs +5 -4
  56. package/contracts/workers/executor/src/{lz_executor.rs → executor.rs} +25 -98
  57. package/contracts/workers/executor/src/interfaces/mod.rs +1 -1
  58. package/contracts/workers/executor/src/lib.rs +6 -5
  59. package/contracts/workers/worker/src/events.rs +23 -13
  60. package/contracts/workers/worker/src/worker.rs +32 -21
  61. package/package.json +3 -3
  62. package/sdk/dist/generated/bml.js +23 -23
  63. package/sdk/dist/generated/counter.js +25 -25
  64. package/sdk/dist/generated/endpoint.js +23 -23
  65. package/sdk/dist/generated/sml.js +23 -23
  66. package/sdk/dist/generated/uln302.d.ts +1 -1
  67. package/sdk/dist/generated/uln302.js +33 -33
  68. package/sdk/package.json +1 -1
  69. package/sdk/test/index.test.ts +1 -1
  70. package/sdk/test/oft.test.ts +847 -0
  71. package/sdk/test/suites/scan.ts +20 -4
  72. package/tools/ts-bindings-gen/src/main.rs +2 -1
  73. package/contracts/common-macros/src/event.rs +0 -16
  74. /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
- #[event]
6
+ #[contractevent]
7
+ #[derive(Clone, Debug, Eq, PartialEq)]
8
8
  pub struct DstConfigSet {
9
9
  pub params: Vec<SetDstConfigParam>,
10
10
  }
11
11
 
12
- #[event]
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<WhitelistEntry>,
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>(env, admins, message_libs, price_feed, default_multiplier_bps);
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 entry in whitelist.iter() {
84
- ExecutorStorage::set_whitelisted_fn(env, &entry.contract, &entry.fn_name, &true);
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
- // CustomAccountInterface implementation, used for receive-flow execution
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,3 +1,3 @@
1
- pub mod executor;
1
+ mod executor;
2
2
 
3
3
  pub use executor::*;
@@ -1,17 +1,18 @@
1
1
  #![no_std]
2
2
 
3
- mod interfaces;
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 lz_executor;
13
+ mod executor;
13
14
 
14
- pub use lz_executor::{LzExecutor, LzExecutorClient, WhitelistEntry};
15
+ pub use executor::*;
15
16
  }
16
17
  }
17
18
 
@@ -1,62 +1,72 @@
1
- use common_macros::event;
2
- use soroban_sdk::{Address, Bytes};
1
+ use soroban_sdk::{contractevent, Address, Bytes};
3
2
 
4
- #[event]
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
- #[event]
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
- #[event]
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
- #[event]
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
- #[event]
31
+ #[contractevent]
32
+ #[derive(Clone, Debug, Eq, PartialEq)]
29
33
  pub struct Paused {
30
34
  pub pauser: Address,
31
35
  }
32
36
 
33
- #[event]
37
+ #[contractevent]
38
+ #[derive(Clone, Debug, Eq, PartialEq)]
34
39
  pub struct Unpaused {
35
40
  pub unpauser: Address,
36
41
  }
37
42
 
38
- #[event]
43
+ #[contractevent]
44
+ #[derive(Clone, Debug, Eq, PartialEq)]
39
45
  pub struct SetDefaultMultiplierBps {
40
46
  pub multiplier_bps: u32,
41
47
  }
42
48
 
43
- #[event]
49
+ #[contractevent]
50
+ #[derive(Clone, Debug, Eq, PartialEq)]
44
51
  pub struct SetDepositAddress {
45
52
  pub deposit_address: Address,
46
53
  }
47
54
 
48
- #[event]
55
+ #[contractevent]
56
+ #[derive(Clone, Debug, Eq, PartialEq)]
49
57
  pub struct SetPriceFeed {
50
58
  pub price_feed: Address,
51
59
  }
52
60
 
53
- #[event]
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
- #[event]
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.11",
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.11",
10
- "@layerzerolabs/vm-tooling-stellar": "0.2.11"
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
- "AAAABQAAAAAAAAAAAAAAClBhY2tldFNlbnQAAAAAAAEAAAAKUGFja2V0U2VudAAAAAAAAwAAAAAAAAAOZW5jb2RlZF9wYWNrZXQAAAAAAA4AAAAAAAAAAAAAAAdvcHRpb25zAAAAAA4AAAAAAAAAAAAAAAxzZW5kX2xpYnJhcnkAAAATAAAAAAAAAAI=",
67
- "AAAABQAAAAAAAAAAAAAADlBhY2tldFZlcmlmaWVkAAAAAAABAAAADlBhY2tldFZlcmlmaWVkAAAAAAADAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAABAAAAAAAAAAhyZWNlaXZlcgAAABMAAAABAAAAAAAAAAxwYXlsb2FkX2hhc2gAAAPuAAAAIAAAAAAAAAAC",
68
- "AAAABQAAAAAAAAAAAAAAD1BhY2tldERlbGl2ZXJlZAAAAAABAAAAD1BhY2tldERlbGl2ZXJlZAAAAAACAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAABAAAAAAAAAAhyZWNlaXZlcgAAABMAAAABAAAAAg==",
69
- "AAAABQAAAAAAAAAAAAAADkx6UmVjZWl2ZUFsZXJ0AAAAAAABAAAADkx6UmVjZWl2ZUFsZXJ0AAAAAAAJAAAAAAAAAAhyZWNlaXZlcgAAABMAAAABAAAAAAAAAAhleGVjdXRvcgAAABMAAAABAAAAAAAAAAZvcmlnaW4AAAAAB9AAAAAGT3JpZ2luAAAAAAABAAAAAAAAAARndWlkAAAD7gAAACAAAAABAAAAAAAAAANnYXMAAAAACwAAAAAAAAAAAAAABXZhbHVlAAAAAAAACwAAAAAAAAAAAAAAB21lc3NhZ2UAAAAADgAAAAAAAAAAAAAACmV4dHJhX2RhdGEAAAAAAA4AAAAAAAAAAAAAAAZyZWFzb24AAAAAAA4AAAAAAAAAAg==",
70
- "AAAABQAAAAAAAAAAAAAABlpST1NldAAAAAAAAQAAAAZaUk9TZXQAAAAAAAEAAAAAAAAAA3pybwAAAAATAAAAAAAAAAI=",
71
- "AAAABQAAAAAAAAAAAAAAC0RlbGVnYXRlU2V0AAAAAAEAAAALRGVsZWdhdGVTZXQAAAAAAgAAAAAAAAAEb2FwcAAAABMAAAABAAAAAAAAAAhkZWxlZ2F0ZQAAA+gAAAATAAAAAAAAAAI=",
72
- "AAAABQAAAAAAAAAAAAAAE0luYm91bmROb25jZVNraXBwZWQAAAAAAQAAABNJbmJvdW5kTm9uY2VTa2lwcGVkAAAAAAQAAAAAAAAAB3NyY19laWQAAAAABAAAAAEAAAAAAAAABnNlbmRlcgAAAAAD7gAAACAAAAABAAAAAAAAAAhyZWNlaXZlcgAAABMAAAABAAAAAAAAAAVub25jZQAAAAAAAAYAAAABAAAAAg==",
73
- "AAAABQAAAAAAAAAAAAAADlBhY2tldE5pbGlmaWVkAAAAAAABAAAADlBhY2tldE5pbGlmaWVkAAAAAAAFAAAAAAAAAAdzcmNfZWlkAAAAAAQAAAABAAAAAAAAAAZzZW5kZXIAAAAAA+4AAAAgAAAAAQAAAAAAAAAIcmVjZWl2ZXIAAAATAAAAAQAAAAAAAAAFbm9uY2UAAAAAAAAGAAAAAQAAAAAAAAAMcGF5bG9hZF9oYXNoAAAD6AAAA+4AAAAgAAAAAAAAAAI=",
74
- "AAAABQAAAAAAAAAAAAAAC1BhY2tldEJ1cm50AAAAAAEAAAALUGFja2V0QnVybnQAAAAABQAAAAAAAAAHc3JjX2VpZAAAAAAEAAAAAQAAAAAAAAAGc2VuZGVyAAAAAAPuAAAAIAAAAAEAAAAAAAAACHJlY2VpdmVyAAAAEwAAAAEAAAAAAAAABW5vbmNlAAAAAAAABgAAAAEAAAAAAAAADHBheWxvYWRfaGFzaAAAA+4AAAAgAAAAAAAAAAI=",
75
- "AAAABQAAAAAAAAAAAAAAEUxpYnJhcnlSZWdpc3RlcmVkAAAAAAAAAQAAABFMaWJyYXJ5UmVnaXN0ZXJlZAAAAAAAAAEAAAAAAAAAB25ld19saWIAAAAAEwAAAAAAAAAC",
76
- "AAAABQAAAAAAAAAAAAAAFURlZmF1bHRTZW5kTGlicmFyeVNldAAAAAAAAAEAAAAVRGVmYXVsdFNlbmRMaWJyYXJ5U2V0AAAAAAAAAgAAAAAAAAAHZHN0X2VpZAAAAAAEAAAAAQAAAAAAAAAHbmV3X2xpYgAAAAATAAAAAAAAAAI=",
77
- "AAAABQAAAAAAAAAAAAAAGERlZmF1bHRSZWNlaXZlTGlicmFyeVNldAAAAAEAAAAYRGVmYXVsdFJlY2VpdmVMaWJyYXJ5U2V0AAAAAgAAAAAAAAAHc3JjX2VpZAAAAAAEAAAAAQAAAAAAAAAHbmV3X2xpYgAAAAATAAAAAAAAAAI=",
78
- "AAAABQAAAAAAAAAAAAAAH0RlZmF1bHRSZWNlaXZlTGlicmFyeVRpbWVvdXRTZXQAAAAAAQAAAB9EZWZhdWx0UmVjZWl2ZUxpYnJhcnlUaW1lb3V0U2V0AAAAAAIAAAAAAAAAB3NyY19laWQAAAAABAAAAAEAAAAAAAAAB3RpbWVvdXQAAAAD6AAAB9AAAAAHVGltZW91dAAAAAAAAAAAAg==",
79
- "AAAABQAAAAAAAAAAAAAADlNlbmRMaWJyYXJ5U2V0AAAAAAABAAAADlNlbmRMaWJyYXJ5U2V0AAAAAAADAAAAAAAAAAZzZW5kZXIAAAAAABMAAAABAAAAAAAAAAdkc3RfZWlkAAAAAAQAAAABAAAAAAAAAAduZXdfbGliAAAAA+gAAAATAAAAAAAAAAI=",
80
- "AAAABQAAAAAAAAAAAAAAEVJlY2VpdmVMaWJyYXJ5U2V0AAAAAAAAAQAAABFSZWNlaXZlTGlicmFyeVNldAAAAAAAAAMAAAAAAAAACHJlY2VpdmVyAAAAEwAAAAEAAAAAAAAAB3NyY19laWQAAAAABAAAAAEAAAAAAAAAB25ld19saWIAAAAD6AAAABMAAAAAAAAAAg==",
81
- "AAAABQAAAAAAAAAAAAAAGFJlY2VpdmVMaWJyYXJ5VGltZW91dFNldAAAAAEAAAAYUmVjZWl2ZUxpYnJhcnlUaW1lb3V0U2V0AAAAAwAAAAAAAAAIcmVjZWl2ZXIAAAATAAAAAQAAAAAAAAADZWlkAAAAAAQAAAABAAAAAAAAAAd0aW1lb3V0AAAAA+gAAAfQAAAAB1RpbWVvdXQAAAAAAAAAAAI=",
82
- "AAAABQAAAAAAAAAAAAAAC0NvbXBvc2VTZW50AAAAAAEAAAALQ29tcG9zZVNlbnQAAAAABQAAAAAAAAAEZnJvbQAAABMAAAABAAAAAAAAAAJ0bwAAAAAAEwAAAAEAAAAAAAAABGd1aWQAAAPuAAAAIAAAAAEAAAAAAAAABWluZGV4AAAAAAAABAAAAAEAAAAAAAAAB21lc3NhZ2UAAAAADgAAAAAAAAAC",
83
- "AAAABQAAAAAAAAAAAAAAEENvbXBvc2VEZWxpdmVyZWQAAAABAAAAEENvbXBvc2VEZWxpdmVyZWQAAAAEAAAAAAAAAARmcm9tAAAAEwAAAAEAAAAAAAAAAnRvAAAAAAATAAAAAQAAAAAAAAAEZ3VpZAAAA+4AAAAgAAAAAQAAAAAAAAAFaW5kZXgAAAAAAAAEAAAAAQAAAAI=",
84
- "AAAABQAAAAAAAAAAAAAADkx6Q29tcG9zZUFsZXJ0AAAAAAABAAAADkx6Q29tcG9zZUFsZXJ0AAAAAAAKAAAAAAAAAARmcm9tAAAAEwAAAAEAAAAAAAAAAnRvAAAAAAATAAAAAQAAAAAAAAAIZXhlY3V0b3IAAAATAAAAAQAAAAAAAAAEZ3VpZAAAA+4AAAAgAAAAAQAAAAAAAAAFaW5kZXgAAAAAAAAEAAAAAQAAAAAAAAADZ2FzAAAAAAsAAAAAAAAAAAAAAAV2YWx1ZQAAAAAAAAsAAAAAAAAAAAAAAAdtZXNzYWdlAAAAAA4AAAAAAAAAAAAAAApleHRyYV9kYXRhAAAAAAAOAAAAAAAAAAAAAAAGcmVhc29uAAAAAAAOAAAAAAAAAAI=",
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
- "AAAABQAAACxFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHRyYW5zZmVycmVkLgAAAAAAAAAUT3duZXJzaGlwVHJhbnNmZXJyZWQAAAABAAAAFE93bmVyc2hpcFRyYW5zZmVycmVkAAAAAgAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAAAAAACW5ld19vd25lcgAAAAAAABMAAAAAAAAAAg==",
103
- "AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHJlbm91bmNlZC4AAAAAAAAAAAAST3duZXJzaGlwUmVub3VuY2VkAAAAAAABAAAAEk93bmVyc2hpcFJlbm91bmNlZAAAAAAAAQAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAC",
102
+ "AAAABQAAACxFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHRyYW5zZmVycmVkLgAAAAAAAAAUT3duZXJzaGlwVHJhbnNmZXJyZWQAAAABAAAAFW93bmVyc2hpcF90cmFuc2ZlcnJlZAAAAAAAAAIAAAAAAAAACW9sZF9vd25lcgAAAAAAABMAAAAAAAAAAAAAAAluZXdfb3duZXIAAAAAAAATAAAAAAAAAAI=",
103
+ "AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gb3duZXJzaGlwIGlzIHJlbm91bmNlZC4AAAAAAAAAAAAST3duZXJzaGlwUmVub3VuY2VkAAAAAAABAAAAE293bmVyc2hpcF9yZW5vdW5jZWQAAAAAAQAAAAAAAAAJb2xkX293bmVyAAAAAAAAEwAAAAAAAAAC",
104
104
  "AAAAAgAAAAAAAAAAAAAAFURlZmF1bHRPd25hYmxlU3RvcmFnZQAAAAAAAAEAAAAAAAAAAAAAAAVPd25lcgAAAA==",
105
105
  "AAAAAQAAAFdBIHBhaXIgb2YgVFRMIHZhbHVlczogdGhyZXNob2xkICh3aGVuIHRvIHRyaWdnZXIgZXh0ZW5zaW9uKSBhbmQgZXh0ZW5kX3RvICh0YXJnZXQgVFRMKS4AAAAAAAAAAAlUdGxDb25maWcAAAAAAAACAAAAKFRhcmdldCBUVEwgYWZ0ZXIgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAJZXh0ZW5kX3RvAAAAAAAABAAAADNUVEwgdGhyZXNob2xkIHRoYXQgdHJpZ2dlcnMgZXh0ZW5zaW9uIChpbiBsZWRnZXJzKS4AAAAACXRocmVzaG9sZAAAAAAAAAQ=",
106
106
  "AAAAAgAAAAAAAAAAAAAAEFR0bENvbmZpZ1N0b3JhZ2UAAAADAAAAAAAAAAAAAAAGRnJvemVuAAAAAAAAAAAAAAAAAAhJbnN0YW5jZQAAAAAAAAAAAAAAClBlcnNpc3RlbnQAAA==",
107
- "AAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIHNldC4AAAAAAAAAAA1UdGxDb25maWdzU2V0AAAAAAAAAQAAAA1UdGxDb25maWdzU2V0AAAAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAAAAAApwZXJzaXN0ZW50AAAAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAg==",
108
- "AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIGZyb3plbi4AAAAAAAAAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAEAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAAAAAAC"]), options);
107
+ "AAAABQAAACdFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIHNldC4AAAAAAAAAAA1UdGxDb25maWdzU2V0AAAAAAAAAQAAAA90dGxfY29uZmlnc19zZXQAAAAAAgAAAAAAAAAIaW5zdGFuY2UAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAAAAAApwZXJzaXN0ZW50AAAAAAPoAAAH0AAAAAlUdGxDb25maWcAAAAAAAAAAAAAAg==",
108
+ "AAAABQAAACpFdmVudCBlbWl0dGVkIHdoZW4gVFRMIGNvbmZpZ3MgYXJlIGZyb3plbi4AAAAAAAAAAAAQVHRsQ29uZmlnc0Zyb3plbgAAAAEAAAASdHRsX2NvbmZpZ3NfZnJvemVuAAAAAAAAAAAAAg=="]), options);
109
109
  this.options = options;
110
110
  }
111
111
  fromJSON = {