diff --git a/Cargo.lock b/Cargo.lock index b228fbf..7758089 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -945,6 +945,13 @@ dependencies = [ "getrandom", ] +[[package]] +name = "referral-contract" +version = "0.0.0" +dependencies = [ + "soroban-sdk", +] + [[package]] name = "rfc6979" version = "0.4.0" diff --git a/Cargo.toml b/Cargo.toml index b73ebd0..8fd4b29 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,7 @@ members = [ "StarShopContracts/implement-payment-contract", "StarShopContracts/product-follow-contract", "StarShopContracts/product-voting-contract", + "StarShopContracts/referral-contract", ] [workspace.dependencies] @@ -24,4 +25,4 @@ lto = true # For more information about this profile see https://soroban.stellar.org/docs/basic-tutorials/logging#cargotoml-profile [profile.release-with-logs] inherits = "release" -debug-assertions = true \ No newline at end of file +debug-assertions = true diff --git a/StarShopContracts/referral-contract/Cargo.toml b/StarShopContracts/referral-contract/Cargo.toml new file mode 100644 index 0000000..6ab6829 --- /dev/null +++ b/StarShopContracts/referral-contract/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "referral-contract" +version = "0.0.0" +edition = "2021" +publish = false + +[lib] +crate-type = ["cdylib"] +doctest = false + +[dependencies] +soroban-sdk = { workspace = true } + +[dev-dependencies] +soroban-sdk = { workspace = true, features = ["testutils"] } diff --git a/StarShopContracts/referral-contract/README.md b/StarShopContracts/referral-contract/README.md new file mode 100644 index 0000000..91660b2 --- /dev/null +++ b/StarShopContracts/referral-contract/README.md @@ -0,0 +1,145 @@ +# Multi-Level Referral Smart Contract + +A Soroban smart contract implementing a sophisticated multi-level referral +system with reward tracking, commission distribution, and user verification. + +## ๐ŸŒŸ Features + +### Referral System + +- Multi-level referral tracking (up to 3 levels) +- Automatic commission distribution +- Team size tracking across levels +- Verified referrer requirements + +### User Levels + +- 4-tier system: Basic โ†’ Silver โ†’ Gold โ†’ Platinum +- Automatic level progression +- Configurable requirements per level: + - Direct referrals count + - Team size + - Total rewards earned + +### Reward Structure + +- Tiered commission rates: + - Level 1: 5% (configurable) + - Level 2: 2% (configurable) + - Level 3: 1% (configurable) +- Milestone-based rewards +- Reward caps per referral +- Automatic distribution + +### Verification System + +- KYC verification requirement +- Admin approval process +- Verification status tracking +- Identity proof storage + +### Security Features + +- Contract pause mechanism +- Admin controls +- Authorization checks +- Duplicate prevention +- Activity tracking + +## ๐Ÿ“‹ Prerequisites + +- Rust toolchain +- Soroban CLI + +## ๐Ÿ›  Setup + +1. Install dependencies: + +```bash +make build +``` + +## ๐Ÿ“ Contract Interface + +### Admin Operations + +```rust +fn initialize(env: Env, admin: Address, reward_token: Address) -> Result<(), Error> +fn set_reward_rates(env: Env, rates: RewardRates) -> Result<(), Error> +fn set_level_requirements(env: Env, requirements: LevelRequirements) -> Result<(), Error> +fn pause_contract(env: Env) -> Result<(), Error> +fn resume_contract(env: Env) -> Result<(), Error> +``` + +### User Operations + +```rust +fn register_with_referral(env: Env, user: Address, referrer: Address, identity_proof: String) -> Result<(), Error> +fn submit_verification(env: Env, user: Address, identity_proof: String) -> Result<(), Error> +fn claim_rewards(env: Env, user: Address) -> Result +``` + +### Query Operations + +```rust +fn get_user_info(env: Env, user: Address) -> Result +fn get_pending_rewards(env: Env, user: Address) -> Result +fn get_verification_status(env: Env, user: Address) -> Result +``` + +## ๐Ÿ— Contract Structure + +```text +referral-contract/ +โ”œโ”€โ”€ src/ +โ”‚ โ”œโ”€โ”€ lib.rs # Contract entry points +โ”‚ โ”œโ”€โ”€ admin.rs # Admin operations +โ”‚ โ”œโ”€โ”€ referral.rs # Referral logic +โ”‚ โ”œโ”€โ”€ rewards.rs # Reward management +โ”‚ โ”œโ”€โ”€ verification.rs # User verification +โ”‚ โ”œโ”€โ”€ level.rs # Level management +โ”‚ โ”œโ”€โ”€ types.rs # Data structures +โ”‚ โ”œโ”€โ”€ helpers.rs # Utility functions +โ”‚ โ””โ”€โ”€ test.rs # Test suite +โ””โ”€โ”€ Cargo.toml +``` + +## ๐Ÿ”„ User Flow + +1. User Registration + - Register with referrer + - Submit verification documents + - Await verification approval + +2. Level Progression + - Meet level requirements + - Automatic level upgrades + - Access level benefits + +3. Reward Distribution + - Earn commissions from referrals + - Achieve milestones + - Claim rewards + +## ๐Ÿ” Security Considerations + +- All critical operations require verification +- Admin operations are protected +- Reward caps prevent abuse +- Pause mechanism for emergencies + +## ๐Ÿ“Š Metrics & Analytics + +- Total users tracking +- Reward distribution stats +- Referral conversion rates +- Level distribution +- System performance metrics + +## ๐Ÿงช Testing + +Run the test suite: + +```bash +make test +``` diff --git a/StarShopContracts/referral-contract/src/admin.rs b/StarShopContracts/referral-contract/src/admin.rs new file mode 100644 index 0000000..50a4278 --- /dev/null +++ b/StarShopContracts/referral-contract/src/admin.rs @@ -0,0 +1,243 @@ +use crate::types::{DataKey, Error, LevelRequirements, Milestone, RewardRates}; +use soroban_sdk::{Address, Env}; + +pub struct AdminModule; + +pub trait AdminOperations { + /// Initialize contract with admin address + fn initialize( + env: Env, + admin: Address, + reward_token: Address, + level_requirements: LevelRequirements, + ) -> Result<(), Error>; + + /// get admin address + fn get_admin(env: Env) -> Result; + + /// Set reward rates for different levels + fn set_reward_rates(env: Env, rates: RewardRates) -> Result<(), Error>; + + /// Set level requirements for different levels + fn set_level_requirements(env: Env, requirements: LevelRequirements) -> Result<(), Error>; + + /// Set reward token + fn set_reward_token(env: Env, token: Address) -> Result<(), Error>; + + /// Add new milestone + fn add_milestone(env: Env, milestone: Milestone) -> Result<(), Error>; + + /// Remove existing milestone + fn remove_milestone(env: Env, milestone_id: u32) -> Result<(), Error>; + + /// Update existing milestone + fn update_milestone(env: Env, milestone_id: u32, milestone: Milestone) -> Result<(), Error>; + + /// Pause contract operations (emergency) + fn pause_contract(env: Env) -> Result<(), Error>; + + /// Resume contract operations + fn resume_contract(env: Env) -> Result<(), Error>; + + /// Check if contract is paused + fn get_paused_state(env: Env) -> Result; + + /// Transfer admin rights to new address + fn transfer_admin(env: Env, new_admin: Address) -> Result<(), Error>; +} + +impl AdminOperations for AdminModule { + fn initialize( + env: Env, + admin: Address, + reward_token: Address, + level_requirements: LevelRequirements, + ) -> Result<(), Error> { + // Check if contract is already initialized + if env.storage().instance().has(&DataKey::Admin) { + return Err(Error::AlreadyInitialized); + } + + // Store admin address + env.storage().instance().set(&DataKey::Admin, &admin); + + // Initialize contract as active + env.storage() + .instance() + .set(&DataKey::ContractPaused, &false); + + // Store reward token + env.storage() + .instance() + .set(&DataKey::RewardToken, &reward_token); + + // Store level requirements + env.storage() + .instance() + .set(&DataKey::LevelRequirements, &level_requirements); + + Ok(()) + } + + fn set_reward_rates(env: Env, rates: RewardRates) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + env.storage().instance().set(&DataKey::RewardRates, &rates); + Ok(()) + } + + fn add_milestone(env: Env, milestone: Milestone) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + + // Find next available milestone ID + let mut next_id = 0; + while env.storage().instance().has(&DataKey::Milestone(next_id)) { + next_id += 1; + } + + // Store the milestone with its ID + env.storage() + .instance() + .set(&DataKey::Milestone(next_id), &milestone); + + Ok(()) + } + + fn remove_milestone(env: Env, milestone_id: u32) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + + if !env + .storage() + .instance() + .has(&DataKey::Milestone(milestone_id)) + { + return Err(Error::MilestoneNotFound); + } + + env.storage() + .instance() + .remove(&DataKey::Milestone(milestone_id)); + Ok(()) + } + + fn update_milestone( + env: Env, + milestone_id: u32, + new_milestone: Milestone, + ) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + + if !env + .storage() + .instance() + .has(&DataKey::Milestone(milestone_id)) + { + return Err(Error::MilestoneNotFound); + } + + env.storage() + .instance() + .set(&DataKey::Milestone(milestone_id), &new_milestone); + + Ok(()) + } + + fn pause_contract(env: Env) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + env.storage() + .instance() + .set(&DataKey::ContractPaused, &true); + Ok(()) + } + + fn resume_contract(env: Env) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + env.storage() + .instance() + .set(&DataKey::ContractPaused, &false); + Ok(()) + } + + fn get_paused_state(env: Env) -> Result { + Ok(Self::is_contract_paused(&env)) + } + + fn transfer_admin(env: Env, new_admin: Address) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + env.storage().instance().set(&DataKey::Admin, &new_admin); + Ok(()) + } + + fn set_level_requirements(env: Env, requirements: LevelRequirements) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + + // Validate that higher levels have stricter requirements + if !Self::validate_level_requirements(&requirements) { + return Err(Error::InvalidLevelRequirements); + } + + env.storage() + .instance() + .set(&DataKey::LevelRequirements, &requirements); + Ok(()) + } + + fn set_reward_token(env: Env, token: Address) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + env.storage().instance().set(&DataKey::RewardToken, &token); + Ok(()) + } + + fn get_admin(env: Env) -> Result { + Ok(env.storage().instance().get(&DataKey::Admin).unwrap()) + } +} + +// Helper functions +impl AdminModule { + pub fn is_contract_paused(env: &Env) -> bool { + env.storage() + .instance() + .get(&DataKey::ContractPaused) + .unwrap_or(false) + } + + pub fn verify_admin(env: &Env) -> Result<(), Error> { + let admin: Address = env + .storage() + .instance() + .get(&DataKey::Admin) + .ok_or(Error::NotInitialized)?; + admin.require_auth(); + Ok(()) + } + + pub fn ensure_contract_active(env: &Env) -> Result<(), Error> { + if AdminModule::is_contract_paused(env) { + return Err(Error::ContractPaused); + } + Ok(()) + } + + fn validate_level_requirements(requirements: &LevelRequirements) -> bool { + // Ensure Gold requirements are higher than Silver + if requirements.gold.required_direct_referrals + < requirements.silver.required_direct_referrals + || requirements.gold.required_team_size < requirements.silver.required_team_size + || requirements.gold.required_total_rewards < requirements.silver.required_total_rewards + { + return false; + } + + // Ensure Platinum requirements are higher than Gold + if requirements.platinum.required_direct_referrals + < requirements.gold.required_direct_referrals + || requirements.platinum.required_team_size < requirements.gold.required_team_size + || requirements.platinum.required_total_rewards + < requirements.gold.required_total_rewards + { + return false; + } + + true + } +} diff --git a/StarShopContracts/referral-contract/src/level.rs b/StarShopContracts/referral-contract/src/level.rs new file mode 100644 index 0000000..dec7be5 --- /dev/null +++ b/StarShopContracts/referral-contract/src/level.rs @@ -0,0 +1,51 @@ +use crate::types::{DataKey, Error, LevelCriteria, LevelRequirements, UserData, UserLevel}; +use soroban_sdk::Env; + +pub struct LevelManagementModule; + +impl LevelManagementModule { + pub fn check_and_update_level(env: &Env, user_data: &mut UserData) -> Result { + let requirements: LevelRequirements = env + .storage() + .instance() + .get(&DataKey::LevelRequirements) + .ok_or(Error::InvalidLevelRequirements)?; + + let new_level = Self::calculate_eligible_level(user_data, &requirements); + + if new_level > user_data.level { + user_data.level = new_level; + return Ok(true); + } + + Ok(false) + } + + fn calculate_eligible_level( + user_data: &UserData, + requirements: &LevelRequirements, + ) -> UserLevel { + // Check Platinum requirements + if Self::meets_criteria(user_data, &requirements.platinum) { + return UserLevel::Platinum; + } + + // Check Gold requirements + if Self::meets_criteria(user_data, &requirements.gold) { + return UserLevel::Gold; + } + + // Check Silver requirements + if Self::meets_criteria(user_data, &requirements.silver) { + return UserLevel::Silver; + } + + UserLevel::Basic + } + + fn meets_criteria(user_data: &UserData, criteria: &LevelCriteria) -> bool { + user_data.direct_referrals.len() as u32 >= criteria.required_direct_referrals + && user_data.team_size >= criteria.required_team_size + && user_data.total_rewards >= criteria.required_total_rewards + } +} diff --git a/StarShopContracts/referral-contract/src/lib.rs b/StarShopContracts/referral-contract/src/lib.rs new file mode 100644 index 0000000..4ae5490 --- /dev/null +++ b/StarShopContracts/referral-contract/src/lib.rs @@ -0,0 +1,304 @@ +#![no_std] +use soroban_sdk::{contract, contractimpl, Address, Env, String, Vec}; + +use admin::*; +use referral::*; +use rewards::*; +use types::*; +use verification::*; + +mod admin; +mod level; +mod referral; +mod rewards; +mod types; +mod verification; + +#[contract] +pub struct ReferralContract; + +#[contractimpl] +impl ReferralContract { + /// Initializes the referral contract with an admin address, reward token, and default level requirements + /// + /// # Arguments + /// * `admin` - The address of the contract administrator + /// * `reward_token` - The address of the token used for rewards + pub fn initialize(env: Env, admin: Address, reward_token: Address) -> Result<(), Error> { + let default_requirements = LevelRequirements { + silver: LevelCriteria { + required_direct_referrals: 5, + required_team_size: 15, + required_total_rewards: 1000, + }, + gold: LevelCriteria { + required_direct_referrals: 10, + required_team_size: 50, + required_total_rewards: 5000, + }, + platinum: LevelCriteria { + required_direct_referrals: 20, + required_team_size: 100, + required_total_rewards: 20000, + }, + }; + ReferralModule::initialize(&env, &admin)?; + AdminModule::initialize(env, admin, reward_token, default_requirements) + } + + /// Sets the reward rates for different referral levels + /// + /// # Arguments + /// * `rates` - The new reward rates structure + pub fn set_reward_rates(env: Env, rates: RewardRates) -> Result<(), Error> { + AdminModule::set_reward_rates(env, rates) + } + + /// get admin address + pub fn get_admin(env: Env) -> Result { + AdminModule::get_admin(env) + } + + /// Adds a new milestone to the referral program + /// + /// # Arguments + /// * `milestone` - The milestone to be added + pub fn add_milestone(env: Env, milestone: Milestone) -> Result<(), Error> { + AdminModule::add_milestone(env, milestone) + } + + /// Removes a milestone from the referral program + /// + /// # Arguments + /// * `milestone_id` - The ID of the milestone to remove + pub fn remove_milestone(env: Env, milestone_id: u32) -> Result<(), Error> { + AdminModule::remove_milestone(env, milestone_id) + } + + /// Updates an existing milestone + /// + /// # Arguments + /// * `milestone_id` - The ID of the milestone to update + /// * `milestone` - The new milestone data + pub fn update_milestone( + env: Env, + milestone_id: u32, + milestone: Milestone, + ) -> Result<(), Error> { + AdminModule::update_milestone(env, milestone_id, milestone) + } + + /// Pauses all contract operations + pub fn pause_contract(env: Env) -> Result<(), Error> { + AdminModule::pause_contract(env) + } + + /// Resumes contract operations after being paused + pub fn resume_contract(env: Env) -> Result<(), Error> { + AdminModule::resume_contract(env) + } + + /// Check if contract is paused + pub fn get_paused_state(env: Env) -> Result { + AdminModule::get_paused_state(env) + } + + /// Transfers admin rights to a new address + /// + /// # Arguments + /// * `new_admin` - The address of the new administrator + pub fn transfer_admin(env: Env, new_admin: Address) -> Result<(), Error> { + AdminModule::transfer_admin(env, new_admin) + } + + /// Sets or updates the reward token address + /// + /// # Arguments + /// * `token` - The address of the new reward token + pub fn set_reward_token(env: Env, token: Address) -> Result<(), Error> { + AdminModule::set_reward_token(env, token) + } + + /// Updates the requirements for different referral levels + /// + /// # Arguments + /// * `requirements` - The new level requirements + pub fn set_level_requirements(env: Env, requirements: LevelRequirements) -> Result<(), Error> { + AdminModule::set_level_requirements(env, requirements) + } + + /// Submits a verification request for a user + /// + /// # Arguments + /// * `user` - The address of the user to verify + /// * `identity_proof` - Proof of identity for verification + pub fn submit_verification( + env: Env, + user: Address, + identity_proof: String, + ) -> Result<(), Error> { + VerificationModule::submit_verification(env, user, identity_proof) + } + + /// Approves a user's verification request + /// + /// # Arguments + /// * `user` - The address of the user to approve + pub fn approve_verification(env: Env, user: Address) -> Result<(), Error> { + VerificationModule::approve_verification(env, user) + } + + /// Rejects a user's verification request with a reason + /// + /// # Arguments + /// * `user` - The address of the user to reject + /// * `reason` - The reason for rejection + pub fn reject_verification(env: Env, user: Address, reason: String) -> Result<(), Error> { + VerificationModule::reject_verification(env, user, reason) + } + + /// Retrieves the verification status of a user + /// + /// # Arguments + /// * `user` - The address of the user to check + pub fn get_verification_status(env: Env, user: Address) -> Result { + VerificationModule::get_verification_status(env, user) + } + + /// Returns a list of all pending verification requests + pub fn get_pending_verifications(env: Env) -> Result, Error> { + VerificationModule::get_pending_verifications(env) + } + + /// Registers a new user with a referrer + /// + /// # Arguments + /// * `user` - The address of the new user + /// * `referrer_address` - The address of the referrer + /// * `identity_proof` - Proof of identity for verification + pub fn register_with_referral( + env: Env, + user: Address, + referrer_address: Address, + identity_proof: String, + ) -> Result<(), Error> { + ReferralModule::register_with_referral(env, user, referrer_address, identity_proof) + } + + /// Checks if a user is verified + /// + /// # Arguments + /// * `user` - The address of the user to check + pub fn is_user_verified(env: Env, user: Address) -> Result { + ReferralModule::is_user_verified(env, user) + } + + /// Checks if a user is registered in the system + /// + /// # Arguments + /// * `user` - The address of the user to check + pub fn is_user_registered(env: Env, user: Address) -> Result { + ReferralModule::is_user_registered(env, user) + } + + /// Retrieves detailed information about a user + /// + /// # Arguments + /// * `user` - The address of the user + pub fn get_user_info(env: Env, user: Address) -> Result { + ReferralModule::get_user_info(env, user) + } + + /// Gets a list of direct referrals for a user + /// + /// # Arguments + /// * `user` - The address of the user + pub fn get_direct_referrals(env: Env, user: Address) -> Result, Error> { + ReferralModule::get_direct_referrals(env, user) + } + + /// Gets the total team size (direct and indirect referrals) for a user + /// + /// # Arguments + /// * `user` - The address of the user + pub fn get_team_size(env: Env, user: Address) -> Result { + ReferralModule::get_team_size(env, user) + } + + /// Distributes rewards to a user and their upline + /// + /// # Arguments + /// * `user` - The address of the user + /// * `amount` - The amount of rewards to distribute + pub fn distribute_rewards(env: Env, user: Address, amount: i128) -> Result<(), Error> { + RewardModule::distribute_rewards(env, user, amount) + } + + /// Allows a user to claim their accumulated rewards + /// + /// # Arguments + /// * `user` - The address of the user claiming rewards + pub fn claim_rewards(env: Env, user: Address) -> Result { + RewardModule::claim_rewards(env, user) + } + + /// Gets the amount of pending rewards for a user + /// + /// # Arguments + /// * `user` - The address of the user + pub fn get_pending_rewards(env: Env, user: Address) -> Result { + RewardModule::get_pending_rewards(env, user) + } + + /// Gets the total rewards earned by a user + /// + /// # Arguments + /// * `user` - The address of the user + pub fn get_total_rewards(env: Env, user: Address) -> Result { + RewardModule::get_total_rewards(env, user) + } + + /// Checks and rewards any achieved milestones for a user + /// + /// # Arguments + /// * `user` - The address of the user + pub fn check_and_reward_milestone(env: Env, user: Address) -> Result<(), Error> { + RewardModule::check_and_reward_milestone(env, user) + } + + /// Gets the total number of users in the system + pub fn get_total_users(env: Env) -> Result { + ReferralModule::get_total_users(env) + } + + /// Gets the total amount of rewards distributed + pub fn get_total_distributed_rewards(env: Env) -> Result { + RewardModule::get_total_distributed_rewards(env) + } + + /// Gets various system metrics as key-value pairs + /// total_users, total_rewards, average_reward_per_user + /// + pub fn get_system_metrics(env: Env) -> Result, Error> { + ReferralModule::get_system_metrics(env) + } + + /// Gets the referral conversion rate for a user. verified users/registered users + /// + /// # Arguments + /// * `user` - The address of the user + pub fn get_referral_conversion_rate(env: Env, user: Address) -> Result { + ReferralModule::get_referral_conversion_rate(env, user) + } + + /// Gets the level of a user + /// + /// # Arguments + /// * `user` - The address of the user + pub fn get_user_level(env: Env, user: Address) -> Result { + ReferralModule::get_user_level(env, user) + } +} + +#[cfg(test)] +mod test; diff --git a/StarShopContracts/referral-contract/src/referral.rs b/StarShopContracts/referral-contract/src/referral.rs new file mode 100644 index 0000000..bf41759 --- /dev/null +++ b/StarShopContracts/referral-contract/src/referral.rs @@ -0,0 +1,302 @@ +use crate::admin::AdminModule; +use crate::level::LevelManagementModule; +use crate::rewards::RewardModule; +use crate::rewards::RewardOperations; +use crate::types::{DataKey, Error, UserData, UserLevel, VerificationStatus}; +use crate::verification::VerificationModule; +use soroban_sdk::{Address, Env, String, Vec}; + +pub struct ReferralModule; + +pub trait ReferralOperations { + /// Initialize contract + fn initialize(env: &Env, admin: &Address) -> Result<(), Error>; + + /// Register new user with referral + fn register_with_referral( + env: Env, + user: Address, + referrer_address: Address, + identity_proof: String, + ) -> Result<(), Error>; + + /// Check if user is verified + fn is_user_verified(env: Env, user: Address) -> Result; + + /// Check if user is registered + fn is_user_registered(env: Env, user: Address) -> Result; + + /// Get user's information + fn get_user_info(env: Env, user: Address) -> Result; + + /// Get user's direct referrals + fn get_direct_referrals(env: Env, user: Address) -> Result, Error>; + + /// Get user's team size (all levels) + fn get_team_size(env: Env, user: Address) -> Result; + + /// Get user's level + fn get_user_level(env: Env, user: Address) -> Result; + + /// Get total registered users + fn get_total_users(env: Env) -> Result; + + /// Get system statistics + fn get_system_metrics(env: Env) -> Result, Error>; + + /// Get user conversion rates + fn get_referral_conversion_rate(env: Env, user: Address) -> Result; +} + +impl ReferralOperations for ReferralModule { + fn initialize(env: &Env, admin: &Address) -> Result<(), Error> { + admin.require_auth(); + + // Create new user data + let user_data = UserData { + address: admin.clone(), + referrer: None, + direct_referrals: Vec::new(&env), + team_size: 0, + pending_rewards: 0, + total_rewards: 0, + level: UserLevel::Basic, + verification_status: VerificationStatus::Verified, + identity_proof: String::from_str(&env, ""), + join_date: env.ledger().timestamp(), + }; + + // Store user data + env.storage() + .persistent() + .set(&DataKey::User(admin.clone()), &user_data); + + // Increment total users + ReferralModule::increment_total_users(&env); + + Ok(()) + } + + fn register_with_referral( + env: Env, + user: Address, + referrer_address: Address, + identity_proof: String, + ) -> Result<(), Error> { + AdminModule::ensure_contract_active(&env)?; + user.require_auth(); + + // Check if user already exists + if ReferralModule::user_exists(&env, &user) { + return Err(Error::AlreadyRegistered); + } + + // Check if referrer exists + if !ReferralModule::user_exists(&env, &referrer_address) { + return Err(Error::ReferrerNotFound); + } + + // Check if referrer is verified + let referrer_data = ReferralModule::get_user_data(&env, &referrer_address)?; + ReferralModule::ensure_user_verified(&referrer_data)?; + + // Create new user data + let user_data = UserData { + address: user.clone(), + referrer: Some(referrer_address.clone()), + direct_referrals: Vec::new(&env), + team_size: 0, + pending_rewards: 0, + total_rewards: 0, + level: UserLevel::Basic, + verification_status: VerificationStatus::Pending, + identity_proof: identity_proof.clone(), + join_date: env.ledger().timestamp(), + }; + + // Store user data + env.storage() + .persistent() + .set(&DataKey::User(user.clone()), &user_data); + + // Update referrer's direct referrals and team size + Self::update_referrer_stats(&env, &referrer_address, &user)?; + + // Submit verification automatically + VerificationModule::add_to_pending_verifications(&env, &user); + + // Increment total users + ReferralModule::increment_total_users(&env); + + Ok(()) + } + + fn is_user_verified(env: Env, user: Address) -> Result { + ReferralModule::get_user_data(&env, &user) + .map(|data| data.verification_status == VerificationStatus::Verified) + } + + fn is_user_registered(env: Env, user: Address) -> Result { + Ok(ReferralModule::user_exists(&env, &user)) + } + + fn get_user_info(env: Env, user: Address) -> Result { + ReferralModule::get_user_data(&env, &user) + } + + fn get_direct_referrals(env: Env, user: Address) -> Result, Error> { + let user_data = ReferralModule::get_user_data(&env, &user)?; + Ok(user_data.direct_referrals) + } + + fn get_team_size(env: Env, user: Address) -> Result { + let user_data = ReferralModule::get_user_data(&env, &user)?; + Ok(user_data.team_size) + } + + fn get_user_level(env: Env, user: Address) -> Result { + let user_data = ReferralModule::get_user_data(&env, &user)?; + Ok(user_data.level) + } + + fn get_total_users(env: Env) -> Result { + Ok(env + .storage() + .instance() + .get::<_, u32>(&DataKey::TotalUsers) + .unwrap_or_default()) + } + fn get_system_metrics(env: Env) -> Result, Error> { + let mut metrics = Vec::new(&env); + + // Total users + let total_users = Self::get_total_users(env.clone())? as i128; + metrics.push_back((String::from_str(&env, "total_users"), total_users)); + + // Total rewards + let total_rewards = RewardModule::get_total_distributed_rewards(env.clone())?; + metrics.push_back(( + String::from_str(&env, "total_distributed_rewards"), + total_rewards, + )); + + // Average reward per user + let avg_reward = if total_users > 0 { + total_rewards / total_users + } else { + 0 + }; + metrics.push_back(( + String::from_str(&env, "average_reward_per_user"), + avg_reward, + )); + + Ok(metrics) + } + + fn get_referral_conversion_rate(env: Env, user: Address) -> Result { + let user_data = ReferralModule::get_user_data(&env, &user)?; + + if user_data.direct_referrals.len() == 0 { + return Ok(0); + } + + let mut verified_referrals = 0; + for referral in user_data.direct_referrals.iter() { + let referral_data = ReferralModule::get_user_data(&env, &referral)?; + if ReferralModule::user_verified(&referral_data) { + verified_referrals += 1; + } + } + + // Calculate conversion rate as percentage (0-100) + Ok((verified_referrals * 100) / user_data.direct_referrals.len() as u32) + } +} + +// Helper functions +impl ReferralModule { + fn update_referrer_stats( + env: &Env, + referrer: &Address, + new_user: &Address, + ) -> Result<(), Error> { + let mut referrer_data = ReferralModule::get_user_data(env, referrer)?; + + // Add to direct referrals + referrer_data.direct_referrals.push_back(new_user.clone()); + referrer_data.team_size += 1; + + // Check for level update + LevelManagementModule::check_and_update_level(env, &mut referrer_data)?; + + // Store updated referrer data + env.storage() + .persistent() + .set(&DataKey::User(referrer.clone()), &referrer_data); + + // Update upstream team sizes (for 3 levels) + if let Some(upline) = &referrer_data.referrer { + Self::update_upline_team_size(env, upline, 2)?; + } + + Ok(()) + } + + fn update_upline_team_size( + env: &Env, + user: &Address, + remaining_levels: u32, + ) -> Result<(), Error> { + if remaining_levels == 0 { + return Ok(()); + } + + let mut user_data = ReferralModule::get_user_data(env, user)?; + user_data.team_size += 1; + + env.storage() + .persistent() + .set(&DataKey::User(user.clone()), &user_data); + + if let Some(upline) = user_data.referrer { + Self::update_upline_team_size(env, &upline, remaining_levels - 1)?; + } + + Ok(()) + } + + pub fn increment_total_users(env: &Env) { + let current = env + .storage() + .instance() + .get::<_, u32>(&DataKey::TotalUsers) + .unwrap_or_default(); + + env.storage() + .instance() + .set(&DataKey::TotalUsers, &(current + 1)); + } + + pub fn get_user_data(env: &Env, user: &Address) -> Result { + env.storage() + .persistent() + .get(&DataKey::User(user.clone())) + .ok_or(Error::UserNotFound) + } + + pub fn user_exists(env: &Env, user: &Address) -> bool { + env.storage().persistent().has(&DataKey::User(user.clone())) + } + + pub fn ensure_user_verified(user_data: &UserData) -> Result<(), Error> { + if !ReferralModule::user_verified(user_data) { + return Err(Error::VerificationRequired); + } + Ok(()) + } + + pub fn user_verified(user_data: &UserData) -> bool { + matches!(user_data.verification_status, VerificationStatus::Verified) + } +} diff --git a/StarShopContracts/referral-contract/src/rewards.rs b/StarShopContracts/referral-contract/src/rewards.rs new file mode 100644 index 0000000..dd663c7 --- /dev/null +++ b/StarShopContracts/referral-contract/src/rewards.rs @@ -0,0 +1,255 @@ +use crate::admin::AdminModule; +use crate::level::LevelManagementModule; +use crate::referral::ReferralModule; +use crate::types::{DataKey, Error, Milestone, MilestoneRequirement, RewardRates}; +use soroban_sdk::token::Client as TokenClient; +use soroban_sdk::{Address, Env, Vec}; +pub struct RewardModule; +pub trait RewardOperations { + /// Distribute rewards for a referral + fn distribute_rewards(env: Env, user: Address, amount: i128) -> Result<(), Error>; + + /// Claim accumulated rewards + fn claim_rewards(env: Env, user: Address) -> Result; + + /// Get pending rewards balance + fn get_pending_rewards(env: Env, user: Address) -> Result; + + /// Get total rewards earned + fn get_total_rewards(env: Env, user: Address) -> Result; + + /// Check if milestone achieved and distribute rewards + fn check_and_reward_milestone(env: Env, user: Address) -> Result<(), Error>; + + /// Get total distributed rewards + fn get_total_distributed_rewards(env: Env) -> Result; +} + +impl RewardOperations for RewardModule { + fn distribute_rewards(env: Env, user: Address, amount: i128) -> Result<(), Error> { + AdminModule::ensure_contract_active(&env)?; + AdminModule::verify_admin(&env)?; + + // Get user data and verify + let user_data = ReferralModule::get_user_data(&env, &user)?; + ReferralModule::ensure_user_verified(&user_data)?; + + // Verify amount is positive + if amount <= 0 { + return Err(Error::InvalidAmount); + } + + let mut total_distributed = 0; + + // Get reward rates + let rates: RewardRates = env + .storage() + .instance() + .get(&DataKey::RewardRates) + .ok_or(Error::InvalidRewardRates)?; + + // Check if amount exceeds max reward per referral + if amount > rates.max_reward_per_referral { + return Err(Error::MaxRewardExceeded); + } + + // First reward the user themselves + let mut user_data = ReferralModule::get_user_data(&env, &user)?; + user_data.pending_rewards += amount; + user_data.total_rewards += amount; + total_distributed += amount; + + // Update storage for user + env.storage() + .persistent() + .set(&DataKey::User(user.clone()), &user_data); + + // Calculate and distribute rewards to upline (up to 3 levels) + let mut current_user = user_data.clone(); + let mut remaining_levels = 3; + + while let Some(upline_address) = current_user.referrer { + if remaining_levels == 0 { + break; + } + + let mut upline_data = ReferralModule::get_user_data(&env, &upline_address)?; + + // Calculate reward based on level + let reward_rate = match remaining_levels { + 3 => rates.level1, + 2 => rates.level2, + 1 => rates.level3, + _ => 0, + }; + + let reward_amount = (amount * reward_rate as i128) / 10000; // Convert basis points to actual percentage + upline_data.pending_rewards += reward_amount; + upline_data.total_rewards += reward_amount; + total_distributed += reward_amount; + + // Check and update level + LevelManagementModule::check_and_update_level(&env, &mut upline_data)?; + + // Update storage (only once) + env.storage() + .persistent() + .set(&DataKey::User(upline_address.clone()), &upline_data); + + current_user = upline_data; + remaining_levels -= 1; + } + + // Update total distributed rewards + RewardModule::add_distributed_rewards(&env, total_distributed); + + Ok(()) + } + + fn claim_rewards(env: Env, user: Address) -> Result { + AdminModule::ensure_contract_active(&env)?; + user.require_auth(); + + let mut user_data = ReferralModule::get_user_data(&env, &user)?; + ReferralModule::ensure_user_verified(&user_data)?; + + if user_data.pending_rewards <= 0 { + return Err(Error::InsufficientRewards); + } + + let amount = user_data.pending_rewards; + user_data.pending_rewards = 0; + + let reward_token = env + .storage() + .instance() + .get(&DataKey::RewardToken) + .ok_or(Error::InvalidRewardToken)?; + + // Transfer tokens to user + let token = TokenClient::new(&env, &reward_token); + token.transfer(&env.current_contract_address(), &user, &amount); + + // Update storage + env.storage() + .persistent() + .set(&DataKey::User(user), &user_data); + + Ok(amount) + } + + fn get_pending_rewards(env: Env, user: Address) -> Result { + let user_data = ReferralModule::get_user_data(&env, &user)?; + Ok(user_data.pending_rewards) + } + + fn get_total_rewards(env: Env, user: Address) -> Result { + let user_data = ReferralModule::get_user_data(&env, &user)?; + Ok(user_data.total_rewards) + } + + fn check_and_reward_milestone(env: Env, user: Address) -> Result<(), Error> { + user.require_auth(); + + let user_data = ReferralModule::get_user_data(&env, &user)?; + ReferralModule::ensure_user_verified(&user_data)?; + + let mut milestone_id = 0; + while env + .storage() + .instance() + .has(&DataKey::Milestone(milestone_id)) + { + // check if milestone already achieved + if RewardModule::has_achieved_milestone(&env, &user, milestone_id) { + milestone_id += 1; + continue; + } + + let milestone: Milestone = env + .storage() + .instance() + .get(&DataKey::Milestone(milestone_id)) + .unwrap(); + + // Check if user meets milestone requirements + let requirement_met = match milestone.requirement { + MilestoneRequirement::DirectReferrals(required) => { + user_data.direct_referrals.len() as u32 >= required + } + MilestoneRequirement::TeamSize(required) => user_data.team_size >= required, + MilestoneRequirement::TotalRewards(required) => user_data.total_rewards >= required, + MilestoneRequirement::ActiveDays(required) => { + let current_time = env.ledger().timestamp(); + (current_time - user_data.join_date) / (24 * 60 * 60) >= required + } + }; + + // If requirement met and user level matches or exceeds required level + if requirement_met && (user_data.level >= milestone.required_level) { + // Distribute milestone reward + let mut updated_user = user_data.clone(); + updated_user.pending_rewards += milestone.reward_amount; + updated_user.total_rewards += milestone.reward_amount; + + // Update user data + env.storage() + .persistent() + .set(&DataKey::User(user.clone()), &updated_user); + + // Update total distributed rewards + RewardModule::add_distributed_rewards(&env, milestone.reward_amount); + + // Mark milestone as achieved for this user + let mut updated_achieved = env + .storage() + .persistent() + .get::<_, Vec>(&DataKey::UserAchievedMilestones(user.clone())) + .unwrap_or_else(|| Vec::new(&env)); + + updated_achieved.push_back(milestone_id); + + env.storage().persistent().set( + &DataKey::UserAchievedMilestones(user.clone()), + &updated_achieved, + ); + + return Ok(()); + } + + milestone_id += 1; + } + + Ok(()) + } + + fn get_total_distributed_rewards(env: Env) -> Result { + Ok(env + .storage() + .instance() + .get::<_, i128>(&DataKey::TotalDistributedRewards) + .unwrap_or(0)) + } +} + +// Helper functions +impl RewardModule { + pub fn has_achieved_milestone(env: &Env, user: &Address, milestone_id: u32) -> bool { + env.storage() + .persistent() + .get::<_, Vec>(&DataKey::UserAchievedMilestones(user.clone())) + .map_or(false, |achieved| achieved.contains(&milestone_id)) + } + + pub fn add_distributed_rewards(env: &Env, amount: i128) { + let current = env + .storage() + .instance() + .get::<_, i128>(&DataKey::TotalDistributedRewards) + .unwrap_or_default(); + + env.storage() + .instance() + .set(&DataKey::TotalDistributedRewards, &(current + amount)); + } +} diff --git a/StarShopContracts/referral-contract/src/test.rs b/StarShopContracts/referral-contract/src/test.rs new file mode 100644 index 0000000..6870ae5 --- /dev/null +++ b/StarShopContracts/referral-contract/src/test.rs @@ -0,0 +1,272 @@ +use super::*; +use crate::types::{MilestoneRequirement, UserLevel}; +use soroban_sdk::{testutils::Address as _, Address, Env}; + +#[cfg(test)] +mod test_setup { + use super::*; + + pub fn setup_contract(e: &Env) -> (ReferralContractClient, Address, Address) { + let admin = Address::generate(e); + let token = e.register_stellar_asset_contract_v2(admin.clone()); + let contract_id = e.register(ReferralContract, {}); + let client = ReferralContractClient::new(e, &contract_id); + + e.mock_all_auths(); + + // Initialize first + let _ = client.initialize(&admin, &token.address()); + + // Set default reward rates after initializationclea + let rates = RewardRates { + level1: 500, // 5% + level2: 200, // 2% + level3: 100, // 1% + max_reward_per_referral: 1000000, + }; + + client.set_reward_rates(&rates); + + (client, admin, token.address()) + } +} + +mod test_admin { + use super::*; + + #[test] + #[should_panic(expected = "Error(Contract, #2)")] + fn test_initialization() { + let env = Env::default(); + let (contract, admin, token_address) = test_setup::setup_contract(&env); + + // Verify contract is initialized correctly + assert!(!contract.get_paused_state()); + + env.mock_all_auths(); + // Try to initialize again (should fail) + let _ = contract.initialize(&admin, &token_address); + } + + #[test] + fn test_pause_resume() { + let env = Env::default(); + let (contract, _, _) = test_setup::setup_contract(&env); + + env.mock_all_auths(); + // Test pause + contract.pause_contract(); + assert!(contract.get_paused_state()); + + // Test resume + contract.resume_contract(); + assert!(!contract.get_paused_state()); + } +} + +mod test_verification { + use super::*; + + #[test] + fn test_verification_flow() { + let env = Env::default(); + let (contract, admin, _) = test_setup::setup_contract(&env); + let user = Address::generate(&env); + + env.mock_all_auths(); + + // Register user with admin as referrer first + contract.register_with_referral(&user, &admin, &String::from_str(&env, "proof123")); + + // Check pending status + let status = contract.get_verification_status(&user); + assert!(matches!(status, VerificationStatus::Pending)); + + // Approve verification + contract.approve_verification(&user); + let status = contract.get_verification_status(&user); + assert!(matches!(status, VerificationStatus::Verified)); + } +} + +mod test_referral { + use super::*; + + #[test] + fn test_referral_registration() { + let env = Env::default(); + let (contract, admin, _) = test_setup::setup_contract(&env); + + env.mock_all_auths(); + // First user referred by admin + let user1 = Address::generate(&env); + contract.register_with_referral(&user1, &admin, &String::from_str(&env, "proof1")); + contract.approve_verification(&user1); + + env.mock_all_auths(); + // Second user referred by first user + let user2 = Address::generate(&env); + contract.register_with_referral(&user2, &user1, &String::from_str(&env, "proof2")); + + // Verify referral relationship + let user_info = contract.get_user_info(&user2); + assert_eq!(user_info.referrer, Some(user1)); + } + + #[test] + fn test_team_size_update() { + let env = Env::default(); + let (contract, admin, _) = test_setup::setup_contract(&env); + + env.mock_all_auths(); + // First user referred by admin + let user1 = Address::generate(&env); + contract.register_with_referral(&user1, &admin, &String::from_str(&env, "proof1")); + contract.approve_verification(&user1); + + // Register multiple referrals under first user + for _ in 0..3 { + env.mock_all_auths(); + let user = Address::generate(&env); + contract.register_with_referral(&user, &user1, &String::from_str(&env, "proof123")); + } + + // Check team size + let team_size = contract.get_team_size(&user1); + assert_eq!(team_size, 3); + } +} + +mod test_rewards { + use super::*; + + #[test] + fn test_reward_distribution() { + let env = Env::default(); + let (contract, admin, _) = test_setup::setup_contract(&env); + + env.mock_all_auths(); + // First user referred by admin + let user1 = Address::generate(&env); + contract.register_with_referral(&user1, &admin, &String::from_str(&env, "proof1")); + contract.approve_verification(&user1); + + env.mock_all_auths(); + // Second user referred by first user + let user2 = Address::generate(&env); + contract.register_with_referral(&user2, &user1, &String::from_str(&env, "proof2")); + contract.approve_verification(&user2); + + env.mock_all_auths(); + // Distribute rewards + contract.distribute_rewards(&user2, &1000); + + // Check rewards + let user1_rewards = contract.get_pending_rewards(&user1); + assert_eq!(user1_rewards, 50); // 5% of 1000 + } + + #[test] + fn test_milestone_achievement() { + let env = Env::default(); + let (contract, admin, _) = test_setup::setup_contract(&env); + + env.mock_all_auths(); + // Add milestone + let milestone = Milestone { + required_level: UserLevel::Basic, + requirement: MilestoneRequirement::DirectReferrals(2), + reward_amount: 1000, + description: String::from_str(&env, "First milestone"), + }; + contract.add_milestone(&milestone); + + // Setup user with required referrals + let user = Address::generate(&env); + contract.register_with_referral(&user, &admin, &String::from_str(&env, "proof1")); + contract.approve_verification(&user); + + // Add referrals + for _ in 0..2 { + let referral = Address::generate(&env); + contract.register_with_referral(&referral, &user, &String::from_str(&env, "proof")) + } + + // Check milestone + contract.check_and_reward_milestone(&user); + let user_rewards = contract.get_pending_rewards(&user); + assert_eq!(user_rewards, 1000); + } +} + +mod test_levels { + use super::*; + + #[test] + fn test_level_progression() { + let env = Env::default(); + let (contract, admin, _) = test_setup::setup_contract(&env); + + env.mock_all_auths(); + + let new_requirements = LevelRequirements { + silver: LevelCriteria { + required_direct_referrals: 5, + required_team_size: 5, + required_total_rewards: 0, + }, + gold: LevelCriteria { + required_direct_referrals: 10, + required_team_size: 50, + required_total_rewards: 5000, + }, + platinum: LevelCriteria { + required_direct_referrals: 20, + required_team_size: 100, + required_total_rewards: 20000, + }, + }; + contract.set_level_requirements(&new_requirements); + + // First user referred by admin + let user = Address::generate(&env); + contract.register_with_referral(&user, &admin, &String::from_str(&env, "proof1")); + contract.approve_verification(&user); + + // Add enough referrals for Silver + for _ in 0..6 { + let referral = Address::generate(&env); + contract.register_with_referral(&referral, &user, &String::from_str(&env, "proof1243")); + contract.approve_verification(&referral); + } + + // Check level upgrade + let user_level = contract.get_user_level(&user); + assert_eq!(user_level, UserLevel::Silver); + } +} + +mod test_metrics { + use super::*; + + #[test] + fn test_system_metrics() { + let env = Env::default(); + let (contract, admin, _) = test_setup::setup_contract(&env); + + env.mock_all_auths(); + + for _ in 0..3 { + let user = Address::generate(&env); + contract.register_with_referral(&user, &admin, &String::from_str(&env, "proof")); + contract.approve_verification(&user); + } + + // Check metrics + let total_users = contract.get_total_users(); + assert_eq!(total_users, 4); // referrer + 3 referrals + + let conversion_rate = contract.get_referral_conversion_rate(&admin); + assert_eq!(conversion_rate, 100); // All referrals are verified + } +} diff --git a/StarShopContracts/referral-contract/src/types.rs b/StarShopContracts/referral-contract/src/types.rs new file mode 100644 index 0000000..0550d8c --- /dev/null +++ b/StarShopContracts/referral-contract/src/types.rs @@ -0,0 +1,125 @@ +use soroban_sdk::{contracterror, contracttype, Address, String, Vec}; + +/// User verification status in the system +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum VerificationStatus { + Pending, // Initial state when verification is submitted + Verified, // User has passed verification + Rejected(String), // User was rejected with reason +} + +/// User levels with increasing benefits +/// Higher levels require stricter criteria and offer better rewards +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] +pub enum UserLevel { + Basic = 0, // New users, basic commission rates + Silver = 1, // Intermediate level, improved rates + Gold = 2, // Advanced level, premium rates + Platinum = 3, // Highest level, maximum benefits +} + +/// Core user data structure containing all user-related information +#[contracttype] +#[derive(Clone)] +pub struct UserData { + pub address: Address, // User's blockchain address + pub referrer: Option
, // Address of user's referrer + pub direct_referrals: Vec
, // List of direct referrals + pub team_size: u32, // Total team size (all levels) + pub pending_rewards: i128, // Unclaimed rewards + pub total_rewards: i128, // All-time earned rewards + pub level: UserLevel, // Current user level + pub verification_status: VerificationStatus, // KYC status + pub identity_proof: String, // Verification documents hash + pub join_date: u64, // Registration timestamp +} + +/// Milestone achievement criteria and rewards +#[contracttype] +#[derive(Clone)] +pub struct Milestone { + pub required_level: UserLevel, // Minimum level required + pub requirement: MilestoneRequirement, // Achievement criteria + pub reward_amount: i128, // Reward for completion + pub description: String, // Milestone description +} + +/// Different types of milestone requirements +#[contracttype] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum MilestoneRequirement { + DirectReferrals(u32), // Number of direct referrals needed + TeamSize(u32), // Total team size required + TotalRewards(i128), // Cumulative rewards threshold + ActiveDays(u64), // Days of activity required +} + +/// Storage keys for contract data +#[contracttype] +pub enum DataKey { + Admin, // Contract administrator + TotalUsers, // Total registered users + RewardToken, // Token used for rewards + RewardRates, // Commission rates config + User(Address), // User data storage + Milestone(u32), // Milestone data + ContractPaused, // Contract pause status + TotalDistributedRewards, // Total rewards given + UserAchievedMilestones(Address), // User's completed milestones + PendingVerifications(Vec
), // Users awaiting verification + LevelRequirements, // Level upgrade criteria +} + +/// Commission rates for different referral levels +#[contracttype] +#[derive(Clone)] +pub struct RewardRates { + pub level1: u32, // Direct referral rate (basis points) + pub level2: u32, // Second level rate + pub level3: u32, // Third level rate + pub max_reward_per_referral: i128, // Maximum reward cap +} + +/// Criteria for level upgrades +#[contracttype] +#[derive(Clone)] +pub struct LevelCriteria { + pub required_direct_referrals: u32, // Minimum direct referrals + pub required_team_size: u32, // Minimum total team size + pub required_total_rewards: i128, // Minimum earned rewards +} + +/// Requirements for each level upgrade +#[contracttype] +pub struct LevelRequirements { + pub silver: LevelCriteria, // Requirements for Silver + pub gold: LevelCriteria, // Requirements for Gold + pub platinum: LevelCriteria, // Requirements for Platinum +} + +/// Contract error types +#[contracterror] +#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)] +#[repr(u32)] +pub enum Error { + NotInitialized = 1, // Contract not initialized + AlreadyInitialized = 2, // Contract already setup + Unauthorized = 3, // Caller lacks permission + AlreadyRegistered = 4, // User already exists + UserNotFound = 5, // User doesn't exist + MilestoneNotFound = 6, // Milestone not found + InvalidAmount = 7, // Invalid reward amount + VerificationRequired = 8, // Action needs verification + AlreadyVerified = 9, // Already verified + InvalidIdentityProof = 10, // Invalid KYC documents + InsufficientRewards = 11, // Not enough rewards + InvalidRewardRates = 12, // Invalid commission rates + MaxRewardExceeded = 13, // Reward cap reached + ReferrerNotVerified = 14, // Referrer needs verification + ReferrerNotFound = 15, // Referrer doesn't exist + InvalidLevelRequirements = 16, // Invalid level criteria + ContractPaused = 17, // Contract is paused + InvalidRewardToken = 18, // Invalid token address +} diff --git a/StarShopContracts/referral-contract/src/verification.rs b/StarShopContracts/referral-contract/src/verification.rs new file mode 100644 index 0000000..bdf740a --- /dev/null +++ b/StarShopContracts/referral-contract/src/verification.rs @@ -0,0 +1,135 @@ +use crate::admin::*; +use crate::referral::ReferralModule; +use crate::types::{DataKey, Error, UserData, VerificationStatus}; +use soroban_sdk::{Address, Env, String, Vec}; + +pub struct VerificationModule; + +pub trait VerificationOperations { + /// Submit verification documents for review + fn submit_verification(env: Env, user: Address, identity_proof: String) -> Result<(), Error>; + + /// Admin approval of user verification + fn approve_verification(env: Env, user: Address) -> Result<(), Error>; + + /// Admin rejection of user verification with reason + fn reject_verification(env: Env, user: Address, reason: String) -> Result<(), Error>; + + /// Get user's verification status + fn get_verification_status(env: Env, user: Address) -> Result; + + /// Get list of pending verifications + fn get_pending_verifications(env: Env) -> Result, Error>; +} + +impl VerificationOperations for VerificationModule { + fn submit_verification(env: Env, user: Address, identity_proof: String) -> Result<(), Error> { + AdminModule::ensure_contract_active(&env)?; + user.require_auth(); + + let mut user_data = ReferralModule::get_user_data(&env, &user)?; + Self::process_verification(&env, &mut user_data, &identity_proof) + } + + fn approve_verification(env: Env, user: Address) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + + let mut user_data = ReferralModule::get_user_data(&env, &user)?; + user_data.verification_status = VerificationStatus::Verified; + + env.storage() + .persistent() + .set(&DataKey::User(user.clone()), &user_data); + Self::remove_from_pending_verifications(&env, &user); + + Ok(()) + } + + fn reject_verification(env: Env, user: Address, reason: String) -> Result<(), Error> { + AdminModule::verify_admin(&env)?; + + let mut user_data = ReferralModule::get_user_data(&env, &user)?; + user_data.verification_status = VerificationStatus::Rejected(reason); + + env.storage() + .persistent() + .set(&DataKey::User(user.clone()), &user_data); + Self::remove_from_pending_verifications(&env, &user); + + Ok(()) + } + + fn get_verification_status(env: Env, user: Address) -> Result { + let user_data = ReferralModule::get_user_data(&env, &user)?; + Ok(user_data.verification_status) + } + + fn get_pending_verifications(env: Env) -> Result, Error> { + AdminModule::verify_admin(&env)?; + + Ok(env + .storage() + .instance() + .get(&DataKey::PendingVerifications(Vec::new(&env))) + .unwrap_or_else(|| Vec::new(&env))) + } +} + +// Helper functions +impl VerificationModule { + pub fn process_verification( + env: &Env, + user: &mut UserData, + identity_proof: &String, + ) -> Result<(), Error> { + match user.verification_status { + VerificationStatus::Verified => return Err(Error::AlreadyVerified), + VerificationStatus::Pending => return Err(Error::AlreadyVerified), + VerificationStatus::Rejected(_) => (), + } + + user.verification_status = VerificationStatus::Pending; + user.identity_proof = identity_proof.clone(); + + env.storage() + .persistent() + .set(&DataKey::User(user.address.clone()), user); + Self::add_to_pending_verifications(&env, &user.address); + + Ok(()) + } + + //add user to pending verifications + pub fn add_to_pending_verifications(env: &Env, user: &Address) { + let mut pending = env + .storage() + .instance() + .get::<_, Vec
>(&DataKey::PendingVerifications(Vec::new(env))) + .unwrap_or_else(|| Vec::new(env)); + + pending.push_back(user.clone()); + env.storage() + .instance() + .set(&DataKey::PendingVerifications(Vec::new(env)), &pending); + } + + fn remove_from_pending_verifications(env: &Env, user: &Address) { + let pending = env + .storage() + .instance() + .get::<_, Vec
>(&DataKey::PendingVerifications(Vec::new(env))) + .unwrap_or_else(|| Vec::new(env)); + + // Remove the user from pending verifications + let mut new_pending = Vec::new(env); + for addr in pending.iter() { + if &addr != user { + new_pending.push_back(addr); + } + } + + env.storage() + .instance() + .set(&DataKey::PendingVerifications(Vec::new(env)), &new_pending); + } +} diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_admin/test_initialization.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_admin/test_initialization.1.json new file mode 100644 index 0000000..d5d9a02 --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_admin/test_initialization.1.json @@ -0,0 +1,764 @@ +{ + "generators": { + "address": 3, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_admin/test_pause_resume.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_admin/test_pause_resume.1.json new file mode 100644 index 0000000..618717e --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_admin/test_pause_resume.1.json @@ -0,0 +1,860 @@ +{ + "generators": { + "address": 3, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "pause_contract", + "args": [] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "resume_contract", + "args": [] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 1 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_levels/test_level_progression.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_levels/test_level_progression.1.json new file mode 100644 index 0000000..e521a0b --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_levels/test_level_progression.1.json @@ -0,0 +1,2684 @@ +{ + "generators": { + "address": 10, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_level_requirements", + "args": [ + { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof1" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof1243" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof1243" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof1243" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof1243" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof1243" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof1243" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1194852393571756375 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1194852393571756375 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2781962168096793370 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2781962168096793370 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 3126073502131104533 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 3126073502131104533 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6391496069076573377 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6391496069076573377 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6517132746326325848 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6517132746326325848 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 7 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 6 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1243" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1243" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1243" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1243" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1243" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1243" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingVerifications" + }, + { + "vec": [] + } + ] + }, + "val": { + "vec": [] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 8 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM", + "key": { + "ledger_key_nonce": { + "nonce": 115220454072064130 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM", + "key": { + "ledger_key_nonce": { + "nonce": 115220454072064130 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": { + "ledger_key_nonce": { + "nonce": 1301173170172112462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQG5", + "key": { + "ledger_key_nonce": { + "nonce": 1301173170172112462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "ledger_key_nonce": { + "nonce": 7270604957039011794 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATYON", + "key": { + "ledger_key_nonce": { + "nonce": 7270604957039011794 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2307661404550649928 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAX5", + "key": { + "ledger_key_nonce": { + "nonce": 2307661404550649928 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_metrics/test_system_metrics.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_metrics/test_system_metrics.1.json new file mode 100644 index 0000000..12d726a --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_metrics/test_system_metrics.1.json @@ -0,0 +1,1527 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingVerifications" + }, + { + "vec": [] + } + ] + }, + "val": { + "vec": [] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 4 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_referral/test_referral_registration.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_referral/test_referral_registration.1.json new file mode 100644 index 0000000..0f8cc39 --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_referral/test_referral_registration.1.json @@ -0,0 +1,1230 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof1" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof2" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof2" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingVerifications" + }, + { + "vec": [] + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 3 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_referral/test_team_size_update.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_referral/test_team_size_update.1.json new file mode 100644 index 0000000..008f56b --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_referral/test_team_size_update.1.json @@ -0,0 +1,1630 @@ +{ + "generators": { + "address": 7, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof1" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof123" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof123" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof123" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 4 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof123" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof123" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof123" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingVerifications" + }, + { + "vec": [] + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM" + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 5 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLZM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_rewards/test_milestone_achievement.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_rewards/test_milestone_achievement.1.json new file mode 100644 index 0000000..8061f26 --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_rewards/test_milestone_achievement.1.json @@ -0,0 +1,1699 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "add_milestone", + "args": [ + { + "map": [ + { + "key": { + "symbol": "description" + }, + "val": { + "string": "First milestone" + } + }, + { + "key": { + "symbol": "required_level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "requirement" + }, + "val": { + "vec": [ + { + "symbol": "DirectReferrals" + }, + { + "u32": 2 + } + ] + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof1" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "check_and_reward_milestone", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Pending" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "UserAchievedMilestones" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "UserAchievedMilestones" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u32": 0 + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Milestone" + }, + { + "u32": 0 + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "description" + }, + "val": { + "string": "First milestone" + } + }, + { + "key": { + "symbol": "required_level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "requirement" + }, + "val": { + "vec": [ + { + "symbol": "DirectReferrals" + }, + { + "u32": 2 + } + ] + } + }, + { + "key": { + "symbol": "reward_amount" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingVerifications" + }, + { + "vec": [] + } + ] + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalDistributedRewards" + } + ] + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 4 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 5806905060045992000 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_rewards/test_reward_distribution.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_rewards/test_reward_distribution.1.json new file mode 100644 index 0000000..20d73f2 --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_rewards/test_reward_distribution.1.json @@ -0,0 +1,1351 @@ +{ + "generators": { + "address": 5, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof1" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "string": "proof2" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "distribute_rewards", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + }, + { + "i128": { + "hi": 0, + "lo": 1000 + } + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 6277191135259896685 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 8370022561469687789 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof1" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 50 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 50 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof2" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingVerifications" + }, + { + "vec": [] + } + ] + }, + "val": { + "vec": [] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalDistributedRewards" + } + ] + }, + "val": { + "i128": { + "hi": 0, + "lo": 1070 + } + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 3 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK3IM", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/StarShopContracts/referral-contract/test_snapshots/test/test_verification/test_verification_flow.1.json b/StarShopContracts/referral-contract/test_snapshots/test/test_verification/test_verification_flow.1.json new file mode 100644 index 0000000..7c1e276 --- /dev/null +++ b/StarShopContracts/referral-contract/test_snapshots/test/test_verification/test_verification_flow.1.json @@ -0,0 +1,1029 @@ +{ + "generators": { + "address": 4, + "nonce": 0 + }, + "auth": [ + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + { + "function": { + "contract_fn": { + "contract_address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "initialize", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "set_reward_rates", + "args": [ + { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "register_with_referral", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + }, + { + "string": "proof123" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "function_name": "approve_verification", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [] + ], + "ledger": { + "protocol_version": 22, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": "void" + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": { + "vec": [ + { + "symbol": "User" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "symbol": "direct_referrals" + }, + "val": { + "vec": [] + } + }, + { + "key": { + "symbol": "identity_proof" + }, + "val": { + "string": "proof123" + } + }, + { + "key": { + "symbol": "join_date" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "level" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "pending_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "referrer" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "symbol": "team_size" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + }, + { + "key": { + "symbol": "verification_status" + }, + "val": { + "vec": [ + { + "symbol": "Verified" + } + ] + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "ContractPaused" + } + ] + }, + "val": { + "bool": false + } + }, + { + "key": { + "vec": [ + { + "symbol": "LevelRequirements" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "gold" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 10 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 50 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 5000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "platinum" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 20 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 20000 + } + } + } + ] + } + }, + { + "key": { + "symbol": "silver" + }, + "val": { + "map": [ + { + "key": { + "symbol": "required_direct_referrals" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "required_team_size" + }, + "val": { + "u32": 15 + } + }, + { + "key": { + "symbol": "required_total_rewards" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000 + } + } + } + ] + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "PendingVerifications" + }, + { + "vec": [] + } + ] + }, + "val": { + "vec": [] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardRates" + } + ] + }, + "val": { + "map": [ + { + "key": { + "symbol": "level1" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "level2" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "level3" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "max_reward_per_referral" + }, + "val": { + "i128": { + "hi": 0, + "lo": 1000000 + } + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "RewardToken" + } + ] + }, + "val": { + "address": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL" + } + }, + { + "key": { + "vec": [ + { + "symbol": "TotalUsers" + } + ] + }, + "val": { + "u32": 2 + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CBEPDNVYXQGWB5YUBXKJWYJA7OXTZW5LFLNO5JRRGE6Z6C5OSUZPCCEL", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEGWF" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000002" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 4095 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file