From ae9828c59b42f3e1c2072b1802ff259d8e77be22 Mon Sep 17 00:00:00 2001 From: Ninjatosba Date: Sat, 13 Apr 2024 15:37:28 +0300 Subject: [PATCH] seperate pick --- artifacts/checksums.txt | 2 +- artifacts/checksums_intermediate.txt | 2 +- artifacts/raffle_drop.wasm | Bin 159231 -> 168804 bytes src/contract.rs | 96 ++++++++++++++++++++------- src/error.rs | 9 +++ src/msg.rs | 2 + src/state.rs | 4 +- 7 files changed, 89 insertions(+), 26 deletions(-) diff --git a/artifacts/checksums.txt b/artifacts/checksums.txt index 6b3185b..922c923 100644 --- a/artifacts/checksums.txt +++ b/artifacts/checksums.txt @@ -1 +1 @@ -12bf66626d6c7972664a19b0c6394cf65de38a831d84c2340a096656316a5859 raffle_drop.wasm +0e07d227b8272b94da7f5e020d401639fe23fd5ffaa1bcb62e365fb61712b8d8 raffle_drop.wasm diff --git a/artifacts/checksums_intermediate.txt b/artifacts/checksums_intermediate.txt index 03e9469..5bd811c 100644 --- a/artifacts/checksums_intermediate.txt +++ b/artifacts/checksums_intermediate.txt @@ -1 +1 @@ -45da052c35dc16f3d2080236dbf00daac2d7c2e8850c897871c3b7d614b52152 /target/wasm32-unknown-unknown/release/raffle_drop.wasm +2809aafd2d63401e1756729b144609a3692fda5be4ed3e020c7f1ae48d638152 /target/wasm32-unknown-unknown/release/raffle_drop.wasm diff --git a/artifacts/raffle_drop.wasm b/artifacts/raffle_drop.wasm index fd6598b06929ba4d875d0cc1e3f9fa087680b26e..785949bcc1f5efca25fb14a4f280d44eb34f1926 100644 GIT binary patch delta 61633 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 delta 52673 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 diff --git a/src/contract.rs b/src/contract.rs index 6506bab..b9cc494 100644 --- a/src/contract.rs +++ b/src/contract.rs @@ -1,6 +1,8 @@ use crate::error::ContractError; use crate::msg::{ExecuteMsg, InstantiateMsg, QueryMsg}; -use crate::state::{ADMIN, NOIS_PROXY, PARTICIPANT_COUNT, TEST_WINNERS, WINNERS}; +use crate::state::{ + ADMIN, FINAL_RANDOMNESS, NOIS_PROXY, PARTICIPANT_COUNT, TEST_RANDOMNESS, TEST_WINNERS, WINNERS, +}; #[cfg(not(feature = "library"))] use cosmwasm_std::entry_point; use cosmwasm_std::{ @@ -49,7 +51,9 @@ pub fn execute( ExecuteMsg::RequestRandomness { job_id } => { execute_request_randomness(deps, env, info, job_id) } - ExecuteMsg::NoisReceive { callback } => execute_pick_winners(deps, env, info, callback), + ExecuteMsg::NoisReceive { callback } => execute_set_randomness(deps, env, info, callback), + ExecuteMsg::PickTestWinners {} => pick_test_winners(deps, env, info), + ExecuteMsg::PickWinners {} => pick_winners(deps, env, info), } } @@ -73,7 +77,7 @@ pub fn execute_request_randomness( Ok(res) } -pub fn execute_pick_winners( +pub fn execute_set_randomness( deps: DepsMut, _env: Env, info: MessageInfo, @@ -86,34 +90,80 @@ pub fn execute_pick_winners( job_id, randomness, .. } = callback; - let randomness: [u8; 32] = randomness - .to_array() - .map_err(|_| ContractError::InvalidRandomness {})?; + if job_id.contains("test") { + TEST_RANDOMNESS.save(deps.storage, &randomness)?; + } else { + if FINAL_RANDOMNESS.may_load(deps.storage)?.is_some() { + return Err(ContractError::FinalRandomnessAlreadySet {}); + } + FINAL_RANDOMNESS.save(deps.storage, &randomness)?; + } + let res = Response::new(); + Ok(res) +} + +pub fn pick_test_winners( + deps: DepsMut, + _env: Env, + _info: MessageInfo, +) -> Result { let participant_count = PARTICIPANT_COUNT.load(deps.storage)?; - let participant_arr = (1..=participant_count).collect::>(); + let participants = (1..=participant_count).collect::>(); + let test_randomness = TEST_RANDOMNESS.load(deps.storage)?; + let test_randomness_vec: [u8; 32] = test_randomness[..].try_into().unwrap(); - let winners = pick(randomness, 100, participant_arr); - let winners_string = winners + if test_randomness.is_empty() { + return Err(ContractError::TestRandomnessNotSet {}); + } + + let winners = pick(test_randomness_vec, 100, participants); + let winners_str = winners .iter() - .map(|&x| x.to_string()) + .map(|x| x.to_string()) .collect::>() - .join(", "); + .join(","); + TEST_WINNERS.save(deps.storage, &winners)?; - match job_id.as_str() { - "test" => { - TEST_WINNERS.save(deps.storage, &winners)?; - } - _ => { - let old_winners = WINNERS.may_load(deps.storage)?; - if old_winners.is_some() { - return Err(ContractError::WinnersAlreadyPicked {}); - } - WINNERS.save(deps.storage, &winners)?; - } + let res = Response::new() + .add_attribute("action", "pick_test_winners") + .add_attribute("test winners", winners_str); + Ok(res) +} + +pub fn pick_winners( + deps: DepsMut, + _env: Env, + info: MessageInfo, +) -> Result { + if info.sender != ADMIN.load(deps.storage)? { + return Err(ContractError::Unauthorized {}); } + if WINNERS.may_load(deps.storage)?.is_some() { + return Err(ContractError::WinnersAlreadyPicked {}); + } + + let participant_count = PARTICIPANT_COUNT.load(deps.storage)?; + let participants = (1..=participant_count).collect::>(); + + let final_randomness = FINAL_RANDOMNESS + .load(deps.storage) + .map_err(|_| ContractError::FinalRandomnessNotSet {})?; + let final_randomness_vec: [u8; 32] = final_randomness[..].try_into().unwrap(); + + let winners = pick(final_randomness_vec, 100, participants); + let winners_str = winners + .iter() + .map(|x| x.to_string()) + .collect::>() + .join(","); + + WINNERS.save(deps.storage, &winners)?; + + let res = Response::new() + .add_attribute("action", "pick_winners") + .add_attribute("winners", winners_str); - let res = Response::new().add_attribute("winners", winners_string); Ok(res) } diff --git a/src/error.rs b/src/error.rs index 4317089..c401a97 100644 --- a/src/error.rs +++ b/src/error.rs @@ -20,4 +20,13 @@ pub enum ContractError { #[error("Winners already picked")] WinnersAlreadyPicked {}, + + #[error("Test randomness not set")] + TestRandomnessNotSet {}, + + #[error("Final randomness not set")] + FinalRandomnessNotSet {}, + + #[error("Final randomness already set")] + FinalRandomnessAlreadySet {}, } diff --git a/src/msg.rs b/src/msg.rs index ad8b803..caf78e2 100644 --- a/src/msg.rs +++ b/src/msg.rs @@ -11,6 +11,8 @@ pub struct InstantiateMsg { pub enum ExecuteMsg { RequestRandomness { job_id: String }, NoisReceive { callback: NoisCallback }, + PickTestWinners {}, + PickWinners {}, } #[cw_serde] diff --git a/src/state.rs b/src/state.rs index ef3a548..606b937 100644 --- a/src/state.rs +++ b/src/state.rs @@ -1,4 +1,4 @@ -use cosmwasm_std::Addr; +use cosmwasm_std::{Addr, HexBinary}; use cw_storage_plus::Item; pub const PARTICIPANT_COUNT: Item = Item::new("participant_count"); @@ -6,3 +6,5 @@ pub const NOIS_PROXY: Item = Item::new("nois_proxy"); pub const ADMIN: Item = Item::new("admin"); pub const WINNERS: Item> = Item::new("winners"); pub const TEST_WINNERS: Item> = Item::new("test_winners"); +pub const TEST_RANDOMNESS: Item = Item::new("test_randomness"); +pub const FINAL_RANDOMNESS: Item = Item::new("final_randomness");