From 67010387df7a0eeedde611b98ba305f8f034678e Mon Sep 17 00:00:00 2001 From: Nemenwq Date: Mon, 30 Mar 2026 11:10:58 +0100 Subject: [PATCH 1/2] Define Storage Types and Data Keys --- contract/src/storage_types.rs | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/contract/src/storage_types.rs b/contract/src/storage_types.rs index 6709661f..b15d8ec2 100644 --- a/contract/src/storage_types.rs +++ b/contract/src/storage_types.rs @@ -64,6 +64,13 @@ pub enum DataKey { SwapHistory(u64), /// Keyed by market_id. Stores rolling 24h pool volume. PoolVolume(u64), + + // Conditional Market keys + ConditionalMarket(u64), // market_id -> ConditionalMarket + ConditionalChildren(u64), // parent_market_id -> Vec + ConditionalParent(u64), // market_id -> u64 (parent_market_id) + ConditionalChain(u64), // market_id -> ConditionalChain + ConditionalDepth(u64), // market_id -> u32 } #[contracttype] @@ -517,3 +524,49 @@ impl InviteCode { } } } + +// ── Conditional Market Types ────────────────────────────────────────────────── + +#[contracttype] +#[derive(Clone, Debug, PartialEq)] +pub struct ConditionalMarket { + pub market_id: u64, + pub parent_market_id: u64, + pub required_outcome: Symbol, + pub is_activated: bool, + pub activation_time: Option, + pub conditional_depth: u32, + pub created_at: u64, +} + +impl ConditionalMarket { + pub fn new( + market_id: u64, + parent_market_id: u64, + required_outcome: Symbol, + conditional_depth: u32, + created_at: u64, + ) -> Self { + Self { + market_id, + parent_market_id, + required_outcome, + is_activated: false, + activation_time: None, + conditional_depth, + created_at, + } + } + + pub fn activate(&mut self, activation_time: u64) { + self.is_activated = true; + self.activation_time = Some(activation_time); + } +} + +#[contracttype] +#[derive(Clone, Debug, PartialEq)] +pub struct ConditionalChain { + pub market_ids: Vec, + pub depth: u32, +} From 7c0f7ddc85f6c55cd4ce566a19cd416250e2a0b9 Mon Sep 17 00:00:00 2001 From: Lynndabel Date: Mon, 30 Mar 2026 11:35:07 +0100 Subject: [PATCH 2/2] validation test --- contract/src/conditional.rs | 101 + contract/src/errors.rs | 4 + contract/src/lib.rs | 13 + ...ditional_market_exceeds_depth_fails.1.json | 3887 +++++++++++++++++ ...tional_market_invalid_outcome_fails.1.json | 957 ++++ ...itional_market_invalid_parent_fails.1.json | 400 ++ ...tional_market_resolved_parent_fails.1.json | 959 ++++ contract/tests/conditional_tests.rs | 170 + 8 files changed, 6491 insertions(+) create mode 100644 contract/src/conditional.rs create mode 100644 contract/test_snapshots/test_create_conditional_market_exceeds_depth_fails.1.json create mode 100644 contract/test_snapshots/test_create_conditional_market_invalid_outcome_fails.1.json create mode 100644 contract/test_snapshots/test_create_conditional_market_invalid_parent_fails.1.json create mode 100644 contract/test_snapshots/test_create_conditional_market_resolved_parent_fails.1.json create mode 100644 contract/tests/conditional_tests.rs diff --git a/contract/src/conditional.rs b/contract/src/conditional.rs new file mode 100644 index 00000000..871b9685 --- /dev/null +++ b/contract/src/conditional.rs @@ -0,0 +1,101 @@ +#![allow(unused_imports)] +use soroban_sdk::{Address, Env, Symbol, Vec}; + +use crate::config; +use crate::errors::InsightArenaError; +use crate::market; +use crate::storage_types::{ConditionalMarket, DataKey, Market}; +use crate::ttl; + +// ── Constants ───────────────────────────────────────────────────────────────── + +/// Maximum depth of conditional market chains +pub const MAX_CONDITIONAL_DEPTH: u32 = 5; + +/// Maximum number of conditional markets per parent +pub const MAX_CONDITIONALS_PER_PARENT: u32 = 50; + +// ── Conditional Market Creation ────────────────────────────────────────────── + +use crate::market::CreateMarketParams; + +pub fn create_conditional_market( + env: &Env, + creator: Address, + parent_market_id: u64, + required_outcome: Symbol, + params: CreateMarketParams, +) -> Result { + let parent_market: Market = env + .storage() + .persistent() + .get(&DataKey::Market(parent_market_id)) + .ok_or(InsightArenaError::MarketNotFound)?; + + if parent_market.is_resolved { + return Err(InsightArenaError::MarketExpired); + } + + if !parent_market.outcome_options.contains(required_outcome.clone()) { + return Err(InsightArenaError::InvalidOutcome); + } + + let mut depth = 1; + if let Some(parent_cond) = env + .storage() + .persistent() + .get::<_, ConditionalMarket>(&DataKey::ConditionalMarket(parent_market_id)) + { + depth = parent_cond.conditional_depth + 1; + if depth > MAX_CONDITIONAL_DEPTH { + return Err(InsightArenaError::ConditionalDepthExceeded); + } + } + + let market_id = crate::market::create_market(env, creator, params)?; + + let conditional_market = ConditionalMarket::new( + market_id, + parent_market_id, + required_outcome, + depth, + env.ledger().timestamp(), + ); + env.storage() + .persistent() + .set(&DataKey::ConditionalMarket(market_id), &conditional_market); + + let children_key = DataKey::ConditionalChildren(parent_market_id); + let mut children: Vec = env + .storage() + .persistent() + .get(&children_key) + .unwrap_or_else(|| Vec::new(env)); + children.push_back(market_id); + env.storage().persistent().set(&children_key, &children); + + env.storage().persistent().set(&DataKey::ConditionalParent(market_id), &parent_market_id); + + Ok(market_id) +} + +// TODO: validate_conditional_params +// TODO: link_conditional_market + +// ── Activation Logic ────────────────────────────────────────────────────────── + +// TODO: check_conditional_activation +// TODO: activate_conditional_market +// TODO: deactivate_conditional_market + +// ── Query Functions ─────────────────────────────────────────────────────────── + +// TODO: get_conditional_markets +// TODO: get_parent_market +// TODO: get_conditional_chain +// TODO: is_conditional_market + +// ── Helper Functions ────────────────────────────────────────────────────────── + +// TODO: calculate_conditional_depth +// TODO: validate_no_circular_dependency diff --git a/contract/src/errors.rs b/contract/src/errors.rs index c6da2b3f..05928e26 100644 --- a/contract/src/errors.rs +++ b/contract/src/errors.rs @@ -128,4 +128,8 @@ pub enum InsightArenaError { /// A supplied argument fails basic validation that is not covered by a more /// specific error code (e.g. empty strings, zero-length outcome lists). InvalidInput = 102, + + // ── Conditional Markets ─────────────────────────────────────────────────── + /// The maximum allowed depth for nested conditional markets has been exceeded. + ConditionalDepthExceeded = 103, } diff --git a/contract/src/lib.rs b/contract/src/lib.rs index beda721a..502b39d6 100644 --- a/contract/src/lib.rs +++ b/contract/src/lib.rs @@ -2,6 +2,7 @@ #![allow(non_snake_case)] pub mod analytics; +pub mod conditional; pub mod config; pub mod dispute; pub mod errors; @@ -173,6 +174,18 @@ impl InsightArenaContract { market::cancel_market(&env, caller, market_id) } + // ── Conditional Markets ─────────────────────────────────────────────────── + + pub fn create_conditional_market( + env: Env, + creator: Address, + parent_market_id: u64, + required_outcome: Symbol, + params: CreateMarketParams, + ) -> Result { + conditional::create_conditional_market(&env, creator, parent_market_id, required_outcome, params) + } + // ── Dispute ─────────────────────────────────────────────────────────────── /// File a dispute within the market's post-resolution dispute window. diff --git a/contract/test_snapshots/test_create_conditional_market_exceeds_depth_fails.1.json b/contract/test_snapshots/test_create_conditional_market_exceeds_depth_fails.1.json new file mode 100644 index 00000000..549828e9 --- /dev/null +++ b/contract/test_snapshots/test_create_conditional_market_exceeds_depth_fails.1.json @@ -0,0 +1,3887 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_conditional_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 1 + }, + { + "symbol": "yes" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_conditional_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 2 + }, + { + "symbol": "yes" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_conditional_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 3 + }, + { + "symbol": "yes" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_conditional_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 4 + }, + { + "symbol": "yes" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_conditional_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "u64": 5 + }, + { + "symbol": "yes" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CategoryIndex" + }, + { + "symbol": "Sports" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CategoryIndex" + }, + { + "symbol": "Sports" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 1 + }, + { + "u64": 2 + }, + { + "u64": 3 + }, + { + "u64": 4 + }, + { + "u64": 5 + }, + { + "u64": 6 + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 2 + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 3 + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 4 + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 5 + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalChildren" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 6 + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "activation_time" + }, + "val": "void" + }, + { + "key": { + "symbol": "conditional_depth" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "is_activated" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "parent_market_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "required_outcome" + }, + "val": { + "symbol": "yes" + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "activation_time" + }, + "val": "void" + }, + { + "key": { + "symbol": "conditional_depth" + }, + "val": { + "u32": 2 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "is_activated" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 3 + } + }, + { + "key": { + "symbol": "parent_market_id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "required_outcome" + }, + "val": { + "symbol": "yes" + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "activation_time" + }, + "val": "void" + }, + { + "key": { + "symbol": "conditional_depth" + }, + "val": { + "u32": 3 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "is_activated" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 4 + } + }, + { + "key": { + "symbol": "parent_market_id" + }, + "val": { + "u64": 3 + } + }, + { + "key": { + "symbol": "required_outcome" + }, + "val": { + "symbol": "yes" + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "activation_time" + }, + "val": "void" + }, + { + "key": { + "symbol": "conditional_depth" + }, + "val": { + "u32": 4 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "is_activated" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 5 + } + }, + { + "key": { + "symbol": "parent_market_id" + }, + "val": { + "u64": 4 + } + }, + { + "key": { + "symbol": "required_outcome" + }, + "val": { + "symbol": "yes" + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalMarket" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "activation_time" + }, + "val": "void" + }, + { + "key": { + "symbol": "conditional_depth" + }, + "val": { + "u32": 5 + } + }, + { + "key": { + "symbol": "created_at" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "is_activated" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 6 + } + }, + { + "key": { + "symbol": "parent_market_id" + }, + "val": { + "u64": 5 + } + }, + { + "key": { + "symbol": "required_outcome" + }, + "val": { + "symbol": "yes" + } + } + ] + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent", + "val": { + "u64": 1 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent", + "val": { + "u64": 2 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent", + "val": { + "u64": 3 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent", + "val": { + "u64": 4 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "ConditionalParent" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent", + "val": { + "u64": 5 + } + } + }, + "ext": "v0" + }, + 4095 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "is_paused" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "max_creator_fee_bps" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "min_stake_xlm" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "oracle_address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "protocol_fee_bps" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "xlm_token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + } + ] + } + } + }, + "ext": "v0" + }, + 5184000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CreatorStats" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CreatorStats" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "average_participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "dispute_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "markets_created" + }, + "val": { + "u32": 6 + } + }, + { + "key": { + "symbol": "markets_resolved" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "reputation_score" + }, + "val": { + "u32": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 2 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 2 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 3 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 3 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 4 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 4 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 5 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 5 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 6 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 6 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "MarketCount" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "MarketCount" + } + ] + }, + "durability": "persistent", + "val": { + "u64": 6 + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Categories" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "Sports" + }, + { + "symbol": "Crypto" + }, + { + "symbol": "Politics" + }, + { + "symbol": "Entertainment" + }, + { + "symbol": "Science" + }, + { + "symbol": "Other" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 1033654523790656264 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 2032731177588607455 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4270020994084947596 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 4837995959683129791 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "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": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contract/test_snapshots/test_create_conditional_market_invalid_outcome_fails.1.json b/contract/test_snapshots/test_create_conditional_market_invalid_outcome_fails.1.json new file mode 100644 index 00000000..5c7194d6 --- /dev/null +++ b/contract/test_snapshots/test_create_conditional_market_invalid_outcome_fails.1.json @@ -0,0 +1,957 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CategoryIndex" + }, + { + "symbol": "Sports" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CategoryIndex" + }, + { + "symbol": "Sports" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 1 + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "is_paused" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "max_creator_fee_bps" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "min_stake_xlm" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "oracle_address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "protocol_fee_bps" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "xlm_token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + } + ] + } + } + }, + "ext": "v0" + }, + 5184000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CreatorStats" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CreatorStats" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "average_participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "dispute_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "markets_created" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "markets_resolved" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "reputation_score" + }, + "val": { + "u32": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "MarketCount" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "MarketCount" + } + ] + }, + "durability": "persistent", + "val": { + "u64": 1 + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Categories" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "Sports" + }, + { + "symbol": "Crypto" + }, + { + "symbol": "Politics" + }, + { + "symbol": "Entertainment" + }, + { + "symbol": "Science" + }, + { + "symbol": "Other" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contract/test_snapshots/test_create_conditional_market_invalid_parent_fails.1.json b/contract/test_snapshots/test_create_conditional_market_invalid_parent_fails.1.json new file mode 100644 index 00000000..1f4c3abf --- /dev/null +++ b/contract/test_snapshots/test_create_conditional_market_invalid_parent_fails.1.json @@ -0,0 +1,400 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "is_paused" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "max_creator_fee_bps" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "min_stake_xlm" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "oracle_address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "protocol_fee_bps" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "xlm_token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + } + ] + } + } + }, + "ext": "v0" + }, + 5184000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Categories" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "Sports" + }, + { + "symbol": "Crypto" + }, + { + "symbol": "Politics" + }, + { + "symbol": "Entertainment" + }, + { + "symbol": "Science" + }, + { + "symbol": "Other" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contract/test_snapshots/test_create_conditional_market_resolved_parent_fails.1.json b/contract/test_snapshots/test_create_conditional_market_resolved_parent_fails.1.json new file mode 100644 index 00000000..e715459c --- /dev/null +++ b/contract/test_snapshots/test_create_conditional_market_resolved_parent_fails.1.json @@ -0,0 +1,959 @@ +{ + "generators": { + "address": 6, + "nonce": 0 + }, + "auth": [ + [], + [ + [ + "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + { + "function": { + "contract_fn": { + "contract_address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "function_name": "set_admin", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + ] + } + }, + "sub_invocations": [] + } + ] + ], + [], + [ + [ + "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + { + "function": { + "contract_fn": { + "contract_address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "function_name": "create_market", + "args": [ + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + }, + { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcomes" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + } + ] + } + ] + } + }, + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "account": { + "account_id": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "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": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV", + "key": { + "ledger_key_nonce": { + "nonce": 801925984706572462 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CategoryIndex" + }, + { + "symbol": "Sports" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CategoryIndex" + }, + { + "symbol": "Sports" + } + ] + }, + "durability": "persistent", + "val": { + "vec": [ + { + "u64": 1 + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Config" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "admin" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCT4" + } + }, + { + "key": { + "symbol": "is_paused" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "max_creator_fee_bps" + }, + "val": { + "u32": 500 + } + }, + { + "key": { + "symbol": "min_stake_xlm" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "oracle_address" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHK3M" + } + }, + { + "key": { + "symbol": "protocol_fee_bps" + }, + "val": { + "u32": 200 + } + }, + { + "key": { + "symbol": "xlm_token" + }, + "val": { + "address": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG" + } + } + ] + } + } + }, + "ext": "v0" + }, + 5184000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CreatorStats" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "CreatorStats" + }, + { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "average_participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "dispute_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "markets_created" + }, + "val": { + "u32": 1 + } + }, + { + "key": { + "symbol": "markets_resolved" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "reputation_score" + }, + "val": { + "u32": 0 + } + } + ] + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "Market" + }, + { + "u64": 1 + } + ] + }, + "durability": "persistent", + "val": { + "map": [ + { + "key": { + "symbol": "category" + }, + "val": { + "symbol": "Sports" + } + }, + { + "key": { + "symbol": "creator" + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4" + } + }, + { + "key": { + "symbol": "creator_fee_bps" + }, + "val": { + "u32": 100 + } + }, + { + "key": { + "symbol": "description" + }, + "val": { + "string": "Daily weather market" + } + }, + { + "key": { + "symbol": "dispute_window" + }, + "val": { + "u64": 86400 + } + }, + { + "key": { + "symbol": "end_time" + }, + "val": { + "u64": 1000 + } + }, + { + "key": { + "symbol": "is_cancelled" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_closed" + }, + "val": { + "bool": false + } + }, + { + "key": { + "symbol": "is_public" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "is_resolved" + }, + "val": { + "bool": true + } + }, + { + "key": { + "symbol": "market_id" + }, + "val": { + "u64": 1 + } + }, + { + "key": { + "symbol": "max_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 100000000 + } + } + }, + { + "key": { + "symbol": "min_stake" + }, + "val": { + "i128": { + "hi": 0, + "lo": 10000000 + } + } + }, + { + "key": { + "symbol": "outcome_options" + }, + "val": { + "vec": [ + { + "symbol": "yes" + }, + { + "symbol": "no" + } + ] + } + }, + { + "key": { + "symbol": "participant_count" + }, + "val": { + "u32": 0 + } + }, + { + "key": { + "symbol": "resolution_time" + }, + "val": { + "u64": 2000 + } + }, + { + "key": { + "symbol": "resolved_at" + }, + "val": "void" + }, + { + "key": { + "symbol": "resolved_outcome" + }, + "val": "void" + }, + { + "key": { + "symbol": "start_time" + }, + "val": { + "u64": 0 + } + }, + { + "key": { + "symbol": "title" + }, + "val": { + "string": "Will it rain?" + } + }, + { + "key": { + "symbol": "total_pool" + }, + "val": { + "i128": { + "hi": 0, + "lo": 0 + } + } + } + ] + } + } + }, + "ext": "v0" + }, + 432000 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "MarketCount" + } + ] + }, + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": { + "vec": [ + { + "symbol": "MarketCount" + } + ] + }, + "durability": "persistent", + "val": { + "u64": 1 + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM", + "key": "ledger_key_contract_instance", + "durability": "persistent", + "val": { + "contract_instance": { + "executable": { + "wasm": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + "storage": [ + { + "key": { + "vec": [ + { + "symbol": "Categories" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "Sports" + }, + { + "symbol": "Crypto" + }, + { + "symbol": "Politics" + }, + { + "symbol": "Entertainment" + }, + { + "symbol": "Science" + }, + { + "symbol": "Other" + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 518400 + ] + ], + [ + { + "contract_data": { + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDR4", + "key": { + "ledger_key_nonce": { + "nonce": 5541220902715666415 + } + }, + "durability": "temporary", + "val": "void" + } + }, + "ext": "v0" + }, + 6311999 + ] + ], + [ + { + "contract_data": { + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "key": "ledger_key_contract_instance", + "durability": "persistent" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_data": { + "ext": "v0", + "contract": "CDLDVFKHEZ2RVB3NG4UQA4VPD3TSHV6XMHXMHP2BSGCJ2IIWVTOHGDSG", + "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:GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL7NV" + } + }, + { + "key": { + "symbol": "symbol" + }, + "val": { + "string": "aaa" + } + } + ] + } + }, + { + "key": { + "vec": [ + { + "symbol": "Admin" + } + ] + }, + "val": { + "address": "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAITA4" + } + }, + { + "key": { + "vec": [ + { + "symbol": "AssetInfo" + } + ] + }, + "val": { + "vec": [ + { + "symbol": "AlphaNum4" + }, + { + "map": [ + { + "key": { + "symbol": "asset_code" + }, + "val": { + "string": "aaa\\0" + } + }, + { + "key": { + "symbol": "issuer" + }, + "val": { + "bytes": "0000000000000000000000000000000000000000000000000000000000000005" + } + } + ] + } + ] + } + } + ] + } + } + } + }, + "ext": "v0" + }, + 120960 + ] + ], + [ + { + "contract_code": { + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + } + }, + [ + { + "last_modified_ledger_seq": 0, + "data": { + "contract_code": { + "ext": "v0", + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "code": "" + } + }, + "ext": "v0" + }, + 518400 + ] + ] + ] + }, + "events": [] +} \ No newline at end of file diff --git a/contract/tests/conditional_tests.rs b/contract/tests/conditional_tests.rs new file mode 100644 index 00000000..ec710a73 --- /dev/null +++ b/contract/tests/conditional_tests.rs @@ -0,0 +1,170 @@ +#![cfg(test)] + +use insightarena_contract::market::CreateMarketParams; +use insightarena_contract::storage_types::{DataKey, Market}; +use insightarena_contract::{InsightArenaContract, InsightArenaContractClient, InsightArenaError}; +use soroban_sdk::testutils::Address as _; +use soroban_sdk::{symbol_short, vec, Address, Env, String, Symbol}; + +fn register_token(env: &Env) -> Address { + let token_admin = Address::generate(env); + env.register_stellar_asset_contract_v2(token_admin) + .address() +} + +fn deploy(env: &Env) -> InsightArenaContractClient<'_> { + let id = env.register(InsightArenaContract, ()); + let client = InsightArenaContractClient::new(env, &id); + let admin = Address::generate(env); + let oracle = Address::generate(env); + let xlm_token = register_token(env); + env.mock_all_auths(); + client.initialize(&admin, &oracle, &200_u32, &xlm_token); + client +} + +fn default_params(env: &Env) -> CreateMarketParams { + let now = env.ledger().timestamp(); + CreateMarketParams { + title: String::from_str(env, "Will it rain?"), + description: String::from_str(env, "Daily weather market"), + category: Symbol::new(env, "Sports"), + outcomes: vec![env, symbol_short!("yes"), symbol_short!("no")], + end_time: now + 1000, + resolution_time: now + 2000, + dispute_window: 86_400, + creator_fee_bps: 100, + min_stake: 10_000_000, + max_stake: 100_000_000, + is_public: true, + } +} + +#[test] +fn test_create_conditional_market_invalid_parent_fails() { + let env = Env::default(); + env.mock_all_auths(); + let client = deploy(&env); + let creator = Address::generate(&env); + + let required_outcome = symbol_short!("yes"); + + let result = client.try_create_conditional_market( + &creator, + &999_u64, // Invalid parent + &required_outcome, + &default_params(&env), + ); + + assert!(matches!( + result, + Err(Ok(InsightArenaError::MarketNotFound)) + )); +} + +#[test] +fn test_create_conditional_market_resolved_parent_fails() { + let env = Env::default(); + env.mock_all_auths(); + let client = deploy(&env); + let creator = Address::generate(&env); + + // Create parent market + let parent_id = client.create_market(&creator, &default_params(&env)); + + // Force parent market to be resolved + let contract_id = client.address.clone(); + let mut market: Market = env.as_contract(&contract_id, || { + env.storage() + .persistent() + .get(&DataKey::Market(parent_id)) + .unwrap() + }); + market.is_resolved = true; + env.as_contract(&contract_id, || { + env.storage() + .persistent() + .set(&DataKey::Market(parent_id), &market); + }); + + let required_outcome = symbol_short!("yes"); + + let result = client.try_create_conditional_market( + &creator, + &parent_id, + &required_outcome, + &default_params(&env), + ); + + assert!(matches!( + result, + Err(Ok(InsightArenaError::MarketExpired)) + )); +} + +#[test] +fn test_create_conditional_market_invalid_outcome_fails() { + let env = Env::default(); + env.mock_all_auths(); + let client = deploy(&env); + let creator = Address::generate(&env); + + // Create parent market (outcomes are yes, no) + let parent_id = client.create_market(&creator, &default_params(&env)); + + // invalid outcome + let required_outcome = symbol_short!("maybe"); + + let result = client.try_create_conditional_market( + &creator, + &parent_id, + &required_outcome, + &default_params(&env), + ); + + assert!(matches!( + result, + Err(Ok(InsightArenaError::InvalidOutcome)) + )); +} + +#[test] +fn test_create_conditional_market_exceeds_depth_fails() { + let env = Env::default(); + env.mock_all_auths(); + let client = deploy(&env); + let creator = Address::generate(&env); + + let required_outcome = symbol_short!("yes"); + + // Create root parent + let mut parent_id = client.create_market(&creator, &default_params(&env)); + + // Depth limits MAX_CONDITIONAL_DEPTH = 5 + // creating 5 nested conditionals should be okay (depths 2, 3, 4, 5, wait, MAX=5, so 4 creations from root) + // Root is depth 0. The first conditional is depth 1. + // Wait, the logic sets conditional to `depth = parent_cond.conditional_depth + 1`. If no parent_cond, depth = 1. + // So root is not a conditional market. The first conditional is depth 1. + // So 5 nested: + for _ in 0..5 { + parent_id = client.create_conditional_market( + &creator, + &parent_id, + &required_outcome, + &default_params(&env), + ); + } + + // Now depth is 5. Another creation should fail with ConditionalDepthExceeded + let result = client.try_create_conditional_market( + &creator, + &parent_id, + &required_outcome, + &default_params(&env), + ); + + assert!(matches!( + result, + Err(Ok(InsightArenaError::ConditionalDepthExceeded)) + )); +}