diff --git a/package/aioracle/aioracle_v2/src/contract.rs b/package/aioracle/aioracle_v2/src/contract.rs index ca08340f..4f429b17 100755 --- a/package/aioracle/aioracle_v2/src/contract.rs +++ b/package/aioracle/aioracle_v2/src/contract.rs @@ -1,4 +1,4 @@ -use aioracle_base::{Executor, Reward, ServiceMsg}; +use aioracle_base::{Executor, GetServiceFeesMsg, Reward, ServiceMsg}; use cosmwasm_std::{ attr, from_slice, to_binary, BankMsg, Binary, Coin, CosmosMsg, Decimal, Deps, DepsMut, Env, HandleResponse, HumanAddr, InitResponse, MessageInfo, MigrateResponse, Order, StdError, @@ -22,9 +22,9 @@ use crate::executors::{ remove_executors, save_executors, update_executors, }; use crate::msg::{ - CurrentStageResponse, GetParticipantFee, GetServiceContracts, GetServiceFees, - GetServiceFeesMsg, HandleMsg, InitMsg, IsClaimedResponse, LatestStageResponse, MigrateMsg, - QueryMsg, Report, RequestResponse, StageInfo, UpdateConfigMsg, + CurrentStageResponse, GetParticipantFee, GetServiceContracts, GetServiceFees, HandleMsg, + InitMsg, IsClaimedResponse, LatestStageResponse, MigrateMsg, QueryMsg, Report, RequestResponse, + StageInfo, UpdateConfigMsg, }; use crate::state::{ executors_map, requests, Config, Contracts, Request, CHECKPOINT, CLAIM, CONFIG, CONTRACT_FEES, @@ -134,11 +134,11 @@ pub fn handle( } HandleMsg::ExecutorJoin { executor } => handle_executor_join(deps, env, info, executor), HandleMsg::ExecutorLeave { executor } => handle_executor_leave(deps, env, info, executor), - // HandleMsg::SubmitEvidence { - // stage, - // report, - // proof, - // } => handle_submit_evidence(deps, env, info, stage, report, proof), + HandleMsg::SubmitEvidence { + stage, + report, + proof, + } => handle_submit_evidence(deps, env, info, stage, report, proof), } } @@ -279,31 +279,35 @@ pub fn handle_request( fee.amount = fee.amount + contract_fee.amount; Ok(fee) })?; - //////////////////////////////////////////////////// deprecated. We dont care abt rewards anymore - // // reward plus preference must match sent funds - // let bound_executor_fee: Coin = query_bound_executor_fee(deps.as_ref())?; - // if preference_executor_fee.denom.ne(&bound_executor_fee.denom) - // || preference_executor_fee - // .amount - // .lt(&bound_executor_fee.amount) - // { - // return Err(ContractError::InsufficientFundsBoundFees {}); - // } - // // collect fees - // let mut rewards = get_service_fees(deps.as_ref(), &service)?; - // if !bound_executor_fee.amount.is_zero() { - // rewards.push(( - // HumanAddr::from("placeholder"), - // bound_executor_fee.denom, - // bound_executor_fee.amount, - // )); - // } - // // TODO: add substract contract fee & verify against it - // if !verify_request_fees(&info.sent_funds, &rewards, threshold, &contract_fee) { - // return Err(ContractError::InsufficientFundsRequestFees {}); - // } - - // rewards.pop(); // pop so we dont store the placeholder reward in the list + + // reward plus preference must match sent funds + let bound_executor_fee: Coin = query_bound_executor_fee(deps.as_ref())?; + + if preference_executor_fee.denom.ne(&bound_executor_fee.denom) + || preference_executor_fee + .amount + .lt(&bound_executor_fee.amount) + { + return Err(ContractError::InsufficientFundsBoundFees {}); + } + + // collect fees + let mut rewards = get_service_fees(deps.as_ref(), &service)?; + + if !bound_executor_fee.amount.is_zero() { + rewards.push(( + HumanAddr::from("placeholder"), + bound_executor_fee.denom, + bound_executor_fee.amount, + )); + } + + // TODO: add substract contract fee & verify against it + if !verify_request_fees(&info.sent_funds, &rewards, threshold, &contract_fee) { + return Err(ContractError::InsufficientFundsRequestFees {}); + } + + rewards.pop(); // pop so we dont store the placeholder reward in the list // this will keep track of the executor list of the request let current_size = query_executor_size(deps.as_ref())?; @@ -330,7 +334,7 @@ pub fn handle_request( threshold, service: service.clone(), input, - rewards: vec![], + rewards, }, )?; @@ -346,81 +350,81 @@ pub fn handle_request( }) } -// pub fn handle_submit_evidence( -// deps: DepsMut, -// env: Env, -// info: MessageInfo, -// stage: u64, -// report: Binary, -// proofs: Option>, -// ) -> Result { -// let Config { -// trusting_period, -// slashing_amount, -// denom, -// .. -// } = CONFIG.load(deps.storage)?; - -// let is_verified = verify_data(deps.as_ref(), stage, report.clone(), proofs)?; -// if !is_verified { -// return Err(ContractError::Unauthorized {}); -// } - -// let report_struct: Report = from_slice(report.as_slice()) -// .map_err(|err| ContractError::Std(StdError::generic_err(err.to_string())))?; - -// // check evidence, only allow evidence per executor -// let mut evidence_key = report_struct.executor.clone().to_base64(); -// evidence_key.push_str(&stage.to_string()); -// let is_claimed = EVIDENCES.may_load(deps.storage, evidence_key.as_bytes())?; - -// if let Some(is_claimed) = is_claimed { -// if is_claimed { -// return Err(ContractError::AlreadyFinishedEvidence {}); -// } -// } - -// let Request { -// submit_merkle_height, -// .. -// } = requests().load(deps.storage, &stage.to_be_bytes())?; - -// let is_exist = executors_map().may_load(deps.storage, report_struct.executor.as_slice())?; -// let mut cosmos_msgs: Vec = vec![]; - -// // only slash if the executor cannot be found in the whitelist -// if is_exist.is_none() && (submit_merkle_height + trusting_period).gt(&env.block.height) { -// // query contract balance to slash -// let balance = deps -// .querier -// .query_balance(env.contract.address.clone(), denom.as_str()) -// .map_err(|err| ContractError::Std(StdError::generic_err(err.to_string())))?; -// // if executor does not exist & still in trusting period => can slash amount in contract by sending the percentage amount to the reporter who discovers the faulty stage. -// let total_slash = balance.amount.mul(Decimal::permille(slashing_amount)); -// if !total_slash.is_zero() { -// let send_msg = BankMsg::Send { -// from_address: env.contract.address, -// to_address: info.sender, -// amount: vec![Coin { -// denom: balance.denom, -// amount: total_slash, -// }], -// }; -// cosmos_msgs.push(send_msg.into()); -// } - -// EVIDENCES.save(deps.storage, evidence_key.as_bytes(), &true)?; -// } - -// Ok(HandleResponse { -// data: None, -// messages: cosmos_msgs, -// attributes: vec![ -// attr("action", "handle_submit_evidence"), -// attr("stage", stage.to_string()), -// ], -// }) -// } +pub fn handle_submit_evidence( + deps: DepsMut, + env: Env, + info: MessageInfo, + stage: u64, + report: Binary, + proofs: Option>, +) -> Result { + let Config { + trusting_period, + slashing_amount, + denom, + .. + } = CONFIG.load(deps.storage)?; + + let is_verified = verify_data(deps.as_ref(), stage, report.clone(), proofs)?; + if !is_verified { + return Err(ContractError::Unauthorized {}); + } + + let report_struct: Report = from_slice(report.as_slice()) + .map_err(|err| ContractError::Std(StdError::generic_err(err.to_string())))?; + + // check evidence, only allow evidence per executor + let mut evidence_key = report_struct.executor.clone().to_base64(); + evidence_key.push_str(&stage.to_string()); + let is_claimed = EVIDENCES.may_load(deps.storage, evidence_key.as_bytes())?; + + if let Some(is_claimed) = is_claimed { + if is_claimed { + return Err(ContractError::AlreadyFinishedEvidence {}); + } + } + + let Request { + submit_merkle_height, + .. + } = requests().load(deps.storage, &stage.to_be_bytes())?; + + let is_exist = executors_map().may_load(deps.storage, report_struct.executor.as_slice())?; + let mut cosmos_msgs: Vec = vec![]; + + // only slash if the executor cannot be found in the whitelist + if is_exist.is_none() && (submit_merkle_height + trusting_period).gt(&env.block.height) { + // query contract balance to slash + let balance = deps + .querier + .query_balance(env.contract.address.clone(), denom.as_str()) + .map_err(|err| ContractError::Std(StdError::generic_err(err.to_string())))?; + // if executor does not exist & still in trusting period => can slash amount in contract by sending the percentage amount to the reporter who discovers the faulty stage. + let total_slash = balance.amount.mul(Decimal::permille(slashing_amount)); + if !total_slash.is_zero() { + let send_msg = BankMsg::Send { + from_address: env.contract.address, + to_address: info.sender, + amount: vec![Coin { + denom: balance.denom, + amount: total_slash, + }], + }; + cosmos_msgs.push(send_msg.into()); + } + + EVIDENCES.save(deps.storage, evidence_key.as_bytes(), &true)?; + } + + Ok(HandleResponse { + data: None, + messages: cosmos_msgs, + attributes: vec![ + attr("action", "handle_submit_evidence"), + attr("stage", stage.to_string()), + ], + }) +} pub fn execute_register_merkle_root( deps: DepsMut, @@ -452,7 +456,7 @@ pub fn execute_register_merkle_root( } // if merkle root empty then update new - requests().update(deps.storage, &stage.to_be_bytes(), |request| { + let request = requests().update(deps.storage, &stage.to_be_bytes(), |request| { if let Some(mut request) = request { request.merkle_root = mroot.clone(); request.submit_merkle_height = env.block.height; @@ -463,23 +467,22 @@ pub fn execute_register_merkle_root( Err(StdError::generic_err("Invalid request empty")) })?; - /////////////////////////////////////////////// Deprecated. We no longer care about executor rewards - // // add executors' rewards into the pool - // for executor in executors { - // // only add reward if executor is in list - // let executor_check = executors_map().may_load(deps.storage, &executor)?; - // if executor_check.is_none() || !executor_check.unwrap().is_active { - // continue; - // } - // let executor_reward = - // get_participant_fee(deps.as_ref(), executor.clone(), service_addr.as_str())?; - // process_executors_pool( - // deps.storage, - // executor, - // &request.preference_executor_fee, - // executor_reward, - // )?; - // } + // add executors' rewards into the pool + for executor in executors { + // only add reward if executor is in list + let executor_check = executors_map().may_load(deps.storage, &executor)?; + if executor_check.is_none() || !executor_check.unwrap().is_active { + continue; + } + let executor_reward = + get_participant_fee(deps.as_ref(), executor.clone(), service_addr.as_str())?; + process_executors_pool( + deps.storage, + executor, + &request.preference_executor_fee, + executor_reward, + )?; + } // check if can increase checkpoint. Can only increase when all requests in range have merkle root process_checkpoint(deps, stage, checkpoint_threshold)?; @@ -550,9 +553,7 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { } QueryMsg::GetServiceFees { service } => to_binary(&query_service_fees(deps, service)?), QueryMsg::GetBoundExecutorFee {} => to_binary(&query_bound_executor_fee(deps)?), - QueryMsg::GetParticipantFee { pubkey, service } => { - to_binary(&query_participant_fee(deps, pubkey, service)?) - } + QueryMsg::GetParticipantFee { pubkey } => to_binary(&query_participant_fee(deps, pubkey)?), QueryMsg::GetTrustingPool { pubkey } => to_binary(&query_trusting_pool(deps, env, pubkey)?), QueryMsg::GetTrustingPools { offset, @@ -562,18 +563,10 @@ pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> StdResult { } } -pub fn query_participant_fee( - _deps: Deps, - _pubkey: Binary, - _service: Option, -) -> StdResult { - Ok(Coin { - denom: String::from("orai"), - amount: Uint128::from(0u64), - }) - // let Config { service_addr, .. } = CONFIG.load(deps.storage)?; - // get_participant_fee(deps, pubkey, service_addr.as_str(), service) - // .map_err(|err| StdError::generic_err(err.to_string())) +pub fn query_participant_fee(deps: Deps, pubkey: Binary) -> StdResult { + let Config { service_addr, .. } = CONFIG.load(deps.storage)?; + get_participant_fee(deps, pubkey, service_addr.as_str()) + .map_err(|err| StdError::generic_err(err.to_string())) } fn get_service_fees(deps: Deps, service: &str) -> StdResult> { diff --git a/package/aioracle/aioracle_v2/src/migrations/v03.rs b/package/aioracle/aioracle_v2/src/migrations/v03.rs index 39e2af1b..2b867ceb 100644 --- a/package/aioracle/aioracle_v2/src/migrations/v03.rs +++ b/package/aioracle/aioracle_v2/src/migrations/v03.rs @@ -192,27 +192,27 @@ mod test { TODO run error? recheck ... */ // #[test] - fn test_migrate() { - let mut deps = setup_old_contract(); - let info = mock_info(HumanAddr::from("foobar"), &[]); - migrate(deps.as_mut(), mock_env(), info, MigrateMsg {}).unwrap(); - - // query executors - - let executors: Vec = from_binary( - &query( - deps.as_ref(), - mock_env(), - QueryMsg::GetExecutors { - offset: None, - limit: None, - order: None, - }, - ) - .unwrap(), - ) - .unwrap(); - - println!("executors: {:?}", executors); - } + // fn test_migrate() { + // let mut deps = setup_old_contract(); + // let info = mock_info(HumanAddr::from("foobar"), &[]); + // migrate(deps.as_mut(), mock_env(), info, MigrateMsg {}).unwrap(); + + // // query executors + + // let executors: Vec = from_binary( + // &query( + // deps.as_ref(), + // mock_env(), + // QueryMsg::GetExecutors { + // offset: None, + // limit: None, + // order: None, + // }, + // ) + // .unwrap(), + // ) + // .unwrap(); + + // println!("executors: {:?}", executors); + // } } diff --git a/package/aioracle/aioracle_v2/src/msg.rs b/package/aioracle/aioracle_v2/src/msg.rs index 0926c3ad..e146878b 100644 --- a/package/aioracle/aioracle_v2/src/msg.rs +++ b/package/aioracle/aioracle_v2/src/msg.rs @@ -1,4 +1,4 @@ -use aioracle_base::{Reward, ServiceMsg}; +use aioracle_base::{GetServiceFeesMsg, Reward, ServiceMsg}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -54,11 +54,11 @@ pub enum HandleMsg { ExecutorLeave { executor: Binary, }, - // SubmitEvidence { - // stage: u64, - // report: Binary, - // proof: Option>, - // }, + SubmitEvidence { + stage: u64, + report: Binary, + proof: Option>, + }, } #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)] @@ -119,7 +119,6 @@ pub enum QueryMsg { GetBoundExecutorFee {}, GetParticipantFee { pubkey: Binary, - service: Option, }, GetTrustingPool { pubkey: Binary, @@ -191,12 +190,6 @@ pub struct GetBoundExecutorFee { #[serde(rename_all = "snake_case")] pub struct BoundExecutorFeeMsg {} -#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] -#[serde(rename_all = "snake_case")] -pub struct GetServiceFeesMsg { - pub addr: HumanAddr, -} - #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] #[serde(rename_all = "snake_case")] pub struct GetParticipantFee { diff --git a/package/aioracle/aioracle_v2/src/state.rs b/package/aioracle/aioracle_v2/src/state.rs index ba5e51ef..8ea28d8b 100644 --- a/package/aioracle/aioracle_v2/src/state.rs +++ b/package/aioracle/aioracle_v2/src/state.rs @@ -1,5 +1,5 @@ use aioracle_base::{Executor, Reward}; -use cosmwasm_std::{Coin, HumanAddr}; +use cosmwasm_std::{Binary, Coin, HumanAddr}; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; @@ -82,8 +82,6 @@ pub const EXECUTORS_TRUSTING_POOL_PREFIX: &str = "executors_trusting_pool_v2"; pub const EXECUTORS_TRUSTING_POOL: Map<&[u8], TrustingPool> = Map::new(EXECUTORS_TRUSTING_POOL_PREFIX); -// pub const SERVICE_NAME_DEFAULT: &str = "price"; - // indexes requests // for structures pub struct RequestIndexes<'a> { diff --git a/package/aioracle/aioracle_v2/src/tests.rs b/package/aioracle/aioracle_v2/src/tests.rs index ba86df43..d33ef819 100644 --- a/package/aioracle/aioracle_v2/src/tests.rs +++ b/package/aioracle/aioracle_v2/src/tests.rs @@ -15,20 +15,17 @@ use cosmwasm_std::{ OwnedDeps, StdError, Uint128, }; use cw_multi_test::{next_block, App, Contract, ContractWrapper, SimpleBank}; -use provider_bridge::msg::HandleMsg as ProviderHandleMsg; use provider_bridge::state::Contracts; use ripemd::{Digest as RipeDigest, Ripemd160}; use serde::Deserialize; use sha2::Digest; const DENOM: &str = "ORAI"; -const DENOM_LOWER: &str = "orai"; const PENDING_PERIOD: u64 = 100800; const AIORACLE_OWNER: &str = "admin0002"; const PROVIDER_OWNER: &str = "admin0001"; const AIORACLE_SERVICE_FEES_OWNER: &str = "admin0003"; const CLIENT: &str = "client"; -const SERVICE_NAME: &str = "price"; #[test] fn test_bech32() { @@ -476,7 +473,7 @@ fn register_merkle_root() { &HandleMsg::Request { threshold: 1, input: None, - service: SERVICE_NAME.to_string(), + service: "price".to_string(), preference_executor_fee: coin(1, "orai"), }, &coins(6u128, "orai"), // plus 1 for contract fee @@ -1009,111 +1006,110 @@ fn query_executors() { ); } -#[test] -fn test_query_requests_indexes() { - let mut app = mock_app(); - let (service_fees_contract, provider_addr, aioracle_addr) = setup_test_case(&mut app); +// #[test] +// fn test_query_requests_indexes() { +// let mut app = mock_app(); +// let (_, provider_addr, aioracle_addr) = setup_test_case(&mut app); - // create a new request - for i in 1..10 { - // intentional to get identical service & merkle root - app.execute_contract( - &HumanAddr::from(PROVIDER_OWNER), - &provider_addr, - &ProviderHandleMsg::AddServiceInfo { - service: format!("price{:?}", i), - contracts: Contracts { - dsources: vec![], - tcases: vec![], - oscript: HumanAddr::from("orai1nc6eqvnczmtqq8keplyrha9z7vnd5v9vvsxxgj"), - }, - service_fees_contract: service_fees_contract.clone(), - }, - &[], - ) - .unwrap(); +// // create a new request +// for i in 1..10 { +// // intentional to get identical service & merkle root +// app.execute_contract( +// &HumanAddr::from(PROVIDER_OWNER), +// &provider_addr, +// &provider_bridge::msg::HandleMsg::UpdateServiceContracts { +// service: format!("price{:?}", i), +// contracts: provider_bridge::state::Contracts { +// dsources: vec![], +// tcases: vec![], +// oscript: HumanAddr::from("orai1nc6eqvnczmtqq8keplyrha9z7vnd5v9vvsxxgj"), +// }, +// }, +// &[], +// ) +// .unwrap(); - let mut service = format!("price{:?}", i); - let mut msg = format!("{:?}", i); - // intentional to get identical service & merkle root - if i == 9 { - service = format!("price{:?}", 8); - msg = format!("{:?}", 8); - } - app.execute_contract( - &HumanAddr::from("client"), - &aioracle_addr, - &HandleMsg::Request { - threshold: 1, - input: None, - service, - preference_executor_fee: coin(1, "orai"), - }, - &coins(5u128, "orai"), - ) - .unwrap(); +// let mut service = format!("price{:?}", i); +// let mut msg = format!("{:?}", i); +// // intentional to get identical service & merkle root +// if i == 9 { +// service = format!("price{:?}", 8); +// msg = format!("{:?}", 8); +// } +// app.execute_contract( +// &HumanAddr::from("client"), +// &aioracle_addr, +// &HandleMsg::Request { +// threshold: 1, +// input: None, +// service, +// preference_executor_fee: coin(1, "orai"), +// }, +// &coins(5u128, "orai"), +// ) +// .unwrap(); - // register new merkle root - let msg_hash_generic = sha2::Sha256::digest(msg.as_bytes()); - let msg_hash = msg_hash_generic.as_slice(); +// // register new merkle root +// let msg_hash_generic = sha2::Sha256::digest(msg.as_bytes()); +// let msg_hash = msg_hash_generic.as_slice(); - let msg = HandleMsg::RegisterMerkleRoot { - stage: i as u64, - merkle_root: hex::encode(msg_hash), - executors: vec![ - Binary::from_base64("A6ENA5I5QhHyy1QIOLkgTcf/x31WE+JLFoISgmcQaI0t").unwrap(), - ], - }; +// let msg = HandleMsg::RegisterMerkleRoot { +// stage: i as u64, +// merkle_root: hex::encode(msg_hash), +// executors: vec![ +// Binary::from_base64("A6ENA5I5QhHyy1QIOLkgTcf/x31WE+JLFoISgmcQaI0t").unwrap(), +// ], +// }; - app.execute_contract( - HumanAddr::from(AIORACLE_OWNER), - aioracle_addr.clone(), - &msg, - &[], - ) - .unwrap(); - } +// app.execute_contract( +// HumanAddr::from(AIORACLE_OWNER), +// aioracle_addr.clone(), +// &msg, +// &[], +// ) +// .unwrap(); +// } - // test query requests by service - let requests_by_services: Vec = app - .wrap() - .query_wasm_smart( - &aioracle_addr, - &QueryMsg::GetRequestsByService { - service: "price8".to_string(), - offset: Some(8), - limit: None, - order: None, - }, - ) - .unwrap(); +// // test query requests by service +// let requests_by_services: Vec = app +// .wrap() +// .query_wasm_smart( +// &aioracle_addr, +// &QueryMsg::GetRequestsByService { +// service: "price8".to_string(), +// offset: Some(8), +// limit: None, +// order: None, +// }, +// ) +// .unwrap(); - println!("request response by service: {:?}", requests_by_services); - assert_eq!(requests_by_services.len(), 1); - assert_eq!(requests_by_services.last().unwrap().stage, 9); +// println!("request response by service: {:?}", requests_by_services); +// assert_eq!(requests_by_services.len(), 1); +// assert_eq!(requests_by_services.last().unwrap().stage, 9); - // test query requests by merkle root - let requests_by_merkle_root: Vec = app - .wrap() - .query_wasm_smart( - &aioracle_addr, - &QueryMsg::GetRequestsByMerkleRoot { - merkle_root: "2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3" - .to_string(), - offset: Some(8), - limit: None, - order: None, - }, - ) - .unwrap(); +// // test query requests by merkle root +// let requests_by_merkle_root: Vec = app +// .wrap() +// .query_wasm_smart( +// &aioracle_addr, +// &QueryMsg::GetRequestsByMerkleRoot { +// merkle_root: "2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3" +// .to_string(), +// offset: Some(8), +// limit: None, +// order: None, +// }, +// ) +// .unwrap(); - println!( - "request response by merkle root: {:?}", - requests_by_merkle_root - ); - assert_eq!(requests_by_merkle_root.len(), 1); - assert_eq!(requests_by_merkle_root.last().unwrap().stage, 9); -} +// println!( +// "request response by merkle root: {:?}", +// requests_by_merkle_root +// ); +// assert_eq!(requests_by_merkle_root.len(), 1); +// assert_eq!(requests_by_merkle_root.last().unwrap().stage, 9); +// } #[test] fn test_get_service_fees() { @@ -1236,7 +1232,6 @@ fn test_executor_size() { assert_eq!(size, 103u64) } -//////////////////////////// deprecated because we wont be using this incentive mechanism anymore // #[test] // fn test_handle_withdraw_pool() { // // Run test 1 @@ -1362,11 +1357,11 @@ fn test_executor_size() { // .unwrap(); // assert_eq!( // trusting_pool.trusting_pool.amount_coin.amount, -// Uint128::from(0u64) +// Uint128::from(2u64) // ); // assert_eq!( // trusting_pool.trusting_pool.withdraw_amount_coin.amount, -// Uint128::from(0u64) +// Uint128::from(1u64) // ); // // can now move all balance to withdraw pool and should automatically withdraw from pool @@ -1470,54 +1465,23 @@ fn test_increment_executor_when_register_merkle() { ) .unwrap(); - // try registering for a new merkle root, the total trusting pool should be 2, not 11 - app.execute_contract( - HumanAddr::from(AIORACLE_OWNER), - aioracle_addr.clone(), - &HandleMsg::RegisterMerkleRoot { - stage: 2, - merkle_root: test_data.root.clone(), - executors: vec![pubkey.clone()], - }, - &[], - ) - .unwrap(); - - //////////////////////////// Deprecated. Dont care abt trusting pool - // // query trusting pool - // let trusting_pool: TrustingPoolResponse = app - // .wrap() - // .query_wasm_smart( - // aioracle_addr.clone(), - // &QueryMsg::GetTrustingPool { - // pubkey: pubkey.clone(), - // }, - // ) - // .unwrap(); - - // assert_eq!( - // trusting_pool.trusting_pool.amount_coin.amount, - // Uint128::from(0u64) - // ); - - // // try increasing the bound executor fee to 20 + // // try registering for a new merkle root, the total trusting pool should be 2, not 11 // app.execute_contract( - // HumanAddr::from(PROVIDER_OWNER), - // provider_bridge_addr.clone(), - // &provider_bridge::msg::HandleMsg::UpdateServiceInfo { - // service: "price".to_owned(), - // owner: None, - // service_fees_contract: None, + // HumanAddr::from(AIORACLE_OWNER), + // aioracle_addr.clone(), + // &HandleMsg::RegisterMerkleRoot { + // stage: 2, + // merkle_root: test_data.root.clone(), + // executors: vec![pubkey.clone()], // }, // &[], // ) // .unwrap(); - // create a third register root. Should increase trusting pool to 12 instead of 3 - // create a new request to register for new merkle root + // // create a third register root. Should increase trusting pool to 12 instead of 3 + // // create a new request to register for new merkle root - // preference executor fee should be increased to 20 because min bound is 20 already - /////////////////////////// Deprecated. Maximum executor fee is 0 + // // preference executor fee should be increased to 20 because min bound is 20 already // assert_eq!( // app.execute_contract( // &HumanAddr::from("client"), @@ -1561,22 +1525,21 @@ fn test_increment_executor_when_register_merkle() { ) .unwrap(); - ////////////////////////////////// Deprecated. Dont care abt trusting pool - // // query trusting pool - // let trusting_pool: TrustingPoolResponse = app - // .wrap() - // .query_wasm_smart( - // aioracle_addr.clone(), - // &QueryMsg::GetTrustingPool { - // pubkey: pubkey.clone(), - // }, - // ) - // .unwrap(); + // query trusting pool + let trusting_pool: TrustingPoolResponse = app + .wrap() + .query_wasm_smart( + aioracle_addr.clone(), + &QueryMsg::GetTrustingPool { + pubkey: pubkey.clone(), + }, + ) + .unwrap(); - // assert_eq!( - // trusting_pool.trusting_pool.amount_coin.amount, - // Uint128::from(0u64) - // ); + assert_eq!( + trusting_pool.trusting_pool.amount_coin.amount, + Uint128::from(0u64) + ); } #[test] @@ -1645,24 +1608,22 @@ pub fn test_query_executors_by_index() { ); } -//////////////////// deprecated. Auto maximum executor fee is 0 -// #[test] -// pub fn get_maximum_executor_fee() { -// let mut app = mock_app(); -// let (_, _, aioracle_addr) = setup_test_case(&mut app); +#[test] +pub fn get_maximum_executor_fee() { + let mut app = mock_app(); + let (_, _, aioracle_addr) = setup_test_case(&mut app); -// let bound_executor_fee: Coin = app -// .wrap() -// .query_wasm_smart(aioracle_addr.clone(), &QueryMsg::GetBoundExecutorFee {}) -// .unwrap(); -// assert_eq!(bound_executor_fee.amount, Uint128::from(1u64)); + let bound_executor_fee: Coin = app + .wrap() + .query_wasm_smart(aioracle_addr, &QueryMsg::GetBoundExecutorFee {}) + .unwrap(); + assert_eq!(bound_executor_fee.amount, Uint128::from(0u64)); +} -// let bound_executor_fee2: Coin = app -// .wrap() -// .query_wasm_smart(aioracle_addr, &QueryMsg::GetBoundExecutorFee {}) -// .unwrap(); -// assert_eq!(bound_executor_fee2.amount, Uint128::from(1u64)); -// } +pub fn skip_trusting_period(block: &mut BlockInfo) { + block.time += 5; + block.height += 100801; +} // fn setup_contract() -> (OwnedDeps, Env) { // let mut deps = mock_dependencies(&coins(100000, DENOM));