Repository: public-awesome/launchpad
Pull request #434 (2022-10-13 03:13:17)

rename field

codecov-commenter: # [Codecov](https://codecov.io/gh/public-awesome/launchpad/pull/434?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome) Report
Base: **85.81**% // Head: **86.14**% // Increases project coverage by **`+0.32%`** :tada:
> Coverage data is based on head [(`4472f9d`)](https://codecov.io/gh/public-awesome/launchpad/pull/434?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome) compared to base [(`c1fd3ae`)](https://codecov.io/gh/public-awesome/launchpad/commit/c1fd3ae159082c4dd18c269fa46fb4bbab87b598?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome).
> Patch coverage: 100.00% of modified lines in pull request are covered.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##             main     #434      +/-   ##
==========================================
+ Coverage   85.81%   86.14%   +0.32%     
==========================================
  Files          33       33              
  Lines        3031     3074      +43     
==========================================
+ Hits         2601     2648      +47     
+ Misses        430      426       -4     
```


| [Impacted Files](https://codecov.io/gh/public-awesome/launchpad/pull/434?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome) | Coverage Δ | |
|---|---|---|
| [contracts/sg721-base/src/msg.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL3NnNzIxLWJhc2Uvc3JjL21zZy5ycw==) | `44.44% <ø> (ø)` | |
| [contracts/sg721-metadata-onchain/src/lib.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL3NnNzIxLW1ldGFkYXRhLW9uY2hhaW4vc3JjL2xpYi5ycw==) | `72.91% <ø> (ø)` | |
| [packages/sg2/src/tests.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-cGFja2FnZXMvc2cyL3NyYy90ZXN0cy5ycw==) | `100.00% <ø> (ø)` | |
| [packages/sg721/src/lib.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-cGFja2FnZXMvc2c3MjEvc3JjL2xpYi5ycw==) | `100.00% <ø> (ø)` | |
| [contracts/base-minter/src/contract.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL2Jhc2UtbWludGVyL3NyYy9jb250cmFjdC5ycw==) | `85.84% <100.00%> (+0.12%)` | :arrow_up: |
| [contracts/base-minter/src/integration\_tests.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL2Jhc2UtbWludGVyL3NyYy9pbnRlZ3JhdGlvbl90ZXN0cy5ycw==) | `98.43% <100.00%> (ø)` | |
| [contracts/sg721-base/src/contract.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL3NnNzIxLWJhc2Uvc3JjL2NvbnRyYWN0LnJz) | `68.53% <100.00%> (+0.20%)` | :arrow_up: |
| [contracts/sg721-base/src/integration\_tests.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL3NnNzIxLWJhc2Uvc3JjL2ludGVncmF0aW9uX3Rlc3RzLnJz) | `100.00% <100.00%> (ø)` | |
| [contracts/vending-factory/src/contract.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL3ZlbmRpbmctZmFjdG9yeS9zcmMvY29udHJhY3QucnM=) | `46.66% <100.00%> (ø)` | |
| [contracts/vending-minter/src/contract.rs](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome#diff-Y29udHJhY3RzL3ZlbmRpbmctbWludGVyL3NyYy9jb250cmFjdC5ycw==) | `87.08% <100.00%> (+0.79%)` | :arrow_up: |
| ... and [2 more](https://codecov.io/gh/public-awesome/launchpad/pull/434/diff?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome) | |

Help us with your feedback. Take ten seconds to tell us [how you rate us](https://about.codecov.io/nps?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome). Have a feature suggestion? [Share it here.](https://app.codecov.io/gh/feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome)

</details>

[:umbrella: View full report at Codecov](https://codecov.io/gh/public-awesome/launchpad/pull/434?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome).   
:loudspeaker: Do you have feedback about the report comment? [Let us know in this issue](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=public-awesome).


Patch:
diff --git a/Makefile b/Makefile
index 145e913e..876e8198 100644
--- a/Makefile
+++ b/Makefile
@@ -7,3 +7,13 @@ e2etest:
 	cd e2e && go test -v
 ci-sign: 
 	drone sign public-awesome/launchpad --save
+
+schema:
+	cd contracts/base-factory && cargo schema
+	cd contracts/base-minter && cargo schema
+	cd contracts/sg721-base && cargo schema
+	cd contracts/sg721-metadata-onchain && cargo schema
+	cd contracts/sg721-nt && cargo schema
+	cd contracts/vending-factory && cargo schema
+	cd contracts/vending-minter && cargo schema
+	cd ts && yarn codegen
diff --git a/contracts/base-minter/schema/execute_msg.json b/contracts/base-minter/schema/execute_msg.json
index b577ba2d..498004ae 100644
--- a/contracts/base-minter/schema/execute_msg.json
+++ b/contracts/base-minter/schema/execute_msg.json
@@ -25,10 +25,10 @@
     {
       "type": "object",
       "required": [
-        "update_trading_start_time"
+        "update_start_trading_time"
       ],
       "properties": {
-        "update_trading_start_time": {
+        "update_start_trading_time": {
           "anyOf": [
             {
               "$ref": "#/definitions/Timestamp"
diff --git a/contracts/base-minter/schema/instantiate_msg.json b/contracts/base-minter/schema/instantiate_msg.json
index 39dad0d9..9cd32970 100644
--- a/contracts/base-minter/schema/instantiate_msg.json
+++ b/contracts/base-minter/schema/instantiate_msg.json
@@ -35,7 +35,6 @@
       "required": [
         "creator",
         "description",
-        "explicit_content",
         "image"
       ],
       "properties": {
@@ -46,7 +45,10 @@
           "type": "string"
         },
         "explicit_content": {
-          "type": "boolean"
+          "type": [
+            "boolean",
+            "null"
+          ]
         },
         "external_link": {
           "type": [
@@ -67,7 +69,7 @@
             }
           ]
         },
-        "trading_start_time": {
+        "start_trading_time": {
           "anyOf": [
             {
               "$ref": "#/definitions/Timestamp"
diff --git a/contracts/base-minter/src/contract.rs b/contracts/base-minter/src/contract.rs
index 98200fbe..9dec0aeb 100644
--- a/contracts/base-minter/src/contract.rs
+++ b/contracts/base-minter/src/contract.rs
@@ -60,12 +60,12 @@ pub fn instantiate(
     // Use default start trading time if not provided
     let mut collection_info = msg.collection_params.info.clone();
     let offset = factory_params.params.max_trading_offset_secs;
-    let trading_start_time = msg
+    let start_trading_time = msg
         .collection_params
         .info
-        .trading_start_time
+        .start_trading_time
         .or_else(|| Some(env.block.time.plus_seconds(offset)));
-    collection_info.trading_start_time = trading_start_time;
+    collection_info.start_trading_time = start_trading_time;
 
     CONFIG.save(deps.storage, &config)?;
 
@@ -104,8 +104,8 @@ pub fn execute(
 ) -> Result<Response, ContractError> {
     match msg {
         ExecuteMsg::Mint { token_uri } => execute_mint_sender(deps, info, token_uri),
-        ExecuteMsg::UpdateTradingStartTime(time) => {
-            execute_update_trading_start_time(deps, env, info, time)
+        ExecuteMsg::UpdateStartTradingTime(time) => {
+            execute_update_start_trading_time(deps, env, info, time)
         }
     }
 }
@@ -174,7 +174,7 @@ pub fn execute_mint_sender(
         .add_attribute("network_fee", network_fee.to_string()))
 }
 
-pub fn execute_update_trading_start_time(
+pub fn execute_update_start_trading_time(
     deps: DepsMut,
     env: Env,
     info: MessageInfo,
@@ -196,7 +196,7 @@ pub fn execute_update_trading_start_time(
     // add custom rules here
     if let Some(start_time) = start_time {
         if env.block.time > start_time {
-            return Err(ContractError::InvalidTradingStartTime(
+            return Err(ContractError::InvalidStartTradingTime(
                 env.block.time,
                 start_time,
             ));
@@ -206,7 +206,7 @@ pub fn execute_update_trading_start_time(
     // execute sg721 contract
     let msg = WasmMsg::Execute {
         contract_addr: sg721_contract_addr.to_string(),
-        msg: to_binary(&Sg721ExecuteMsg::<Extension, Empty>::UpdateTradingStartTime(start_time))?,
+        msg: to_binary(&Sg721ExecuteMsg::<Extension, Empty>::UpdateStartTradingTime(start_time))?,
         funds: vec![],
     };
 
diff --git a/contracts/base-minter/src/error.rs b/contracts/base-minter/src/error.rs
index 2a1c8a13..885c5dec 100644
--- a/contracts/base-minter/src/error.rs
+++ b/contracts/base-minter/src/error.rs
@@ -39,6 +39,6 @@ pub enum ContractError {
     #[error("Instantiate sg721 error")]
     InstantiateSg721Error {},
 
-    #[error("InvalidTradingStartTime {0} < {1}")]
-    InvalidTradingStartTime(Timestamp, Timestamp),
+    #[error("InvalidStartTradingTime {0} < {1}")]
+    InvalidStartTradingTime(Timestamp, Timestamp),
 }
diff --git a/contracts/base-minter/src/msg.rs b/contracts/base-minter/src/msg.rs
index d39500e5..eadd3c0c 100644
--- a/contracts/base-minter/src/msg.rs
+++ b/contracts/base-minter/src/msg.rs
@@ -14,7 +14,7 @@ pub struct InstantiateMsg {
 #[serde(rename_all = "snake_case")]
 pub enum ExecuteMsg {
     Mint { token_uri: String },
-    UpdateTradingStartTime(Option<Timestamp>),
+    UpdateStartTradingTime(Option<Timestamp>),
 }
 
 pub type ConfigResponse = MinterConfigResponse<Empty>;
diff --git a/contracts/sg721-base/schema/collection_info_response.json b/contracts/sg721-base/schema/collection_info_response.json
index 54ca54da..0e4e9c2d 100644
--- a/contracts/sg721-base/schema/collection_info_response.json
+++ b/contracts/sg721-base/schema/collection_info_response.json
@@ -5,7 +5,6 @@
   "required": [
     "creator",
     "description",
-    "explicit_content",
     "image"
   ],
   "properties": {
@@ -16,7 +15,10 @@
       "type": "string"
     },
     "explicit_content": {
-      "type": "boolean"
+      "type": [
+        "boolean",
+        "null"
+      ]
     },
     "external_link": {
       "type": [
@@ -37,7 +39,7 @@
         }
       ]
     },
-    "trading_start_time": {
+    "start_trading_time": {
       "anyOf": [
         {
           "$ref": "#/definitions/Timestamp"
diff --git a/contracts/sg721-base/schema/instantiate_msg.json b/contracts/sg721-base/schema/instantiate_msg.json
index 7dc0c63d..734b45e8 100644
--- a/contracts/sg721-base/schema/instantiate_msg.json
+++ b/contracts/sg721-base/schema/instantiate_msg.json
@@ -29,7 +29,6 @@
       "required": [
         "creator",
         "description",
-        "explicit_content",
         "image"
       ],
       "properties": {
@@ -40,7 +39,10 @@
           "type": "string"
         },
         "explicit_content": {
-          "type": "boolean"
+          "type": [
+            "boolean",
+            "null"
+          ]
         },
         "external_link": {
           "type": [
@@ -61,7 +63,7 @@
             }
           ]
         },
-        "trading_start_time": {
+        "start_trading_time": {
           "anyOf": [
             {
               "$ref": "#/definitions/Timestamp"
diff --git a/contracts/sg721-base/src/contract.rs b/contracts/sg721-base/src/contract.rs
index 873fa8e6..11db36ad 100644
--- a/contracts/sg721-base/src/contract.rs
+++ b/contracts/sg721-base/src/contract.rs
@@ -83,7 +83,7 @@ where
             image: msg.collection_info.image,
             external_link: msg.collection_info.external_link,
             explicit_content: msg.collection_info.explicit_content,
-            trading_start_time: msg.collection_info.trading_start_time,
+            start_trading_time: msg.collection_info.start_trading_time,
             royalty_info,
         };
 
@@ -147,8 +147,8 @@ where
             ExecuteMsg::UpdateCollectionInfo { collection_info } => {
                 self.update_collection_info(deps, env, info, collection_info)
             }
-            ExecuteMsg::UpdateTradingStartTime(start_time) => {
-                self.update_trading_start_time(deps, env, info, start_time)
+            ExecuteMsg::UpdateStartTradingTime(start_time) => {
+                self.update_start_trading_time(deps, env, info, start_time)
             }
             ExecuteMsg::FreezeCollectionInfo {} => self.freeze_collection_info(deps, env, info),
             ExecuteMsg::Mint(msg) => self.mint(deps, env, info, msg),
@@ -191,9 +191,7 @@ where
             .unwrap_or_else(|| collection.external_link.as_ref().map(|s| s.to_string()));
         Url::parse(collection.external_link.as_ref().unwrap())?;
 
-        collection.explicit_content = collection_msg
-            .explicit_content
-            .unwrap_or(collection.explicit_content);
+        collection.explicit_content = collection_msg.explicit_content;
 
         // convert collection royalty info to response for comparison
         // convert from response to royalty info for storage
@@ -231,7 +229,7 @@ where
 
     /// Called by the minter reply handler after custom validations on trading start time.
     /// Minter has start_time, default offset, makes sense to execute from minter.
-    pub fn update_trading_start_time(
+    pub fn update_start_trading_time(
         &self,
         deps: DepsMut,
         _env: Env,
@@ -244,10 +242,10 @@ where
         }
 
         let mut collection_info = self.collection_info.load(deps.storage)?;
-        collection_info.trading_start_time = start_time;
+        collection_info.start_trading_time = start_time;
         self.collection_info.save(deps.storage, &collection_info)?;
 
-        let event = Event::new("update_trading_start_time").add_attribute("sender", info.sender);
+        let event = Event::new("update_start_trading_time").add_attribute("sender", info.sender);
         Ok(Response::new().add_event(event))
     }
 
@@ -328,7 +326,7 @@ where
             image: info.image,
             external_link: info.external_link,
             explicit_content: info.explicit_content,
-            trading_start_time: info.trading_start_time,
+            start_trading_time: info.start_trading_time,
             royalty_info: royalty_info_res,
         })
     }
diff --git a/contracts/sg721-base/src/msg.rs b/contracts/sg721-base/src/msg.rs
index 63803376..b87f1940 100644
--- a/contracts/sg721-base/src/msg.rs
+++ b/contracts/sg721-base/src/msg.rs
@@ -157,7 +157,7 @@ pub struct CollectionInfoResponse {
     pub description: String,
     pub image: String,
     pub external_link: Option<String>,
-    pub explicit_content: bool,
-    pub trading_start_time: Option<Timestamp>,
+    pub explicit_content: Option<bool>,
+    pub start_trading_time: Option<Timestamp>,
     pub royalty_info: Option<RoyaltyInfoResponse>,
 }
diff --git a/contracts/sg721-metadata-onchain/schema/all_nft_info_response.json b/contracts/sg721-metadata-onchain/schema/all_nft_info_response.json
index 186df722..3333e80c 100644
--- a/contracts/sg721-metadata-onchain/schema/all_nft_info_response.json
+++ b/contracts/sg721-metadata-onchain/schema/all_nft_info_response.json
@@ -24,6 +24,7 @@
       ]
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Approval": {
       "type": "object",
@@ -44,7 +45,8 @@
           "description": "Account that can transfer/send the token",
           "type": "string"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Expiration": {
       "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
@@ -85,7 +87,8 @@
           ],
           "properties": {
             "never": {
-              "type": "object"
+              "type": "object",
+              "additionalProperties": false
             }
           },
           "additionalProperties": false
@@ -185,7 +188,8 @@
             "null"
           ]
         }
-      }
+      },
+      "additionalProperties": false
     },
     "OwnerOfResponse": {
       "type": "object",
@@ -205,7 +209,8 @@
           "description": "Owner of the token",
           "type": "string"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Timestamp": {
       "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
diff --git a/contracts/sg721-metadata-onchain/schema/all_operators_response.json b/contracts/sg721-metadata-onchain/schema/all_operators_response.json
index 9d4d7bd7..5c88cf9c 100644
--- a/contracts/sg721-metadata-onchain/schema/all_operators_response.json
+++ b/contracts/sg721-metadata-onchain/schema/all_operators_response.json
@@ -13,6 +13,7 @@
       }
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Approval": {
       "type": "object",
@@ -33,7 +34,8 @@
           "description": "Account that can transfer/send the token",
           "type": "string"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Expiration": {
       "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
@@ -74,7 +76,8 @@
           ],
           "properties": {
             "never": {
-              "type": "object"
+              "type": "object",
+              "additionalProperties": false
             }
           },
           "additionalProperties": false
diff --git a/contracts/sg721-metadata-onchain/schema/all_tokens_response.json b/contracts/sg721-metadata-onchain/schema/all_tokens_response.json
index 22bf5bfd..231dd32f 100644
--- a/contracts/sg721-metadata-onchain/schema/all_tokens_response.json
+++ b/contracts/sg721-metadata-onchain/schema/all_tokens_response.json
@@ -13,5 +13,6 @@
         "type": "string"
       }
     }
-  }
+  },
+  "additionalProperties": false
 }
diff --git a/contracts/sg721-metadata-onchain/schema/approval_response.json b/contracts/sg721-metadata-onchain/schema/approval_response.json
index 4f45b42e..b29eab59 100644
--- a/contracts/sg721-metadata-onchain/schema/approval_response.json
+++ b/contracts/sg721-metadata-onchain/schema/approval_response.json
@@ -10,6 +10,7 @@
       "$ref": "#/definitions/Approval"
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Approval": {
       "type": "object",
@@ -30,7 +31,8 @@
           "description": "Account that can transfer/send the token",
           "type": "string"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Expiration": {
       "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
@@ -71,7 +73,8 @@
           ],
           "properties": {
             "never": {
-              "type": "object"
+              "type": "object",
+              "additionalProperties": false
             }
           },
           "additionalProperties": false
diff --git a/contracts/sg721-metadata-onchain/schema/approvals_response.json b/contracts/sg721-metadata-onchain/schema/approvals_response.json
index 8d8e39ea..7cdac001 100644
--- a/contracts/sg721-metadata-onchain/schema/approvals_response.json
+++ b/contracts/sg721-metadata-onchain/schema/approvals_response.json
@@ -13,6 +13,7 @@
       }
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Approval": {
       "type": "object",
@@ -33,7 +34,8 @@
           "description": "Account that can transfer/send the token",
           "type": "string"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Expiration": {
       "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
@@ -74,7 +76,8 @@
           ],
           "properties": {
             "never": {
-              "type": "object"
+              "type": "object",
+              "additionalProperties": false
             }
           },
           "additionalProperties": false
diff --git a/contracts/sg721-metadata-onchain/schema/collection_info_response.json b/contracts/sg721-metadata-onchain/schema/collection_info_response.json
index e8c1be9f..0e4e9c2d 100644
--- a/contracts/sg721-metadata-onchain/schema/collection_info_response.json
+++ b/contracts/sg721-metadata-onchain/schema/collection_info_response.json
@@ -5,7 +5,6 @@
   "required": [
     "creator",
     "description",
-    "explicit_content",
     "image"
   ],
   "properties": {
@@ -16,7 +15,10 @@
       "type": "string"
     },
     "explicit_content": {
-      "type": "boolean"
+      "type": [
+        "boolean",
+        "null"
+      ]
     },
     "external_link": {
       "type": [
@@ -37,7 +39,7 @@
         }
       ]
     },
-    "trading_start_time": {
+    "start_trading_time": {
       "anyOf": [
         {
           "$ref": "#/definitions/Timestamp"
@@ -48,6 +50,7 @@
       ]
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Decimal": {
       "description": "A fixed-point decimal value with 18 fractional digits, i.e. Decimal(1_000_000_000_000_000_000) == 1.0\n\nThe greatest possible value that can be represented is 340282366920938463463.374607431768211455 (which is (2^128 - 1) / 10^18)",
@@ -66,7 +69,8 @@
         "share": {
           "$ref": "#/definitions/Decimal"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Timestamp": {
       "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
diff --git a/contracts/sg721-metadata-onchain/schema/contract_info_response.json b/contracts/sg721-metadata-onchain/schema/contract_info_response.json
index a1671258..4a805a82 100644
--- a/contracts/sg721-metadata-onchain/schema/contract_info_response.json
+++ b/contracts/sg721-metadata-onchain/schema/contract_info_response.json
@@ -13,5 +13,6 @@
     "symbol": {
       "type": "string"
     }
-  }
+  },
+  "additionalProperties": false
 }
diff --git a/contracts/sg721-metadata-onchain/schema/instantiate_msg.json b/contracts/sg721-metadata-onchain/schema/instantiate_msg.json
index 62106814..734b45e8 100644
--- a/contracts/sg721-metadata-onchain/schema/instantiate_msg.json
+++ b/contracts/sg721-metadata-onchain/schema/instantiate_msg.json
@@ -22,13 +22,13 @@
       "type": "string"
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "CollectionInfo_for_RoyaltyInfoResponse": {
       "type": "object",
       "required": [
         "creator",
         "description",
-        "explicit_content",
         "image"
       ],
       "properties": {
@@ -39,7 +39,10 @@
           "type": "string"
         },
         "explicit_content": {
-          "type": "boolean"
+          "type": [
+            "boolean",
+            "null"
+          ]
         },
         "external_link": {
           "type": [
@@ -60,7 +63,7 @@
             }
           ]
         },
-        "trading_start_time": {
+        "start_trading_time": {
           "anyOf": [
             {
               "$ref": "#/definitions/Timestamp"
@@ -70,7 +73,8 @@
             }
           ]
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Decimal": {
       "description": "A fixed-point decimal value with 18 fractional digits, i.e. Decimal(1_000_000_000_000_000_000) == 1.0\n\nThe greatest possible value that can be represented is 340282366920938463463.374607431768211455 (which is (2^128 - 1) / 10^18)",
@@ -89,7 +93,8 @@
         "share": {
           "$ref": "#/definitions/Decimal"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Timestamp": {
       "description": "A point in time in nanosecond precision.\n\nThis type can represent times from 1970-01-01T00:00:00Z to 2554-07-21T23:34:33Z.\n\n## Examples\n\n``` # use cosmwasm_std::Timestamp; let ts = Timestamp::from_nanos(1_000_000_202); assert_eq!(ts.nanos(), 1_000_000_202); assert_eq!(ts.seconds(), 1); assert_eq!(ts.subsec_nanos(), 202);\n\nlet ts = ts.plus_seconds(2); assert_eq!(ts.nanos(), 3_000_000_202); assert_eq!(ts.seconds(), 3); assert_eq!(ts.subsec_nanos(), 202); ```",
diff --git a/contracts/sg721-metadata-onchain/schema/minter_response.json b/contracts/sg721-metadata-onchain/schema/minter_response.json
index a20e0d76..c5c90029 100644
--- a/contracts/sg721-metadata-onchain/schema/minter_response.json
+++ b/contracts/sg721-metadata-onchain/schema/minter_response.json
@@ -10,5 +10,6 @@
     "minter": {
       "type": "string"
     }
-  }
+  },
+  "additionalProperties": false
 }
