diff --git a/Cargo.toml b/Cargo.toml
index 2eb5125..defec36 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,6 +4,7 @@ members = [
"savings_goals",
"bill_payments",
"insurance",
+ "family_wallet",
]
resolver = "2"
diff --git a/family_wallet/Cargo.toml b/family_wallet/Cargo.toml
new file mode 100644
index 0000000..0fb8a18
--- /dev/null
+++ b/family_wallet/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "family_wallet"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+crate-type = ["cdylib", "rlib"]
+
+[dependencies]
+soroban-sdk = "21.0.0"
+
+[dev-dependencies]
+soroban-sdk = { version = "21.0.0", features = ["testutils"] }
+
diff --git a/family_wallet/src/lib.rs b/family_wallet/src/lib.rs
new file mode 100644
index 0000000..c9386dc
--- /dev/null
+++ b/family_wallet/src/lib.rs
@@ -0,0 +1,968 @@
+#![no_std]
+use soroban_sdk::{
+ contract, contracterror, contractimpl, contracttype, symbol_short, token::TokenClient, Address,
+ Env, Map, Symbol, Vec,
+};
+
+// Storage TTL constants
+const INSTANCE_LIFETIME_THRESHOLD: u32 = 17280; // ~1 day
+const INSTANCE_BUMP_AMOUNT: u32 = 518400; // ~30 days
+
+// Signature expiration time (24 hours in seconds)
+const SIGNATURE_EXPIRATION: u64 = 86400;
+
+/// Transaction types that may require multi-signature approval
+#[contracttype]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord)]
+#[repr(u32)]
+pub enum TransactionType {
+ LargeWithdrawal = 1,
+ SplitConfigChange = 2,
+ RoleChange = 3,
+ EmergencyTransfer = 4,
+ PolicyCancellation = 5,
+ RegularWithdrawal = 6, // Below threshold, no multi-sig needed
+}
+
+/// Family member roles
+#[contracttype]
+#[derive(Clone, Copy, Debug, Eq, PartialEq, PartialOrd, Ord)]
+#[repr(u32)]
+pub enum FamilyRole {
+ Owner = 1,
+ Admin = 2,
+ Member = 3,
+}
+
+/// Multi-signature configuration for a transaction type
+#[contracttype]
+#[derive(Clone)]
+pub struct MultiSigConfig {
+ pub threshold: u32, // Number of signatures required (e.g., 2 for 2-of-3)
+ pub signers: Vec
, // List of authorized signers
+ pub spending_limit: i128, // Amount threshold requiring multi-sig
+}
+
+/// Pending transaction awaiting signatures
+#[contracttype]
+#[derive(Clone)]
+pub struct PendingTransaction {
+ pub tx_id: u64,
+ pub tx_type: TransactionType,
+ pub proposer: Address,
+ pub signatures: Vec, // Vec instead of Set (Soroban doesn't have Set)
+ pub created_at: u64,
+ pub expires_at: u64,
+ pub data: TransactionData,
+}
+
+/// Transaction data payload - using tuple variants for Soroban compatibility
+#[contracttype]
+#[derive(Clone)]
+pub enum TransactionData {
+ Withdrawal(Address, Address, i128), // (token, recipient, amount)
+ SplitConfigChange(u32, u32, u32, u32), // (spending, savings, bills, insurance)
+ RoleChange(Address, FamilyRole), // (member, new_role)
+ EmergencyTransfer(Address, Address, i128), // (token, recipient, amount)
+ PolicyCancellation(u32), // (policy_id)
+}
+
+/// Family member information
+#[contracttype]
+#[derive(Clone)]
+pub struct FamilyMember {
+ pub address: Address,
+ pub role: FamilyRole,
+ pub added_at: u64,
+}
+
+/// Emergency transfer configuration
+#[contracttype]
+#[derive(Clone)]
+pub struct EmergencyConfig {
+ /// Maximum amount allowed per emergency transfer
+ pub max_amount: i128,
+ /// Cooldown period in seconds between emergency transfers
+ pub cooldown: u64,
+ /// Required minimum balance remaining after emergency transfer
+ pub min_balance: i128,
+}
+
+/// Events for emergency mode and transfers (for notifications / audit trail)
+#[contracttype]
+#[derive(Clone)]
+pub enum EmergencyEvent {
+ ModeOn,
+ ModeOff,
+ TransferInit,
+ TransferExec,
+}
+
+/// Multi-signature wallet contract
+#[contract]
+pub struct FamilyWallet;
+
+#[contracterror]
+#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]
+#[repr(u32)]
+pub enum Error {
+ Unauthorized = 1,
+ InvalidThreshold = 2,
+ InvalidSigner = 3,
+ TransactionNotFound = 4,
+ TransactionExpired = 5,
+ InsufficientSignatures = 6,
+ DuplicateSignature = 7,
+ InvalidTransactionType = 8,
+ InvalidAmount = 9,
+ InvalidRole = 10,
+ MemberNotFound = 11,
+ TransactionAlreadyExecuted = 12,
+ InvalidSpendingLimit = 13,
+}
+
+#[contractimpl]
+impl FamilyWallet {
+ /// Initialize the family wallet
+ pub fn init(env: Env, owner: Address, initial_members: Vec) -> bool {
+ owner.require_auth();
+
+ // Check if already initialized
+ let existing: Option = env.storage().instance().get(&symbol_short!("OWNER"));
+
+ if existing.is_some() {
+ panic!("Wallet already initialized");
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ // Store owner
+ env.storage()
+ .instance()
+ .set(&symbol_short!("OWNER"), &owner);
+
+ // Initialize members map
+ let mut members: Map = Map::new(&env);
+ let timestamp = env.ledger().timestamp();
+
+ // Add owner as Owner role
+ members.set(
+ owner.clone(),
+ FamilyMember {
+ address: owner.clone(),
+ role: FamilyRole::Owner,
+ added_at: timestamp,
+ },
+ );
+
+ // Add initial members as Member role
+ for member_addr in initial_members.iter() {
+ members.set(
+ member_addr.clone(),
+ FamilyMember {
+ address: member_addr.clone(),
+ role: FamilyRole::Member,
+ added_at: timestamp,
+ },
+ );
+ }
+
+ env.storage()
+ .instance()
+ .set(&symbol_short!("MEMBERS"), &members);
+
+ // Initialize multi-sig configs with defaults
+ let default_config = MultiSigConfig {
+ threshold: 2,
+ signers: Vec::new(&env),
+ spending_limit: 1000_0000000, // 1000 tokens (assuming 7 decimals)
+ };
+
+ // Set default configs for each transaction type
+ for tx_type in [
+ TransactionType::LargeWithdrawal,
+ TransactionType::SplitConfigChange,
+ TransactionType::RoleChange,
+ TransactionType::EmergencyTransfer,
+ TransactionType::PolicyCancellation,
+ ] {
+ env.storage()
+ .instance()
+ .set(&Self::get_config_key(tx_type), &default_config.clone());
+ }
+
+ // Initialize pending transactions map
+ env.storage().instance().set(
+ &symbol_short!("PEND_TXS"),
+ &Map::::new(&env),
+ );
+
+ // Initialize executed transactions map (for replay prevention)
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EXEC_TXS"), &Map::::new(&env));
+
+ // Initialize next transaction ID
+ env.storage()
+ .instance()
+ .set(&symbol_short!("NEXT_TX"), &1u64);
+
+ // Initialize default emergency configuration
+ let em_config = EmergencyConfig {
+ max_amount: 1000_0000000, // default: 1000 tokens
+ cooldown: 3600, // default: 1 hour
+ min_balance: 0, // default: no minimum balance
+ };
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EM_CONF"), &em_config);
+ // Emergency mode off by default
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EM_MODE"), &false);
+ // No emergency transfer has happened yet
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EM_LAST"), &0u64);
+
+ true
+ }
+
+ /// Configure multi-signature settings for a transaction type
+ pub fn configure_multisig(
+ env: Env,
+ caller: Address,
+ tx_type: TransactionType,
+ threshold: u32,
+ signers: Vec,
+ spending_limit: i128,
+ ) -> bool {
+ caller.require_auth();
+
+ // Verify caller is Owner or Admin
+ if !Self::is_owner_or_admin(&env, &caller) {
+ panic!("Only Owner or Admin can configure multi-sig");
+ }
+
+ // Validate threshold
+ if threshold == 0 || threshold > signers.len() {
+ panic!("Invalid threshold");
+ }
+
+ // Validate signers are family members
+ let members: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("MEMBERS"))
+ .expect("Wallet not initialized");
+
+ for signer in signers.iter() {
+ if members.get(signer.clone()).is_none() {
+ panic!("Signer must be a family member");
+ }
+ }
+
+ // Validate spending limit
+ if spending_limit < 0 {
+ panic!("Spending limit must be non-negative");
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ let config = MultiSigConfig {
+ threshold,
+ signers: signers.clone(),
+ spending_limit,
+ };
+
+ env.storage()
+ .instance()
+ .set(&Self::get_config_key(tx_type), &config);
+
+ true
+ }
+
+ /// Propose a transaction requiring multi-signature approval
+ pub fn propose_transaction(
+ env: Env,
+ proposer: Address,
+ tx_type: TransactionType,
+ data: TransactionData,
+ ) -> u64 {
+ proposer.require_auth();
+
+ // Verify proposer is a family member
+ if !Self::is_family_member(&env, &proposer) {
+ panic!("Only family members can propose transactions");
+ }
+
+ // For withdrawals, use LargeWithdrawal config to check spending limit
+ // For other types, use their own config
+ let config_key = match tx_type {
+ TransactionType::RegularWithdrawal => {
+ Self::get_config_key(TransactionType::LargeWithdrawal)
+ }
+ _ => Self::get_config_key(tx_type),
+ };
+
+ // Check if transaction requires multi-sig
+ let config: MultiSigConfig = env
+ .storage()
+ .instance()
+ .get(&config_key)
+ .expect("Multi-sig config not found");
+
+ // For withdrawals, check if amount exceeds spending limit
+ let requires_multisig = match (&tx_type, &data) {
+ (TransactionType::RegularWithdrawal, TransactionData::Withdrawal(_, _, amount)) => {
+ *amount > config.spending_limit
+ }
+ (TransactionType::LargeWithdrawal, _) => true,
+ (TransactionType::RegularWithdrawal, _) => false,
+ _ => true, // All other types require multi-sig
+ };
+
+ if !requires_multisig {
+ // Execute immediately for regular withdrawals below threshold
+ // Auth already required in propose_transaction, so don't require again
+ return Self::execute_transaction_internal(&env, &proposer, &tx_type, &data, false);
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ // Get next transaction ID
+ let mut next_tx_id: u64 = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("NEXT_TX"))
+ .unwrap_or(1);
+
+ let tx_id = next_tx_id;
+ next_tx_id += 1;
+
+ env.storage()
+ .instance()
+ .set(&symbol_short!("NEXT_TX"), &next_tx_id);
+
+ // Create pending transaction
+ let timestamp = env.ledger().timestamp();
+ let mut signatures = Vec::new(&env);
+ signatures.push_back(proposer.clone()); // Proposer auto-signs
+
+ let pending_tx = PendingTransaction {
+ tx_id,
+ tx_type,
+ proposer: proposer.clone(),
+ signatures,
+ created_at: timestamp,
+ expires_at: timestamp + SIGNATURE_EXPIRATION,
+ data: data.clone(),
+ };
+
+ // Store pending transaction
+ let mut pending_txs: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("PEND_TXS"))
+ .expect("Pending transactions map not initialized");
+
+ pending_txs.set(tx_id, pending_tx);
+ env.storage()
+ .instance()
+ .set(&symbol_short!("PEND_TXS"), &pending_txs);
+
+ tx_id
+ }
+
+ /// Sign a pending transaction
+ pub fn sign_transaction(env: Env, signer: Address, tx_id: u64) -> bool {
+ signer.require_auth();
+
+ // Verify signer is a family member
+ if !Self::is_family_member(&env, &signer) {
+ panic!("Only family members can sign transactions");
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ // Get pending transaction
+ let mut pending_txs: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("PEND_TXS"))
+ .expect("Pending transactions map not initialized");
+
+ let mut pending_tx = pending_txs.get(tx_id).expect("Transaction not found");
+
+ // Check if transaction expired
+ let current_time = env.ledger().timestamp();
+ if current_time > pending_tx.expires_at {
+ panic!("Transaction expired");
+ }
+
+ // Check if already signed (check Vec for duplicates)
+ for sig in pending_tx.signatures.iter() {
+ if sig.clone() == signer {
+ panic!("Already signed this transaction");
+ }
+ }
+
+ // Get multi-sig config
+ let config: MultiSigConfig = env
+ .storage()
+ .instance()
+ .get(&Self::get_config_key(pending_tx.tx_type))
+ .expect("Multi-sig config not found");
+
+ // Verify signer is authorized
+ let mut is_authorized = false;
+ for authorized_signer in config.signers.iter() {
+ if authorized_signer.clone() == signer {
+ is_authorized = true;
+ break;
+ }
+ }
+
+ if !is_authorized {
+ panic!("Signer not authorized for this transaction type");
+ }
+
+ // Add signature
+ pending_tx.signatures.push_back(signer.clone());
+
+ // Check if threshold met
+ if pending_tx.signatures.len() >= config.threshold {
+ // Execute transaction - require proposer auth since we're executing from sign_transaction
+ let executed = Self::execute_transaction_internal(
+ &env,
+ &pending_tx.proposer,
+ &pending_tx.tx_type,
+ &pending_tx.data,
+ true, // Require auth since proposer hasn't authorized in this call
+ );
+
+ if executed == 0 {
+ // Remove from pending
+ pending_txs.remove(tx_id);
+ env.storage()
+ .instance()
+ .set(&symbol_short!("PEND_TXS"), &pending_txs);
+
+ // Add to executed map (for replay prevention)
+ let mut executed_txs: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("EXEC_TXS"))
+ .expect("Executed transactions map not initialized");
+
+ executed_txs.set(tx_id, true);
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EXEC_TXS"), &executed_txs);
+ }
+
+ return true;
+ }
+
+ // Update pending transaction
+ pending_txs.set(tx_id, pending_tx);
+ env.storage()
+ .instance()
+ .set(&symbol_short!("PEND_TXS"), &pending_txs);
+
+ true
+ }
+
+ /// Execute a large withdrawal (requires multi-sig)
+ pub fn withdraw(
+ env: Env,
+ proposer: Address,
+ token: Address,
+ recipient: Address,
+ amount: i128,
+ ) -> u64 {
+ if amount <= 0 {
+ panic!("Amount must be positive");
+ }
+
+ let config: MultiSigConfig = env
+ .storage()
+ .instance()
+ .get(&Self::get_config_key(TransactionType::LargeWithdrawal))
+ .expect("Multi-sig config not found");
+
+ let tx_type = if amount > config.spending_limit {
+ TransactionType::LargeWithdrawal
+ } else {
+ TransactionType::RegularWithdrawal
+ };
+
+ Self::propose_transaction(
+ env,
+ proposer,
+ tx_type,
+ TransactionData::Withdrawal(token, recipient, amount),
+ )
+ }
+
+ /// Execute a split configuration change (requires multi-sig)
+ pub fn propose_split_config_change(
+ env: Env,
+ proposer: Address,
+ spending_percent: u32,
+ savings_percent: u32,
+ bills_percent: u32,
+ insurance_percent: u32,
+ ) -> u64 {
+ // Validate percentages sum to 100
+ if spending_percent + savings_percent + bills_percent + insurance_percent != 100 {
+ panic!("Percentages must sum to 100");
+ }
+
+ Self::propose_transaction(
+ env,
+ proposer,
+ TransactionType::SplitConfigChange,
+ TransactionData::SplitConfigChange(
+ spending_percent,
+ savings_percent,
+ bills_percent,
+ insurance_percent,
+ ),
+ )
+ }
+
+ /// Propose a family member role change (requires multi-sig)
+ pub fn propose_role_change(
+ env: Env,
+ proposer: Address,
+ member: Address,
+ new_role: FamilyRole,
+ ) -> u64 {
+ Self::propose_transaction(
+ env,
+ proposer,
+ TransactionType::RoleChange,
+ TransactionData::RoleChange(member, new_role),
+ )
+ }
+
+ /// Propose an emergency transfer (requires multi-sig)
+ pub fn propose_emergency_transfer(
+ env: Env,
+ proposer: Address,
+ token: Address,
+ recipient: Address,
+ amount: i128,
+ ) -> u64 {
+ if amount <= 0 {
+ panic!("Amount must be positive");
+ }
+
+ // If emergency mode is enabled, execute with simplified approval
+ let em_mode: bool = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("EM_MODE"))
+ .unwrap_or(false);
+
+ if em_mode {
+ return Self::execute_emergency_transfer_now(env, proposer, token, recipient, amount);
+ }
+
+ Self::propose_transaction(
+ env,
+ proposer,
+ TransactionType::EmergencyTransfer,
+ TransactionData::EmergencyTransfer(token, recipient, amount),
+ )
+ }
+
+ /// Propose a policy cancellation (requires multi-sig)
+ pub fn propose_policy_cancellation(env: Env, proposer: Address, policy_id: u32) -> u64 {
+ Self::propose_transaction(
+ env,
+ proposer,
+ TransactionType::PolicyCancellation,
+ TransactionData::PolicyCancellation(policy_id),
+ )
+ }
+
+ /// Configure emergency transfer limits and rules
+ ///
+ /// Only Owner or Admin can update emergency configuration.
+ pub fn configure_emergency(
+ env: Env,
+ caller: Address,
+ max_amount: i128,
+ cooldown: u64,
+ min_balance: i128,
+ ) -> bool {
+ caller.require_auth();
+
+ if !Self::is_owner_or_admin(&env, &caller) {
+ panic!("Only Owner or Admin can configure emergency settings");
+ }
+
+ if max_amount <= 0 {
+ panic!("Emergency max amount must be positive");
+ }
+ if min_balance < 0 {
+ panic!("Emergency min balance must be non-negative");
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ let config = EmergencyConfig {
+ max_amount,
+ cooldown,
+ min_balance,
+ };
+
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EM_CONF"), &config);
+
+ true
+ }
+
+ /// Activate or deactivate emergency mode
+ pub fn set_emergency_mode(env: Env, caller: Address, enabled: bool) -> bool {
+ caller.require_auth();
+
+ if !Self::is_owner_or_admin(&env, &caller) {
+ panic!("Only Owner or Admin can change emergency mode");
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EM_MODE"), &enabled);
+
+ // Emit event to notify all family members
+ let event = if enabled {
+ EmergencyEvent::ModeOn
+ } else {
+ EmergencyEvent::ModeOff
+ };
+ env.events()
+ .publish((symbol_short!("emerg"), event), caller);
+
+ true
+ }
+
+ /// Add a new family member (Owner or Admin only)
+ pub fn add_family_member(env: Env, caller: Address, member: Address, role: FamilyRole) -> bool {
+ caller.require_auth();
+
+ // Verify caller is Owner or Admin
+ if !Self::is_owner_or_admin(&env, &caller) {
+ panic!("Only Owner or Admin can add family members");
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ let mut members: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("MEMBERS"))
+ .expect("Wallet not initialized");
+
+ let timestamp = env.ledger().timestamp();
+ members.set(
+ member.clone(),
+ FamilyMember {
+ address: member.clone(),
+ role,
+ added_at: timestamp,
+ },
+ );
+
+ env.storage()
+ .instance()
+ .set(&symbol_short!("MEMBERS"), &members);
+
+ true
+ }
+
+ /// Remove a family member (Owner only)
+ pub fn remove_family_member(env: Env, caller: Address, member: Address) -> bool {
+ caller.require_auth();
+
+ // Verify caller is Owner
+ let owner: Address = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("OWNER"))
+ .expect("Wallet not initialized");
+
+ if caller != owner {
+ panic!("Only Owner can remove family members");
+ }
+
+ // Cannot remove owner
+ if member == owner {
+ panic!("Cannot remove owner");
+ }
+
+ Self::extend_instance_ttl(&env);
+
+ let mut members: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("MEMBERS"))
+ .expect("Wallet not initialized");
+
+ members.remove(member.clone());
+ env.storage()
+ .instance()
+ .set(&symbol_short!("MEMBERS"), &members);
+
+ true
+ }
+
+ /// Get pending transaction
+ pub fn get_pending_transaction(env: Env, tx_id: u64) -> Option {
+ let pending_txs: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("PEND_TXS"))
+ .expect("Pending transactions map not initialized");
+
+ pending_txs.get(tx_id)
+ }
+
+ /// Get multi-sig configuration for a transaction type
+ pub fn get_multisig_config(env: Env, tx_type: TransactionType) -> Option {
+ env.storage().instance().get(&Self::get_config_key(tx_type))
+ }
+
+ /// Get family member information
+ pub fn get_family_member(env: Env, member: Address) -> Option {
+ let members: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("MEMBERS"))
+ .expect("Wallet not initialized");
+
+ members.get(member)
+ }
+
+ /// Get wallet owner
+ pub fn get_owner(env: Env) -> Address {
+ env.storage()
+ .instance()
+ .get(&symbol_short!("OWNER"))
+ .expect("Wallet not initialized")
+ }
+
+ /// Get current emergency configuration
+ pub fn get_emergency_config(env: Env) -> Option {
+ env.storage().instance().get(&symbol_short!("EM_CONF"))
+ }
+
+ /// Check if emergency mode is currently enabled
+ pub fn is_emergency_mode(env: Env) -> bool {
+ env.storage()
+ .instance()
+ .get(&symbol_short!("EM_MODE"))
+ .unwrap_or(false)
+ }
+
+ /// Get timestamp of last emergency transfer, if any
+ pub fn get_last_emergency_at(env: Env) -> Option {
+ let ts: u64 = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("EM_LAST"))
+ .unwrap_or(0u64);
+ if ts == 0 {
+ None
+ } else {
+ Some(ts)
+ }
+ }
+
+ // Internal helper functions
+
+ /// Execute an emergency transfer immediately (emergency mode only)
+ fn execute_emergency_transfer_now(
+ env: Env,
+ proposer: Address,
+ token: Address,
+ recipient: Address,
+ amount: i128,
+ ) -> u64 {
+ // Load emergency configuration
+ let config: EmergencyConfig = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("EM_CONF"))
+ .expect("Emergency config not set");
+
+ if amount > config.max_amount {
+ panic!("Emergency amount exceeds maximum allowed");
+ }
+
+ // Cooldown check
+ let now = env.ledger().timestamp();
+ let last_ts: u64 = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("EM_LAST"))
+ .unwrap_or(0u64);
+ if last_ts != 0 && now < last_ts.saturating_add(config.cooldown) {
+ panic!("Emergency transfer cooldown period not elapsed");
+ }
+
+ // Balance check - ensure minimum remaining balance after transfer
+ let token_client = TokenClient::new(&env, &token);
+ let current_balance = token_client.balance(&proposer);
+ if current_balance - amount < config.min_balance {
+ panic!("Emergency transfer would violate minimum balance requirement");
+ }
+
+ // Emit initiation event (notification + audit)
+ env.events().publish(
+ (symbol_short!("emerg"), EmergencyEvent::TransferInit),
+ (proposer.clone(), recipient.clone(), amount),
+ );
+
+ // Execute transfer with proposer authorization
+ proposer.require_auth();
+ let _ = Self::execute_transaction_internal(
+ &env,
+ &proposer,
+ &TransactionType::EmergencyTransfer,
+ &TransactionData::EmergencyTransfer(token.clone(), recipient.clone(), amount),
+ false,
+ );
+
+ // Update last emergency timestamp
+ let store_ts: u64 = if now == 0 { 1u64 } else { now };
+ env.storage()
+ .instance()
+ .set(&symbol_short!("EM_LAST"), &store_ts);
+
+ // Emit execution event
+ env.events().publish(
+ (symbol_short!("emerg"), EmergencyEvent::TransferExec),
+ (proposer, recipient, amount),
+ );
+
+ // No pending transaction (one-click emergency)
+ 0
+ }
+
+ fn execute_transaction_internal(
+ env: &Env,
+ proposer: &Address,
+ tx_type: &TransactionType,
+ data: &TransactionData,
+ require_auth: bool,
+ ) -> u64 {
+ match (tx_type, data) {
+ (
+ TransactionType::RegularWithdrawal,
+ TransactionData::Withdrawal(token, recipient, amount),
+ )
+ | (
+ TransactionType::LargeWithdrawal,
+ TransactionData::Withdrawal(token, recipient, amount),
+ ) => {
+ // Execute withdrawal - require proposer to authorize the transfer if needed
+ if require_auth {
+ proposer.require_auth();
+ }
+ let token_client = TokenClient::new(env, token);
+ token_client.transfer(proposer, recipient, amount);
+ 0 // Return 0 for immediate execution
+ }
+ (TransactionType::SplitConfigChange, TransactionData::SplitConfigChange(..)) => {
+ // Split config changes would be handled by the remittance_split contract
+ // This is a placeholder - in a real implementation, you'd call the split contract
+ 0
+ }
+ (TransactionType::RoleChange, TransactionData::RoleChange(member, new_role)) => {
+ // Execute role change
+ let mut members: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("MEMBERS"))
+ .expect("Wallet not initialized");
+
+ if let Some(mut member_data) = members.get(member.clone()) {
+ member_data.role = *new_role;
+ members.set(member.clone(), member_data);
+ env.storage()
+ .instance()
+ .set(&symbol_short!("MEMBERS"), &members);
+ }
+ 0
+ }
+ (
+ TransactionType::EmergencyTransfer,
+ TransactionData::EmergencyTransfer(token, recipient, amount),
+ ) => {
+ // Execute emergency transfer - require proposer to authorize the transfer if needed
+ if require_auth {
+ proposer.require_auth();
+ }
+ let token_client = TokenClient::new(env, token);
+ token_client.transfer(proposer, recipient, amount);
+ 0
+ }
+ (TransactionType::PolicyCancellation, TransactionData::PolicyCancellation(..)) => {
+ // Policy cancellations would be handled by the insurance contract
+ // This is a placeholder
+ 0
+ }
+ _ => panic!("Invalid transaction type or data mismatch"),
+ }
+ }
+
+ fn get_config_key(tx_type: TransactionType) -> Symbol {
+ match tx_type {
+ TransactionType::LargeWithdrawal => symbol_short!("MS_WDRAW"),
+ TransactionType::SplitConfigChange => symbol_short!("MS_SPLIT"),
+ TransactionType::RoleChange => symbol_short!("MS_ROLE"),
+ TransactionType::EmergencyTransfer => symbol_short!("MS_EMERG"),
+ TransactionType::PolicyCancellation => symbol_short!("MS_POL"),
+ TransactionType::RegularWithdrawal => symbol_short!("MS_REG"),
+ }
+ }
+
+ fn is_family_member(env: &Env, address: &Address) -> bool {
+ let members: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("MEMBERS"))
+ .unwrap_or_else(|| Map::new(env));
+
+ members.get(address.clone()).is_some()
+ }
+
+ fn is_owner_or_admin(env: &Env, address: &Address) -> bool {
+ let members: Map = env
+ .storage()
+ .instance()
+ .get(&symbol_short!("MEMBERS"))
+ .unwrap_or_else(|| Map::new(env));
+
+ if let Some(member) = members.get(address.clone()) {
+ matches!(member.role, FamilyRole::Owner | FamilyRole::Admin)
+ } else {
+ false
+ }
+ }
+
+ fn extend_instance_ttl(env: &Env) {
+ env.storage()
+ .instance()
+ .extend_ttl(INSTANCE_LIFETIME_THRESHOLD, INSTANCE_BUMP_AMOUNT);
+ }
+}
+
+#[cfg(test)]
+mod test;
diff --git a/family_wallet/src/test.rs b/family_wallet/src/test.rs
new file mode 100644
index 0000000..ab950c7
--- /dev/null
+++ b/family_wallet/src/test.rs
@@ -0,0 +1,740 @@
+use super::*;
+use soroban_sdk::{
+ testutils::Address as _,
+ token::{StellarAssetClient, TokenClient},
+ vec, Env,
+};
+
+#[test]
+fn test_init_family_wallet() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ let result = client.init(&owner, &initial_members);
+ assert!(result);
+
+ // Verify owner
+ let stored_owner = client.get_owner();
+ assert_eq!(stored_owner, owner);
+
+ // Verify members
+ let member1_data = client.get_family_member(&member1);
+ assert!(member1_data.is_some());
+ assert_eq!(member1_data.unwrap().role, FamilyRole::Member);
+
+ let member2_data = client.get_family_member(&member2);
+ assert!(member2_data.is_some());
+ assert_eq!(member2_data.unwrap().role, FamilyRole::Member);
+
+ let owner_data = client.get_family_member(&owner);
+ assert!(owner_data.is_some());
+ assert_eq!(owner_data.unwrap().role, FamilyRole::Owner);
+}
+
+#[test]
+fn test_configure_multisig() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let member3 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone(), member3.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Configure 2-of-3 multi-sig for large withdrawals
+ let signers = vec![&env, member1.clone(), member2.clone(), member3.clone()];
+ let result = client.configure_multisig(
+ &owner,
+ &TransactionType::LargeWithdrawal,
+ &2,
+ &signers,
+ &1000_0000000,
+ );
+ assert!(result);
+
+ // Verify configuration
+ let config = client.get_multisig_config(&TransactionType::LargeWithdrawal);
+ assert!(config.is_some());
+ let config = config.unwrap();
+ assert_eq!(config.threshold, 2);
+ assert_eq!(config.signers.len(), 3);
+ assert_eq!(config.spending_limit, 1000_0000000);
+}
+
+#[test]
+#[should_panic(expected = "Only Owner or Admin can configure multi-sig")]
+fn test_configure_multisig_unauthorized() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Try to configure as regular member (should fail)
+ let signers = vec![&env, member1.clone(), member2.clone()];
+ client.configure_multisig(
+ &member1,
+ &TransactionType::LargeWithdrawal,
+ &2,
+ &signers,
+ &1000_0000000,
+ );
+}
+
+#[test]
+fn test_withdraw_below_threshold_no_multisig() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+ let token_client = TokenClient::new(&env, &token_contract.address());
+
+ // Mint tokens to owner
+ let amount = 5000_0000000;
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &amount);
+
+ // Configure multi-sig with spending limit of 1000
+ let signers = vec![&env, owner.clone(), member1.clone(), member2.clone()];
+ client.configure_multisig(
+ &owner,
+ &TransactionType::LargeWithdrawal,
+ &2,
+ &signers,
+ &1000_0000000,
+ );
+
+ // Withdraw amount below threshold (should execute immediately)
+ let recipient = Address::generate(&env);
+ let withdraw_amount = 500_0000000;
+ let tx_id = client.withdraw(
+ &owner,
+ &token_contract.address(),
+ &recipient,
+ &withdraw_amount,
+ );
+
+ // Should return 0 for immediate execution
+ assert_eq!(tx_id, 0);
+
+ // Verify tokens were transferred
+ assert_eq!(token_client.balance(&recipient), withdraw_amount);
+ assert_eq!(token_client.balance(&owner), amount - withdraw_amount);
+}
+
+#[test]
+fn test_withdraw_above_threshold_requires_multisig() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+ let token_client = TokenClient::new(&env, &token_contract.address());
+
+ // Mint tokens to owner
+ let amount = 5000_0000000;
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &amount);
+
+ // Configure 2-of-3 multi-sig with spending limit of 1000
+ let signers = vec![&env, owner.clone(), member1.clone(), member2.clone()];
+ client.configure_multisig(
+ &owner,
+ &TransactionType::LargeWithdrawal,
+ &2,
+ &signers,
+ &1000_0000000,
+ );
+
+ // Propose withdrawal above threshold
+ let recipient = Address::generate(&env);
+ let withdraw_amount = 2000_0000000;
+ let tx_id = client.withdraw(
+ &owner,
+ &token_contract.address(),
+ &recipient,
+ &withdraw_amount,
+ );
+
+ // Should return transaction ID (not 0)
+ assert!(tx_id > 0);
+
+ // Verify transaction is pending
+ let pending_tx = client.get_pending_transaction(&tx_id);
+ assert!(pending_tx.is_some());
+ let pending_tx = pending_tx.unwrap();
+ assert_eq!(pending_tx.tx_type, TransactionType::LargeWithdrawal);
+ assert_eq!(pending_tx.signatures.len(), 1); // Owner auto-signed
+
+ // Verify tokens not yet transferred
+ assert_eq!(token_client.balance(&recipient), 0);
+ assert_eq!(token_client.balance(&owner), amount);
+
+ // Second signer signs (should execute)
+ client.sign_transaction(&member1, &tx_id);
+
+ // Verify tokens were transferred
+ assert_eq!(token_client.balance(&recipient), withdraw_amount);
+ assert_eq!(token_client.balance(&owner), amount - withdraw_amount);
+
+ // Verify transaction is no longer pending
+ let pending_tx = client.get_pending_transaction(&tx_id);
+ assert!(pending_tx.is_none());
+}
+
+#[test]
+fn test_multisig_threshold_validation() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let member3 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone(), member3.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+ let token_client = TokenClient::new(&env, &token_contract.address());
+
+ // Mint tokens to owner
+ let amount = 5000_0000000;
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &amount);
+
+ // Configure 3-of-3 multi-sig
+ let signers = vec![&env, owner.clone(), member1.clone(), member2.clone()];
+ client.configure_multisig(
+ &owner,
+ &TransactionType::LargeWithdrawal,
+ &3,
+ &signers,
+ &1000_0000000,
+ );
+
+ // Propose withdrawal
+ let recipient = Address::generate(&env);
+ let withdraw_amount = 2000_0000000;
+ let tx_id = client.withdraw(
+ &owner,
+ &token_contract.address(),
+ &recipient,
+ &withdraw_amount,
+ );
+
+ // Owner already signed, need 2 more
+ client.sign_transaction(&member1, &tx_id);
+
+ // Verify still pending (only 2 signatures, need 3)
+ let pending_tx = client.get_pending_transaction(&tx_id);
+ assert!(pending_tx.is_some());
+ assert_eq!(token_client.balance(&recipient), 0);
+
+ // Third signature should execute
+ client.sign_transaction(&member2, &tx_id);
+
+ // Verify executed
+ assert_eq!(token_client.balance(&recipient), withdraw_amount);
+ let pending_tx = client.get_pending_transaction(&tx_id);
+ assert!(pending_tx.is_none());
+}
+
+#[test]
+#[should_panic(expected = "Already signed this transaction")]
+fn test_duplicate_signature_prevention() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+
+ // Mint tokens
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &5000_0000000);
+
+ // Configure multi-sig with threshold of 3 (so transaction stays pending after first signature)
+ let signers = vec![&env, owner.clone(), member1.clone(), member2.clone()];
+ client.configure_multisig(
+ &owner,
+ &TransactionType::LargeWithdrawal,
+ &3, // Need 3 signatures, so after first signature it's still pending
+ &signers,
+ &1000_0000000,
+ );
+
+ // Propose withdrawal
+ let recipient = Address::generate(&env);
+ let tx_id = client.withdraw(&owner, &token_contract.address(), &recipient, &2000_0000000);
+
+ // Try to sign twice (should fail with "Already signed")
+ client.sign_transaction(&member1, &tx_id);
+ client.sign_transaction(&member1, &tx_id);
+}
+
+#[test]
+fn test_propose_split_config_change() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Configure multi-sig for split changes
+ let signers = vec![&env, owner.clone(), member1.clone(), member2.clone()];
+ client.configure_multisig(
+ &owner,
+ &TransactionType::SplitConfigChange,
+ &2,
+ &signers,
+ &0,
+ );
+
+ // Propose split config change
+ let tx_id = client.propose_split_config_change(&owner, &40, &30, &20, &10);
+
+ assert!(tx_id > 0);
+
+ // Verify pending
+ let pending_tx = client.get_pending_transaction(&tx_id);
+ assert!(pending_tx.is_some());
+ assert_eq!(
+ pending_tx.unwrap().tx_type,
+ TransactionType::SplitConfigChange
+ );
+
+ // Second signature should execute
+ client.sign_transaction(&member1, &tx_id);
+
+ // Verify executed
+ let pending_tx = client.get_pending_transaction(&tx_id);
+ assert!(pending_tx.is_none());
+}
+
+#[test]
+fn test_propose_role_change() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Configure multi-sig for role changes
+ let signers = vec![&env, owner.clone(), member1.clone()];
+ client.configure_multisig(&owner, &TransactionType::RoleChange, &2, &signers, &0);
+
+ // Propose role change
+ let tx_id = client.propose_role_change(&owner, &member2, &FamilyRole::Admin);
+
+ assert!(tx_id > 0);
+
+ // Second signature should execute
+ client.sign_transaction(&member1, &tx_id);
+
+ // Verify role changed
+ let member2_data = client.get_family_member(&member2);
+ assert!(member2_data.is_some());
+ assert_eq!(member2_data.unwrap().role, FamilyRole::Admin);
+}
+
+#[test]
+fn test_propose_emergency_transfer() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+ let token_client = TokenClient::new(&env, &token_contract.address());
+
+ // Mint tokens
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &5000_0000000);
+
+ // Configure multi-sig for emergency transfers
+ let signers = vec![&env, owner.clone(), member1.clone(), member2.clone()];
+ client.configure_multisig(
+ &owner,
+ &TransactionType::EmergencyTransfer,
+ &2,
+ &signers,
+ &0,
+ );
+
+ // Propose emergency transfer
+ let recipient = Address::generate(&env);
+ let transfer_amount = 3000_0000000;
+ let tx_id = client.propose_emergency_transfer(
+ &owner,
+ &token_contract.address(),
+ &recipient,
+ &transfer_amount,
+ );
+
+ assert!(tx_id > 0);
+
+ // Second signature should execute
+ client.sign_transaction(&member1, &tx_id);
+
+ // Verify transfer executed
+ assert_eq!(token_client.balance(&recipient), transfer_amount);
+ assert_eq!(token_client.balance(&owner), 5000_0000000 - transfer_amount);
+}
+
+#[test]
+fn test_emergency_mode_direct_transfer_within_limits() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+ let token_client = TokenClient::new(&env, &token_contract.address());
+
+ // Mint tokens
+ let total = 5000_0000000;
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &total);
+
+ // Configure emergency settings
+ client.configure_emergency(&owner, &2000_0000000, &3600u64, &1000_0000000);
+
+ // Enable emergency mode
+ client.set_emergency_mode(&owner, &true);
+ assert!(client.is_emergency_mode());
+
+ // One-click emergency transfer within limits
+ let recipient = Address::generate(&env);
+ let amount = 1500_0000000;
+ let tx_id =
+ client.propose_emergency_transfer(&owner, &token_contract.address(), &recipient, &amount);
+
+ // Should execute immediately (no pending transaction id)
+ assert_eq!(tx_id, 0);
+ assert_eq!(token_client.balance(&recipient), amount);
+ assert_eq!(token_client.balance(&owner), total - amount);
+
+ // Last emergency timestamp should be set
+ let last_ts = client.get_last_emergency_at();
+ assert!(last_ts.is_some());
+}
+
+#[test]
+#[should_panic(expected = "Emergency amount exceeds maximum allowed")]
+fn test_emergency_transfer_exceeds_limit() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let initial_members = vec![&env];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+
+ // Mint tokens
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &5000_0000000);
+
+ // Configure emergency settings with small max_amount
+ client.configure_emergency(&owner, &1000_0000000, &3600u64, &0);
+ client.set_emergency_mode(&owner, &true);
+
+ let recipient = Address::generate(&env);
+ // This should exceed max_amount and panic
+ client.propose_emergency_transfer(&owner, &token_contract.address(), &recipient, &2000_0000000);
+}
+
+#[test]
+#[should_panic(expected = "Emergency transfer cooldown period not elapsed")]
+fn test_emergency_transfer_cooldown_enforced() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let initial_members = vec![&env];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+
+ // Mint tokens
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &5000_0000000);
+
+ // Configure emergency settings with non-zero cooldown
+ client.configure_emergency(&owner, &2000_0000000, &3600u64, &0);
+ client.set_emergency_mode(&owner, &true);
+
+ let recipient = Address::generate(&env);
+ let amount = 1000_0000000;
+
+ // First emergency transfer should succeed
+ let tx_id =
+ client.propose_emergency_transfer(&owner, &token_contract.address(), &recipient, &amount);
+ assert_eq!(tx_id, 0);
+
+ // Second immediate emergency transfer should fail due to cooldown
+ client.propose_emergency_transfer(&owner, &token_contract.address(), &recipient, &amount);
+}
+
+#[test]
+#[should_panic(expected = "Emergency transfer would violate minimum balance requirement")]
+fn test_emergency_transfer_min_balance_enforced() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let initial_members = vec![&env];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+
+ // Mint tokens
+ let total = 3000_0000000;
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &total);
+
+ // Require at least 2500 remaining, attempt to send 1000 (would leave 2000)
+ client.configure_emergency(&owner, &2000_0000000, &0u64, &2500_0000000);
+ client.set_emergency_mode(&owner, &true);
+
+ let recipient = Address::generate(&env);
+ client.propose_emergency_transfer(&owner, &token_contract.address(), &recipient, &1000_0000000);
+}
+
+#[test]
+fn test_add_and_remove_family_member() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Add new member as Admin
+ let new_member = Address::generate(&env);
+ let result = client.add_family_member(&owner, &new_member, &FamilyRole::Admin);
+ assert!(result);
+
+ // Verify member added
+ let member_data = client.get_family_member(&new_member);
+ assert!(member_data.is_some());
+ assert_eq!(member_data.unwrap().role, FamilyRole::Admin);
+
+ // Remove member
+ let result = client.remove_family_member(&owner, &new_member);
+ assert!(result);
+
+ // Verify member removed
+ let member_data = client.get_family_member(&new_member);
+ assert!(member_data.is_none());
+}
+
+#[test]
+#[should_panic(expected = "Only Owner or Admin can add family members")]
+fn test_add_member_unauthorized() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Try to add member as regular member (should fail)
+ let new_member = Address::generate(&env);
+ client.add_family_member(&member1, &new_member, &FamilyRole::Member);
+}
+
+#[test]
+fn test_different_thresholds_for_different_transaction_types() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let member3 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone(), member3.clone()];
+
+ client.init(&owner, &initial_members);
+
+ let all_signers = vec![
+ &env,
+ owner.clone(),
+ member1.clone(),
+ member2.clone(),
+ member3.clone(),
+ ];
+
+ // Configure different thresholds for different transaction types
+ client.configure_multisig(
+ &owner,
+ &TransactionType::LargeWithdrawal,
+ &2, // 2-of-5
+ &all_signers,
+ &1000_0000000,
+ );
+
+ client.configure_multisig(
+ &owner,
+ &TransactionType::RoleChange,
+ &3, // 3-of-5 (more secure)
+ &all_signers,
+ &0,
+ );
+
+ client.configure_multisig(
+ &owner,
+ &TransactionType::EmergencyTransfer,
+ &4, // 4-of-5 (most secure)
+ &all_signers,
+ &0,
+ );
+
+ // Verify configurations
+ let withdraw_config = client.get_multisig_config(&TransactionType::LargeWithdrawal);
+ assert_eq!(withdraw_config.unwrap().threshold, 2);
+
+ let role_config = client.get_multisig_config(&TransactionType::RoleChange);
+ assert_eq!(role_config.unwrap().threshold, 3);
+
+ let emergency_config = client.get_multisig_config(&TransactionType::EmergencyTransfer);
+ assert_eq!(emergency_config.unwrap().threshold, 4);
+}
+
+#[test]
+#[should_panic(expected = "Signer not authorized for this transaction type")]
+fn test_unauthorized_signer() {
+ let env = Env::default();
+ env.mock_all_auths();
+ let contract_id = env.register_contract(None, FamilyWallet);
+ let client = FamilyWalletClient::new(&env, &contract_id);
+
+ let owner = Address::generate(&env);
+ let member1 = Address::generate(&env);
+ let member2 = Address::generate(&env);
+ let member3 = Address::generate(&env);
+ let initial_members = vec![&env, member1.clone(), member2.clone(), member3.clone()];
+
+ client.init(&owner, &initial_members);
+
+ // Setup token
+ let token_admin = Address::generate(&env);
+ let token_contract = env.register_stellar_asset_contract_v2(token_admin.clone());
+ StellarAssetClient::new(&env, &token_contract.address()).mint(&owner, &5000_0000000);
+
+ // Configure multi-sig with only owner and member1 as signers
+ let signers = vec![&env, owner.clone(), member1.clone()];
+ client.configure_multisig(
+ &owner,
+ &TransactionType::LargeWithdrawal,
+ &2,
+ &signers,
+ &1000_0000000,
+ );
+
+ // Propose withdrawal
+ let recipient = Address::generate(&env);
+ let tx_id = client.withdraw(&owner, &token_contract.address(), &recipient, &2000_0000000);
+
+ // Try to sign with member2 (not authorized) - should fail
+ client.sign_transaction(&member2, &tx_id);
+}
diff --git a/family_wallet/test_snapshots/test/test_add_and_remove_family_member.1.json b/family_wallet/test_snapshots/test/test_add_and_remove_family_member.1.json
new file mode 100644
index 0000000..f77d934
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_add_and_remove_family_member.1.json
@@ -0,0 +1,888 @@
+{
+ "generators": {
+ "address": 4,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "add_family_member",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "remove_family_member",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "add_family_member"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "add_family_member"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "remove_family_member"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "remove_family_member"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_add_member_unauthorized.1.json b/family_wallet/test_snapshots/test/test_add_member_unauthorized.1.json
new file mode 100644
index 0000000..0c3491f
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_add_member_unauthorized.1.json
@@ -0,0 +1,702 @@
+{
+ "generators": {
+ "address": 4,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "add_family_member"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u32": 3
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'Only Owner or Admin can add family members' from contract function 'Symbol(obj#61)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u32": 3
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "add_family_member"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u32": 3
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_configure_multisig.1.json b/family_wallet/test_snapshots/test/test_configure_multisig.1.json
new file mode 100644
index 0000000..aad29a2
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_configure_multisig.1.json
@@ -0,0 +1,868 @@
+{
+ "generators": {
+ "address": 5,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_configure_multisig_unauthorized.1.json b/family_wallet/test_snapshots/test/test_configure_multisig_unauthorized.1.json
new file mode 100644
index 0000000..1066ecb
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_configure_multisig_unauthorized.1.json
@@ -0,0 +1,789 @@
+{
+ "generators": {
+ "address": 4,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'Only Owner or Admin can configure multi-sig' from contract function 'Symbol(obj#67)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "configure_multisig"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_different_thresholds_for_different_transaction_types.1.json b/family_wallet/test_snapshots/test/test_different_thresholds_for_different_transaction_types.1.json
new file mode 100644
index 0000000..b933df7
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_different_thresholds_for_different_transaction_types.1.json
@@ -0,0 +1,1410 @@
+{
+ "generators": {
+ "address": 5,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 3
+ },
+ {
+ "u32": 3
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 4
+ },
+ {
+ "u32": 4
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 4
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 3
+ },
+ {
+ "u32": 3
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 4
+ },
+ {
+ "u32": 4
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "u32": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "u32": 3
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "u32": 4
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_multisig_config"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 4
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_duplicate_signature_prevention.1.json b/family_wallet/test_snapshots/test/test_duplicate_signature_prevention.1.json
new file mode 100644
index 0000000..60b41ae
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_duplicate_signature_prevention.1.json
@@ -0,0 +1,1758 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "withdraw",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "u64": 1
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "data"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Withdrawal"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 86400
+ }
+ },
+ {
+ "key": {
+ "symbol": "proposer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "signatures"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_type"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'Already signed this transaction' from contract function 'Symbol(obj#493)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "sign_transaction"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_emergency_mode_direct_transfer_within_limits.1.json b/family_wallet/test_snapshots/test/test_emergency_mode_direct_transfer_within_limits.1.json
new file mode 100644
index 0000000..b0b04db
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_emergency_mode_direct_transfer_within_limits.1.json
@@ -0,0 +1,2033 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_emergency",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ },
+ {
+ "u64": 3600
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_emergency_mode",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "propose_emergency_transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 35000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ },
+ {
+ "u64": 3600
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "ModeOn"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "is_emergency_mode"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "is_emergency_mode"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "TransferInit"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "TransferExec"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 15000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 35000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_last_emergency_at"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_last_emergency_at"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_emergency_transfer_cooldown_enforced.1.json b/family_wallet/test_snapshots/test/test_emergency_transfer_cooldown_enforced.1.json
new file mode 100644
index 0000000..efe3a5e
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_emergency_transfer_cooldown_enforced.1.json
@@ -0,0 +1,1934 @@
+{
+ "generators": {
+ "address": 5,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_emergency",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ },
+ {
+ "u64": 3600
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_emergency_mode",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "propose_emergency_transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 40000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ },
+ {
+ "u64": 3600
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "ModeOn"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "TransferInit"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "TransferExec"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'Emergency transfer cooldown period not elapsed' from contract function 'Symbol(obj#483)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_emergency_transfer_exceeds_limit.1.json b/family_wallet/test_snapshots/test/test_emergency_transfer_exceeds_limit.1.json
new file mode 100644
index 0000000..c7674d6
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_emergency_transfer_exceeds_limit.1.json
@@ -0,0 +1,1484 @@
+{
+ "generators": {
+ "address": 5,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_emergency",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ },
+ {
+ "u64": 3600
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_emergency_mode",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ },
+ {
+ "u64": 3600
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "ModeOn"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'Emergency amount exceeds maximum allowed' from contract function 'Symbol(obj#327)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_emergency_transfer_min_balance_enforced.1.json b/family_wallet/test_snapshots/test/test_emergency_transfer_min_balance_enforced.1.json
new file mode 100644
index 0000000..ec374a2
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_emergency_transfer_min_balance_enforced.1.json
@@ -0,0 +1,1536 @@
+{
+ "generators": {
+ "address": 5,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_emergency",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "set_emergency_mode",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 25000000000
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000004"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": []
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000004"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJXFF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ },
+ {
+ "u64": 0
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 25000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_emergency"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "bool": true
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "emerg"
+ },
+ {
+ "vec": [
+ {
+ "symbol": "ModeOn"
+ }
+ ]
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_emergency_mode"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "8011bbf4cdf04e5bc6ac886935b99aa4b2c0cabde133f9d7fb3e656799f0a896",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'Emergency transfer would violate minimum balance requirement' from contract function 'Symbol(obj#327)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CCABDO7UZXYE4W6GVSEGSNNZTKSLFQGKXXQTH6OX7M7GKZ4Z6CUJNGZN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_init_family_wallet.1.json b/family_wallet/test_snapshots/test/test_init_family_wallet.1.json
new file mode 100644
index 0000000..de0667e
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_init_family_wallet.1.json
@@ -0,0 +1,849 @@
+{
+ "generators": {
+ "address": 4,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_owner"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_owner"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_multisig_threshold_validation.1.json b/family_wallet/test_snapshots/test/test_multisig_threshold_validation.1.json
new file mode 100644
index 0000000..aa01930
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_multisig_threshold_validation.1.json
@@ -0,0 +1,2198 @@
+{
+ "generators": {
+ "address": 8,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "withdraw",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ],
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "u64": 1
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 6277191135259896685
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 3
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "data"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Withdrawal"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 86400
+ }
+ },
+ {
+ "key": {
+ "symbol": "proposer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "signatures"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_type"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_propose_emergency_transfer.1.json b/family_wallet/test_snapshots/test/test_propose_emergency_transfer.1.json
new file mode 100644
index 0000000..7f89f87
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_propose_emergency_transfer.1.json
@@ -0,0 +1,1870 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 4
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "propose_emergency_transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ],
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "u64": 1
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 4
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "propose_emergency_transfer"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_propose_role_change.1.json b/family_wallet/test_snapshots/test/test_propose_role_change.1.json
new file mode 100644
index 0000000..1886b73
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_propose_role_change.1.json
@@ -0,0 +1,1044 @@
+{
+ "generators": {
+ "address": 4,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 3
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "propose_role_change",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "u64": 1
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 3
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_role_change"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u32": 2
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "propose_role_change"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_family_member"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_propose_split_config_change.1.json b/family_wallet/test_snapshots/test/test_propose_split_config_change.1.json
new file mode 100644
index 0000000..5d171d0
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_propose_split_config_change.1.json
@@ -0,0 +1,1165 @@
+{
+ "generators": {
+ "address": 4,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 2
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "propose_split_config_change",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 40
+ },
+ {
+ "u32": 30
+ },
+ {
+ "u32": 20
+ },
+ {
+ "u32": 10
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "u64": 1
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 2
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "propose_split_config_change"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 40
+ },
+ {
+ "u32": 30
+ },
+ {
+ "u32": 20
+ },
+ {
+ "u32": 10
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "propose_split_config_change"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "data"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "SplitConfigChange"
+ },
+ {
+ "u32": 40
+ },
+ {
+ "u32": 30
+ },
+ {
+ "u32": 20
+ },
+ {
+ "u32": 10
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 86400
+ }
+ },
+ {
+ "key": {
+ "symbol": "proposer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "signatures"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_type"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_unauthorized_signer.1.json b/family_wallet/test_snapshots/test/test_unauthorized_signer.1.json
new file mode 100644
index 0000000..006ed74
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_unauthorized_signer.1.json
@@ -0,0 +1,1674 @@
+{
+ "generators": {
+ "address": 8,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "withdraw",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "u64": 1
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "data"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Withdrawal"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 86400
+ }
+ },
+ {
+ "key": {
+ "symbol": "proposer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "signatures"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_type"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000007"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPP4V"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "e5b28cd0e241aaecbaf638165ac920bb39ebd1485bf5220aa32aed300e130739",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CDS3FDGQ4JA2V3F26Y4BMWWJEC5TT26RJBN7KIQKUMVO2MAOCMDTSZ7A"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "log"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "caught panic 'Signer not authorized for this transaction type' from contract function 'Symbol(obj#395)'"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "caught error from function"
+ }
+ }
+ }
+ },
+ "failed_call": true
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "string": "contract call failed"
+ },
+ {
+ "symbol": "sign_transaction"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "error"
+ },
+ {
+ "error": {
+ "wasm_vm": "invalid_action"
+ }
+ }
+ ],
+ "data": {
+ "string": "escalating error to panic"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_withdraw_above_threshold_requires_multisig.1.json b/family_wallet/test_snapshots/test/test_withdraw_above_threshold_requires_multisig.1.json
new file mode 100644
index 0000000..3b4befa
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_withdraw_above_threshold_requires_multisig.1.json
@@ -0,0 +1,2151 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "withdraw",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [],
+ [],
+ [],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ],
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "sign_transaction",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "u64": 1
+ },
+ "val": {
+ "bool": true
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 2
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 8370022561469687789
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 4270020994084947596
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "map": [
+ {
+ "key": {
+ "symbol": "created_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "data"
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "Withdrawal"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "expires_at"
+ },
+ "val": {
+ "u64": 86400
+ }
+ },
+ {
+ "key": {
+ "symbol": "proposer"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "signatures"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_id"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "tx_type"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "u64": 1
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "sign_transaction"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 20000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 30000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": {
+ "u64": 1
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "get_pending_transaction"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file
diff --git a/family_wallet/test_snapshots/test/test_withdraw_below_threshold_no_multisig.1.json b/family_wallet/test_snapshots/test/test_withdraw_below_threshold_no_multisig.1.json
new file mode 100644
index 0000000..3c15290
--- /dev/null
+++ b/family_wallet/test_snapshots/test/test_withdraw_below_threshold_no_multisig.1.json
@@ -0,0 +1,1697 @@
+{
+ "generators": {
+ "address": 7,
+ "nonce": 0
+ },
+ "auth": [
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "init",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "set_admin",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "mint",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "configure_multisig",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ ],
+ [
+ [
+ "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM",
+ "function_name": "withdraw",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": [
+ {
+ "function": {
+ "contract_fn": {
+ "contract_address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "function_name": "transfer",
+ "args": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000000000
+ }
+ }
+ ]
+ }
+ },
+ "sub_invocations": []
+ }
+ ]
+ }
+ ]
+ ],
+ [],
+ []
+ ],
+ "ledger": {
+ "protocol_version": 21,
+ "sequence_number": 0,
+ "timestamp": 0,
+ "network_id": "0000000000000000000000000000000000000000000000000000000000000000",
+ "base_reserve": 0,
+ "min_persistent_entry_ttl": 4096,
+ "min_temp_entry_ttl": 16,
+ "max_entry_ttl": 6312000,
+ "ledger_entries": [
+ [
+ {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "account": {
+ "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "balance": 0,
+ "seq_num": 0,
+ "num_sub_entries": 0,
+ "inflation_dest": null,
+ "flags": 0,
+ "home_domain": "",
+ "thresholds": "01010101",
+ "signers": [],
+ "ext": "v0"
+ }
+ },
+ "ext": "v0"
+ },
+ null
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 5541220902715666415
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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": {
+ "symbol": "EM_CONF"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "cooldown"
+ },
+ "val": {
+ "u64": 3600
+ }
+ },
+ {
+ "key": {
+ "symbol": "max_amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "min_balance"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 0
+ }
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_LAST"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "EM_MODE"
+ },
+ "val": {
+ "bool": false
+ }
+ },
+ {
+ "key": {
+ "symbol": "EXEC_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "MEMBERS"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 1
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "added_at"
+ },
+ "val": {
+ "u64": 0
+ }
+ },
+ {
+ "key": {
+ "symbol": "address"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "role"
+ },
+ "val": {
+ "u32": 3
+ }
+ }
+ ]
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_EMERG"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_POL"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_ROLE"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_SPLIT"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": []
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "MS_WDRAW"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "signers"
+ },
+ "val": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "spending_limit"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "threshold"
+ },
+ "val": {
+ "u32": 2
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "symbol": "NEXT_TX"
+ },
+ "val": {
+ "u64": 1
+ }
+ },
+ {
+ "key": {
+ "symbol": "OWNER"
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ },
+ {
+ "key": {
+ "symbol": "PEND_TXS"
+ },
+ "val": {
+ "map": []
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 2032731177588607455
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "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"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM",
+ "key": {
+ "ledger_key_nonce": {
+ "nonce": 1033654523790656264
+ }
+ },
+ "durability": "temporary",
+ "val": "void"
+ }
+ },
+ "ext": "v0"
+ },
+ 6311999
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 45000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": {
+ "vec": [
+ {
+ "symbol": "Balance"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ ]
+ },
+ "durability": "persistent",
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "amount"
+ },
+ "val": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000000000
+ }
+ }
+ },
+ {
+ "key": {
+ "symbol": "authorized"
+ },
+ "val": {
+ "bool": true
+ }
+ },
+ {
+ "key": {
+ "symbol": "clawback"
+ },
+ "val": {
+ "bool": false
+ }
+ }
+ ]
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ],
+ [
+ {
+ "contract_data": {
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_data": {
+ "ext": "v0",
+ "contract": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN",
+ "key": "ledger_key_contract_instance",
+ "durability": "persistent",
+ "val": {
+ "contract_instance": {
+ "executable": "stellar_asset",
+ "storage": [
+ {
+ "key": {
+ "symbol": "METADATA"
+ },
+ "val": {
+ "map": [
+ {
+ "key": {
+ "symbol": "decimal"
+ },
+ "val": {
+ "u32": 7
+ }
+ },
+ {
+ "key": {
+ "symbol": "name"
+ },
+ "val": {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ },
+ {
+ "key": {
+ "symbol": "symbol"
+ },
+ "val": {
+ "string": "aaa"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "Admin"
+ }
+ ]
+ },
+ "val": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ },
+ {
+ "key": {
+ "vec": [
+ {
+ "symbol": "AssetInfo"
+ }
+ ]
+ },
+ "val": {
+ "vec": [
+ {
+ "symbol": "AlphaNum4"
+ },
+ {
+ "map": [
+ {
+ "key": {
+ "symbol": "asset_code"
+ },
+ "val": {
+ "string": "aaa\\0"
+ }
+ },
+ {
+ "key": {
+ "symbol": "issuer"
+ },
+ "val": {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "ext": "v0"
+ },
+ 120960
+ ]
+ ],
+ [
+ {
+ "contract_code": {
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+ }
+ },
+ [
+ {
+ "last_modified_ledger_seq": 0,
+ "data": {
+ "contract_code": {
+ "ext": "v0",
+ "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
+ "code": ""
+ }
+ },
+ "ext": "v0"
+ },
+ 518400
+ ]
+ ]
+ ]
+ },
+ "events": [
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": {
+ "bytes": "0000000161616100000000000000000000000000000000000000000000000000000000000000000000000006"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "init_asset"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "set_admin"
+ },
+ {
+ "address": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "set_admin"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "mint"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 50000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "mint"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "u32": 1
+ },
+ {
+ "u32": 2
+ },
+ {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4"
+ }
+ ]
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 10000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "configure_multisig"
+ }
+ ],
+ "data": {
+ "bool": true
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "0000000000000000000000000000000000000000000000000000000000000001"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CACMVW2KK4H5FZDFF2AUCAKQTEJMZZWJUIZF23XMRVYQBSXYLHZ6BKWN"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": {
+ "vec": [
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "i128": {
+ "hi": 0,
+ "lo": 5000000000
+ }
+ }
+ ]
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "contract",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "transfer"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ },
+ {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ },
+ {
+ "string": "aaa:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANHUF"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "transfer"
+ }
+ ],
+ "data": "void"
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "0000000000000000000000000000000000000000000000000000000000000001",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "withdraw"
+ }
+ ],
+ "data": {
+ "u64": 0
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 5000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": null,
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_call"
+ },
+ {
+ "bytes": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4"
+ }
+ }
+ }
+ },
+ "failed_call": false
+ },
+ {
+ "event": {
+ "ext": "v0",
+ "contract_id": "04cadb4a570fd2e4652e814101509912cce6c9a2325d6eec8d7100caf859f3e0",
+ "type_": "diagnostic",
+ "body": {
+ "v0": {
+ "topics": [
+ {
+ "symbol": "fn_return"
+ },
+ {
+ "symbol": "balance"
+ }
+ ],
+ "data": {
+ "i128": {
+ "hi": 0,
+ "lo": 45000000000
+ }
+ }
+ }
+ }
+ },
+ "failed_call": false
+ }
+ ]
+}
\ No newline at end of file