From 17d147a8d7c4f0866403d33eaac10d5b1f5b6099 Mon Sep 17 00:00:00 2001 From: Mauro Lacy Date: Sun, 26 Jul 2020 17:40:25 +0200 Subject: [PATCH 1/3] Upgrade contracts to cosmwasm 0.10.0 --- Cargo.lock | 12 ++--- contracts/cw1-whitelist/Cargo.toml | 6 +-- contracts/cw1-whitelist/src/contract.rs | 24 +++++----- contracts/cw20-base/Cargo.toml | 8 ++-- contracts/cw20-base/src/allowances.rs | 60 ++++++++++++------------- contracts/cw20-base/src/contract.rs | 43 +++++++++--------- contracts/cw20-escrow/Cargo.toml | 6 +-- contracts/cw20-escrow/src/contract.rs | 46 +++++++++---------- packages/cw1/Cargo.toml | 4 +- packages/cw20/Cargo.toml | 4 +- 10 files changed, 108 insertions(+), 105 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 745bbe5b2..b4e638a28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -43,9 +43,9 @@ checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] name = "cosmwasm-schema" -version = "0.9.2" +version = "0.10.0-alpha2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3fe2a6c0070897918301577bdf9688506e3f4481c806da1227bfbbc095dfa27" +checksum = "131e629d2c7559551205c66db1e0afeab743e1874ee9209dbf8cf06a1e8d5732" dependencies = [ "schemars", "serde_json", @@ -53,9 +53,9 @@ dependencies = [ [[package]] name = "cosmwasm-std" -version = "0.9.2" +version = "0.10.0-alpha2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b160c8e594deaf23599bfd20b38961d8b122b7218e8f30c8943590037d1b58" +checksum = "f848da5f60e976ab84bd3e22b1570754a71af31e2a0a0df506b65edc282723c3" dependencies = [ "base64", "schemars", @@ -66,9 +66,9 @@ dependencies = [ [[package]] name = "cosmwasm-storage" -version = "0.9.2" +version = "0.10.0-alpha2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc8bc1096866af97f6db381ed927ef192ce4da99f784a47c080b67c3f0f6658b" +checksum = "4eb517250ced8552c09380798949b8696be6fe77ee9f9c006491552ab88a8429" dependencies = [ "cosmwasm-std", "serde", diff --git a/contracts/cw1-whitelist/Cargo.toml b/contracts/cw1-whitelist/Cargo.toml index fd45bb6b1..9634191ec 100644 --- a/contracts/cw1-whitelist/Cargo.toml +++ b/contracts/cw1-whitelist/Cargo.toml @@ -14,11 +14,11 @@ backtraces = ["cosmwasm-std/backtraces"] [dependencies] #cw1 = { path = "../../packages/cw1", version = "0.1.0" } -cosmwasm-std = { version = "0.9.2", features = ["iterator"] } -cosmwasm-storage = { version = "0.9.2", features = ["iterator"] } +cosmwasm-std = { version = "0.10.0-alpha2", features = ["iterator"] } +cosmwasm-storage = { version = "0.10.0-alpha2", features = ["iterator"] } schemars = "0.7" serde = { version = "1.0.103", default-features = false, features = ["derive"] } snafu = { version = "0.6.3" } [dev-dependencies] -cosmwasm-schema = { version = "0.9.2" } +cosmwasm-schema = { version = "0.10.0-alpha2" } diff --git a/contracts/cw1-whitelist/src/contract.rs b/contracts/cw1-whitelist/src/contract.rs index 5d4cf023c..4dad929f1 100644 --- a/contracts/cw1-whitelist/src/contract.rs +++ b/contracts/cw1-whitelist/src/contract.rs @@ -56,7 +56,7 @@ where T: Clone + fmt::Debug + PartialEq + JsonSchema, { let cfg = config_read(&deps.storage).load()?; - if !cfg.is_admin(&env.message.sender) { + if !cfg.is_admin(&deps.api.canonical_address(&env.message.sender)?) { Err(StdError::unauthorized()) } else { let mut res = HandleResponse::default(); @@ -71,7 +71,7 @@ pub fn handle_freeze( env: Env, ) -> StdResult { let mut cfg = config_read(&deps.storage).load()?; - if !cfg.can_modify(&env.message.sender) { + if !cfg.can_modify(&deps.api.canonical_address(&env.message.sender)?) { Err(StdError::unauthorized()) } else { cfg.mutable = false; @@ -89,7 +89,7 @@ pub fn handle_update_admins( admins: Vec, ) -> StdResult { let mut cfg = config_read(&deps.storage).load()?; - if !cfg.can_modify(&env.message.sender) { + if !cfg.can_modify(&deps.api.canonical_address(&env.message.sender)?) { Err(StdError::unauthorized()) } else { cfg.admins = map_canonical(&deps.api, &admins)?; @@ -143,7 +143,7 @@ mod tests { admins: vec![alice.clone(), bob.clone(), carl.clone()], mutable: true, }; - let env = mock_env(&deps.api, &anyone, &[]); + let env = mock_env(&anyone, &[]); init(&mut deps, env, init_msg).unwrap(); // ensure expected config @@ -157,7 +157,7 @@ mod tests { let msg = HandleMsg::UpdateAdmins { admins: vec![anyone.clone()], }; - let env = mock_env(&deps.api, &anyone, &[]); + let env = mock_env(&anyone, &[]); let res = handle(&mut deps, env, msg); match res.unwrap_err() { StdError::Unauthorized { .. } => {} @@ -168,7 +168,7 @@ mod tests { let msg = HandleMsg::UpdateAdmins { admins: vec![alice.clone(), bob.clone()], }; - let env = mock_env(&deps.api, &alice, &[]); + let env = mock_env(&alice, &[]); handle(&mut deps, env, msg).unwrap(); // ensure expected config @@ -179,7 +179,7 @@ mod tests { assert_eq!(query_config(&deps).unwrap(), expected); // carl cannot freeze it - let env = mock_env(&deps.api, &carl, &[]); + let env = mock_env(&carl, &[]); let res = handle(&mut deps, env, HandleMsg::Freeze {}); match res.unwrap_err() { StdError::Unauthorized { .. } => {} @@ -187,7 +187,7 @@ mod tests { } // but bob can - let env = mock_env(&deps.api, &bob, &[]); + let env = mock_env(&bob, &[]); handle(&mut deps, env, HandleMsg::Freeze {}).unwrap(); let expected = ConfigResponse { admins: vec![alice.clone(), bob.clone()], @@ -199,7 +199,7 @@ mod tests { let msg = HandleMsg::UpdateAdmins { admins: vec![alice.clone()], }; - let env = mock_env(&deps.api, &alice, &[]); + let env = mock_env(&alice, &[]); let res = handle(&mut deps, env, msg); match res.unwrap_err() { StdError::Unauthorized { .. } => {} @@ -220,7 +220,7 @@ mod tests { admins: vec![alice.clone(), carl.clone()], mutable: false, }; - let env = mock_env(&deps.api, &bob, &[]); + let env = mock_env(&bob, &[]); init(&mut deps, env, init_msg).unwrap(); let freeze: HandleMsg = HandleMsg::Freeze {}; @@ -243,7 +243,7 @@ mod tests { let handle_msg = HandleMsg::Execute { msgs: msgs.clone() }; // bob cannot execute them - let env = mock_env(&deps.api, &bob, &[]); + let env = mock_env(&bob, &[]); let res = handle(&mut deps, env, handle_msg.clone()); match res.unwrap_err() { StdError::Unauthorized { .. } => {} @@ -251,7 +251,7 @@ mod tests { } // but carl can - let env = mock_env(&deps.api, &carl, &[]); + let env = mock_env(&carl, &[]); let res = handle(&mut deps, env, handle_msg.clone()).unwrap(); assert_eq!(res.messages, msgs); assert_eq!(res.log, vec![log("action", "execute")]); diff --git a/contracts/cw20-base/Cargo.toml b/contracts/cw20-base/Cargo.toml index 6b5d2fc6a..333574f68 100644 --- a/contracts/cw20-base/Cargo.toml +++ b/contracts/cw20-base/Cargo.toml @@ -24,13 +24,13 @@ backtraces = ["cosmwasm-std/backtraces"] [dependencies] cw20 = { path = "../../packages/cw20", version = "0.1.0" } -cosmwasm-std = { version = "0.9.2" } -cosmwasm-storage = { version = "0.9.2" } +cosmwasm-std = { version = "0.10.0-alpha2" } +cosmwasm-storage = { version = "0.10.0-alpha2" } schemars = "0.7" serde = { version = "1.0.103", default-features = false, features = ["derive"] } snafu = { version = "0.6.3" } [dev-dependencies] # we only need to enable this if we use integration tests -#cosmwasm-vm = { version = "0.9.2", default-features = false } -cosmwasm-schema = { version = "0.9.2" } +#cosmwasm-vm = { version = "0.10.0-alpha2", default-features = false } +cosmwasm-schema = { version = "0.10.0-alpha2" } diff --git a/contracts/cw20-base/src/allowances.rs b/contracts/cw20-base/src/allowances.rs index 06dfdf493..f0d70bc9f 100644 --- a/contracts/cw20-base/src/allowances.rs +++ b/contracts/cw20-base/src/allowances.rs @@ -13,10 +13,10 @@ pub fn handle_increase_allowance( amount: Uint128, expires: Option, ) -> StdResult { - let spender_raw = deps.api.canonical_address(&spender)?; - let owner_raw = &env.message.sender; + let spender_raw = &deps.api.canonical_address(&spender)?; + let owner_raw = &deps.api.canonical_address(&env.message.sender)?; - if &spender_raw == owner_raw { + if spender_raw == owner_raw { return Err(StdError::generic_err("Cannot set allowance to own account")); } @@ -49,10 +49,10 @@ pub fn handle_decrease_allowance( amount: Uint128, expires: Option, ) -> StdResult { - let spender_raw = deps.api.canonical_address(&spender)?; - let owner_raw = &env.message.sender; + let spender_raw = &deps.api.canonical_address(&spender)?; + let owner_raw = &deps.api.canonical_address(&env.message.sender)?; - if &spender_raw == owner_raw { + if spender_raw == owner_raw { return Err(StdError::generic_err("Cannot set allowance to own account")); } @@ -67,7 +67,7 @@ pub fn handle_decrease_allowance( } bucket.save(spender_raw.as_slice(), &allowance)?; } else { - allowance_remove(&mut deps.storage, owner_raw, &spender_raw); + allowance_remove(&mut deps.storage, owner_raw, spender_raw); } let res = HandleResponse { @@ -116,7 +116,7 @@ pub fn handle_transfer_from( ) -> StdResult { let rcpt_raw = deps.api.canonical_address(&recipient)?; let owner_raw = deps.api.canonical_address(&owner)?; - let spender_raw = env.message.sender; + let spender_raw = deps.api.canonical_address(&env.message.sender)?; // deduct allowance before doing anything else have enough allowance deduct_allowance( @@ -155,8 +155,8 @@ pub fn handle_burn_from( owner: HumanAddr, amount: Uint128, ) -> StdResult { - let spender_raw = env.message.sender; let owner_raw = deps.api.canonical_address(&owner)?; + let spender_raw = deps.api.canonical_address(&env.message.sender)?; // deduct allowance before doing anything else have enough allowance deduct_allowance( @@ -201,7 +201,7 @@ pub fn handle_send_from( ) -> StdResult { let rcpt_raw = deps.api.canonical_address(&contract)?; let owner_raw = deps.api.canonical_address(&owner)?; - let spender_raw = env.message.sender; + let spender_raw = deps.api.canonical_address(&env.message.sender)?; // deduct allowance before doing anything else have enough allowance deduct_allowance( @@ -293,7 +293,7 @@ mod tests { }], mint: None, }; - let env = mock_env(&deps.api, &HumanAddr("creator".to_string()), &[]); + let env = mock_env(&HumanAddr("creator".to_string()), &[]); init(deps, env, init_msg).unwrap(); query_meta(&deps).unwrap() } @@ -304,7 +304,7 @@ mod tests { let owner = HumanAddr::from("addr0001"); let spender = HumanAddr::from("addr0002"); - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); do_init(&mut deps, &owner, Uint128(12340000)); // no allowance to start @@ -386,7 +386,7 @@ mod tests { let owner = HumanAddr::from("addr0001"); let spender = HumanAddr::from("addr0002"); let spender2 = HumanAddr::from("addr0003"); - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); do_init(&mut deps, &owner, Uint128(12340000)); // no allowance to start @@ -445,7 +445,7 @@ mod tests { ); // also allow spender -> spender2 with no interference - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let allow3 = Uint128(1821); let expires3 = Expiration::AtTime { time: 3767626296 }; let msg = HandleMsg::IncreaseAllowance { @@ -477,7 +477,7 @@ mod tests { let mut deps = mock_dependencies(20, &coins(2, "token")); let owner = HumanAddr::from("addr0001"); - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); do_init(&mut deps, &owner, Uint128(12340000)); // self-allowance @@ -526,7 +526,7 @@ mod tests { amount: allow1, expires: None, }; - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); handle(&mut deps, env.clone(), msg).unwrap(); // valid transfer of part of the allowance @@ -536,7 +536,7 @@ mod tests { recipient: rcpt.clone(), amount: transfer, }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg).unwrap(); assert_eq!(res.log[0], log("action", "transfer_from")); @@ -558,7 +558,7 @@ mod tests { recipient: rcpt.clone(), amount: Uint128(33443), }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg); match res.unwrap_err() { StdError::Underflow { .. } => {} @@ -566,7 +566,7 @@ mod tests { } // let us increase limit, but set the expiration (default env height is 12_345) - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); let msg = HandleMsg::IncreaseAllowance { spender: spender.clone(), amount: Uint128(1000), @@ -582,7 +582,7 @@ mod tests { recipient: rcpt.clone(), amount: Uint128(33443), }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg); match res.unwrap_err() { StdError::GenericErr { msg, .. } => assert_eq!(msg, "Allowance is expired"), @@ -606,7 +606,7 @@ mod tests { amount: allow1, expires: None, }; - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); handle(&mut deps, env.clone(), msg).unwrap(); // valid burn of part of the allowance @@ -615,7 +615,7 @@ mod tests { owner: owner.clone(), amount: transfer, }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg).unwrap(); assert_eq!(res.log[0], log("action", "burn_from")); @@ -635,7 +635,7 @@ mod tests { owner: owner.clone(), amount: Uint128(33443), }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg); match res.unwrap_err() { StdError::Underflow { .. } => {} @@ -643,7 +643,7 @@ mod tests { } // let us increase limit, but set the expiration (default env height is 12_345) - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); let msg = HandleMsg::IncreaseAllowance { spender: spender.clone(), amount: Uint128(1000), @@ -658,7 +658,7 @@ mod tests { owner: owner.clone(), amount: Uint128(33443), }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg); match res.unwrap_err() { StdError::GenericErr { msg, .. } => assert_eq!(msg, "Allowance is expired"), @@ -684,7 +684,7 @@ mod tests { amount: allow1, expires: None, }; - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); handle(&mut deps, env.clone(), msg).unwrap(); // valid send of part of the allowance @@ -695,7 +695,7 @@ mod tests { contract: contract.clone(), msg: Some(send_msg.clone()), }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg).unwrap(); assert_eq!(res.log[0], log("action", "send_from")); assert_eq!(1, res.messages.len()); @@ -737,7 +737,7 @@ mod tests { contract: contract.clone(), msg: Some(send_msg.clone()), }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg); match res.unwrap_err() { StdError::Underflow { .. } => {} @@ -745,7 +745,7 @@ mod tests { } // let us increase limit, but set the expiration to current block (expired) - let env = mock_env(&deps.api, owner.clone(), &[]); + let env = mock_env(owner.clone(), &[]); let msg = HandleMsg::IncreaseAllowance { spender: spender.clone(), amount: Uint128(1000), @@ -762,7 +762,7 @@ mod tests { contract: contract.clone(), msg: Some(send_msg.clone()), }; - let env = mock_env(&deps.api, spender.clone(), &[]); + let env = mock_env(spender.clone(), &[]); let res = handle(&mut deps, env.clone(), msg); match res.unwrap_err() { StdError::GenericErr { msg, .. } => assert_eq!(msg, "Allowance is expired"), diff --git a/contracts/cw20-base/src/contract.rs b/contracts/cw20-base/src/contract.rs index 6a59c005a..5cd7ee1a1 100644 --- a/contracts/cw20-base/src/contract.rs +++ b/contracts/cw20-base/src/contract.rs @@ -107,7 +107,7 @@ pub fn handle_transfer( amount: Uint128, ) -> StdResult { let rcpt_raw = deps.api.canonical_address(&recipient)?; - let sender_raw = env.message.sender; + let sender_raw = deps.api.canonical_address(&env.message.sender)?; let mut accounts = balances(&mut deps.storage); accounts.update(sender_raw.as_slice(), |balance: Option| { @@ -135,7 +135,7 @@ pub fn handle_burn( env: Env, amount: Uint128, ) -> StdResult { - let sender_raw = env.message.sender; + let sender_raw = deps.api.canonical_address(&env.message.sender)?; // lower balance let mut accounts = balances(&mut deps.storage); @@ -167,7 +167,10 @@ pub fn handle_mint( amount: Uint128, ) -> StdResult { let mut config = meta_read(&deps.storage).load()?; - if config.mint.is_none() || config.mint.as_ref().unwrap().minter != env.message.sender { + if config.mint.is_none() + || config.mint.as_ref().unwrap().minter + != deps.api.canonical_address(&env.message.sender)? + { return Err(StdError::unauthorized()); } @@ -206,7 +209,7 @@ pub fn handle_send( msg: Option, ) -> StdResult { let rcpt_raw = deps.api.canonical_address(&contract)?; - let sender_raw = env.message.sender; + let sender_raw = deps.api.canonical_address(&env.message.sender)?; // move the tokens to the contract let mut accounts = balances(&mut deps.storage); @@ -353,7 +356,7 @@ mod tests { }], mint: mint.clone(), }; - let env = mock_env(&deps.api, &HumanAddr("creator".to_string()), &[]); + let env = mock_env(&HumanAddr("creator".to_string()), &[]); let res = init(deps, env, init_msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -386,7 +389,7 @@ mod tests { }], mint: None, }; - let env = mock_env(&deps.api, &HumanAddr("creator".to_string()), &[]); + let env = mock_env(&HumanAddr("creator".to_string()), &[]); let res = init(&mut deps, env, init_msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -421,7 +424,7 @@ mod tests { cap: Some(limit), }), }; - let env = mock_env(&deps.api, &HumanAddr("creator".to_string()), &[]); + let env = mock_env(&HumanAddr("creator".to_string()), &[]); let res = init(&mut deps, env, init_msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -463,7 +466,7 @@ mod tests { cap: Some(limit), }), }; - let env = mock_env(&deps.api, &HumanAddr("creator".to_string()), &[]); + let env = mock_env(&HumanAddr("creator".to_string()), &[]); let res = init(&mut deps, env, init_msg); match res.unwrap_err() { StdError::GenericErr { msg, .. } => assert_eq!(&msg, "Initial supply greater than cap"), @@ -489,7 +492,7 @@ mod tests { amount: prize, }; - let env = mock_env(&deps.api, &minter, &[]); + let env = mock_env(&minter, &[]); let res = handle(&mut deps, env, msg.clone()).unwrap(); assert_eq!(0, res.messages.len()); assert_eq!(get_balance(&deps, &genesis), amount); @@ -501,7 +504,7 @@ mod tests { recipient: winner.clone(), amount: Uint128(333_222_222), }; - let env = mock_env(&deps.api, &minter, &[]); + let env = mock_env(&minter, &[]); let res = handle(&mut deps, env, msg.clone()); match res.unwrap_err() { StdError::GenericErr { msg, .. } => { @@ -526,7 +529,7 @@ mod tests { recipient: HumanAddr::from("lucky"), amount: Uint128(222), }; - let env = mock_env(&deps.api, &HumanAddr::from("anyone else"), &[]); + let env = mock_env(&HumanAddr::from("anyone else"), &[]); let res = handle(&mut deps, env, msg.clone()); match res.unwrap_err() { StdError::Unauthorized { .. } => {} @@ -543,7 +546,7 @@ mod tests { recipient: HumanAddr::from("lucky"), amount: Uint128(222), }; - let env = mock_env(&deps.api, &HumanAddr::from("genesis"), &[]); + let env = mock_env(&HumanAddr::from("genesis"), &[]); let res = handle(&mut deps, env, msg.clone()); match res.unwrap_err() { StdError::Unauthorized { .. } => {} @@ -574,7 +577,7 @@ mod tests { ], mint: None, }; - let env = mock_env(&deps.api, &HumanAddr("creator".to_string()), &[]); + let env = mock_env(&HumanAddr("creator".to_string()), &[]); let res = init(&mut deps, env, init_msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -638,7 +641,7 @@ mod tests { do_init(&mut deps, &addr1, amount1); // cannot send more than we have - let env = mock_env(&deps.api, addr1.clone(), &[]); + let env = mock_env(addr1.clone(), &[]); let msg = HandleMsg::Transfer { recipient: addr2.clone(), amount: too_much, @@ -650,7 +653,7 @@ mod tests { } // cannot send from empty account - let env = mock_env(&deps.api, addr2.clone(), &[]); + let env = mock_env(addr2.clone(), &[]); let msg = HandleMsg::Transfer { recipient: addr1.clone(), amount: transfer, @@ -662,7 +665,7 @@ mod tests { } // valid transfer - let env = mock_env(&deps.api, addr1.clone(), &[]); + let env = mock_env(addr1.clone(), &[]); let msg = HandleMsg::Transfer { recipient: addr2.clone(), amount: transfer, @@ -687,7 +690,7 @@ mod tests { do_init(&mut deps, &addr1, amount1); // cannot burn more than we have - let env = mock_env(&deps.api, addr1.clone(), &[]); + let env = mock_env(addr1.clone(), &[]); let msg = HandleMsg::Burn { amount: too_much }; let res = handle(&mut deps, env, msg); match res.unwrap_err() { @@ -697,7 +700,7 @@ mod tests { assert_eq!(query_meta(&deps).unwrap().total_supply, amount1); // valid burn reduces total supply - let env = mock_env(&deps.api, addr1.clone(), &[]); + let env = mock_env(addr1.clone(), &[]); let msg = HandleMsg::Burn { amount: burn }; let res = handle(&mut deps, env, msg).unwrap(); assert_eq!(res.messages.len(), 0); @@ -720,7 +723,7 @@ mod tests { do_init(&mut deps, &addr1, amount1); // cannot send more than we have - let env = mock_env(&deps.api, addr1.clone(), &[]); + let env = mock_env(addr1.clone(), &[]); let msg = HandleMsg::Send { contract: contract.clone(), amount: too_much, @@ -733,7 +736,7 @@ mod tests { } // valid transfer - let env = mock_env(&deps.api, addr1.clone(), &[]); + let env = mock_env(addr1.clone(), &[]); let msg = HandleMsg::Send { contract: contract.clone(), amount: transfer, diff --git a/contracts/cw20-escrow/Cargo.toml b/contracts/cw20-escrow/Cargo.toml index fe767f1ac..b6c51e383 100644 --- a/contracts/cw20-escrow/Cargo.toml +++ b/contracts/cw20-escrow/Cargo.toml @@ -14,11 +14,11 @@ backtraces = ["cosmwasm-std/backtraces"] [dependencies] cw20 = { path = "../../packages/cw20", version = "0.1.0" } -cosmwasm-std = { version = "0.9.2", features = ["iterator"] } -cosmwasm-storage = { version = "0.9.2", features = ["iterator"] } +cosmwasm-std = { version = "0.10.0-alpha2", features = ["iterator"] } +cosmwasm-storage = { version = "0.10.0-alpha2", features = ["iterator"] } schemars = "0.7" serde = { version = "1.0.103", default-features = false, features = ["derive"] } snafu = { version = "0.6.3" } [dev-dependencies] -cosmwasm-schema = { version = "0.9.2" } +cosmwasm-schema = { version = "0.10.0-alpha2" } diff --git a/contracts/cw20-escrow/src/contract.rs b/contracts/cw20-escrow/src/contract.rs index 262d3928e..ee9eecc63 100644 --- a/contracts/cw20-escrow/src/contract.rs +++ b/contracts/cw20-escrow/src/contract.rs @@ -44,7 +44,7 @@ pub fn try_receive( None => Err(StdError::parse_err("ReceiveMsg", "no data")), }?; let token = Cw20Coin { - address: env.message.sender, + address: deps.api.canonical_address(&env.message.sender)?, amount: wrapper.amount, }; match msg { @@ -67,7 +67,7 @@ pub fn try_create( let escrow = Escrow { arbiter: deps.api.canonical_address(&msg.arbiter)?, recipient: deps.api.canonical_address(&msg.recipient)?, - source: env.message.sender, + source: deps.api.canonical_address(&env.message.sender)?, end_height: msg.end_height, end_time: msg.end_time, // there are native coins sent with the message @@ -174,7 +174,7 @@ pub fn try_approve( // this fails is no escrow there let escrow = escrows_read(&deps.storage).load(id.as_bytes())?; - if env.message.sender != escrow.arbiter { + if deps.api.canonical_address(&env.message.sender)? != escrow.arbiter { Err(StdError::unauthorized()) } else if escrow.is_expired(&env) { Err(StdError::generic_err("escrow expired")) @@ -183,10 +183,9 @@ pub fn try_approve( prefixed(PREFIX_ESCROW, &mut deps.storage).remove(id.as_bytes()); let rcpt = deps.api.human_address(&escrow.recipient)?; - let contract = deps.api.human_address(&env.contract.address)?; // send all tokens out - let mut messages = send_native_tokens(&contract, &rcpt, escrow.native_balance); + let mut messages = send_native_tokens(&env.contract.address, &rcpt, escrow.native_balance); let mut cw20_send = send_cw20_tokens(&deps.api, &rcpt, escrow.cw20_balance)?; messages.append(&mut cw20_send); @@ -208,17 +207,18 @@ pub fn try_refund( let escrow = escrows_read(&deps.storage).load(id.as_bytes())?; // the arbiter can send anytime OR anyone can send after expiration - if !escrow.is_expired(&env) && env.message.sender != escrow.arbiter { + if !escrow.is_expired(&env) + && deps.api.canonical_address(&env.message.sender)? != escrow.arbiter + { Err(StdError::unauthorized()) } else { // we delete the escrow (TODO: expose this in Bucket for simpler API) prefixed(PREFIX_ESCROW, &mut deps.storage).remove(id.as_bytes()); let rcpt = deps.api.human_address(&escrow.source)?; - let contract = deps.api.human_address(&env.contract.address)?; // send all tokens out - let mut messages = send_native_tokens(&contract, &rcpt, escrow.native_balance); + let mut messages = send_native_tokens(&env.contract.address, &rcpt, escrow.native_balance); let mut cw20_send = send_cw20_tokens(&deps.api, &rcpt, escrow.cw20_balance)?; messages.append(&mut cw20_send); @@ -361,7 +361,7 @@ mod tests { // init an empty contract let init_msg = InitMsg {}; - let env = mock_env(&deps.api, &HumanAddr::from("anyone"), &[]); + let env = mock_env(&HumanAddr::from("anyone"), &[]); let res = init(&mut deps, env, init_msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -376,7 +376,7 @@ mod tests { }; let sender = HumanAddr::from("source"); let balance = coins(100, "tokens"); - let env = mock_env(&deps.api, &sender, &balance); + let env = mock_env(&sender, &balance); let res = handle(&mut deps, env, HandleMsg::Create(create.clone())).unwrap(); assert_eq!(0, res.messages.len()); assert_eq!(log("action", "create"), res.log[0]); @@ -400,7 +400,7 @@ mod tests { // approve it let id = create.id.clone(); - let env = mock_env(&deps.api, &create.arbiter, &[]); + let env = mock_env(&create.arbiter, &[]); let res = handle(&mut deps, env, HandleMsg::Approve { id }).unwrap(); assert_eq!(1, res.messages.len()); assert_eq!(log("action", "approve"), res.log[0]); @@ -415,7 +415,7 @@ mod tests { // second attempt fails (not found) let id = create.id.clone(); - let env = mock_env(&deps.api, &create.arbiter, &[]); + let env = mock_env(&create.arbiter, &[]); let res = handle(&mut deps, env, HandleMsg::Approve { id }); match res.unwrap_err() { StdError::NotFound { .. } => {} @@ -429,7 +429,7 @@ mod tests { // init an empty contract let init_msg = InitMsg {}; - let env = mock_env(&deps.api, &HumanAddr::from("anyone"), &[]); + let env = mock_env(&HumanAddr::from("anyone"), &[]); let res = init(&mut deps, env, init_msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -448,7 +448,7 @@ mod tests { msg: Some(to_binary(&HandleMsg::Create(create.clone())).unwrap()), }; let token_contract = HumanAddr::from("my-cw20-token"); - let env = mock_env(&deps.api, &token_contract, &[]); + let env = mock_env(&token_contract, &[]); let res = handle(&mut deps, env, HandleMsg::Receive(receive.clone())).unwrap(); assert_eq!(0, res.messages.len()); assert_eq!(log("action", "create"), res.log[0]); @@ -478,7 +478,7 @@ mod tests { // approve it let id = create.id.clone(); - let env = mock_env(&deps.api, &create.arbiter, &[]); + let env = mock_env(&create.arbiter, &[]); let res = handle(&mut deps, env, HandleMsg::Approve { id }).unwrap(); assert_eq!(1, res.messages.len()); assert_eq!(log("action", "approve"), res.log[0]); @@ -497,7 +497,7 @@ mod tests { // second attempt fails (not found) let id = create.id.clone(); - let env = mock_env(&deps.api, &create.arbiter, &[]); + let env = mock_env(&create.arbiter, &[]); let res = handle(&mut deps, env, HandleMsg::Approve { id }); match res.unwrap_err() { StdError::NotFound { .. } => {} @@ -563,7 +563,7 @@ mod tests { // init an empty contract let init_msg = InitMsg {}; - let env = mock_env(&deps.api, &HumanAddr::from("anyone"), &[]); + let env = mock_env(&HumanAddr::from("anyone"), &[]); let res = init(&mut deps, env, init_msg).unwrap(); assert_eq!(0, res.messages.len()); @@ -581,14 +581,14 @@ mod tests { }; let sender = HumanAddr::from("source"); let balance = vec![coin(100, "fee"), coin(200, "stake")]; - let env = mock_env(&deps.api, &sender, &balance); + let env = mock_env(&sender, &balance); let res = handle(&mut deps, env, HandleMsg::Create(create.clone())).unwrap(); assert_eq!(0, res.messages.len()); assert_eq!(log("action", "create"), res.log[0]); // top it up with 2 more native tokens let extra_native = vec![coin(250, "random"), coin(300, "stake")]; - let env = mock_env(&deps.api, &sender, &extra_native); + let env = mock_env(&sender, &extra_native); let top_up = HandleMsg::TopUp { id: create.id.clone(), }; @@ -606,7 +606,7 @@ mod tests { amount: Uint128(7890), msg: Some(to_binary(&base).unwrap()), }); - let env = mock_env(&deps.api, &bar_token, &[]); + let env = mock_env(&bar_token, &[]); let res = handle(&mut deps, env, top_up).unwrap(); assert_eq!(0, res.messages.len()); assert_eq!(log("action", "top_up"), res.log[0]); @@ -622,7 +622,7 @@ mod tests { amount: Uint128(7890), msg: Some(to_binary(&base).unwrap()), }); - let env = mock_env(&deps.api, &baz_token, &[]); + let env = mock_env(&baz_token, &[]); let res = handle(&mut deps, env, top_up); match res.unwrap_err() { StdError::GenericErr { msg, .. } => { @@ -641,14 +641,14 @@ mod tests { amount: Uint128(888), msg: Some(to_binary(&base).unwrap()), }); - let env = mock_env(&deps.api, &foo_token, &[]); + let env = mock_env(&foo_token, &[]); let res = handle(&mut deps, env, top_up).unwrap(); assert_eq!(0, res.messages.len()); assert_eq!(log("action", "top_up"), res.log[0]); // approve it let id = create.id.clone(); - let env = mock_env(&deps.api, &create.arbiter, &[]); + let env = mock_env(&create.arbiter, &[]); let res = handle(&mut deps, env, HandleMsg::Approve { id }).unwrap(); assert_eq!(log("action", "approve"), res.log[0]); assert_eq!(3, res.messages.len()); diff --git a/packages/cw1/Cargo.toml b/packages/cw1/Cargo.toml index d537fcecb..e9323adc9 100644 --- a/packages/cw1/Cargo.toml +++ b/packages/cw1/Cargo.toml @@ -7,9 +7,9 @@ description = "Definition and types for the CosmWasm-1 interface" license = "AGPL-3.0" [dependencies] -cosmwasm-std = { version = "0.9.2" } +cosmwasm-std = { version = "0.10.0-alpha2" } schemars = "0.7" serde = { version = "1.0.103", default-features = false, features = ["derive"] } [dev-dependencies] -cosmwasm-schema = { version = "0.9.2" } +cosmwasm-schema = { version = "0.10.0-alpha2" } diff --git a/packages/cw20/Cargo.toml b/packages/cw20/Cargo.toml index 0cbe5d4e4..646b51c57 100644 --- a/packages/cw20/Cargo.toml +++ b/packages/cw20/Cargo.toml @@ -7,9 +7,9 @@ description = "Definition and types for the CosmWasm-20 interface" license = "AGPL-3.0" [dependencies] -cosmwasm-std = { version = "0.9.2" } +cosmwasm-std = { version = "0.10.0-alpha2" } schemars = "0.7" serde = { version = "1.0.103", default-features = false, features = ["derive"] } [dev-dependencies] -cosmwasm-schema = { version = "0.9.2" } +cosmwasm-schema = { version = "0.10.0-alpha2" } From b4ddade052441d3130989a2d8be9160539d295e7 Mon Sep 17 00:00:00 2001 From: Mauro Lacy Date: Sun, 26 Jul 2020 17:43:50 +0200 Subject: [PATCH 2/3] Update docs --- contracts/cw1-whitelist/README.md | 12 ++++++------ contracts/cw20-base/README.md | 4 ++-- contracts/cw20-escrow/README.md | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contracts/cw1-whitelist/README.md b/contracts/cw1-whitelist/README.md index 4fb452267..8c11630c9 100644 --- a/contracts/cw1-whitelist/README.md +++ b/contracts/cw1-whitelist/README.md @@ -25,7 +25,7 @@ a chain-specific message. ## Running this contract -You will need Rust 1.41+ with `wasm32-unknown-unknown` target installed. +You will need Rust 1.44.1+ with `wasm32-unknown-unknown` target installed. You can run unit tests on this via: @@ -35,9 +35,9 @@ Once you are happy with the content, you can compile it to wasm via: ``` RUSTFLAGS='-C link-arg=-s' cargo wasm -cp ../../target/wasm32-unknown-unknown/release/cw20_escrow.wasm . -ls -l cw20_escrow.wasm -sha256sum cw20_escrow.wasm +cp ../../target/wasm32-unknown-unknown/release/cw1_whitelist.wasm . +ls -l cw1_whitelist.wasm +sha256sum cw1_whitelist.wasm ``` Or for a production-ready (compressed) build, run the following from the @@ -47,6 +47,6 @@ repository root (not currently working with this monorepo...) docker run --rm -v "$(pwd)":/code \ --mount type=volume,source="cosmwasm_plus_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.8.0 ./contracts/cw20-base -mv contract.wasm cw20_escrow.wasm + cosmwasm/rust-optimizer:0.9.0 ./contracts/cw1-base +mv contract.wasm cw1_whitelist.wasm ``` diff --git a/contracts/cw20-base/README.md b/contracts/cw20-base/README.md index fa9639b12..d65ab302c 100644 --- a/contracts/cw20-base/README.md +++ b/contracts/cw20-base/README.md @@ -13,7 +13,7 @@ Implements: ## Running this contract -You will need Rust 1.41+ with `wasm32-unknown-unknown` target installed. +You will need Rust 1.44.1+ with `wasm32-unknown-unknown` target installed. You can run unit tests on this via: @@ -35,7 +35,7 @@ repository root (not currently working with this monorepo...) docker run --rm -v "$(pwd)":/code \ --mount type=volume,source="cosmwasm_plus_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.8.0 ./contracts/cw20-base + cosmwasm/rust-optimizer:0.9.0 ./contracts/cw20-base mv contract.wasm cw20_base.wasm ``` diff --git a/contracts/cw20-escrow/README.md b/contracts/cw20-escrow/README.md index 295e750df..82ed02ccd 100644 --- a/contracts/cw20-escrow/README.md +++ b/contracts/cw20-escrow/README.md @@ -27,7 +27,7 @@ allow of which get released when the arbiter decides. ## Running this contract -You will need Rust 1.41+ with `wasm32-unknown-unknown` target installed. +You will need Rust 1.44.1+ with `wasm32-unknown-unknown` target installed. You can run unit tests on this via: @@ -49,6 +49,6 @@ repository root (not currently working with this monorepo...) docker run --rm -v "$(pwd)":/code \ --mount type=volume,source="cosmwasm_plus_cache",target=/code/target \ --mount type=volume,source=registry_cache,target=/usr/local/cargo/registry \ - cosmwasm/rust-optimizer:0.8.0 ./contracts/cw20-base + cosmwasm/rust-optimizer:0.9.0 ./contracts/cw20-escrow mv contract.wasm cw20_escrow.wasm ``` From 781853591529cca575a7aea38677ddfe9499f780 Mon Sep 17 00:00:00 2001 From: Mauro Lacy Date: Sun, 26 Jul 2020 17:44:42 +0200 Subject: [PATCH 3/3] Update Rust toolchain to v1.44.1 --- .circleci/config.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fc7c19123..38e39891d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -13,7 +13,7 @@ workflows: jobs: contract_cw1_whitelist: docker: - - image: rust:1.44.0 + - image: rust:1.44.1 working_directory: ~/project/contracts/cw1-whitelist steps: - checkout: @@ -23,7 +23,7 @@ jobs: command: rustc --version; cargo --version; rustup --version - restore_cache: keys: - - cargocache-cw1-whitelist-rust:1.44.0-{{ checksum "~/project/Cargo.lock" }} + - cargocache-cw1-whitelist-rust:1.44.1-{{ checksum "~/project/Cargo.lock" }} - run: name: Add wasm32 target command: rustup target add wasm32-unknown-unknown @@ -50,11 +50,11 @@ jobs: paths: - /usr/local/cargo/registry - target - key: cargocache-cw1-whitelist-rust:1.44.0-{{ checksum "~/project/Cargo.lock" }} + key: cargocache-cw1-whitelist-rust:1.44.1-{{ checksum "~/project/Cargo.lock" }} contract_cw20_base: docker: - - image: rust:1.44.0 + - image: rust:1.44.1 working_directory: ~/project/contracts/cw20-base steps: - checkout: @@ -64,7 +64,7 @@ jobs: command: rustc --version; cargo --version; rustup --version - restore_cache: keys: - - cargocache-cw20-base-rust:1.44.0-{{ checksum "~/project/Cargo.lock" }} + - cargocache-cw20-base-rust:1.44.1-{{ checksum "~/project/Cargo.lock" }} - run: name: Add wasm32 target command: rustup target add wasm32-unknown-unknown @@ -91,11 +91,11 @@ jobs: paths: - /usr/local/cargo/registry - target - key: cargocache-cw20-base-rust:1.44.0-{{ checksum "~/project/Cargo.lock" }} + key: cargocache-cw20-base-rust:1.44.1-{{ checksum "~/project/Cargo.lock" }} contract_cw20_escrow: docker: - - image: rust:1.44.0 + - image: rust:1.44.1 working_directory: ~/project/contracts/cw20-escrow steps: - checkout: @@ -105,7 +105,7 @@ jobs: command: rustc --version; cargo --version; rustup --version - restore_cache: keys: - - cargocache-cw20-escrow-rust:1.44.0-{{ checksum "~/project/Cargo.lock" }} + - cargocache-cw20-escrow-rust:1.44.1-{{ checksum "~/project/Cargo.lock" }} - run: name: Add wasm32 target command: rustup target add wasm32-unknown-unknown @@ -132,11 +132,11 @@ jobs: paths: - /usr/local/cargo/registry - target - key: cargocache-cw20-escrow-rust:1.44.0-{{ checksum "~/project/Cargo.lock" }} + key: cargocache-cw20-escrow-rust:1.44.1-{{ checksum "~/project/Cargo.lock" }} package_cw20: docker: - - image: rust:1.44.0 + - image: rust:1.44.1 working_directory: ~/project/packages/cw20 steps: - checkout: @@ -146,7 +146,7 @@ jobs: command: rustc --version; cargo --version; rustup --version; rustup target list --installed - restore_cache: keys: - - cargocache-v2-cw20:1.44.0-{{ checksum "~/project/Cargo.lock" }} + - cargocache-v2-cw20:1.44.1-{{ checksum "~/project/Cargo.lock" }} - run: name: Add wasm32 target command: rustup target add wasm32-unknown-unknown && rustup target list --installed @@ -175,11 +175,11 @@ jobs: paths: - /usr/local/cargo/registry - target - key: cargocache-v2-cw20:1.44.0-{{ checksum "~/project/Cargo.lock" }} + key: cargocache-v2-cw20:1.44.1-{{ checksum "~/project/Cargo.lock" }} package_cw1: docker: - - image: rust:1.44.0 + - image: rust:1.44.1 working_directory: ~/project/packages/cw1 steps: - checkout: @@ -189,7 +189,7 @@ jobs: command: rustc --version; cargo --version; rustup --version; rustup target list --installed - restore_cache: keys: - - cargocache-v2-cw1:1.44.0-{{ checksum "~/project/Cargo.lock" }} + - cargocache-v2-cw1:1.44.1-{{ checksum "~/project/Cargo.lock" }} - run: name: Add wasm32 target command: rustup target add wasm32-unknown-unknown && rustup target list --installed @@ -218,11 +218,11 @@ jobs: paths: - /usr/local/cargo/registry - target - key: cargocache-v2-cw1:1.44.0-{{ checksum "~/project/Cargo.lock" }} + key: cargocache-v2-cw1:1.44.1-{{ checksum "~/project/Cargo.lock" }} lint: docker: - - image: rust:1.44.0 + - image: rust:1.44.1 steps: - checkout - run: @@ -230,7 +230,7 @@ jobs: command: rustc --version; cargo --version; rustup --version; rustup target list --installed - restore_cache: keys: - - cargocache-v2-lint-rust:1.44.0-{{ checksum "Cargo.lock" }} + - cargocache-v2-lint-rust:1.44.1-{{ checksum "Cargo.lock" }} - run: name: Add rustfmt component command: rustup component add rustfmt @@ -249,4 +249,4 @@ jobs: - target/debug/.fingerprint - target/debug/build - target/debug/deps - key: cargocache-v2-lint-rust:1.44.0-{{ checksum "Cargo.lock" }} + key: cargocache-v2-lint-rust:1.44.1-{{ checksum "Cargo.lock" }}