diff --git a/contracts/sg721-metadata-onchain/schema/nft_info_response.json b/contracts/sg721-metadata-onchain/schema/nft_info_response.json
index 7adc2a6a..d56f06f0 100644
--- a/contracts/sg721-metadata-onchain/schema/nft_info_response.json
+++ b/contracts/sg721-metadata-onchain/schema/nft_info_response.json
@@ -22,6 +22,7 @@
       ]
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Metadata": {
       "description": "OpenSea metadata standard, used by Stargaze marketplace. See [this link](https://docs.opensea.io/docs/metadata-standards) for details.",
diff --git a/contracts/sg721-metadata-onchain/schema/num_tokens_response.json b/contracts/sg721-metadata-onchain/schema/num_tokens_response.json
index 4647c23a..aff5850c 100644
--- a/contracts/sg721-metadata-onchain/schema/num_tokens_response.json
+++ b/contracts/sg721-metadata-onchain/schema/num_tokens_response.json
@@ -11,5 +11,6 @@
       "format": "uint64",
       "minimum": 0.0
     }
-  }
+  },
+  "additionalProperties": false
 }
diff --git a/contracts/sg721-metadata-onchain/schema/operators_response.json b/contracts/sg721-metadata-onchain/schema/operators_response.json
index 53703072..533a096d 100644
--- a/contracts/sg721-metadata-onchain/schema/operators_response.json
+++ b/contracts/sg721-metadata-onchain/schema/operators_response.json
@@ -13,6 +13,7 @@
       }
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Approval": {
       "type": "object",
