diff --git a/stellar/wraith-names/src/lib.rs b/stellar/wraith-names/src/lib.rs index 2be3797..d5e1dd8 100644 --- a/stellar/wraith-names/src/lib.rs +++ b/stellar/wraith-names/src/lib.rs @@ -2,9 +2,11 @@ use soroban_sdk::{ contract, contracterror, contractimpl, contracttype, symbol_short, Address, Bytes, BytesN, Env, - String, + String, Vec, }; +const DELAY_WINDOW: u32 = 100_000; + /// Storage keys. #[contracttype] #[derive(Clone)] @@ -13,20 +15,39 @@ pub enum DataKey { Name(BytesN<32>), /// Reverse lookup: meta-address hash (BytesN<32>) to name hash (BytesN<32>). Reverse(BytesN<32>), + /// Guardian config for a name. + Guardians(BytesN<32>), + /// Pending recovery proposal for a name. + Recovery(BytesN<32>), } /// A registered name entry. #[contracttype] #[derive(Clone)] pub struct NameEntry { - /// The human-readable name. pub name: String, - /// The 64-byte stealth meta-address (spending_pubkey || viewing_pubkey). pub stealth_meta_address: Bytes, - /// The registrant address (for auth). pub owner: Address, } +/// Guardian configuration for a name. +#[contracttype] +#[derive(Clone)] +pub struct GuardianConfig { + pub guardians: Vec
, + pub threshold: u32, +} + +/// A pending recovery proposal. +#[contracttype] +#[derive(Clone)] +pub struct RecoveryProposal { + pub new_owner: Address, + pub new_meta_address: Bytes, + pub proposed_at: u32, + pub approvals: Vec
, +} + /// Errors. #[contracterror] #[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] @@ -39,6 +60,14 @@ pub enum NamesError { InvalidMetaAddress = 5, NameNotFound = 6, NotOwner = 7, + NotGuardian = 8, + NoProposal = 9, + ProposalAlreadyExists = 10, + AlreadyApproved = 11, + DelayNotElapsed = 12, + ThresholdNotMet = 13, + TooManyGuardians = 14, + InvalidThreshold = 15, } #[contract] @@ -47,12 +76,6 @@ pub struct WraithNamesContract; #[contractimpl] impl WraithNamesContract { /// Register a name mapped to a stealth meta-address. - /// The caller (owner) must authorize. Ownership is tied to the caller's address. - /// - /// # Arguments - /// * `owner` - The address registering the name (must authorize). - /// * `name` - The human-readable name (lowercase alphanumeric, 3-32 chars). - /// * `stealth_meta_address` - 64-byte stealth meta-address. pub fn register( env: Env, owner: Address, @@ -69,7 +92,6 @@ impl WraithNamesContract { let name_hash = Self::hash_name(&env, &name); let name_key = DataKey::Name(name_hash.clone()); - // Check not taken if env.storage().instance().has(&name_key) { return Err(NamesError::NameTaken); } @@ -77,12 +99,10 @@ impl WraithNamesContract { let entry = NameEntry { name: name.clone(), stealth_meta_address: stealth_meta_address.clone(), - owner: owner.clone(), + owner, }; - env.storage().instance().set(&name_key, &entry); - // Reverse lookup let meta_hash = BytesN::from_array(&env, &env.crypto().sha256(&stealth_meta_address).to_array()); env.storage() @@ -97,8 +117,7 @@ impl WraithNamesContract { Ok(()) } - /// Update the meta-address for an existing name. - /// Only the current owner can update. + /// Update the meta-address for an existing name. Only the current owner can update. pub fn update( env: Env, owner: Address, @@ -124,7 +143,6 @@ impl WraithNamesContract { return Err(NamesError::NotOwner); } - // Remove old reverse let old_meta_hash = BytesN::from_array( &env, &env.crypto().sha256(&entry.stealth_meta_address).to_array(), @@ -133,7 +151,6 @@ impl WraithNamesContract { .instance() .remove(&DataKey::Reverse(old_meta_hash)); - // Update let new_entry = NameEntry { name: name.clone(), stealth_meta_address: new_meta_address.clone(), @@ -141,7 +158,6 @@ impl WraithNamesContract { }; env.storage().instance().set(&name_key, &new_entry); - // New reverse let new_meta_hash = BytesN::from_array(&env, &env.crypto().sha256(&new_meta_address).to_array()); env.storage() @@ -173,7 +189,6 @@ impl WraithNamesContract { return Err(NamesError::NotOwner); } - // Remove reverse let meta_hash = BytesN::from_array( &env, &env.crypto().sha256(&entry.stealth_meta_address).to_array(), @@ -181,9 +196,13 @@ impl WraithNamesContract { env.storage() .instance() .remove(&DataKey::Reverse(meta_hash)); - - // Remove name env.storage().instance().remove(&name_key); + env.storage() + .instance() + .remove(&DataKey::Guardians(name_hash.clone())); + env.storage() + .instance() + .remove(&DataKey::Recovery(name_hash.clone())); env.events() .publish((symbol_short!("release"), name_hash), name); @@ -219,7 +238,218 @@ impl WraithNamesContract { Ok(entry.name) } - /// Hash a name string to BytesN<32> for use as storage key. + /// Set guardians and threshold for a name. Caller must be the current owner. + /// Clears any pending recovery proposal. + pub fn set_guardians( + env: Env, + name: String, + guardians: Vec
, + threshold: u32, + ) -> Result<(), NamesError> { + let name_hash = Self::hash_name(&env, &name); + let entry: NameEntry = env + .storage() + .instance() + .get(&DataKey::Name(name_hash.clone())) + .ok_or(NamesError::NameNotFound)?; + + entry.owner.require_auth(); + + if guardians.len() > 7 { + return Err(NamesError::TooManyGuardians); + } + if threshold < 1 || threshold > guardians.len() { + return Err(NamesError::InvalidThreshold); + } + + env.storage().instance().set( + &DataKey::Guardians(name_hash.clone()), + &GuardianConfig { guardians, threshold }, + ); + env.storage() + .instance() + .remove(&DataKey::Recovery(name_hash)); + + Ok(()) + } + + /// Propose a recovery. `proposer` must be a guardian. No pending proposal may exist. + pub fn propose_recovery( + env: Env, + proposer: Address, + name: String, + new_owner: Address, + new_meta_address: Bytes, + ) -> Result<(), NamesError> { + proposer.require_auth(); + + if new_meta_address.len() != 64 { + return Err(NamesError::InvalidMetaAddress); + } + + let name_hash = Self::hash_name(&env, &name); + + // Name must exist. + if !env + .storage() + .instance() + .has(&DataKey::Name(name_hash.clone())) + { + return Err(NamesError::NameNotFound); + } + + let config: GuardianConfig = env + .storage() + .instance() + .get(&DataKey::Guardians(name_hash.clone())) + .ok_or(NamesError::NotGuardian)?; + + if !Self::is_guardian(&proposer, &config.guardians) { + return Err(NamesError::NotGuardian); + } + + if env + .storage() + .instance() + .has(&DataKey::Recovery(name_hash.clone())) + { + return Err(NamesError::ProposalAlreadyExists); + } + + let proposal = RecoveryProposal { + new_owner, + new_meta_address, + proposed_at: env.ledger().sequence(), + approvals: Vec::from_array(&env, [proposer]), + }; + env.storage() + .instance() + .set(&DataKey::Recovery(name_hash), &proposal); + + Ok(()) + } + + /// Approve a pending recovery. `approver` must be a guardian not already in approvals. + /// If threshold met and delay elapsed, executes the recovery. + pub fn approve_recovery(env: Env, approver: Address, name: String) -> Result<(), NamesError> { + approver.require_auth(); + + let name_hash = Self::hash_name(&env, &name); + + let config: GuardianConfig = env + .storage() + .instance() + .get(&DataKey::Guardians(name_hash.clone())) + .ok_or(NamesError::NotGuardian)?; + + if !Self::is_guardian(&approver, &config.guardians) { + return Err(NamesError::NotGuardian); + } + + let mut proposal: RecoveryProposal = env + .storage() + .instance() + .get(&DataKey::Recovery(name_hash.clone())) + .ok_or(NamesError::NoProposal)?; + + for i in 0..proposal.approvals.len() { + if proposal.approvals.get_unchecked(i) == approver { + return Err(NamesError::AlreadyApproved); + } + } + + proposal.approvals.push_back(approver); + + let threshold_met = proposal.approvals.len() >= config.threshold; + let delay_elapsed = env.ledger().sequence() >= proposal.proposed_at + DELAY_WINDOW; + + if threshold_met && delay_elapsed { + let name_key = DataKey::Name(name_hash.clone()); + let entry: NameEntry = env + .storage() + .instance() + .get(&name_key) + .ok_or(NamesError::NameNotFound)?; + + // Update reverse lookup. + let old_meta_hash = BytesN::from_array( + &env, + &env.crypto().sha256(&entry.stealth_meta_address).to_array(), + ); + env.storage() + .instance() + .remove(&DataKey::Reverse(old_meta_hash)); + + let new_meta_hash = BytesN::from_array( + &env, + &env.crypto().sha256(&proposal.new_meta_address).to_array(), + ); + env.storage() + .instance() + .set(&DataKey::Reverse(new_meta_hash), &name_hash); + + env.storage().instance().set( + &name_key, + &NameEntry { + name: entry.name, + stealth_meta_address: proposal.new_meta_address, + owner: proposal.new_owner, + }, + ); + env.storage() + .instance() + .remove(&DataKey::Recovery(name_hash.clone())); + env.storage() + .instance() + .remove(&DataKey::Guardians(name_hash)); + } else { + env.storage() + .instance() + .set(&DataKey::Recovery(name_hash), &proposal); + } + + Ok(()) + } + + /// Cancel a pending recovery. Caller must be the current owner and within the delay window. + pub fn cancel_recovery(env: Env, name: String) -> Result<(), NamesError> { + let name_hash = Self::hash_name(&env, &name); + let entry: NameEntry = env + .storage() + .instance() + .get(&DataKey::Name(name_hash.clone())) + .ok_or(NamesError::NameNotFound)?; + + entry.owner.require_auth(); + + let proposal: RecoveryProposal = env + .storage() + .instance() + .get(&DataKey::Recovery(name_hash.clone())) + .ok_or(NamesError::NoProposal)?; + + if env.ledger().sequence() >= proposal.proposed_at + DELAY_WINDOW { + return Err(NamesError::DelayNotElapsed); + } + + env.storage() + .instance() + .remove(&DataKey::Recovery(name_hash)); + + Ok(()) + } + + // ── helpers ────────────────────────────────────────────────────────────── + + fn is_guardian(addr: &Address, guardians: &Vec
) -> bool { + for i in 0..guardians.len() { + if guardians.get_unchecked(i) == *addr { + return true; + } + } + false + } + fn hash_name(env: &Env, name: &String) -> BytesN<32> { let len = name.len() as usize; let mut buf = [0u8; 32]; @@ -230,7 +460,6 @@ impl WraithNamesContract { BytesN::from_array(env, &env.crypto().sha256(&bytes).to_array()) } - /// Validate name: 3-32 chars, lowercase alphanumeric only. fn validate_name(_env: &Env, name: &String) -> Result<(), NamesError> { let len = name.len() as usize; if len < 3 { @@ -244,9 +473,7 @@ impl WraithNamesContract { name.copy_into_slice(&mut buf[..len]); for i in 0..len { let c = buf[i]; - let is_lower = c >= b'a' && c <= b'z'; - let is_digit = c >= b'0' && c <= b'9'; - if !is_lower && !is_digit { + if !(c >= b'a' && c <= b'z') && !(c >= b'0' && c <= b'9') { return Err(NamesError::InvalidNameCharacter); } } @@ -258,106 +485,245 @@ impl WraithNamesContract { #[cfg(test)] mod test { use super::*; - use soroban_sdk::testutils::Address as _; - use soroban_sdk::{Bytes, Env, String}; + use soroban_sdk::testutils::{Address as _, Ledger}; + use soroban_sdk::{Bytes, Env, String, Vec}; - #[test] - fn test_register_and_resolve() { + fn setup() -> (Env, soroban_sdk::Address, WraithNamesContractClient<'static>) { let env = Env::default(); env.mock_all_auths(); - + // Set min_persistent_entry_ttl large enough that instance storage + // never expires when we advance the ledger by DELAY_WINDOW. + env.ledger().with_mut(|li| { + li.min_persistent_entry_ttl = DELAY_WINDOW + 10_000; + li.max_entry_ttl = DELAY_WINDOW + 100_000; + }); let contract_id = env.register(WraithNamesContract, ()); let client = WraithNamesContractClient::new(&env, &contract_id); - let owner = Address::generate(&env); - let name = String::from_str(&env, "alice"); - let meta = Bytes::from_slice(&env, &[42u8; 64]); + (env, owner, client) + } - client.register(&owner, &name, &meta); + fn register_name<'a>( + env: &Env, + client: &WraithNamesContractClient<'a>, + owner: &Address, + name: &str, + meta: &[u8; 64], + ) { + let name_str = String::from_str(env, name); + let meta_bytes = Bytes::from_slice(env, meta); + client.register(owner, &name_str, &meta_bytes); + } - let resolved = client.resolve(&name); - assert_eq!(resolved, meta); + fn make_guardians(env: &Env, n: usize) -> Vec
{ + let mut v = Vec::new(env); + for _ in 0..n { + v.push_back(Address::generate(env)); + } + v } + /// 1. Happy path: propose → approve (threshold met after delay) → ownership transferred. #[test] - fn test_name_taken() { - let env = Env::default(); - env.mock_all_auths(); + fn test_happy_path_recovery() { + let (env, owner, client) = setup(); + let name = String::from_str(&env, "alice"); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "alice", &meta); - let contract_id = env.register(WraithNamesContract, ()); - let client = WraithNamesContractClient::new(&env, &contract_id); + let guardians = make_guardians(&env, 2); + let g0 = guardians.get_unchecked(0); + let g1 = guardians.get_unchecked(1); + client.set_guardians(&name, &guardians, &2); - let owner1 = Address::generate(&env); - let owner2 = Address::generate(&env); - let name = String::from_str(&env, "bob"); - let meta1 = Bytes::from_slice(&env, &[1u8; 64]); - let meta2 = Bytes::from_slice(&env, &[2u8; 64]); + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); + + // Propose at ledger 0. + client.propose_recovery(&g0, &name, &new_owner, &new_meta); + + // Advance ledger past delay window. + env.ledger().set_sequence_number(DELAY_WINDOW); - client.register(&owner1, &name, &meta1); - let result = client.try_register(&owner2, &name, &meta2); - assert_eq!(result, Err(Ok(NamesError::NameTaken))); + // Second guardian approves — threshold met and delay elapsed. + client.approve_recovery(&g1, &name); + + // Ownership transferred. + assert_eq!(client.resolve(&name), new_meta); } + /// 2. Insufficient approvals: threshold not reached, ownership unchanged. #[test] - fn test_name_of_reverse() { - let env = Env::default(); - env.mock_all_auths(); + fn test_insufficient_approvals() { + let (env, owner, client) = setup(); + let name = String::from_str(&env, "bob"); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "bob", &meta); - let contract_id = env.register(WraithNamesContract, ()); - let client = WraithNamesContractClient::new(&env, &contract_id); + let guardians = make_guardians(&env, 3); + let g0 = guardians.get_unchecked(0); + let g1 = guardians.get_unchecked(1); + client.set_guardians(&name, &guardians, &3); - let owner = Address::generate(&env); - let name = String::from_str(&env, "charlie"); - let meta = Bytes::from_slice(&env, &[99u8; 64]); + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); + + client.propose_recovery(&g0, &name, &new_owner, &new_meta); + env.ledger().set_sequence_number(DELAY_WINDOW); - client.register(&owner, &name, &meta); + // Only one more approval (2 total, threshold 3). + client.approve_recovery(&g1, &name); - let found_name = client.name_of(&meta); - assert_eq!(found_name, name); + // Ownership unchanged. + assert_eq!(client.resolve(&name), Bytes::from_slice(&env, &meta)); } + /// 3. Delay not elapsed: threshold reached but ledger < proposed_at + DELAY_WINDOW. #[test] - fn test_release() { - let env = Env::default(); - env.mock_all_auths(); + fn test_delay_not_elapsed() { + let (env, owner, client) = setup(); + let name = String::from_str(&env, "carol"); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "carol", &meta); - let contract_id = env.register(WraithNamesContract, ()); - let client = WraithNamesContractClient::new(&env, &contract_id); + let guardians = make_guardians(&env, 2); + let g0 = guardians.get_unchecked(0); + let g1 = guardians.get_unchecked(1); + client.set_guardians(&name, &guardians, &2); - let owner = Address::generate(&env); + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); + + client.propose_recovery(&g0, &name, &new_owner, &new_meta); + + // Do NOT advance ledger — delay not elapsed. + client.approve_recovery(&g1, &name); + + // Ownership unchanged. + assert_eq!(client.resolve(&name), Bytes::from_slice(&env, &meta)); + } + + /// 4. Cancel by owner within window: subsequent approve_recovery fails with NoProposal. + #[test] + fn test_cancel_recovery() { + let (env, owner, client) = setup(); let name = String::from_str(&env, "dave"); - let meta = Bytes::from_slice(&env, &[88u8; 64]); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "dave", &meta); + + let guardians = make_guardians(&env, 2); + let g0 = guardians.get_unchecked(0); + let g1 = guardians.get_unchecked(1); + client.set_guardians(&name, &guardians, &2); - client.register(&owner, &name, &meta); - client.release(&owner, &name); + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); - let result = client.try_resolve(&name); - assert_eq!(result, Err(Ok(NamesError::NameNotFound))); + client.propose_recovery(&g0, &name, &new_owner, &new_meta); + client.cancel_recovery(&name); - // Can re-register after release - let owner2 = Address::generate(&env); - let meta2 = Bytes::from_slice(&env, &[77u8; 64]); - client.register(&owner2, &name, &meta2); - assert_eq!(client.resolve(&name), meta2); + let result = client.try_approve_recovery(&g1, &name); + assert_eq!(result, Err(Ok(NamesError::NoProposal))); } + /// 5. Non-guardian cannot call propose_recovery or approve_recovery. #[test] - fn test_invalid_name() { - let env = Env::default(); - env.mock_all_auths(); + fn test_non_guardian_rejected() { + let (env, owner, client) = setup(); + let name = String::from_str(&env, "eve"); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "eve", &meta); - let contract_id = env.register(WraithNamesContract, ()); - let client = WraithNamesContractClient::new(&env, &contract_id); + let guardians = make_guardians(&env, 1); + let g0 = guardians.get_unchecked(0); + client.set_guardians(&name, &guardians, &1); - let owner = Address::generate(&env); - let meta = Bytes::from_slice(&env, &[1u8; 64]); + let outsider = Address::generate(&env); + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); + + let result = client.try_propose_recovery(&outsider, &name, &new_owner, &new_meta); + assert_eq!(result, Err(Ok(NamesError::NotGuardian))); + + // Propose legitimately so we can test approve by non-guardian. + client.propose_recovery(&g0, &name, &new_owner, &new_meta); + + let result = client.try_approve_recovery(&outsider, &name); + assert_eq!(result, Err(Ok(NamesError::NotGuardian))); + } + + /// 6. Double approval by same guardian returns AlreadyApproved. + #[test] + fn test_double_approval() { + let (env, owner, client) = setup(); + let name = String::from_str(&env, "frank"); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "frank", &meta); + + let guardians = make_guardians(&env, 2); + let g0 = guardians.get_unchecked(0); + client.set_guardians(&name, &guardians, &2); + + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); + + client.propose_recovery(&g0, &name, &new_owner, &new_meta); + + let result = client.try_approve_recovery(&g0, &name); + assert_eq!(result, Err(Ok(NamesError::AlreadyApproved))); + } + + /// 7. After successful recovery, old proposal is cleared (double recovery attempt fails). + #[test] + fn test_proposal_cleared_after_recovery() { + let (env, owner, client) = setup(); + let name = String::from_str(&env, "grace"); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "grace", &meta); + + // Use 2 guardians, threshold 1: g0 proposes (auto-approved), g1 approves after delay. + let guardians = make_guardians(&env, 2); + let g0 = guardians.get_unchecked(0); + let g1 = guardians.get_unchecked(1); + client.set_guardians(&name, &guardians, &1); + + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); + + client.propose_recovery(&g0, &name, &new_owner, &new_meta); + env.ledger().set_sequence_number(DELAY_WINDOW); + // g1 approves: threshold met (1 existing + 1 new = 2 >= 1) and delay elapsed. + client.approve_recovery(&g1, &name); + + // Recovery executed; proposal and guardians cleared. + // Trying to approve again should fail with NotGuardian (config cleared). + let result = client.try_approve_recovery(&g0, &name); + assert_eq!(result, Err(Ok(NamesError::NotGuardian))); + } + + /// 8. set_guardians clears any pending proposal. + #[test] + fn test_set_guardians_clears_proposal() { + let (env, owner, client) = setup(); + let name = String::from_str(&env, "henry"); + let meta = [1u8; 64]; + register_name(&env, &client, &owner, "henry", &meta); + + let guardians = make_guardians(&env, 2); + let g0 = guardians.get_unchecked(0); + client.set_guardians(&name, &guardians, &2); + + let new_owner = Address::generate(&env); + let new_meta = Bytes::from_slice(&env, &[2u8; 64]); + + client.propose_recovery(&g0, &name, &new_owner, &new_meta); - // Too short - let result = client.try_register(&owner, &String::from_str(&env, "ab"), &meta); - assert_eq!(result, Err(Ok(NamesError::NameTooShort))); + // Owner resets guardians — should clear the proposal. + let new_guardians = make_guardians(&env, 1); + client.set_guardians(&name, &new_guardians, &1); - // Invalid chars - let result = client.try_register(&owner, &String::from_str(&env, "Alice"), &meta); - assert_eq!(result, Err(Ok(NamesError::InvalidNameCharacter))); + // Old guardian can no longer approve (proposal cleared, and they're not in new config). + let result = client.try_approve_recovery(&g0, &name); + assert_eq!(result, Err(Ok(NamesError::NotGuardian))); } } diff --git a/stellar/wraith-names/test_snapshots/test/test_cancel_recovery.1.json b/stellar/wraith-names/test_snapshots/test/test_cancel_recovery.1.json new file mode 100644 index 0000000..7012725 --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_cancel_recovery.1.json @@ -0,0 +1,407 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "dave" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "dave" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + { + "u32": 2 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "dave" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "cancel_recovery", + "args": [ + { + "string": "dave" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Guardians" + }, + { + "bytes": "61ea0803f8853523b777d414ace3130cd4d3f92de2cd7ff8695c337d79c2eeee" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "guardians" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 2 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "61ea0803f8853523b777d414ace3130cd4d3f92de2cd7ff8695c337d79c2eeee" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "dave" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "7c8975e1e60a5c8337f28edf8c33c3b180360b7279644a9bc1af3c51e6220bf5" + } + ] + }, + "val": { + "bytes": "61ea0803f8853523b777d414ace3130cd4d3f92de2cd7ff8695c337d79c2eeee" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/stellar/wraith-names/test_snapshots/test/test_delay_not_elapsed.1.json b/stellar/wraith-names/test_snapshots/test/test_delay_not_elapsed.1.json new file mode 100644 index 0000000..40551ee --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_delay_not_elapsed.1.json @@ -0,0 +1,465 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "carol" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "carol" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + { + "u32": 2 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "carol" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "approve_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "carol" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Guardians" + }, + { + "bytes": "4c26d9074c27d89ede59270c0ac14b71e071b15239519f75474b2f3ba63481f5" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "guardians" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 2 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "4c26d9074c27d89ede59270c0ac14b71e071b15239519f75474b2f3ba63481f5" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "carol" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Recovery" + }, + { + "bytes": "4c26d9074c27d89ede59270c0ac14b71e071b15239519f75474b2f3ba63481f5" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "approvals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "new_meta_address" + }, + "val": { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + }, + { + "key": { + "symbol": "new_owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "proposed_at" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "7c8975e1e60a5c8337f28edf8c33c3b180360b7279644a9bc1af3c51e6220bf5" + } + ] + }, + "val": { + "bytes": "4c26d9074c27d89ede59270c0ac14b71e071b15239519f75474b2f3ba63481f5" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/stellar/wraith-names/test_snapshots/test/test_double_approval.1.json b/stellar/wraith-names/test_snapshots/test/test_double_approval.1.json new file mode 100644 index 0000000..69294b3 --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_double_approval.1.json @@ -0,0 +1,407 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "frank" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "frank" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + { + "u32": 2 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "frank" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Guardians" + }, + { + "bytes": "77646f5a4f3166637627abe998e7a1470fe72d8b430f067dafa86263f1f23f94" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "guardians" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 2 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "77646f5a4f3166637627abe998e7a1470fe72d8b430f067dafa86263f1f23f94" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "frank" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Recovery" + }, + { + "bytes": "77646f5a4f3166637627abe998e7a1470fe72d8b430f067dafa86263f1f23f94" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "approvals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + { + "key": { + "symbol": "new_meta_address" + }, + "val": { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + }, + { + "key": { + "symbol": "new_owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "proposed_at" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "7c8975e1e60a5c8337f28edf8c33c3b180360b7279644a9bc1af3c51e6220bf5" + } + ] + }, + "val": { + "bytes": "77646f5a4f3166637627abe998e7a1470fe72d8b430f067dafa86263f1f23f94" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/stellar/wraith-names/test_snapshots/test/test_happy_path_recovery.1.json b/stellar/wraith-names/test_snapshots/test/test_happy_path_recovery.1.json new file mode 100644 index 0000000..05361e0 --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_happy_path_recovery.1.json @@ -0,0 +1,371 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "alice" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "alice" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + { + "u32": 2 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "alice" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "approve_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "alice" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 100000, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "alice" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "f83b332be4e6a5a4b1c56aaf6db52657da495e149870057d8590ab9d7a6167ad" + } + ] + }, + "val": { + "bytes": "2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 299999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/stellar/wraith-names/test_snapshots/test/test_insufficient_approvals.1.json b/stellar/wraith-names/test_snapshots/test/test_insufficient_approvals.1.json new file mode 100644 index 0000000..88c9f83 --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_insufficient_approvals.1.json @@ -0,0 +1,471 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "bob" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "bob" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + { + "u32": 3 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "bob" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "approve_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "bob" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 100000, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Guardians" + }, + { + "bytes": "81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "guardians" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 3 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "bob" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Recovery" + }, + { + "bytes": "81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "approvals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "new_meta_address" + }, + "val": { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + }, + { + "key": { + "symbol": "new_owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "proposed_at" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "7c8975e1e60a5c8337f28edf8c33c3b180360b7279644a9bc1af3c51e6220bf5" + } + ] + }, + "val": { + "bytes": "81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 299999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/stellar/wraith-names/test_snapshots/test/test_non_guardian_rejected.1.json b/stellar/wraith-names/test_snapshots/test/test_non_guardian_rejected.1.json new file mode 100644 index 0000000..55fa948 --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_non_guardian_rejected.1.json @@ -0,0 +1,402 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "eve" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "eve" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + }, + { + "u32": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "eve" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Guardians" + }, + { + "bytes": "85262adf74518bbb70c7cb94cd6159d91669e5a81edf1efebd543eadbda9fa2b" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "guardians" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 1 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "85262adf74518bbb70c7cb94cd6159d91669e5a81edf1efebd543eadbda9fa2b" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "eve" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Recovery" + }, + { + "bytes": "85262adf74518bbb70c7cb94cd6159d91669e5a81edf1efebd543eadbda9fa2b" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "approvals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + ] + } + }, + { + "key": { + "symbol": "new_meta_address" + }, + "val": { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + }, + { + "key": { + "symbol": "new_owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "proposed_at" + }, + "val": { + "u32": 0 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "7c8975e1e60a5c8337f28edf8c33c3b180360b7279644a9bc1af3c51e6220bf5" + } + ] + }, + "val": { + "bytes": "85262adf74518bbb70c7cb94cd6159d91669e5a81edf1efebd543eadbda9fa2b" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/stellar/wraith-names/test_snapshots/test/test_proposal_cleared_after_recovery.1.json b/stellar/wraith-names/test_snapshots/test/test_proposal_cleared_after_recovery.1.json new file mode 100644 index 0000000..5e8b39c --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_proposal_cleared_after_recovery.1.json @@ -0,0 +1,371 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "grace" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "grace" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + { + "u32": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "grace" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "approve_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "grace" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 100000, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "e010fd1ce1acc173e3b4835b7635f8d4600d774869102adb5cb7b5d7895649ba" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "grace" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "f83b332be4e6a5a4b1c56aaf6db52657da495e149870057d8590ab9d7a6167ad" + } + ] + }, + "val": { + "bytes": "e010fd1ce1acc173e3b4835b7635f8d4600d774869102adb5cb7b5d7895649ba" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 299999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/stellar/wraith-names/test_snapshots/test/test_set_guardians_clears_proposal.1.json b/stellar/wraith-names/test_snapshots/test/test_set_guardians_clears_proposal.1.json new file mode 100644 index 0000000..7271328 --- /dev/null +++ b/stellar/wraith-names/test_snapshots/test/test_set_guardians_clears_proposal.1.json @@ -0,0 +1,414 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "register", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + }, + { + "string": "henry" + }, + { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "henry" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + { + "u32": 2 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "propose_recovery", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + }, + { + "string": "henry" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "bytes": "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "set_guardians", + "args": [ + { + "string": "henry" + }, + { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + { + "u32": 1 + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "sequence_number": 0, + "timestamp": 0, + "network_id": "0000000000000000000000000000000000000000000000000000000000000000", + "base_reserve": 0, + "min_persistent_entry_ttl": 110000, + "min_temp_entry_ttl": 16, + "max_entry_ttl": 200000, + "ledger_entries": [ + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Guardians" + }, + { + "bytes": "927a3aed189d610b2e151c4208913b3ed0cb38f6be613756819b1513c8924d7f" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "guardians" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + { + "key": { + "symbol": "threshold" + }, + "val": { + "u32": 1 + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Name" + }, + { + "bytes": "927a3aed189d610b2e151c4208913b3ed0cb38f6be613756819b1513c8924d7f" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "name" + }, + "val": { + "string": "henry" + } + }, + { + "key": { + "symbol": "owner" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "stealth_meta_address" + }, + "val": { + "bytes": "01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Reverse" + }, + { + "bytes": "7c8975e1e60a5c8337f28edf8c33c3b180360b7279644a9bc1af3c51e6220bf5" + } + ] + }, + "val": { + "bytes": "927a3aed189d610b2e151c4208913b3ed0cb38f6be613756819b1513c8924d7f" + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 109999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 199999 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 109999 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file