From 54936b90b885e9b432cd8a51cbffa4f0840f2f9a Mon Sep 17 00:00:00 2001 From: bwty Date: Wed, 26 Aug 2020 20:24:09 +0700 Subject: [PATCH 1/2] get contract version --- contracts/cw1-subkeys/src/contract.rs | 40 ++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/contracts/cw1-subkeys/src/contract.rs b/contracts/cw1-subkeys/src/contract.rs index 4d0822066..c0597b897 100644 --- a/contracts/cw1-subkeys/src/contract.rs +++ b/contracts/cw1-subkeys/src/contract.rs @@ -31,8 +31,9 @@ pub fn init( contract: CONTRACT_NAME.to_string(), version: CONTRACT_VERSION.to_string(), }; + let result = whitelist_init(deps, env, msg); set_contract_version(&mut deps.storage, &version)?; - whitelist_init(deps, env, msg) + result } pub fn handle( @@ -314,6 +315,7 @@ mod tests { use cosmwasm_std::testing::{mock_dependencies, mock_env, MOCK_CONTRACT_ADDR}; use cosmwasm_std::{coin, coins, StakingMsg}; use cw1_whitelist::msg::AdminListResponse; + use cw2::get_contract_version; // this will set up the init for other tests fn setup_test_case( @@ -344,6 +346,42 @@ mod tests { } } + + #[test] + fn get_contract_version_works() { + let mut deps = mock_dependencies(20, &coins(1111, "token1")); + + let owner = HumanAddr::from("admin0001"); + let admins = vec![owner.clone(), HumanAddr::from("admin0002")]; + + let spender1 = HumanAddr::from("spender0001"); + let spender2 = HumanAddr::from("spender0002"); + let spender3 = HumanAddr::from("spender0003"); + let initial_spenders = vec![spender1.clone(), spender2.clone()]; + + // Same allowances for all spenders, for simplicity + let denom1 = "token1"; + let amount1 = 1111; + + let allow1 = coin(amount1, denom1); + let initial_allowances = vec![allow1.clone()]; + + let expires_never = Expiration::Never {}; + let initial_expirations = vec![expires_never.clone(), expires_never.clone()]; + + let env = mock_env(owner, &[]); + setup_test_case( + &mut deps, + &env, + &admins, + &initial_spenders, + &initial_allowances, + &initial_expirations, + ); + + assert_eq!(get_contract_version(&deps.storage).unwrap().contract, CONTRACT_NAME) + } + #[test] fn query_allowance_works() { let mut deps = mock_dependencies(20, &coins(1111, "token1")); From 5e1578945bf3ca31b688c4d063278ada50dfd935 Mon Sep 17 00:00:00 2001 From: bwty Date: Wed, 26 Aug 2020 20:33:05 +0700 Subject: [PATCH 2/2] only set contract version if ok --- contracts/cw1-subkeys/src/contract.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contracts/cw1-subkeys/src/contract.rs b/contracts/cw1-subkeys/src/contract.rs index c0597b897..97844c567 100644 --- a/contracts/cw1-subkeys/src/contract.rs +++ b/contracts/cw1-subkeys/src/contract.rs @@ -32,7 +32,9 @@ pub fn init( version: CONTRACT_VERSION.to_string(), }; let result = whitelist_init(deps, env, msg); - set_contract_version(&mut deps.storage, &version)?; + if result.is_ok() { + set_contract_version(&mut deps.storage, &version)?; + }; result }