@@ -33,7 +34,8 @@
           "description": "Account that can transfer/send the token",
           "type": "string"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Expiration": {
       "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
@@ -74,7 +76,8 @@
           ],
           "properties": {
             "never": {
-              "type": "object"
+              "type": "object",
+              "additionalProperties": false
             }
           },
           "additionalProperties": false
diff --git a/contracts/sg721-metadata-onchain/schema/owner_of_response.json b/contracts/sg721-metadata-onchain/schema/owner_of_response.json
index 1258d671..abb9006d 100644
--- a/contracts/sg721-metadata-onchain/schema/owner_of_response.json
+++ b/contracts/sg721-metadata-onchain/schema/owner_of_response.json
@@ -19,6 +19,7 @@
       "type": "string"
     }
   },
+  "additionalProperties": false,
   "definitions": {
     "Approval": {
       "type": "object",
@@ -39,7 +40,8 @@
           "description": "Account that can transfer/send the token",
           "type": "string"
         }
-      }
+      },
+      "additionalProperties": false
     },
     "Expiration": {
       "description": "Expiration represents a point in time when some event happens. It can compare with a BlockInfo and will return is_expired() == true once the condition is hit (and for every block in the future)",
@@ -80,7 +82,8 @@
           ],
           "properties": {
             "never": {
-              "type": "object"
+              "type": "object",
+              "additionalProperties": false
             }
           },
           "additionalProperties": false
diff --git a/contracts/sg721-metadata-onchain/schema/query_msg.json b/contracts/sg721-metadata-onchain/schema/query_msg.json
index 3cb27165..e9e31a3b 100644
--- a/contracts/sg721-metadata-onchain/schema/query_msg.json
+++ b/contracts/sg721-metadata-onchain/schema/query_msg.json
@@ -23,7 +23,8 @@
             "token_id": {
               "type": "string"
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -53,7 +54,8 @@
             "token_id": {
               "type": "string"
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -79,7 +81,8 @@
             "token_id": {
               "type": "string"
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -119,7 +122,8 @@
                 "null"
               ]
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -131,7 +135,8 @@
       ],
       "properties": {
         "num_tokens": {
-          "type": "object"
+          "type": "object",
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -143,7 +148,8 @@
       ],
       "properties": {
         "contract_info": {
-          "type": "object"
+          "type": "object",
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -163,7 +169,8 @@
             "token_id": {
               "type": "string"
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -189,7 +196,8 @@
             "token_id": {
               "type": "string"
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -223,7 +231,8 @@
                 "null"
               ]
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -251,7 +260,8 @@
                 "null"
               ]
             }
-          }
+          },
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -263,7 +273,8 @@
       ],
       "properties": {
         "minter": {
-          "type": "object"
+          "type": "object",
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
@@ -275,7 +286,8 @@
       ],
       "properties": {
         "collection_info": {
-          "type": "object"
+          "type": "object",
+          "additionalProperties": false
         }
       },
       "additionalProperties": false
diff --git a/contracts/sg721-metadata-onchain/schema/tokens_response.json b/contracts/sg721-metadata-onchain/schema/tokens_response.json
index b8e3d75b..14499395 100644
--- a/contracts/sg721-metadata-onchain/schema/tokens_response.json
+++ b/contracts/sg721-metadata-onchain/schema/tokens_response.json
@@ -13,5 +13,6 @@
         "type": "string"
       }
     }
-  }
+  },
+  "additionalProperties": false
 }
diff --git a/contracts/sg721-metadata-onchain/src/lib.rs b/contracts/sg721-metadata-onchain/src/lib.rs
index 260ca371..e8dae6e7 100644
--- a/contracts/sg721-metadata-onchain/src/lib.rs
+++ b/contracts/sg721-metadata-onchain/src/lib.rs
@@ -129,8 +129,8 @@ mod tests {
                 description: "this is a test".to_string(),
                 image: "https://larry.engineer".to_string(),
                 external_link: None,
-                explicit_content: false,
-                trading_start_time: None,
+                explicit_content: Some(false),
+                start_trading_time: None,
                 royalty_info: None,
             },
         };
diff --git a/contracts/sg721-nt/schema/instantiate_msg.json b/contracts/sg721-nt/schema/instantiate_msg.json
index 7dc0c63d..734b45e8 100644
--- a/contracts/sg721-nt/schema/instantiate_msg.json
+++ b/contracts/sg721-nt/schema/instantiate_msg.json
@@ -29,7 +29,6 @@
       "required": [
         "creator",
         "description",
-        "explicit_content",
         "image"
       ],
       "properties": {
@@ -40,7 +39,10 @@
           "type": "string"
         },
         "explicit_content": {
-          "type": "boolean"
+          "type": [
+            "boolean",
+            "null"
+          ]
         },
         "external_link": {
           "type": [
@@ -61,7 +63,7 @@
             }
           ]
         },
