Repository: public-awesome/launchpad
Pull request #520 (2023-03-06 21:16:19)

Fix Airdrop Claim Message
Was getting issues on airdrop claim because we are checking for the wrong eth signature plaintext. 

Before was checking for "My wallet is {stargaze_wallet}, sign me up and rest in peace";
Need to instead check for  "My wallet is {eth_address}, sign me up and rest in peace";

All unit tests updated to reflect the fix. 


Patch:
diff --git a/Cargo.lock b/Cargo.lock
index d686fb7a..dd07107e 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -268,7 +268,7 @@ dependencies = [
 
 [[package]]
 name = "base-factory"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -277,7 +277,7 @@ dependencies = [
  "cw2 0.16.0",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg1",
  "sg2",
  "thiserror",
@@ -285,7 +285,7 @@ dependencies = [
 
 [[package]]
 name = "base-minter"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "base-factory",
  "cosmwasm-schema",
@@ -297,7 +297,7 @@ dependencies = [
  "cw721-base",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg1",
  "sg2",
  "sg4",
@@ -1197,7 +1197,7 @@ checksum = "c9b0705efd4599c15a38151f4721f7bc388306f61084d3bfd50bd07fbca5cb60"
 
 [[package]]
 name = "e2e"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "assert_matches",
  "cosm-orc",
@@ -1384,7 +1384,7 @@ dependencies = [
 
 [[package]]
 name = "ethereum-verify"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3072,7 +3072,7 @@ dependencies = [
 
 [[package]]
 name = "sg-controllers"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3080,13 +3080,13 @@ dependencies = [
  "cw-utils 0.16.0",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "thiserror",
 ]
 
 [[package]]
 name = "sg-eth-airdrop"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "anyhow",
  "async-std",
@@ -3106,7 +3106,7 @@ dependencies = [
  "schemars",
  "serde",
  "sg-multi-test",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg-whitelist",
  "sg1",
  "sg2",
@@ -3121,7 +3121,7 @@ dependencies = [
 
 [[package]]
 name = "sg-metadata"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "schemars",
@@ -3130,19 +3130,19 @@ dependencies = [
 
 [[package]]
 name = "sg-multi-test"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "anyhow",
  "cosmwasm-std",
  "cw-multi-test",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "sg-splits"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3154,13 +3154,13 @@ dependencies = [
  "schemars",
  "serde",
  "sg-controllers",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "thiserror",
 ]
 
 [[package]]
 name = "sg-std"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3173,9 +3173,9 @@ dependencies = [
 
 [[package]]
 name = "sg-std"
-version = "0.24.1"
+version = "0.22.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89347ae724f58650c53c29d2ab7e17cab564289f0a36127ad6e8c292ceabeeda"
+checksum = "bd076abea035a2da34a770eb7a239a4fbffa59d3a193ab91e07fb81583937c5c"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3188,7 +3188,7 @@ dependencies = [
 
 [[package]]
 name = "sg-utils"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "bech32 0.8.1",
  "cosmwasm-std",
@@ -3196,7 +3196,7 @@ dependencies = [
 
 [[package]]
 name = "sg-whitelist"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3206,25 +3206,25 @@ dependencies = [
  "rust_decimal",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg1",
  "thiserror",
 ]
 
 [[package]]
 name = "sg1"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-std",
  "cw-utils 0.16.0",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "thiserror",
 ]
 
 [[package]]
 name = "sg2"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3237,7 +3237,7 @@ dependencies = [
 
 [[package]]
 name = "sg4"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3248,7 +3248,7 @@ dependencies = [
 
 [[package]]
 name = "sg721"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3261,7 +3261,7 @@ dependencies = [
 
 [[package]]
 name = "sg721-base"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3271,7 +3271,7 @@ dependencies = [
  "cw721",
  "cw721-base",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg721",
  "thiserror",
  "url",
@@ -3279,7 +3279,7 @@ dependencies = [
 
 [[package]]
 name = "sg721-metadata-onchain"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3289,14 +3289,14 @@ dependencies = [
  "schemars",
  "serde",
  "sg-metadata",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg721",
  "sg721-base",
 ]
 
 [[package]]
 name = "sg721-nt"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -3306,7 +3306,7 @@ dependencies = [
  "cw721-base",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg721",
  "sg721-base",
 ]
@@ -3629,7 +3629,7 @@ dependencies = [
 
 [[package]]
 name = "test-suite"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "anyhow",
  "async-std",
@@ -3657,7 +3657,7 @@ dependencies = [
  "sg-eth-airdrop",
  "sg-multi-test",
  "sg-splits",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg-whitelist",
  "sg1",
  "sg2",
@@ -4073,7 +4073,7 @@ dependencies = [
 
 [[package]]
 name = "vending-factory"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "base-factory",
  "cosmwasm-schema",
@@ -4083,7 +4083,7 @@ dependencies = [
  "cw2 0.16.0",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg1",
  "sg2",
  "sg721",
@@ -4092,7 +4092,7 @@ dependencies = [
 
 [[package]]
 name = "vending-minter"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -4104,9 +4104,8 @@ dependencies = [
  "rand_core 0.6.4",
  "rand_xoshiro",
  "schemars",
- "semver",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg-whitelist",
  "sg1",
  "sg2",
@@ -4264,7 +4263,7 @@ dependencies = [
 
 [[package]]
 name = "whitelist-immutable"
-version = "0.24.1"
+version = "0.22.11"
 dependencies = [
  "cosmwasm-schema",
  "cosmwasm-std",
@@ -4274,7 +4273,7 @@ dependencies = [
  "cw2 0.16.0",
  "schemars",
  "serde",
- "sg-std 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sg-std 0.22.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "sg-whitelist",
  "thiserror",
 ]
diff --git a/Cargo.toml b/Cargo.toml
index e908f89c..15e276eb 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,15 +3,15 @@ members  = ["packages/*", "contracts/*", "test-suite/", "e2e"]
 resolver = "2"
 
 [workspace.package]
-version    = "0.24.1"
+version    = "0.22.11"
 edition    = "2021"
 homepage   = "https://stargaze.zone"
 repository = "https://github.com/public-awesome/launchpad"
 license    = "Apache-2.0"
 
 [workspace.dependencies]
-base-factory        = { version = "0.24.1", path = "contracts/base-factory" }
-base-minter         = { version = "0.24.1", path = "contracts/base-minter" }
+base-factory        = { version = "0.22.11", path = "contracts/base-factory" }
+base-minter         = { version = "0.22.11", path = "contracts/base-minter" }
 cosmwasm-schema     = "1.2.1"
 cosmwasm-std        = "1.2.1"
 cw-controllers      = "0.16.0"
@@ -25,28 +25,27 @@ cw-storage-plus     = "0.16.0"
 cw-utils            = "0.16.0"
 schemars            = "0.8.11"
 serde               = { version = "1.0.145", default-features = false, features = ["derive"] }
-sg1                 = { version = "0.24.1", path = "packages/sg1" }
-sg2                 = { version = "0.24.1", path = "packages/sg2" }
-sg4                 = { version = "0.24.1", path = "packages/sg4" }
-sg721               = { version = "0.24.1", path = "packages/sg721" }
-sg721-base          = { version = "0.24.1", path = "contracts/sg721-base" }
-sg721-nt            = { version = "0.24.1", path = "contracts/sg721-nt" }
-sg-controllers      = { version = "0.24.1", path = "packages/controllers" }
-sg-metadata         = { version = "0.24.1", path = "packages/sg-metadata" }
-sg-multi-test       = { version = "0.24.1", path = "packages/sg-multi-test" }
-sg-splits           = { version = "0.24.1", path = "contracts/splits" }
-sg-std              = { version = "0.24.1" }
-sg-whitelist        = { version = "0.24.1", path = "contracts/whitelist" }
+sg1                 = { version = "0.22.11", path = "packages/sg1" }
+sg2                 = { version = "0.22.11", path = "packages/sg2" }
+sg4                 = { version = "0.22.11", path = "packages/sg4" }
+sg721               = { version = "0.22.11", path = "packages/sg721" }
+sg721-base          = { version = "0.22.11", path = "contracts/sg721-base" }
+sg721-nt            = { version = "0.22.11", path = "contracts/sg721-nt" }
+sg-controllers      = { version = "0.22.11", path = "packages/controllers" }
+sg-metadata         = { version = "0.22.11", path = "packages/sg-metadata" }
+sg-multi-test       = { version = "0.22.11", path = "packages/sg-multi-test" }
+sg-splits           = { version = "0.22.11", path = "contracts/splits" }
+sg-std              = { version = "0.22.11" }
+sg-whitelist        = { version = "0.22.11", path = "contracts/whitelist" }
 thiserror           = "1.0.31"
 url                 = "2.2.2"
 sha2                = { version = "0.10.2", default-features = false }
-vending-factory     = { version = "0.24.1", path = "contracts/vending-factory" }
-vending-minter      = { version = "0.24.1", path = "contracts/vending-minter" }
-whitelist-immutable = { version = "0.24.1", path = "contracts/whitelist-immutable" }
-ethereum-verify     = { version = "0.24.1", path = "packages/ethereum-verify" }
-sg-eth-airdrop      = { version = "0.24.1", path = "contracts/sg-eth-airdrop" }
-test-suite          = { version = "0.24.1", path = "test-suite" }
-semver              = "1"
+vending-factory     = { version = "0.22.11", path = "contracts/vending-factory" }
+vending-minter      = { version = "0.22.11", path = "contracts/vending-minter" }
+whitelist-immutable = { version = "0.22.11", path = "contracts/whitelist-immutable" }
+ethereum-verify     = { version = "0.22.11", path = "packages/ethereum-verify" }
+sg-eth-airdrop      = { version = "0.22.11", path = "contracts/sg-eth-airdrop" }
+test-suite          = { version = "0.22.11", path = "test-suite" }
 
 [profile.release.package.sg721]
 codegen-units = 1
diff --git a/README.md b/README.md
index dff1438c..0250819f 100644
--- a/README.md
+++ b/README.md
@@ -31,16 +31,6 @@ make optimize
 make e2etest
 ```
 
-## Publish release
-
-Only crate owners can publish a new release.
-
-```
-make release VERSION=[version]
-```
-
-Note: You may have to close your editor to prevent rust-analyzer from interfering with the script.
-
-## DISCLAIMER
+# DISCLAIMER
 
 STARGAZE CONTRACTS IS PROVIDED “AS IS”, AT YOUR OWN RISK, AND WITHOUT WARRANTIES OF ANY KIND. No developer or entity involved in creating or instantiating Stargaze smart contracts will be liable for any claims or damages whatsoever associated with your use, inability to use, or your interaction with other users of Stargaze, including any direct, indirect, incidental, special, exemplary, punitive or consequential damages, or loss of profits, cryptocurrencies, tokens, or anything else of value. Although Public Awesome, LLC and it's affilliates developed the initial code for Stargaze, it does not own or control the Stargaze network, which is run by a decentralized validator set.
diff --git a/contracts/base-factory/schema/base-factory.json b/contracts/base-factory/schema/base-factory.json
index e4641896..83759215 100644
--- a/contracts/base-factory/schema/base-factory.json
+++ b/contracts/base-factory/schema/base-factory.json
@@ -1,6 +1,6 @@
 {
   "contract_name": "base-factory",
-  "contract_version": "0.24.1",
+  "contract_version": "0.22.11",
   "idl_version": "1.0.0",
   "instantiate": {
     "$schema": "http://json-schema.org/draft-07/schema#",
diff --git a/contracts/base-minter/schema/base-minter.json b/contracts/base-minter/schema/base-minter.json
index d57babdb..19da8234 100644
--- a/contracts/base-minter/schema/base-minter.json
+++ b/contracts/base-minter/schema/base-minter.json
@@ -1,6 +1,6 @@
 {
   "contract_name": "base-minter",
-  "contract_version": "0.24.1",
+  "contract_version": "0.22.11",
   "idl_version": "1.0.0",
   "instantiate": {
     "$schema": "http://json-schema.org/draft-07/schema#",
diff --git a/contracts/base-minter/src/contract.rs b/contracts/base-minter/src/contract.rs
index 74885df8..9dec0aeb 100644
--- a/contracts/base-minter/src/contract.rs
+++ b/contracts/base-minter/src/contract.rs
@@ -158,7 +158,7 @@ pub fn execute_mint_sender(
     let mint_msg = Sg721ExecuteMsg::<Extension, Empty>::Mint(MintMsg::<Extension> {
         token_id: increment_token_index(deps.storage)?.to_string(),
         owner: info.sender.to_string(),
-        token_uri: Some(token_uri.clone()),
+        token_uri: Some(token_uri),
         extension: None,
     });
     let msg = CosmosMsg::Wasm(WasmMsg::Execute {
@@ -171,7 +171,6 @@ pub fn execute_mint_sender(
     Ok(res
         .add_attribute("action", "mint")
         .add_attribute("sender", info.sender)
-        .add_attribute("token-uri", token_uri)
         .add_attribute("network_fee", network_fee.to_string()))
 }
 
diff --git a/contracts/sg-eth-airdrop/schema/sg-eth-airdrop.json b/contracts/sg-eth-airdrop/schema/sg-eth-airdrop.json
index 746abf1d..e96b6f36 100644
--- a/contracts/sg-eth-airdrop/schema/sg-eth-airdrop.json
+++ b/contracts/sg-eth-airdrop/schema/sg-eth-airdrop.json
@@ -1,6 +1,6 @@
 {
   "contract_name": "sg-eth-airdrop",
-  "contract_version": "0.24.1",
+  "contract_version": "0.22.11",
   "idl_version": "1.0.0",
   "instantiate": {
     "$schema": "http://json-schema.org/draft-07/schema#",
diff --git a/contracts/sg-eth-airdrop/src/claim_airdrop.rs b/contracts/sg-eth-airdrop/src/claim_airdrop.rs
index 05951292..854e227c 100644
--- a/contracts/sg-eth-airdrop/src/claim_airdrop.rs
+++ b/contracts/sg-eth-airdrop/src/claim_airdrop.rs
@@ -19,13 +19,7 @@ pub fn claim_airdrop(
     eth_sig: String,
 ) -> Result<Response, ContractError> {
     let config = CONFIG.load(deps.storage)?;
-    validate_claim(
-        &deps,
-        info.clone(),
-        eth_address.clone(),
-        eth_sig,
-        config.clone(),
-    )?;
+    validate_claim(&deps, eth_address.clone(), eth_sig, config.clone())?;
     let res = claim_and_whitelist_add(&deps, info, config.airdrop_amount)?;
     increment_local_mint_count_for_address(deps, eth_address)?;
 
@@ -92,23 +86,18 @@ mod validation {
         state::Config,
     };
 
-    pub fn compute_plaintext_msg(config: &Config, info: MessageInfo) -> String {
-        str::replace(
-            &config.claim_msg_plaintext,
-            "{wallet}",
-            info.sender.as_ref(),
-        )
+    pub fn compute_plaintext_msg(config: &Config, eth_address: &str) -> String {
+        str::replace(&config.claim_msg_plaintext, "{wallet}", eth_address)
     }
 
     pub fn validate_claim(
         deps: &DepsMut,
-        info: MessageInfo,
         eth_address: String,
         eth_sig: String,
         config: Config,
     ) -> Result<(), ContractError> {
         validate_is_eligible(deps, eth_address.clone())?;
-        validate_eth_sig(deps, info, eth_address.clone(), eth_sig, config)?;
+        validate_eth_sig(deps, eth_address.clone(), eth_sig, config)?;
         validate_mints_remaining(deps, &eth_address)?;
         Ok(())
     }
@@ -125,13 +114,11 @@ mod validation {
 
     fn validate_eth_sig(
         deps: &DepsMut,
-        info: MessageInfo,
         eth_address: String,
         eth_sig: String,
         config: Config,
     ) -> Result<(), ContractError> {
-        let valid_eth_sig =
-            validate_ethereum_text(deps, info, &config, eth_sig, eth_address.clone())?;
+        let valid_eth_sig = validate_ethereum_text(deps, &config, eth_sig, eth_address.clone())?;
         match valid_eth_sig {
             true => Ok(()),
             false => Err(ContractError::AddressNotEligible {
@@ -158,12 +145,11 @@ mod validation {
 
     pub fn validate_ethereum_text(
         deps: &DepsMut,
-        info: MessageInfo,
         config: &Config,
         eth_sig: String,
         eth_address: String,
     ) -> StdResult<bool> {
-        let plaintext_msg = compute_plaintext_msg(config, info);
+        let plaintext_msg = compute_plaintext_msg(config, &eth_address);
         match hex::decode(eth_sig.clone()) {
             Ok(eth_sig_hex) => {
                 verify_ethereum_text(deps.as_ref(), &plaintext_msg, &eth_sig_hex, &eth_address)
diff --git a/contracts/sg721-base/src/contract.rs b/contracts/sg721-base/src/contract.rs
index 7c324d6b..44a74b02 100644
--- a/contracts/sg721-base/src/contract.rs
+++ b/contracts/sg721-base/src/contract.rs
@@ -287,7 +287,7 @@ where
         let token = TokenInfo {
             owner: deps.api.addr_validate(&msg.owner)?,
             approvals: vec![],
-            token_uri: msg.token_uri.clone(),
+            token_uri: msg.token_uri,
             extension: msg.extension,
         };
         self.parent
@@ -303,8 +303,7 @@ where
             .add_attribute("action", "mint")
             .add_attribute("minter", info.sender)
             .add_attribute("owner", msg.owner)
-            .add_attribute("token_id", msg.token_id)
-            .add_attribute("token_uri", msg.token_uri.unwrap_or_default()))
+            .add_attribute("token_id", msg.token_id))
     }
 
     pub fn query(&self, deps: Deps, env: Env, msg: QueryMsg) -> StdResult<Binary> {
diff --git a/contracts/splits/schema/sg-splits.json b/contracts/splits/schema/sg-splits.json
index c18a02a7..e1a2d9bf 100644
--- a/contracts/splits/schema/sg-splits.json
+++ b/contracts/splits/schema/sg-splits.json
@@ -1,6 +1,6 @@
 {
   "contract_name": "sg-splits",
-  "contract_version": "0.24.1",
+  "contract_version": "0.22.11",
   "idl_version": "1.0.0",
   "instantiate": {
     "$schema": "http://json-schema.org/draft-07/schema#",
diff --git a/contracts/vending-minter/Cargo.toml b/contracts/vending-minter/Cargo.toml
index f6058766..a5b68a19 100644
--- a/contracts/vending-minter/Cargo.toml
+++ b/contracts/vending-minter/Cargo.toml
@@ -51,4 +51,3 @@ sg-whitelist    = { workspace = true, features = ["library"] }
 thiserror       = { workspace = true }
 url             = { workspace = true }
 vending-factory = { workspace = true, features = ["library"] }
-semver           = {workspace = true  }
diff --git a/contracts/vending-minter/src/contract.rs b/contracts/vending-minter/src/contract.rs
index 69350ed8..0a18a3c1 100644
--- a/contracts/vending-minter/src/contract.rs
+++ b/contracts/vending-minter/src/contract.rs
@@ -18,10 +18,10 @@ use cosmwasm_std::{
 };
 use cw2::set_contract_version;
 use cw721_base::{Extension, MintMsg};
+
 use cw_utils::{may_pay, maybe_addr, nonpayable, parse_reply_instantiate_data};
 use rand_core::{RngCore, SeedableRng};
 use rand_xoshiro::Xoshiro128PlusPlus;
-use semver::Version;
 use sg1::checked_fair_burn;
 use sg2::query::Sg2QueryMsg;
 use sg4::{Status, StatusResponse, SudoMsg};
@@ -1159,30 +1159,3 @@ pub fn reply(deps: DepsMut, _env: Env, msg: Reply) -> Result<Response, ContractE
         Err(_) => Err(ContractError::InstantiateSg721Error {}),
     }
 }
-
-#[cfg_attr(not(feature = "library"), entry_point)]
-pub fn migrate(deps: DepsMut, _env: Env, _msg: Empty) -> Result<Response, ContractError> {
-    let current_version = cw2::get_contract_version(deps.storage)?;
-    if current_version.contract != CONTRACT_NAME {
-        return Err(StdError::generic_err("Cannot upgrade to a different contract").into());
-    }
-    let version: Version = current_version
-        .version
-        .parse()
-        .map_err(|_| StdError::generic_err("Invalid contract version"))?;
-    let new_version: Version = CONTRACT_VERSION
-        .parse()
-        .map_err(|_| StdError::generic_err("Invalid contract version"))?;
-
-    if version > new_version {
-        return Err(StdError::generic_err("Cannot upgrade to a previous contract version").into());
-    }
-    // if same version return
-    if version == new_version {
-        return Ok(Response::new());
-    }
-
-    // set new contract version
-    set_contract_version(deps.storage, CONTRACT_NAME, CONTRACT_VERSION)?;
-    Ok(Response::new())
-}
diff --git a/contracts/whitelist-immutable/schema/whitelist-immutable.json b/contracts/whitelist-immutable/schema/whitelist-immutable.json
index 18f5ab5b..85db54d1 100644
--- a/contracts/whitelist-immutable/schema/whitelist-immutable.json
+++ b/contracts/whitelist-immutable/schema/whitelist-immutable.json
@@ -1,6 +1,6 @@
 {
   "contract_name": "whitelist-immutable",
-  "contract_version": "0.24.1",
+  "contract_version": "0.22.11",
   "idl_version": "1.0.0",
   "instantiate": {
     "$schema": "http://json-schema.org/draft-07/schema#",
diff --git a/scripts/publish-contracts.sh b/scripts/publish-contracts.sh
index c5d17540..e57f91cb 100755
--- a/scripts/publish-contracts.sh
+++ b/scripts/publish-contracts.sh
@@ -19,5 +19,3 @@ sleep 10
 cd contracts/whitelist-immutable && cargo publish && cd ../..
 sleep 15
 cd contracts/sg-eth-airdrop && cargo publish && cd ../..
-sleep 15
-cd test-suite && cargo publish && cd ..
diff --git a/scripts/publish-packages.sh b/scripts/publish-packages.sh
index 0144845d..cc2dee4c 100755
--- a/scripts/publish-packages.sh
+++ b/scripts/publish-packages.sh
@@ -18,3 +18,4 @@ cd packages/controllers && cargo publish && cd ../..
 sleep 10
 cd packages/ethereum-verify && cargo publish && cd ../..
 sleep 10
+cd test-suite && cargo publish && cd ../..
diff --git a/scripts/release.sh b/scripts/release.sh
index e5e5fb36..031c069a 100755
--- a/scripts/release.sh
+++ b/scripts/release.sh
@@ -8,13 +8,13 @@ echo "Current version: $version"
 echo "Replacing workspace version with $1 in manifest"
 sed -i '' "s/version    = .*/version    = \""$1"\"/g" ./Cargo.toml
 
+echo "Publishing packages"
+. ./scripts/publish-packages.sh
+
 echo "Replacing $version with $1 in manifest"
 cd $PROJECT_PATH
 sed -i '' "s/$version/$1/g" ./Cargo.toml
 
-echo "Publishing packages"
-. ./scripts/publish-packages.sh
-
 echo "Publishing contracts"
 . ./scripts/publish-contracts.sh
 
@@ -22,7 +22,6 @@ cd $PROJECT_PATH
 echo "Generating schema"
 make schema
 
-cd $PROJECT_PATH
 git commit -am "Release $1"
 git push origin release-$1
 


Test patch:
diff --git a/test-suite/src/sg_eth_airdrop/constants/claim_constants.rs b/test-suite/src/sg_eth_airdrop/constants/claim_constants.rs
index 674d6678..2a3a0bca 100644
--- a/test-suite/src/sg_eth_airdrop/constants/claim_constants.rs
+++ b/test-suite/src/sg_eth_airdrop/constants/claim_constants.rs
@@ -3,5 +3,5 @@ pub const MOCK_AIRDROP_ADDR_STR: &str = "contract3";
 pub const MOCK_MINTER_ADDR_STR: &str = "contract1";
 pub const STARGAZE_WALLET_01: &str = "0xstargaze_wallet_01";
 pub const STARGAZE_WALLET_02: &str = "0xstargaze_wallet_02";
-pub const CONFIG_PLAINTEXT: &str = "My Stargaze address is {wallet} and I want a Winter Pal.";
+pub const CONFIG_PLAINTEXT: &str = "My wallet is {wallet}, sign me up and rest in peace";
 pub const NATIVE_DENOM: &str = "ustars";
diff --git a/test-suite/src/sg_eth_airdrop/setup/setup_signatures.rs b/test-suite/src/sg_eth_airdrop/setup/setup_signatures.rs
index 2b1e7236..2e5796c7 100644
--- a/test-suite/src/sg_eth_airdrop/setup/setup_signatures.rs
+++ b/test-suite/src/sg_eth_airdrop/setup/setup_signatures.rs
@@ -10,21 +10,21 @@ pub async fn get_signature(
     wallet.sign_message(plaintext_msg).await
 }
 
-pub fn get_wallet_and_sig(
-    claim_plaintext: String,
-) -> (
+pub fn get_wallet_and_sig() -> (
     Wallet<ethers_core::k256::ecdsa::SigningKey>,
     std::string::String,
     H160,
     std::string::String,
 ) {
     let wallet = LocalWallet::new(&mut thread_rng());
+    let eth_addr = wallet.address();
+    let eth_addr_str = format!("{:?}", wallet.address());
+    let claim_plaintext = get_msg_plaintext(eth_addr_str.clone());
     let eth_sig_str = task::block_on(get_signature(wallet.clone(), &claim_plaintext))
         .unwrap()
         .to_string();
-    let eth_address = wallet.address();
-    let eth_addr_str = format!("{:?}", eth_address);
-    (wallet, eth_sig_str, eth_address, eth_addr_str)
+
+    (wallet, eth_sig_str, eth_addr, eth_addr_str)
 }
 
 pub fn get_msg_plaintext(wallet_address: String) -> String {
diff --git a/test-suite/src/sg_eth_airdrop/tests/test_claim.rs b/test-suite/src/sg_eth_airdrop/tests/test_claim.rs
index 671c9552..40d6195b 100644
--- a/test-suite/src/sg_eth_airdrop/tests/test_claim.rs
+++ b/test-suite/src/sg_eth_airdrop/tests/test_claim.rs
@@ -37,8 +37,7 @@ fn query_minter_as_expected(app: &mut StargazeApp, airdrop_contract: Addr, minte
 fn test_instantiate() {
     let mut app = custom_mock_app();
     let minter_address = Addr::unchecked("contract1");
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, _, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, _, _, eth_addr_str) = get_wallet_and_sig();
     let params = InstantiateParams {
         addresses: vec![eth_addr_str],
         funds_amount: WHITELIST_AMOUNT + INSTANTIATION_FEE,
@@ -57,8 +56,7 @@ fn test_instantiate_plaintext_too_long() {
     let long_config_plaintext: String = String::from_utf8(vec![b'X'; 1001]).unwrap() + " {wallet}";
     let mut app = custom_mock_app();
     let minter_address = Addr::unchecked("contract1");
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, _, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, _, _, eth_addr_str) = get_wallet_and_sig();
     let params = InstantiateParams {
         addresses: vec![eth_addr_str],
         funds_amount: WHITELIST_AMOUNT + INSTANTIATION_FEE,
@@ -78,11 +76,10 @@ fn test_instantiate_plaintext_too_long() {
 
 #[test]
 fn test_instantiate_plaintext_missing_wallet() {
-    let plaintext_config_no_wallet = "This message doesn't have wallet string".to_string();
+    let config_plaintext = "This message doesn't have wallet string";
     let mut app = custom_mock_app();
     let minter_address = Addr::unchecked("contract1");
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, _, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, _, _, eth_addr_str) = get_wallet_and_sig();
     let params = InstantiateParams {
         addresses: vec![eth_addr_str],
         funds_amount: WHITELIST_AMOUNT + INSTANTIATION_FEE,
@@ -91,7 +88,7 @@ fn test_instantiate_plaintext_missing_wallet() {
         admin_account: Addr::unchecked(OWNER),
         app: &mut app,
         per_address_limit: 1,
-        claim_msg_plaintext: plaintext_config_no_wallet,
+        claim_msg_plaintext: config_plaintext.to_string(),
     };
     let res = instantiate_contract(params).unwrap_err();
     assert_eq!(
@@ -100,50 +97,9 @@ fn test_instantiate_plaintext_missing_wallet() {
     );
 }
 
-#[test]
-fn test_airdrop_eligible_query() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, _, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
-    let mut app = custom_mock_app();
-    configure_mock_minter_with_mock_whitelist(&mut app);
-    let minter_addr = Addr::unchecked(MOCK_MINTER_ADDR_STR);
-    let airdrop_contract = Addr::unchecked(MOCK_AIRDROP_ADDR_STR);
-
-    let params = InstantiateParams {
-        addresses: vec![eth_addr_str.clone()],
-        funds_amount: WHITELIST_AMOUNT + INSTANTIATION_FEE,
-        expected_airdrop_contract_id: 4,
-        minter_address: minter_addr.clone(),
-        admin_account: Addr::unchecked(OWNER),
-        app: &mut app,
-        per_address_limit: 1,
-        claim_msg_plaintext: CONFIG_PLAINTEXT.to_string(),
-    };
-    instantiate_contract(params).unwrap();
-    query_minter_as_expected(&mut app, airdrop_contract.clone(), minter_addr);
-    let query_msg = QueryMsg::AirdropEligible {
-        eth_address: eth_addr_str,
-    };
-    let result: bool = app
-        .wrap()
-        .query_wasm_smart(airdrop_contract.clone(), &query_msg)
-        .unwrap();
-    assert!(result);
-
-    let query_msg = QueryMsg::AirdropEligible {
-        eth_address: "0x-some-fake-address".to_string(),
-    };
-    let result: bool = app
-        .wrap()
-        .query_wasm_smart(airdrop_contract, &query_msg)
-        .unwrap();
-    assert!(!result);
-}
-
 #[test]
 fn test_valid_eth_sig_claim() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig();
     let mut app = custom_mock_app();
     configure_mock_minter_with_mock_whitelist(&mut app);
     let minter_addr = Addr::unchecked(MOCK_MINTER_ADDR_STR);
@@ -189,9 +145,8 @@ fn test_valid_eth_sig_claim() {
 
 #[test]
 fn test_invalid_eth_sig_claim() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, _, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
-    let (_, eth_sig_str_2, _, _) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, _, _, eth_addr_str) = get_wallet_and_sig();
+    let (_, eth_sig_str_2, _, _) = get_wallet_and_sig();
 
     let mut app = custom_mock_app();
     configure_mock_minter_with_mock_whitelist(&mut app);
@@ -226,8 +181,7 @@ fn test_invalid_eth_sig_claim() {
 
 #[test]
 fn test_can_not_claim_twice() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig();
 
     let mut app = custom_mock_app();
     configure_mock_minter_with_mock_whitelist(&mut app);
@@ -285,8 +239,7 @@ fn test_can_not_claim_twice() {
 
 #[test]
 fn test_claim_one_valid_airdrop() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig();
 
     let stargaze_wallet_01 = Addr::unchecked(STARGAZE_WALLET_01);
 
@@ -335,8 +288,7 @@ fn test_claim_one_valid_airdrop() {
 
 #[test]
 fn test_claim_twice_receive_funds_once() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig();
 
     let stargaze_wallet_01 = Addr::unchecked(STARGAZE_WALLET_01);
     let mut app = custom_mock_app();
@@ -405,8 +357,7 @@ fn test_claim_twice_receive_funds_once() {
 
 #[test]
 fn test_ineligible_does_not_receive_funds() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, _, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, _, _, eth_addr_str) = get_wallet_and_sig();
 
     let mut app = custom_mock_app();
     configure_mock_minter_with_mock_whitelist(&mut app);
@@ -432,8 +383,7 @@ fn test_ineligible_does_not_receive_funds() {
         .unwrap();
     assert_eq!(balances, []);
 
-    let claim_plaintext_2 = &get_msg_plaintext(STARGAZE_WALLET_02.to_string());
-    let (_, eth_sig_str_2, _, eth_addr_str_2) = get_wallet_and_sig(claim_plaintext_2.clone());
+    let (_, eth_sig_str_2, _, eth_addr_str_2) = get_wallet_and_sig();
 
     let claim_message = ExecuteMsg::ClaimAirdrop {
         eth_address: eth_addr_str_2.clone(),
@@ -458,12 +408,12 @@ fn test_one_eth_claim_two_stargaze_addresses_invalid() {
     let stargaze_wallet_01 = Addr::unchecked(STARGAZE_WALLET_01);
     let stargaze_wallet_02 = Addr::unchecked(STARGAZE_WALLET_02);
 
-    let claim_plaintext_1 = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
+    let eth_address = wallet_1.address();
+    let eth_addr_str_1 = format!("{:?}", eth_address);
+    let claim_plaintext_1 = &get_msg_plaintext(eth_addr_str_1.clone());
     let eth_sig_str_1 = task::block_on(get_signature(wallet_1.clone(), claim_plaintext_1))
         .unwrap()
         .to_string();
-    let eth_address = wallet_1.address();
-    let eth_addr_str_1 = format!("{:?}", eth_address);
 
     let mut app = custom_mock_app();
     configure_mock_minter_with_mock_whitelist(&mut app);
@@ -507,7 +457,7 @@ fn test_one_eth_claim_two_stargaze_addresses_invalid() {
     ];
     assert_eq!(res.events[1].attributes, expected_attributes);
 
-    let claim_plaintext_2 = &get_msg_plaintext(STARGAZE_WALLET_02.to_string());
+    let claim_plaintext_2 = &get_msg_plaintext(eth_addr_str_1.to_string());
     let eth_sig_str_2 = task::block_on(get_signature(wallet_1, claim_plaintext_2))
         .unwrap()
         .to_string();
@@ -532,8 +482,7 @@ fn test_one_eth_claim_two_stargaze_addresses_invalid() {
 
 #[test]
 fn test_two_claims_allowed_success() {
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig();
 
     let stargaze_wallet_01 = Addr::unchecked(STARGAZE_WALLET_01);
 
diff --git a/test-suite/src/sg_eth_airdrop/tests/test_collection_whitelist.rs b/test-suite/src/sg_eth_airdrop/tests/test_collection_whitelist.rs
index 808287f8..ae604679 100644
--- a/test-suite/src/sg_eth_airdrop/tests/test_collection_whitelist.rs
+++ b/test-suite/src/sg_eth_airdrop/tests/test_collection_whitelist.rs
@@ -9,7 +9,7 @@ use crate::sg_eth_airdrop::setup::collection_whitelist_helpers::{
     send_funds_to_address, update_admin_for_whitelist,
 };
 use crate::sg_eth_airdrop::setup::execute_msg::instantiate_contract;
-use crate::sg_eth_airdrop::setup::setup_signatures::{get_msg_plaintext, get_wallet_and_sig};
+use crate::sg_eth_airdrop::setup::setup_signatures::get_wallet_and_sig;
 use crate::sg_eth_airdrop::setup::test_msgs::InstantiateParams;
 use cosmwasm_std::Addr;
 use sg_eth_airdrop::msg::QueryMsg;
@@ -24,8 +24,7 @@ fn test_set_minter_contract_success() {
     let (mut app, creator) = (vt.router, vt.accts.creator);
     let minter_addr = vt.collection_response_vec[0].minter.clone().unwrap();
 
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, _, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, _, _, eth_addr_str) = get_wallet_and_sig();
 
     let contract_admin = Addr::unchecked(creator);
     let params = InstantiateParams {
@@ -56,8 +55,7 @@ fn test_claim_added_to_minter_whitelist() {
     let whitelist_addr =
         configure_collection_whitelist(&mut app, creator.clone(), buyer, minter_addr.clone());
     setup_block_time(&mut app, GENESIS_MINT_START_TIME, None);
-    let claim_plaintext = &get_msg_plaintext(STARGAZE_WALLET_01.to_string());
-    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig(claim_plaintext.clone());
+    let (_, eth_sig_str, _, eth_addr_str) = get_wallet_and_sig();
 
     let airdrop_contract = Addr::unchecked(AIRDROP_ADDR_STR);
     let params = InstantiateParams {