-        "trading_start_time": {
+        "start_trading_time": {
           "anyOf": [
             {
               "$ref": "#/definitions/Timestamp"
diff --git a/contracts/vending-minter/schema/execute_msg.json b/contracts/vending-minter/schema/execute_msg.json
index 8aad7cfd..f5a4a7e7 100644
--- a/contracts/vending-minter/schema/execute_msg.json
+++ b/contracts/vending-minter/schema/execute_msg.json
@@ -84,10 +84,10 @@
       "description": "Runs custom checks against TradingStartTime on VendingMinter, then updates by calling sg721-base",
       "type": "object",
       "required": [
-        "update_trading_start_time"
+        "update_start_trading_time"
       ],
       "properties": {
-        "update_trading_start_time": {
+        "update_start_trading_time": {
           "anyOf": [
             {
               "$ref": "#/definitions/Timestamp"
diff --git a/contracts/vending-minter/schema/instantiate_msg.json b/contracts/vending-minter/schema/instantiate_msg.json
index ee693d56..5ab79048 100644
--- a/contracts/vending-minter/schema/instantiate_msg.json
+++ b/contracts/vending-minter/schema/instantiate_msg.json
@@ -35,7 +35,6 @@
       "required": [
         "creator",
         "description",
-        "explicit_content",
         "image"
       ],
       "properties": {
@@ -46,7 +45,10 @@
           "type": "string"
         },
         "explicit_content": {
-          "type": "boolean"
+          "type": [
+            "boolean",
+            "null"
+          ]
         },
         "external_link": {
           "type": [
@@ -67,7 +69,7 @@
             }
           ]
         },
-        "trading_start_time": {
+        "start_trading_time": {
           "anyOf": [
             {
               "$ref": "#/definitions/Timestamp"
diff --git a/contracts/vending-minter/src/contract.rs b/contracts/vending-minter/src/contract.rs
index 75989328..c124b292 100644
--- a/contracts/vending-minter/src/contract.rs
+++ b/contracts/vending-minter/src/contract.rs
@@ -122,21 +122,21 @@ pub fn instantiate(
     let mut collection_info = msg.collection_params.info.clone();
     let offset = factory_params.max_trading_offset_secs;
     let default_start_time_with_offset = msg.init_msg.start_time.plus_seconds(offset);
-    if let Some(trading_start_time) = msg.collection_params.info.trading_start_time {
+    if let Some(start_trading_time) = msg.collection_params.info.start_trading_time {
         // If trading start time > start_time + offset, return error
-        if trading_start_time > default_start_time_with_offset {
-            return Err(ContractError::InvalidTradingStartTime(
-                trading_start_time,
+        if start_trading_time > default_start_time_with_offset {
+            return Err(ContractError::InvalidStartTradingTime(
+                start_trading_time,
                 default_start_time_with_offset,
             ));
         }
     }
-    let trading_start_time = msg
+    let start_trading_time = msg
         .collection_params
         .info
-        .trading_start_time
+        .start_trading_time
         .or(Some(default_start_time_with_offset));
-    collection_info.trading_start_time = trading_start_time;
+    collection_info.start_trading_time = start_trading_time;
 
     let config = Config {
         factory: factory.clone(),
@@ -211,8 +211,8 @@ pub fn execute(
         ExecuteMsg::Purge {} => execute_purge(deps, env, info),
         ExecuteMsg::UpdateMintPrice { price } => execute_update_mint_price(deps, env, info, price),
         ExecuteMsg::UpdateStartTime(time) => execute_update_start_time(deps, env, info, time),
-        ExecuteMsg::UpdateTradingStartTime(time) => {
-            execute_update_trading_start_time(deps, env, info, time)
+        ExecuteMsg::UpdateStartTradingTime(time) => {
+            execute_update_start_trading_time(deps, env, info, time)
         }
         ExecuteMsg::UpdatePerAddressLimit { per_address_limit } => {
             execute_update_per_address_limit(deps, env, info, per_address_limit)
@@ -714,7 +714,7 @@ pub fn execute_update_start_time(
         .add_attribute("start_time", start_time.to_string()))
 }
 
-pub fn execute_update_trading_start_time(
+pub fn execute_update_start_trading_time(
     deps: DepsMut,
     env: Env,
     info: MessageInfo,
@@ -739,17 +739,17 @@ pub fn execute_update_trading_start_time(
         .start_time
         .plus_seconds(factory_params.params.max_trading_offset_secs);
 
-    if let Some(trading_start_time) = start_time {
-        if env.block.time > trading_start_time {
-            return Err(ContractError::InvalidTradingStartTime(
+    if let Some(start_trading_time) = start_time {
+        if env.block.time > start_trading_time {
+            return Err(ContractError::InvalidStartTradingTime(
                 env.block.time,
-                trading_start_time,
+                start_trading_time,
             ));
         }
-        // If new trading_start_time > old start time + offset , return error
-        if trading_start_time > default_start_time_with_offset {
-            return Err(ContractError::InvalidTradingStartTime(
-                trading_start_time,
+        // If new start_trading_time > old start time + offset , return error
+        if start_trading_time > default_start_time_with_offset {
+            return Err(ContractError::InvalidStartTradingTime(
+                start_trading_time,
                 default_start_time_with_offset,
             ));
         }
@@ -758,14 +758,14 @@ pub fn execute_update_trading_start_time(
     // execute sg721 contract
     let msg = WasmMsg::Execute {
         contract_addr: sg721_contract_addr.to_string(),
-        msg: to_binary(&Sg721ExecuteMsg::<Empty, Empty>::UpdateTradingStartTime(
+        msg: to_binary(&Sg721ExecuteMsg::<Empty, Empty>::UpdateStartTradingTime(
             start_time,
         ))?,
         funds: vec![],
     };
 
     Ok(Response::new()
-        .add_attribute("action", "update_trading_start_time")
+        .add_attribute("action", "update_start_trading_time")
         .add_attribute("sender", info.sender)
         .add_message(msg))
 }
diff --git a/contracts/vending-minter/src/error.rs b/contracts/vending-minter/src/error.rs
index 34ff725d..c4e7a33c 100644
--- a/contracts/vending-minter/src/error.rs
+++ b/contracts/vending-minter/src/error.rs
@@ -72,8 +72,8 @@ pub enum ContractError {
     #[error("InvalidStartTime {0} < {1}")]
     InvalidStartTime(Timestamp, Timestamp),
 
-    #[error("InvalidTradingStartTime {0} < {1}")]
-    InvalidTradingStartTime(Timestamp, Timestamp),
+    #[error("InvalidStartTradingTime {0} < {1}")]
+    InvalidStartTradingTime(Timestamp, Timestamp),
 
     #[error("Instantiate sg721 error")]
     InstantiateSg721Error {},
diff --git a/contracts/vending-minter/src/msg.rs b/contracts/vending-minter/src/msg.rs
index c96bfdb7..e3ea2619 100644
--- a/contracts/vending-minter/src/msg.rs
+++ b/contracts/vending-minter/src/msg.rs
@@ -22,7 +22,7 @@ pub enum ExecuteMsg {
     },
     UpdateStartTime(Timestamp),
     /// Runs custom checks against TradingStartTime on VendingMinter, then updates by calling sg721-base
-    UpdateTradingStartTime(Option<Timestamp>),
+    UpdateStartTradingTime(Option<Timestamp>),
     UpdatePerAddressLimit {
         per_address_limit: u32,
     },
diff --git a/packages/sg721/src/lib.rs b/packages/sg721/src/lib.rs
index a984090f..af95f969 100644
--- a/packages/sg721/src/lib.rs
+++ b/packages/sg721/src/lib.rs
@@ -54,7 +54,7 @@ pub enum ExecuteMsg<T, E> {
         collection_info: UpdateCollectionInfoMsg<RoyaltyInfoResponse>,
     },
     /// Called by the minter to update trading start time
-    UpdateTradingStartTime(Option<Timestamp>),
+    UpdateStartTradingTime(Option<Timestamp>),
     // Freeze collection info from further updates
     FreezeCollectionInfo,
 }
@@ -65,8 +65,8 @@ pub struct CollectionInfo<T> {
     pub description: String,
     pub image: String,
     pub external_link: Option<String>,
-    pub explicit_content: bool,
-    pub trading_start_time: Option<Timestamp>,
+    pub explicit_content: Option<bool>,
+    pub start_trading_time: Option<Timestamp>,
     pub royalty_info: Option<T>,
 }
 
diff --git a/scripts/instantiate.sh b/scripts/instantiate.sh
new file mode 100644
index 00000000..4ca62acd
--- /dev/null
+++ b/scripts/instantiate.sh
@@ -0,0 +1,25 @@
+
+MSG=$(cat <<EOF
+{
+  "params": {
+    "code_id": 254,
+    "creation_fee": { "amount": "1000000000", "denom": "ustars" },
+    "min_mint_price": { "amount": "50000000", "denom": "ustars" },
+    "mint_fee_bps": 1000,
+    "max_trading_offset_secs": 86400,
+    "extension": {
+      "max_token_limit": 10000,
+      "max_per_address_limit": 50,
+      "airdrop_mint_price": { "amount": "0", "denom": "ustars" },
+      "airdrop_mint_fee_bps": 0,
+      "shuffle_fee": { "amount": "500000000", "denom": "ustars" }
+    }
+  }
+}
+
+EOF
+)
+
+starsd tx wasm instantiate 252  "$MSG"  --label factory --admin stars1paqkeyluuw47pflgwwqaaj8y679zj96aatg5a7 --from test --gas-prices 0.025ustars --gas-adjustment 1.7 --gas auto --chain-id elgafar-1 --node https://rpc.elgafar-1.stargaze-apis.com:443   -b block --yes -o json | jq .
+
+
diff --git a/scripts/upload.sh b/scripts/upload.sh
index 99125b7f..905cfcee 100644
--- a/scripts/upload.sh
+++ b/scripts/upload.sh
@@ -1,3 +1,6 @@
-starsd tx wasm store artifacts/vending_minter.wasm --from test --gas-prices 0.025ustars --gas-adjustment 1.7 --gas auto --chain-id elgafar-1 --node https://rpc.elgafar-1.stargaze-apis.com:443   -b block --yes -o json | jq '.logs' | grep -A 1 code_id
-starsd tx wasm store artifacts/sg721_base.wasm --from test --gas-prices 0.025ustars --gas-adjustment 1.7 --gas auto --chain-id elgafar-1 --node https://rpc.elgafar-1.stargaze-apis.com:443 -b block --yes -o json | jq '.logs' | grep -A 1 code_id
+echo "vending-factory";
 starsd tx wasm store artifacts/vending_factory.wasm --from test --gas-prices 0.025ustars --gas-adjustment 1.7 --gas auto --chain-id elgafar-1 --node https://rpc.elgafar-1.stargaze-apis.com:443  -b block --yes -o json | jq '.logs' | grep -A 1 code_id
+echo "vending-sg721-base";
+starsd tx wasm store artifacts/sg721_base.wasm --from test --gas-prices 0.025ustars --gas-adjustment 1.7 --gas auto --chain-id elgafar-1 --node https://rpc.elgafar-1.stargaze-apis.com:443 -b block --yes -o json | jq '.logs' | grep -A 1 code_id
+echo "vending-minter";
+starsd tx wasm store artifacts/vending_minter.wasm --from test --gas-prices 0.025ustars --gas-adjustment 1.7 --gas auto --chain-id elgafar-1 --node https://rpc.elgafar-1.stargaze-apis.com:443   -b block --yes -o json | jq '.logs' | grep -A 1 code_id
diff --git a/ts/package.json b/ts/package.json
index b0ea3864..6b5cf9ad 100644
--- a/ts/package.json
+++ b/ts/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@stargazezone/ts",
-  "version": "0.4.0",
+  "version": "0.7.0",
   "description": "Stargaze CosmWasm Typescript Types",
   "main": "index.js",
   "scripts": {
diff --git a/ts/src/BaseMinter.client.ts b/ts/src/BaseMinter.client.ts
index 323d941b..ecf2436b 100644
--- a/ts/src/BaseMinter.client.ts
+++ b/ts/src/BaseMinter.client.ts
@@ -42,7 +42,7 @@ export interface BaseMinterInterface extends BaseMinterReadOnlyInterface {
   }: {
     tokenUri: string;
   }, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise<ExecuteResult>;
-  updateTradingStartTime: (fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise<ExecuteResult>;
+  updateStartTradingTime: (fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise<ExecuteResult>;
 }
 export class BaseMinterClient extends BaseMinterQueryClient implements BaseMinterInterface {
   client: SigningCosmWasmClient;
@@ -55,7 +55,7 @@ export class BaseMinterClient extends BaseMinterQueryClient implements BaseMinte
     this.sender = sender;
     this.contractAddress = contractAddress;
     this.mint = this.mint.bind(this);
-    this.updateTradingStartTime = this.updateTradingStartTime.bind(this);
+    this.updateStartTradingTime = this.updateStartTradingTime.bind(this);
   }
 
   mint = async ({
@@ -69,9 +69,9 @@ export class BaseMinterClient extends BaseMinterQueryClient implements BaseMinte
       }
     }, fee, memo, funds);
   };
-  updateTradingStartTime = async (fee: number | StdFee | "auto" = "auto", memo?: string, funds?: Coin[]): Promise<ExecuteResult> => {
+  updateStartTradingTime = async (fee: number | StdFee | "auto" = "auto", memo?: string, funds?: Coin[]): Promise<ExecuteResult> => {
     return await this.client.execute(this.sender, this.contractAddress, {
-      update_trading_start_time: {}
+      update_start_trading_time: {}
     }, fee, memo, funds);
   };
 }
\ No newline at end of file
diff --git a/ts/src/BaseMinter.message-composer.ts b/ts/src/BaseMinter.message-composer.ts
index d414d906..87a0a132 100644
--- a/ts/src/BaseMinter.message-composer.ts
+++ b/ts/src/BaseMinter.message-composer.ts
@@ -16,7 +16,7 @@ export interface BaseMinterMessage {
   }: {
     tokenUri: string;
   }, funds?: Coin[]) => MsgExecuteContractEncodeObject;
-  updateTradingStartTime: (funds?: Coin[]) => MsgExecuteContractEncodeObject;
+  updateStartTradingTime: (funds?: Coin[]) => MsgExecuteContractEncodeObject;
 }
 export class BaseMinterMessageComposer implements BaseMinterMessage {
   sender: string;
@@ -26,7 +26,7 @@ export class BaseMinterMessageComposer implements BaseMinterMessage {
     this.sender = sender;
     this.contractAddress = contractAddress;
     this.mint = this.mint.bind(this);
-    this.updateTradingStartTime = this.updateTradingStartTime.bind(this);
+    this.updateStartTradingTime = this.updateStartTradingTime.bind(this);
   }
 
   mint = ({
@@ -48,14 +48,14 @@ export class BaseMinterMessageComposer implements BaseMinterMessage {
       })
     };
   };
-  updateTradingStartTime = (funds?: Coin[]): MsgExecuteContractEncodeObject => {
+  updateStartTradingTime = (funds?: Coin[]): MsgExecuteContractEncodeObject => {
     return {
       typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract",
       value: MsgExecuteContract.fromPartial({
         sender: this.sender,
         contract: this.contractAddress,
         msg: toUtf8(JSON.stringify({
-          update_trading_start_time: {}
+          update_start_trading_time: {}
         })),
         funds
       })
diff --git a/ts/src/BaseMinter.react-query.ts b/ts/src/BaseMinter.react-query.ts
index 2132498d..f1d66982 100644
--- a/ts/src/BaseMinter.react-query.ts
+++ b/ts/src/BaseMinter.react-query.ts
@@ -1,55 +1,112 @@
 /**
-* This file was automatically generated by @cosmwasm/ts-codegen@0.16.5.
-* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
-* and run the @cosmwasm/ts-codegen generate command to regenerate this file.
-*/
+ * This file was automatically generated by @cosmwasm/ts-codegen@0.16.5.
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
+ * and run the @cosmwasm/ts-codegen generate command to regenerate this file.
+ */
 
-import { UseQueryOptions, useQuery, useMutation, UseMutationOptions } from "@tanstack/react-query";
+import {
+  UseQueryOptions,
+  useQuery,
+  useMutation,
+  UseMutationOptions,
+} from "@tanstack/react-query";
 import { ExecuteResult } from "@cosmjs/cosmwasm-stargate";
 import { StdFee } from "@cosmjs/amino";
-import { ExecuteMsg, Timestamp, Uint64, Decimal, Uint128, InstantiateMsg, CreateMinterMsgForNullable_Empty, CollectionParams, CollectionInfoForRoyaltyInfoResponse, RoyaltyInfoResponse, Empty, MinterParamsForNullable_Empty, Coin, Addr, MinterConfigForEmpty, MinterConfigResponseForEmpty, QueryMsg } from "./BaseMinter.types";
+import {
+  ExecuteMsg,
+  Timestamp,
+  Uint64,
+  Decimal,
+  Uint128,
+  InstantiateMsg,
+  CreateMinterMsgForNullable_Empty,
+  CollectionParams,
+  CollectionInfoForRoyaltyInfoResponse,
+  RoyaltyInfoResponse,
+  Empty,
+  MinterParamsForNullable_Empty,
+  Coin,
+  Addr,
+  MinterConfigForEmpty,
+  MinterConfigResponseForEmpty,
+  QueryMsg,
+} from "./BaseMinter.types";
 import { BaseMinterQueryClient, BaseMinterClient } from "./BaseMinter.client";
 export const baseMinterQueryKeys = {
-  contract: ([{
-    contract: "baseMinter"
-  }] as const),
-  address: (contractAddress: string | undefined) => ([{ ...baseMinterQueryKeys.contract[0],
-    address: contractAddress
-  }] as const),
-  config: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...baseMinterQueryKeys.address(contractAddress)[0],
-    method: "config",
-    args
-  }] as const),
-  status: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...baseMinterQueryKeys.address(contractAddress)[0],
-    method: "status",
-    args
-  }] as const)
+  contract: [
+    {
+      contract: "baseMinter",
+    },
+  ] as const,
+  address: (contractAddress: string | undefined) =>
+    [{ ...baseMinterQueryKeys.contract[0], address: contractAddress }] as const,
+  config: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...baseMinterQueryKeys.address(contractAddress)[0],
+        method: "config",
+        args,
+      },
+    ] as const,
+  status: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...baseMinterQueryKeys.address(contractAddress)[0],
+        method: "status",
+        args,
+      },
+    ] as const,
 };
 export interface BaseMinterReactQuery<TResponse, TData = TResponse> {
   client: BaseMinterQueryClient | undefined;
-  options?: Omit<UseQueryOptions<TResponse, Error, TData>, "'queryKey' | 'queryFn' | 'initialData'"> & {
+  options?: Omit<
+    UseQueryOptions<TResponse, Error, TData>,
+    "'queryKey' | 'queryFn' | 'initialData'"
+  > & {
     initialData?: undefined;
   };
 }
-export interface BaseMinterStatusQuery<TData> extends BaseMinterReactQuery<StatusResponse, TData> {}
+export interface BaseMinterStatusQuery<TData>
+  extends BaseMinterReactQuery<StatusResponse, TData> {}
 export function useBaseMinterStatusQuery<TData = StatusResponse>({
   client,
-  options
+  options,
 }: BaseMinterStatusQuery<TData>) {
-  return useQuery<StatusResponse, Error, TData>(baseMinterQueryKeys.status(client?.contractAddress), () => client ? client.status() : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+  return useQuery<StatusResponse, Error, TData>(
+    baseMinterQueryKeys.status(client?.contractAddress),
+    () =>
+      client ? client.status() : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
-export interface BaseMinterConfigQuery<TData> extends BaseMinterReactQuery<ConfigResponse, TData> {}
+export interface BaseMinterConfigQuery<TData>
+  extends BaseMinterReactQuery<ConfigResponse, TData> {}
 export function useBaseMinterConfigQuery<TData = ConfigResponse>({
   client,
-  options
+  options,
 }: BaseMinterConfigQuery<TData>) {
-  return useQuery<ConfigResponse, Error, TData>(baseMinterQueryKeys.config(client?.contractAddress), () => client ? client.config() : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+  return useQuery<ConfigResponse, Error, TData>(
+    baseMinterQueryKeys.config(client?.contractAddress),
+    () =>
+      client ? client.config() : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
-export interface BaseMinterUpdateTradingStartTimeMutation {
+export interface BaseMinterUpdateStartTradingTimeMutation {
   client: BaseMinterClient;
   args?: {
     fee?: number | StdFee | "auto";
@@ -57,15 +114,25 @@ export interface BaseMinterUpdateTradingStartTimeMutation {
     funds?: Coin[];
   };
 }
-export function useBaseMinterUpdateTradingStartTimeMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, BaseMinterUpdateTradingStartTimeMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, BaseMinterUpdateTradingStartTimeMutation>(({
-    client,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.updateTradingStartTime(fee, memo, funds), options);
+export function useBaseMinterUpdateStartTradingTimeMutation(
+  options?: Omit<
+    UseMutationOptions<
+      ExecuteResult,
+      Error,
+      BaseMinterUpdateStartTradingTimeMutation
+    >,
+    "mutationFn"
+  >
+) {
+  return useMutation<
+    ExecuteResult,
+    Error,
+    BaseMinterUpdateStartTradingTimeMutation
+  >(
+    ({ client, args: { fee, memo, funds } = {} }) =>
+      client.UpdateStartTradingTime(fee, memo, funds),
+    options
+  );
 }
 export interface BaseMinterMintMutation {
   client: BaseMinterClient;
@@ -78,14 +145,15 @@ export interface BaseMinterMintMutation {
     funds?: Coin[];
   };
 }
-export function useBaseMinterMintMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, BaseMinterMintMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, BaseMinterMintMutation>(({
-    client,
-    msg,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.mint(msg, fee, memo, funds), options);
-}
\ No newline at end of file
+export function useBaseMinterMintMutation(
+  options?: Omit<
+    UseMutationOptions<ExecuteResult, Error, BaseMinterMintMutation>,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, BaseMinterMintMutation>(
+    ({ client, msg, args: { fee, memo, funds } = {} }) =>
+      client.mint(msg, fee, memo, funds),
+    options
+  );
+}
diff --git a/ts/src/BaseMinter.types.ts b/ts/src/BaseMinter.types.ts
index 9baa7ae5..a8dbae23 100644
--- a/ts/src/BaseMinter.types.ts
+++ b/ts/src/BaseMinter.types.ts
@@ -32,7 +32,7 @@ export type ExecuteMsg = {
     [k: string]: unknown;
   };
 } | {
-  update_trading_start_time: Timestamp | null;
+  update_start_trading_time: Timestamp | null;
 };
 export type Timestamp = Uint64;
 export type Uint64 = string;
@@ -57,11 +57,11 @@ export interface CollectionParams {
 export interface CollectionInfoForRoyaltyInfoResponse {
   creator: string;
   description: string;
-  explicit_content: boolean;
+  explicit_content?: boolean | null;
   external_link?: string | null;
   image: string;
   royalty_info?: RoyaltyInfoResponse | null;
-  trading_start_time?: Timestamp | null;
+  start_trading_time?: Timestamp | null;
 }
 export interface RoyaltyInfoResponse {
   payment_address: string;
diff --git a/ts/src/Sg721Base.types.ts b/ts/src/Sg721Base.types.ts
index 1d8aadc9..2e133066 100644
--- a/ts/src/Sg721Base.types.ts
+++ b/ts/src/Sg721Base.types.ts
@@ -48,11 +48,11 @@ export type Decimal = string;
 export interface CollectionInfoResponse {
   creator: string;
   description: string;
-  explicit_content: boolean;
+  explicit_content?: boolean | null;
   external_link?: string | null;
   image: string;
   royalty_info?: RoyaltyInfoResponse | null;
-  trading_start_time?: Timestamp | null;
+  start_trading_time?: Timestamp | null;
 }
 export interface RoyaltyInfoResponse {
   payment_address: string;
@@ -71,11 +71,11 @@ export interface InstantiateMsg {
 export interface CollectionInfoForRoyaltyInfoResponse {
   creator: string;
   description: string;
-  explicit_content: boolean;
+  explicit_content?: boolean | null;
   external_link?: string | null;
   image: string;
   royalty_info?: RoyaltyInfoResponse | null;
-  trading_start_time?: Timestamp | null;
+  start_trading_time?: Timestamp | null;
 }
 export interface MinterResponse {
   minter: string;
diff --git a/ts/src/Sg721MetadataOnchain.types.ts b/ts/src/Sg721MetadataOnchain.types.ts
index 3079abad..1a0c42ce 100644
--- a/ts/src/Sg721MetadataOnchain.types.ts
+++ b/ts/src/Sg721MetadataOnchain.types.ts
@@ -9,31 +9,25 @@ export type Expiration = {
 } | {
   at_time: Timestamp;
 } | {
-  never: {
-    [k: string]: unknown;
-  };
+  never: {};
 };
 export type Timestamp = Uint64;
 export type Uint64 = string;
 export interface AllNftInfoResponse {
   access: OwnerOfResponse;
   info: NftInfoResponseForMetadata;
-  [k: string]: unknown;
 }
 export interface OwnerOfResponse {
   approvals: Approval[];
   owner: string;
-  [k: string]: unknown;
 }
 export interface Approval {
   expires: Expiration;
   spender: string;
-  [k: string]: unknown;
 }
 export interface NftInfoResponseForMetadata {
   extension: Metadata;
   token_uri?: string | null;
-  [k: string]: unknown;
 }
 export interface Metadata {
   animation_url?: string | null;
@@ -55,93 +49,77 @@ export interface Trait {
 }
 export interface AllOperatorsResponse {
   operators: Approval[];
-  [k: string]: unknown;
 }
 export interface AllTokensResponse {
   tokens: string[];
-  [k: string]: unknown;
 }
 export interface ApprovalResponse {
   approval: Approval;
-  [k: string]: unknown;
 }
 export interface ApprovalsResponse {
   approvals: Approval[];
-  [k: string]: unknown;
 }
 export type Decimal = string;
 export interface CollectionInfoResponse {
   creator: string;
   description: string;
-  explicit_content: boolean;
+  explicit_content?: boolean | null;
   external_link?: string | null;
   image: string;
   royalty_info?: RoyaltyInfoResponse | null;
-  trading_start_time?: Timestamp | null;
-  [k: string]: unknown;
+  start_trading_time?: Timestamp | null;
 }
 export interface RoyaltyInfoResponse {
   payment_address: string;
   share: Decimal;
-  [k: string]: unknown;
 }
 export interface ContractInfoResponse {
   name: string;
   symbol: string;
-  [k: string]: unknown;
 }
 export interface InstantiateMsg {
   collection_info: CollectionInfoForRoyaltyInfoResponse;
   minter: string;
   name: string;
   symbol: string;
-  [k: string]: unknown;
 }
 export interface CollectionInfoForRoyaltyInfoResponse {
   creator: string;
   description: string;
-  explicit_content: boolean;
+  explicit_content?: boolean | null;
   external_link?: string | null;
   image: string;
   royalty_info?: RoyaltyInfoResponse | null;
-  trading_start_time?: Timestamp | null;
-  [k: string]: unknown;
+  start_trading_time?: Timestamp | null;
 }
 export interface MinterResponse {
   minter: string;
-  [k: string]: unknown;
 }
 export interface NftInfoResponse {
   extension: Metadata;
   token_uri?: string | null;
-  [k: string]: unknown;
 }
 export interface NumTokensResponse {
   count: number;
-  [k: string]: unknown;
 }
 export interface OperatorsResponse {
   operators: Approval[];
-  [k: string]: unknown;
 }
 export type QueryMsg = {
   owner_of: {
     include_expired?: boolean | null;
     token_id: string;
-    [k: string]: unknown;
   };
 } | {
   approval: {
     include_expired?: boolean | null;
     spender: string;
     token_id: string;
-    [k: string]: unknown;
   };
 } | {
   approvals: {
     include_expired?: boolean | null;
     token_id: string;
-    [k: string]: unknown;
   };
 } | {
   all_operators: {
@@ -149,50 +127,36 @@ export type QueryMsg = {
     limit?: number | null;
     owner: string;
     start_after?: string | null;
-    [k: string]: unknown;
   };
 } | {
-  num_tokens: {
-    [k: string]: unknown;
-  };
+  num_tokens: {};
 } | {
-  contract_info: {
-    [k: string]: unknown;
-  };
+  contract_info: {};
 } | {
   nft_info: {
     token_id: string;
-    [k: string]: unknown;
   };
 } | {
   all_nft_info: {
     include_expired?: boolean | null;
     token_id: string;
-    [k: string]: unknown;
   };
 } | {
   tokens: {
     limit?: number | null;
     owner: string;
     start_after?: string | null;
-    [k: string]: unknown;
   };
 } | {
   all_tokens: {
     limit?: number | null;
     start_after?: string | null;
-    [k: string]: unknown;
   };
 } | {
-  minter: {
-    [k: string]: unknown;
-  };
+  minter: {};
 } | {
-  collection_info: {
-    [k: string]: unknown;
-  };
+  collection_info: {};
 };
 export interface TokensResponse {
   tokens: string[];
-  [k: string]: unknown;
 }
\ No newline at end of file
diff --git a/ts/src/Sg721Nt.types.ts b/ts/src/Sg721Nt.types.ts
index 27529d55..4822fae0 100644
--- a/ts/src/Sg721Nt.types.ts
+++ b/ts/src/Sg721Nt.types.ts
@@ -106,11 +106,11 @@ export interface InstantiateMsg {
 export interface CollectionInfoForRoyaltyInfoResponse {
   creator: string;
   description: string;
-  explicit_content: boolean;
+  explicit_content?: boolean | null;
   external_link?: string | null;
   image: string;
   royalty_info?: RoyaltyInfoResponse | null;
-  trading_start_time?: Timestamp | null;
+  start_trading_time?: Timestamp | null;
 }
 export interface RoyaltyInfoResponse {
   payment_address: string;
diff --git a/ts/src/VendingMinter.client.ts b/ts/src/VendingMinter.client.ts
index 4bfe5787..6432a2aa 100644
--- a/ts/src/VendingMinter.client.ts
+++ b/ts/src/VendingMinter.client.ts
@@ -88,7 +88,7 @@ export interface VendingMinterInterface extends VendingMinterReadOnlyInterface {
     price: number;
   }, fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise<ExecuteResult>;
   updateStartTime: (fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise<ExecuteResult>;
-  updateTradingStartTime: (fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise<ExecuteResult>;
+  updateStartTradingTime: (fee?: number | StdFee | "auto", memo?: string, funds?: Coin[]) => Promise<ExecuteResult>;
   updatePerAddressLimit: ({
     perAddressLimit
   }: {
@@ -124,7 +124,7 @@ export class VendingMinterClient extends VendingMinterQueryClient implements Ven
     this.purge = this.purge.bind(this);
     this.updateMintPrice = this.updateMintPrice.bind(this);
     this.updateStartTime = this.updateStartTime.bind(this);
-    this.updateTradingStartTime = this.updateTradingStartTime.bind(this);
+    this.updateStartTradingTime = this.updateStartTradingTime.bind(this);
     this.updatePerAddressLimit = this.updatePerAddressLimit.bind(this);
     this.mintTo = this.mintTo.bind(this);
     this.mintFor = this.mintFor.bind(this);
@@ -169,9 +169,9 @@ export class VendingMinterClient extends VendingMinterQueryClient implements Ven
       update_start_time: {}
     }, fee, memo, funds);
   };
-  updateTradingStartTime = async (fee: number | StdFee | "auto" = "auto", memo?: string, funds?: Coin[]): Promise<ExecuteResult> => {
+  updateStartTradingTime = async (fee: number | StdFee | "auto" = "auto", memo?: string, funds?: Coin[]): Promise<ExecuteResult> => {
     return await this.client.execute(this.sender, this.contractAddress, {
-      update_trading_start_time: {}
+      update_start_trading_time: {}
     }, fee, memo, funds);
   };
   updatePerAddressLimit = async ({
diff --git a/ts/src/VendingMinter.message-composer.ts b/ts/src/VendingMinter.message-composer.ts
index 927eb15e..c00f2bfc 100644
--- a/ts/src/VendingMinter.message-composer.ts
+++ b/ts/src/VendingMinter.message-composer.ts
@@ -24,7 +24,7 @@ export interface VendingMinterMessage {
     price: number;
   }, funds?: Coin[]) => MsgExecuteContractEncodeObject;
   updateStartTime: (funds?: Coin[]) => MsgExecuteContractEncodeObject;
-  updateTradingStartTime: (funds?: Coin[]) => MsgExecuteContractEncodeObject;
+  updateStartTradingTime: (funds?: Coin[]) => MsgExecuteContractEncodeObject;
   updatePerAddressLimit: ({
     perAddressLimit
   }: {
@@ -57,7 +57,7 @@ export class VendingMinterMessageComposer implements VendingMinterMessage {
     this.purge = this.purge.bind(this);
     this.updateMintPrice = this.updateMintPrice.bind(this);
     this.updateStartTime = this.updateStartTime.bind(this);
-    this.updateTradingStartTime = this.updateTradingStartTime.bind(this);
+    this.updateStartTradingTime = this.updateStartTradingTime.bind(this);
     this.updatePerAddressLimit = this.updatePerAddressLimit.bind(this);
     this.mintTo = this.mintTo.bind(this);
     this.mintFor = this.mintFor.bind(this);
@@ -142,14 +142,14 @@ export class VendingMinterMessageComposer implements VendingMinterMessage {
       })
     };
   };
-  updateTradingStartTime = (funds?: Coin[]): MsgExecuteContractEncodeObject => {
+  updateStartTradingTime = (funds?: Coin[]): MsgExecuteContractEncodeObject => {
     return {
       typeUrl: "/cosmwasm.wasm.v1.MsgExecuteContract",
       value: MsgExecuteContract.fromPartial({
         sender: this.sender,
         contract: this.contractAddress,
         msg: toUtf8(JSON.stringify({
-          update_trading_start_time: {}
+          update_start_trading_time: {}
         })),
         funds
       })
diff --git a/ts/src/VendingMinter.react-query.ts b/ts/src/VendingMinter.react-query.ts
index d1c6eb6a..f87a7d14 100644
--- a/ts/src/VendingMinter.react-query.ts
+++ b/ts/src/VendingMinter.react-query.ts
@@ -1,62 +1,151 @@
 /**
-* This file was automatically generated by @cosmwasm/ts-codegen@0.16.5.
-* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
-* and run the @cosmwasm/ts-codegen generate command to regenerate this file.
-*/
+ * This file was automatically generated by @cosmwasm/ts-codegen@0.16.5.
+ * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
+ * and run the @cosmwasm/ts-codegen generate command to regenerate this file.
+ */
 
-import { UseQueryOptions, useQuery, useMutation, UseMutationOptions } from "@tanstack/react-query";
+import {
+  UseQueryOptions,
+  useQuery,
+  useMutation,
+  UseMutationOptions,
+} from "@tanstack/react-query";
 import { ExecuteResult } from "@cosmjs/cosmwasm-stargate";
 import { StdFee } from "@cosmjs/amino";
-import { Uint128, Timestamp, Uint64, ConfigResponse, Coin, ExecuteMsg, Decimal, InstantiateMsg, CreateMinterMsgForVendingMinterInitMsgExtension, CollectionParams, CollectionInfoForRoyaltyInfoResponse, RoyaltyInfoResponse, VendingMinterInitMsgExtension, MinterParamsForParamsExtension, ParamsExtension, MintCountResponse, MintPriceResponse, MintableNumTokensResponse, Addr, MinterConfigForConfigExtension, ConfigExtension, QueryMsg, StartTimeResponse } from "./VendingMinter.types";
-import { VendingMinterQueryClient, VendingMinterClient } from "./VendingMinter.client";
+import {
+  Uint128,
+  Timestamp,
+  Uint64,
+  ConfigResponse,
+  Coin,
+  ExecuteMsg,
+  Decimal,
+  InstantiateMsg,
+  CreateMinterMsgForVendingMinterInitMsgExtension,
+  CollectionParams,
+  CollectionInfoForRoyaltyInfoResponse,
+  RoyaltyInfoResponse,
+  VendingMinterInitMsgExtension,
+  MinterParamsForParamsExtension,
+  ParamsExtension,
+  MintCountResponse,
+  MintPriceResponse,
+  MintableNumTokensResponse,
+  Addr,
+  MinterConfigForConfigExtension,
+  ConfigExtension,
+  QueryMsg,
+  StartTimeResponse,
+} from "./VendingMinter.types";
+import {
+  VendingMinterQueryClient,
+  VendingMinterClient,
+} from "./VendingMinter.client";
 export const vendingMinterQueryKeys = {
-  contract: ([{
-    contract: "vendingMinter"
-  }] as const),
-  address: (contractAddress: string | undefined) => ([{ ...vendingMinterQueryKeys.contract[0],
-    address: contractAddress
-  }] as const),
-  config: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...vendingMinterQueryKeys.address(contractAddress)[0],
-    method: "config",
-    args
-  }] as const),
-  mintableNumTokens: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...vendingMinterQueryKeys.address(contractAddress)[0],
-    method: "mintable_num_tokens",
-    args
-  }] as const),
-  startTime: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...vendingMinterQueryKeys.address(contractAddress)[0],
-    method: "start_time",
-    args
-  }] as const),
-  mintPrice: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...vendingMinterQueryKeys.address(contractAddress)[0],
-    method: "mint_price",
-    args
-  }] as const),
-  mintCount: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...vendingMinterQueryKeys.address(contractAddress)[0],
-    method: "mint_count",
-    args
-  }] as const),
-  status: (contractAddress: string | undefined, args?: Record<string, unknown>) => ([{ ...vendingMinterQueryKeys.address(contractAddress)[0],
-    method: "status",
-    args
-  }] as const)
+  contract: [
+    {
+      contract: "vendingMinter",
+    },
+  ] as const,
+  address: (contractAddress: string | undefined) =>
+    [
+      { ...vendingMinterQueryKeys.contract[0], address: contractAddress },
+    ] as const,
+  config: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...vendingMinterQueryKeys.address(contractAddress)[0],
+        method: "config",
+        args,
+      },
+    ] as const,
+  mintableNumTokens: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...vendingMinterQueryKeys.address(contractAddress)[0],
+        method: "mintable_num_tokens",
+        args,
+      },
+    ] as const,
+  startTime: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...vendingMinterQueryKeys.address(contractAddress)[0],
+        method: "start_time",
+        args,
+      },
+    ] as const,
+  mintPrice: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...vendingMinterQueryKeys.address(contractAddress)[0],
+        method: "mint_price",
+        args,
+      },
+    ] as const,
+  mintCount: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...vendingMinterQueryKeys.address(contractAddress)[0],
+        method: "mint_count",
+        args,
+      },
+    ] as const,
+  status: (
+    contractAddress: string | undefined,
+    args?: Record<string, unknown>
+  ) =>
+    [
+      {
+        ...vendingMinterQueryKeys.address(contractAddress)[0],
+        method: "status",
+        args,
+      },
+    ] as const,
 };
 export interface VendingMinterReactQuery<TResponse, TData = TResponse> {
   client: VendingMinterQueryClient | undefined;
-  options?: Omit<UseQueryOptions<TResponse, Error, TData>, "'queryKey' | 'queryFn' | 'initialData'"> & {
+  options?: Omit<
+    UseQueryOptions<TResponse, Error, TData>,
+    "'queryKey' | 'queryFn' | 'initialData'"
+  > & {
     initialData?: undefined;
   };
 }
-export interface VendingMinterStatusQuery<TData> extends VendingMinterReactQuery<StatusResponse, TData> {}
+export interface VendingMinterStatusQuery<TData>
+  extends VendingMinterReactQuery<StatusResponse, TData> {}
 export function useVendingMinterStatusQuery<TData = StatusResponse>({
   client,
-  options
+  options,
 }: VendingMinterStatusQuery<TData>) {
-  return useQuery<StatusResponse, Error, TData>(vendingMinterQueryKeys.status(client?.contractAddress), () => client ? client.status() : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+  return useQuery<StatusResponse, Error, TData>(
+    vendingMinterQueryKeys.status(client?.contractAddress),
+    () =>
+      client ? client.status() : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
-export interface VendingMinterMintCountQuery<TData> extends VendingMinterReactQuery<MintCountResponse, TData> {
+export interface VendingMinterMintCountQuery<TData>
+  extends VendingMinterReactQuery<MintCountResponse, TData> {
   args: {
     address: string;
   };
@@ -64,49 +153,91 @@ export interface VendingMinterMintCountQuery<TData> extends VendingMinterReactQu
 export function useVendingMinterMintCountQuery<TData = MintCountResponse>({
   client,
   args,
-  options
+  options,
 }: VendingMinterMintCountQuery<TData>) {
-  return useQuery<MintCountResponse, Error, TData>(vendingMinterQueryKeys.mintCount(client?.contractAddress, args), () => client ? client.mintCount({
-    address: args.address
-  }) : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+  return useQuery<MintCountResponse, Error, TData>(
+    vendingMinterQueryKeys.mintCount(client?.contractAddress, args),
+    () =>
+      client
+        ? client.mintCount({
+            address: args.address,
+          })
+        : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
-export interface VendingMinterMintPriceQuery<TData> extends VendingMinterReactQuery<MintPriceResponse, TData> {}
+export interface VendingMinterMintPriceQuery<TData>
+  extends VendingMinterReactQuery<MintPriceResponse, TData> {}
 export function useVendingMinterMintPriceQuery<TData = MintPriceResponse>({
   client,
-  options
+  options,
 }: VendingMinterMintPriceQuery<TData>) {
-  return useQuery<MintPriceResponse, Error, TData>(vendingMinterQueryKeys.mintPrice(client?.contractAddress), () => client ? client.mintPrice() : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+  return useQuery<MintPriceResponse, Error, TData>(
+    vendingMinterQueryKeys.mintPrice(client?.contractAddress),
+    () =>
+      client ? client.mintPrice() : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
-export interface VendingMinterStartTimeQuery<TData> extends VendingMinterReactQuery<StartTimeResponse, TData> {}
+export interface VendingMinterStartTimeQuery<TData>
+  extends VendingMinterReactQuery<StartTimeResponse, TData> {}
 export function useVendingMinterStartTimeQuery<TData = StartTimeResponse>({
   client,
-  options
+  options,
 }: VendingMinterStartTimeQuery<TData>) {
-  return useQuery<StartTimeResponse, Error, TData>(vendingMinterQueryKeys.startTime(client?.contractAddress), () => client ? client.startTime() : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+  return useQuery<StartTimeResponse, Error, TData>(
+    vendingMinterQueryKeys.startTime(client?.contractAddress),
+    () =>
+      client ? client.startTime() : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
-export interface VendingMinterMintableNumTokensQuery<TData> extends VendingMinterReactQuery<MintableNumTokensResponse, TData> {}
-export function useVendingMinterMintableNumTokensQuery<TData = MintableNumTokensResponse>({
-  client,
-  options
-}: VendingMinterMintableNumTokensQuery<TData>) {
-  return useQuery<MintableNumTokensResponse, Error, TData>(vendingMinterQueryKeys.mintableNumTokens(client?.contractAddress), () => client ? client.mintableNumTokens() : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+export interface VendingMinterMintableNumTokensQuery<TData>
+  extends VendingMinterReactQuery<MintableNumTokensResponse, TData> {}
+export function useVendingMinterMintableNumTokensQuery<
+  TData = MintableNumTokensResponse
+>({ client, options }: VendingMinterMintableNumTokensQuery<TData>) {
+  return useQuery<MintableNumTokensResponse, Error, TData>(
+    vendingMinterQueryKeys.mintableNumTokens(client?.contractAddress),
+    () =>
+      client
+        ? client.mintableNumTokens()
+        : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
-export interface VendingMinterConfigQuery<TData> extends VendingMinterReactQuery<ConfigResponse, TData> {}
+export interface VendingMinterConfigQuery<TData>
+  extends VendingMinterReactQuery<ConfigResponse, TData> {}
 export function useVendingMinterConfigQuery<TData = ConfigResponse>({
   client,
-  options
+  options,
 }: VendingMinterConfigQuery<TData>) {
-  return useQuery<ConfigResponse, Error, TData>(vendingMinterQueryKeys.config(client?.contractAddress), () => client ? client.config() : Promise.reject(new Error("Invalid client")), { ...options,
-    enabled: !!client && (options?.enabled != undefined ? options.enabled : true)
-  });
+  return useQuery<ConfigResponse, Error, TData>(
+    vendingMinterQueryKeys.config(client?.contractAddress),
+    () =>
+      client ? client.config() : Promise.reject(new Error("Invalid client")),
+    {
+      ...options,
+      enabled:
+        !!client && (options?.enabled != undefined ? options.enabled : true),
+    }
+  );
 }
 export interface VendingMinterBurnRemainingMutation {
   client: VendingMinterClient;
@@ -116,15 +247,21 @@ export interface VendingMinterBurnRemainingMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterBurnRemainingMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterBurnRemainingMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterBurnRemainingMutation>(({
-    client,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.burnRemaining(fee, memo, funds), options);
+export function useVendingMinterBurnRemainingMutation(
+  options?: Omit<
+    UseMutationOptions<
+      ExecuteResult,
+      Error,
+      VendingMinterBurnRemainingMutation
+    >,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, VendingMinterBurnRemainingMutation>(
+    ({ client, args: { fee, memo, funds } = {} }) =>
+      client.burnRemaining(fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterShuffleMutation {
   client: VendingMinterClient;
@@ -134,15 +271,17 @@ export interface VendingMinterShuffleMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterShuffleMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterShuffleMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterShuffleMutation>(({
-    client,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.shuffle(fee, memo, funds), options);
+export function useVendingMinterShuffleMutation(
+  options?: Omit<
+    UseMutationOptions<ExecuteResult, Error, VendingMinterShuffleMutation>,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, VendingMinterShuffleMutation>(
+    ({ client, args: { fee, memo, funds } = {} }) =>
+      client.shuffle(fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterMintForMutation {
   client: VendingMinterClient;
@@ -156,16 +295,17 @@ export interface VendingMinterMintForMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterMintForMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterMintForMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterMintForMutation>(({
-    client,
-    msg,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.mintFor(msg, fee, memo, funds), options);
+export function useVendingMinterMintForMutation(
+  options?: Omit<
+    UseMutationOptions<ExecuteResult, Error, VendingMinterMintForMutation>,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, VendingMinterMintForMutation>(
+    ({ client, msg, args: { fee, memo, funds } = {} }) =>
+      client.mintFor(msg, fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterMintToMutation {
   client: VendingMinterClient;
@@ -178,16 +318,17 @@ export interface VendingMinterMintToMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterMintToMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterMintToMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterMintToMutation>(({
-    client,
-    msg,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.mintTo(msg, fee, memo, funds), options);
+export function useVendingMinterMintToMutation(
+  options?: Omit<
+    UseMutationOptions<ExecuteResult, Error, VendingMinterMintToMutation>,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, VendingMinterMintToMutation>(
+    ({ client, msg, args: { fee, memo, funds } = {} }) =>
+      client.mintTo(msg, fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterUpdatePerAddressLimitMutation {
   client: VendingMinterClient;
@@ -200,18 +341,27 @@ export interface VendingMinterUpdatePerAddressLimitMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterUpdatePerAddressLimitMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterUpdatePerAddressLimitMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterUpdatePerAddressLimitMutation>(({
-    client,
-    msg,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.updatePerAddressLimit(msg, fee, memo, funds), options);
+export function useVendingMinterUpdatePerAddressLimitMutation(
+  options?: Omit<
+    UseMutationOptions<
+      ExecuteResult,
+      Error,
+      VendingMinterUpdatePerAddressLimitMutation
+    >,
+    "mutationFn"
+  >
+) {
+  return useMutation<
+    ExecuteResult,
+    Error,
+    VendingMinterUpdatePerAddressLimitMutation
+  >(
+    ({ client, msg, args: { fee, memo, funds } = {} }) =>
+      client.updatePerAddressLimit(msg, fee, memo, funds),
+    options
+  );
 }
-export interface VendingMinterUpdateTradingStartTimeMutation {
+export interface VendingMinterUpdateStartTradingTimeMutation {
   client: VendingMinterClient;
   args?: {
     fee?: number | StdFee | "auto";
@@ -219,15 +369,25 @@ export interface VendingMinterUpdateTradingStartTimeMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterUpdateTradingStartTimeMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterUpdateTradingStartTimeMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterUpdateTradingStartTimeMutation>(({
-    client,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.updateTradingStartTime(fee, memo, funds), options);
+export function useVendingMinterUpdateStartTradingTimeMutation(
+  options?: Omit<
+    UseMutationOptions<
+      ExecuteResult,
+      Error,
+      VendingMinterUpdateStartTradingTimeMutation
+    >,
+    "mutationFn"
+  >
+) {
+  return useMutation<
+    ExecuteResult,
+    Error,
+    VendingMinterUpdateStartTradingTimeMutation
+  >(
+    ({ client, args: { fee, memo, funds } = {} }) =>
+      client.UpdateStartTradingTime(fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterUpdateStartTimeMutation {
   client: VendingMinterClient;
@@ -238,16 +398,25 @@ export interface VendingMinterUpdateStartTimeMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterUpdateStartTimeMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterUpdateStartTimeMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterUpdateStartTimeMutation>(({
-    client,
-    msg,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.updateStartTime(msg, fee, memo, funds), options);
+export function useVendingMinterUpdateStartTimeMutation(
+  options?: Omit<
+    UseMutationOptions<
+      ExecuteResult,
+      Error,
+      VendingMinterUpdateStartTimeMutation
+    >,
+    "mutationFn"
+  >
+) {
+  return useMutation<
+    ExecuteResult,
+    Error,
+    VendingMinterUpdateStartTimeMutation
+  >(
+    ({ client, msg, args: { fee, memo, funds } = {} }) =>
+      client.updateStartTime(msg, fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterUpdateMintPriceMutation {
   client: VendingMinterClient;
@@ -260,16 +429,25 @@ export interface VendingMinterUpdateMintPriceMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterUpdateMintPriceMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterUpdateMintPriceMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterUpdateMintPriceMutation>(({
-    client,
-    msg,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.updateMintPrice(msg, fee, memo, funds), options);
+export function useVendingMinterUpdateMintPriceMutation(
+  options?: Omit<
+    UseMutationOptions<
+      ExecuteResult,
+      Error,
+      VendingMinterUpdateMintPriceMutation
+    >,
+    "mutationFn"
+  >
+) {
+  return useMutation<
+    ExecuteResult,
+    Error,
+    VendingMinterUpdateMintPriceMutation
+  >(
+    ({ client, msg, args: { fee, memo, funds } = {} }) =>
+      client.updateMintPrice(msg, fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterPurgeMutation {
   client: VendingMinterClient;
@@ -279,15 +457,17 @@ export interface VendingMinterPurgeMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterPurgeMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterPurgeMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterPurgeMutation>(({
-    client,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.purge(fee, memo, funds), options);
+export function useVendingMinterPurgeMutation(
+  options?: Omit<
+    UseMutationOptions<ExecuteResult, Error, VendingMinterPurgeMutation>,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, VendingMinterPurgeMutation>(
+    ({ client, args: { fee, memo, funds } = {} }) =>
+      client.purge(fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterSetWhitelistMutation {
   client: VendingMinterClient;
@@ -300,16 +480,17 @@ export interface VendingMinterSetWhitelistMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterSetWhitelistMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterSetWhitelistMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterSetWhitelistMutation>(({
-    client,
-    msg,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.setWhitelist(msg, fee, memo, funds), options);
+export function useVendingMinterSetWhitelistMutation(
+  options?: Omit<
+    UseMutationOptions<ExecuteResult, Error, VendingMinterSetWhitelistMutation>,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, VendingMinterSetWhitelistMutation>(
+    ({ client, msg, args: { fee, memo, funds } = {} }) =>
+      client.setWhitelist(msg, fee, memo, funds),
+    options
+  );
 }
 export interface VendingMinterMintMutation {
   client: VendingMinterClient;
@@ -319,13 +500,15 @@ export interface VendingMinterMintMutation {
     funds?: Coin[];
   };
 }
-export function useVendingMinterMintMutation(options?: Omit<UseMutationOptions<ExecuteResult, Error, VendingMinterMintMutation>, "mutationFn">) {
-  return useMutation<ExecuteResult, Error, VendingMinterMintMutation>(({
-    client,
-    args: {
-      fee,
-      memo,
-      funds
-    } = {}
-  }) => client.mint(fee, memo, funds), options);
-}
\ No newline at end of file
+export function useVendingMinterMintMutation(
+  options?: Omit<
+    UseMutationOptions<ExecuteResult, Error, VendingMinterMintMutation>,
+    "mutationFn"
+  >
+) {
+  return useMutation<ExecuteResult, Error, VendingMinterMintMutation>(
+    ({ client, args: { fee, memo, funds } = {} }) =>
+      client.mint(fee, memo, funds),
+    options
+  );
+}
diff --git a/ts/src/VendingMinter.types.ts b/ts/src/VendingMinter.types.ts
index f9bcb3e9..406a205f 100644
--- a/ts/src/VendingMinter.types.ts
+++ b/ts/src/VendingMinter.types.ts
@@ -46,7 +46,7 @@ export type ExecuteMsg = {
 } | {
   update_start_time: Timestamp;
 } | {
-  update_trading_start_time: Timestamp | null;
+  update_start_trading_time: Timestamp | null;
 } | {
   update_per_address_limit: {
     per_address_limit: number;
@@ -93,11 +93,11 @@ export interface CollectionParams {
 export interface CollectionInfoForRoyaltyInfoResponse {
   creator: string;
   description: string;
-  explicit_content: boolean;
+  explicit_content?: boolean | null;
   external_link?: string | null;
   image: string;
   royalty_info?: RoyaltyInfoResponse | null;
-  trading_start_time?: Timestamp | null;
+  start_trading_time?: Timestamp | null;
 }
 export interface RoyaltyInfoResponse {
   payment_address: string;


Test patch:
diff --git a/contracts/base-minter/src/integration_tests.rs b/contracts/base-minter/src/integration_tests.rs
index c9189748..b742d18a 100644
--- a/contracts/base-minter/src/integration_tests.rs
+++ b/contracts/base-minter/src/integration_tests.rs
@@ -259,19 +259,19 @@ fn check_mint() {
 }
 
 #[test]
-fn update_trading_start_time() {
+fn update_start_trading_time() {
     let mut router = custom_mock_app();
     let (creator, buyer) = setup_accounts(&mut router);
     let current_block_time = router.block_info().time;
     let (minter_addr, config) = setup_minter_contract(&mut router, &creator, false);
-    let default_trading_start_time =
+    let default_start_trading_time =
         current_block_time.plus_seconds(mock_params().max_trading_offset_secs + 1);
 
     // unauthorized
     let res = router.execute_contract(
         Addr::unchecked(buyer),
         Addr::unchecked(minter_addr.clone()),
-        &ExecuteMsg::UpdateTradingStartTime(Some(default_trading_start_time)),
+        &ExecuteMsg::UpdateStartTradingTime(Some(default_start_trading_time)),
         &[],
     );
     assert!(res.is_err());
@@ -280,7 +280,7 @@ fn update_trading_start_time() {
     let res = router.execute_contract(
         Addr::unchecked(creator.clone()),
         Addr::unchecked(minter_addr.clone()),
-        &ExecuteMsg::UpdateTradingStartTime(Some(Timestamp::from_nanos(0))),
+        &ExecuteMsg::UpdateStartTradingTime(Some(Timestamp::from_nanos(0))),
         &[],
     );
     assert!(res.is_err());
@@ -289,7 +289,7 @@ fn update_trading_start_time() {
     let res = router.execute_contract(
         Addr::unchecked(creator.clone()),
         Addr::unchecked(minter_addr),
-        &ExecuteMsg::UpdateTradingStartTime(Some(default_trading_start_time)),
+        &ExecuteMsg::UpdateStartTradingTime(Some(default_start_trading_time)),
         &[],
     );
     assert!(res.is_ok());
@@ -299,5 +299,5 @@ fn update_trading_start_time() {
         .wrap()
         .query_wasm_smart(config.collection_address, &Sg721QueryMsg::CollectionInfo {})
         .unwrap();
-    assert_eq!(res.trading_start_time, Some(default_trading_start_time));
+    assert_eq!(res.start_trading_time, Some(default_start_trading_time));
 }
diff --git a/contracts/sg721-base/src/integration_tests.rs b/contracts/sg721-base/src/integration_tests.rs
index f68a0638..8422b777 100644
--- a/contracts/sg721-base/src/integration_tests.rs
+++ b/contracts/sg721-base/src/integration_tests.rs
@@ -179,8 +179,8 @@ mod tests {
                     description: "description".to_string(),
                     image: "description".to_string(),
                     external_link: None,
-                    explicit_content: false,
-                    trading_start_time: None,
+                    explicit_content: None,
+                    start_trading_time: None,
                     royalty_info: None,
                 },
             };
@@ -202,7 +202,7 @@ mod tests {
         }
     }
 
-    mod trading_start_time {
+    mod start_trading_time {
         use cosmwasm_std::{Decimal, Empty};
         use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg};
 
@@ -222,7 +222,7 @@ mod tests {
             let default_start_time = mock_init_extension()
                 .start_time
                 .plus_seconds(mock_params().max_trading_offset_secs);
-            assert_eq!(res.trading_start_time, Some(default_start_time));
+            assert_eq!(res.start_trading_time, Some(default_start_time));
 
             // update collection info
             let (mut app, contract) = proper_instantiate();
@@ -295,7 +295,7 @@ mod tests {
                 .query_wasm_smart(contract.clone(), &QueryMsg::CollectionInfo {})
                 .unwrap();
             // check explicit content changed to true
-            assert!(res.explicit_content);
+            assert!(res.explicit_content.unwrap());
 
             // try update royalty_info higher
             let royalty_info: Option<RoyaltyInfoResponse> = Some(RoyaltyInfoResponse {
diff --git a/contracts/vending-minter/src/integration_tests.rs b/contracts/vending-minter/src/integration_tests.rs
index 74651960..59d583f9 100644
--- a/contracts/vending-minter/src/integration_tests.rs
+++ b/contracts/vending-minter/src/integration_tests.rs
@@ -1676,7 +1676,7 @@ fn invalid_trading_time_during_init() {
     msg.collection_params.code_id = sg721_code_id;
     msg.collection_params.info.creator = creator.to_string();
     // make trading time beyond factory max trading start time offset
-    msg.collection_params.info.trading_start_time = Some(
+    msg.collection_params.info.start_trading_time = Some(
         msg.init_msg
             .start_time
             .plus_seconds(params.max_trading_offset_secs + 1),
@@ -1693,11 +1693,11 @@ fn invalid_trading_time_during_init() {
         .source()
         .unwrap()
         .to_string()
-        .contains("InvalidTradingStartTime"));
+        .contains("InvalidStartTradingTime"));
 }
 
 #[test]
-fn update_trading_start_time() {
+fn update_start_trading_time() {
     let mut router = custom_mock_app();
     let (creator, buyer) = setup_accounts(&mut router);
     let num_tokens = 2;
@@ -1708,7 +1708,7 @@ fn update_trading_start_time() {
     let res = router.execute_contract(
         Addr::unchecked(buyer),
         Addr::unchecked(minter_addr.clone()),
-        &ExecuteMsg::UpdateTradingStartTime(Some(Timestamp::from_nanos(GENESIS_MINT_START_TIME))),
+        &ExecuteMsg::UpdateStartTradingTime(Some(Timestamp::from_nanos(GENESIS_MINT_START_TIME))),
         &[],
     );
     assert!(res.is_err());
@@ -1717,7 +1717,7 @@ fn update_trading_start_time() {
     let res = router.execute_contract(
         Addr::unchecked(creator.clone()),
         Addr::unchecked(minter_addr.clone()),
-        &ExecuteMsg::UpdateTradingStartTime(Some(Timestamp::from_nanos(0))),
+        &ExecuteMsg::UpdateStartTradingTime(Some(Timestamp::from_nanos(0))),
         &[],
     );
     assert!(res.is_err());
@@ -1727,7 +1727,7 @@ fn update_trading_start_time() {
     let res = router.execute_contract(
         Addr::unchecked(creator.clone()),
         Addr::unchecked(minter_addr.clone()),
-        &ExecuteMsg::UpdateTradingStartTime(Some(
+        &ExecuteMsg::UpdateStartTradingTime(Some(
             Timestamp::from_nanos(GENESIS_MINT_START_TIME)
                 .plus_seconds(params.max_trading_offset_secs + 100),
         )),
@@ -1739,7 +1739,7 @@ fn update_trading_start_time() {
     let res = router.execute_contract(
         Addr::unchecked(creator.clone()),
         Addr::unchecked(minter_addr),
-        &ExecuteMsg::UpdateTradingStartTime(Some(
+        &ExecuteMsg::UpdateStartTradingTime(Some(
             Timestamp::from_nanos(GENESIS_MINT_START_TIME)
                 .plus_seconds(params.max_trading_offset_secs),
         )),
@@ -1753,7 +1753,7 @@ fn update_trading_start_time() {
         .query_wasm_smart(config.sg721_address, &Sg721QueryMsg::CollectionInfo {})
         .unwrap();
     assert_eq!(
-        res.trading_start_time,
+        res.start_trading_time,
         Some(
             Timestamp::from_nanos(GENESIS_MINT_START_TIME)
                 .plus_seconds(params.max_trading_offset_secs)
diff --git a/e2e/factory_test.go b/e2e/factory_test.go
index bceea6c7..5c0c0f0a 100644
--- a/e2e/factory_test.go
+++ b/e2e/factory_test.go
@@ -20,10 +20,10 @@ func (suite *MarketplaceTestSuite) TestInstantiateFactory() {
 	suite.Require().NoError(err)
 }
 
-func CreateMinterMessage(creator sdk.AccAddress, sg721CodeID uint64, start time.Time, numTokens, limit int, tradingStartTime *time.Time) *CreateMinterMsg {
-	var tradingStartTimeStr *string
-	if tradingStartTime != nil {
-		tradingStartTimeStr = strPtr(fmt.Sprintf("%d", tradingStartTime.UnixNano()))
+func CreateMinterMessage(creator sdk.AccAddress, sg721CodeID uint64, start time.Time, numTokens, limit int, startTradingTime *time.Time) *CreateMinterMsg {
+	var startTradingTimeStr *string
+	if startTradingTime != nil {
+		startTradingTimeStr = strPtr(fmt.Sprintf("%d", startTradingTime.UnixNano()))
 	}
 	return &CreateMinterMsg{
 		InitMsg: VendingMinterInitMsgExtension{
@@ -43,7 +43,7 @@ func CreateMinterMessage(creator sdk.AccAddress, sg721CodeID uint64, start time.
 				Creator:          creator.String(),
 				Description:      "Description",
 				Image:            "https://example.com/image.png",
-				TradingStartTime: tradingStartTimeStr,
+				StartTradingTime: startTradingTimeStr,
 			},
 		},
 	}
@@ -188,7 +188,6 @@ func (suite *MarketplaceTestSuite) TestStartTradingTime() {
 		CreateMinter: CreateMinterMessage(creator.Address, suite.sg721CodeID, suite.startTime, 1000, 10, &invalidTime),
 	}
 	bz, err := json.Marshal(&createMinterMsg)
-	fmt.Println(string(bz))
 	suite.Require().NoError(err)
 
 	_, err = suite.msgServer.ExecuteContract(sdk.WrapSDKContext(ctx), &wasmtypes.MsgExecuteContract{
@@ -223,7 +222,7 @@ func (suite *MarketplaceTestSuite) TestStartTradingTime() {
 
 }
 
-func (suite *MarketplaceTestSuite) TestInvalidTradingStartTime() {
+func (suite *MarketplaceTestSuite) TestInvalidstartTradingTime() {
 	ctx, _ := suite.parentCtx.CacheContext()
 	creator := suite.accounts[0]
 	factoryAddress, err := InstantiateFactory(ctx, suite.msgServer, creator.Address, suite.factoryCodeID, suite.minterCodeID)
diff --git a/e2e/types_test.go b/e2e/types_test.go
index 2a74e20b..36e87518 100644
--- a/e2e/types_test.go
+++ b/e2e/types_test.go
@@ -5,8 +5,8 @@ type CollectionInfo struct {
 	Description      string       `json:"description"`
 	Image            string       `json:"image"`
 	ExternalLink     *string      `json:"external_link"`
-	ExplicitContent  bool         `json:"explicit_content"`
-	TradingStartTime *string      `json:"trading_start_time,omitempty"`
+	ExplicitContent  *bool        `json:"explicit_content"`
+	StartTradingTime *string      `json:"start_trading_time,omitempty"`
 	RoyaltyInfo      *RoyaltyInfo `json:"royalty_info,omitempty"`
 }
 type SG721InstantiateMsg struct {
diff --git a/packages/sg2/src/tests.rs b/packages/sg2/src/tests.rs
index e41aaba5..ce3f8859 100644
--- a/packages/sg2/src/tests.rs
+++ b/packages/sg2/src/tests.rs
@@ -13,8 +13,8 @@ pub fn mock_collection_params() -> CollectionParams {
             description: String::from("Stargaze Monkeys"),
             image: "https://example.com/image.png".to_string(),
             external_link: Some("https://example.com/external.html".to_string()),
-            trading_start_time: None,
-            explicit_content: false,
+            start_trading_time: None,
+            explicit_content: Some(false),
             royalty_info: Some(RoyaltyInfoResponse {
                 payment_address: "creator".to_string(),
                 share: Decimal::percent(10),