Skip to content

Commit 1db0bb6

Browse files
committed
use cw721 for updating token metadata
1 parent 5cf7da8 commit 1db0bb6

File tree

7 files changed

+31
-40
lines changed

7 files changed

+31
-40
lines changed

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

contracts/collections/sg721-base/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use cw_utils::PaymentError;
33
use thiserror::Error;
44
use url::ParseError;
55

6-
#[derive(Error, Debug)]
6+
#[derive(Error, Debug, PartialEq)]
77
pub enum ContractError {
88
#[error("{0}")]
99
Std(#[from] StdError),

contracts/collections/sg721-nt/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub mod entry {
6464
deps: DepsMut,
6565
env: Env,
6666
info: MessageInfo,
67-
msg: ExecuteMsg<DefaultOptionalNftExtension>,
67+
msg: ExecuteMsg<DefaultOptionalNftExtensionMsg>,
6868
) -> Result<Response, sg721_base::ContractError> {
6969
match msg {
7070
ExecuteMsg::Burn { token_id } => Sg721NonTransferableContract::default()

contracts/collections/sg721-nt/src/msg.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use sg721::{RoyaltyInfoResponse, UpdateCollectionInfoMsg};
66
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
77
#[serde(rename_all = "snake_case")]
88
#[allow(deprecated)]
9-
pub enum ExecuteMsg<T> {
9+
pub enum ExecuteMsg<TNftExtensionMsg> {
1010
/// Mint a new NFT, can only be called by the contract minter
1111
Mint {
1212
/// Unique ID of the NFT
@@ -18,7 +18,7 @@ pub enum ExecuteMsg<T> {
1818
/// Metadata JSON Schema
1919
token_uri: Option<String>,
2020
/// Any custom extension used by this contract
21-
extension: T,
21+
extension: TNftExtensionMsg,
2222
},
2323
/// Burn an NFT the sender has access to
2424
Burn { token_id: String },

contracts/collections/sg721-updatable/src/contract.rs

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@ use cosmwasm_std::{DepsMut, Env, Event, MessageInfo};
99
use cw2::set_contract_version;
1010
use cw721::msg::Cw721MigrateMsg;
1111
use cw721::{
12-
DefaultOptionalCollectionExtension, DefaultOptionalCollectionExtensionMsg,
13-
DefaultOptionalNftExtension, DefaultOptionalNftExtensionMsg,
12+
traits::Cw721Execute, DefaultOptionalCollectionExtension,
13+
DefaultOptionalCollectionExtensionMsg, DefaultOptionalNftExtension,
14+
DefaultOptionalNftExtensionMsg,
1415
};
1516
use semver::Version;
1617
use sg721::InstantiateMsg;
@@ -115,19 +116,12 @@ pub fn execute_freeze_token_metadata(
115116
#[allow(deprecated)]
116117
pub fn execute_update_token_metadata(
117118
deps: DepsMut,
118-
_env: Env,
119+
env: Env,
119120
info: MessageInfo,
120121
token_id: String,
121122
token_uri: Option<String>,
122123
) -> Result<Response, ContractError> {
123124
nonpayable(&info)?;
124-
// Check if sender is creator
125-
let owner = deps.api.addr_validate(info.sender.as_ref())?;
126-
let collection_info: CollectionInfoResponse =
127-
Sg721UpdatableContract::default().query_collection_info(deps.as_ref())?;
128-
if owner != collection_info.creator {
129-
return Err(ContractError::Base(Unauthorized {}));
130-
}
131125

132126
// Check if token metadata is frozen
133127
let frozen = FROZEN_TOKEN_METADATA.load(deps.storage)?;
@@ -142,16 +136,14 @@ pub fn execute_update_token_metadata(
142136
}
143137

144138
// Update token metadata
145-
Sg721UpdatableContract::default()
146-
.config
147-
.nft_info
148-
.update(deps.storage, &token_id, |token| match token {
149-
Some(mut token_info) => {
150-
token_info.token_uri = token_uri.clone();
151-
Ok(token_info)
152-
}
153-
None => Err(ContractError::TokenIdNotFound {}),
154-
})?;
139+
Sg721UpdatableContract::default().parent.update_nft_info(
140+
deps,
141+
&env,
142+
&info,
143+
token_id.clone(),
144+
token_uri.clone().into(),
145+
None,
146+
)?;
155147

156148
let mut event = Event::new("update_update_token_metadata")
157149
.add_attribute("sender", info.sender)
@@ -258,6 +250,7 @@ mod tests {
258250
from_json, to_json_binary, ContractInfoResponse, ContractResult, Empty, OwnedDeps, Querier,
259251
QuerierResult, QueryRequest, SystemError, SystemResult, WasmQuery,
260252
};
253+
use cw721::error::Cw721ContractError;
261254
use cw721_base::traits::Cw721Query;
262255
use sg721::{CollectionInfo, InstantiateMsg};
263256
use std::marker::PhantomData;
@@ -351,11 +344,8 @@ mod tests {
351344
token_id: "wrong-token-id".to_string(),
352345
token_uri: updated_token_uri.clone(),
353346
};
354-
let err = execute(deps.as_mut(), mock_env(), info.clone(), update_msg).unwrap_err();
355-
assert_eq!(
356-
err.to_string(),
357-
ContractError::TokenIdNotFound {}.to_string()
358-
);
347+
// throws not found error
348+
execute(deps.as_mut(), mock_env(), info.clone(), update_msg).unwrap_err();
359349

360350
// Update token metadata fails because sent by hacker
361351
let update_msg = ExecuteMsg::UpdateTokenMetadata {
@@ -365,8 +355,8 @@ mod tests {
365355
let hacker_info = mock_info(HACKER, &[]);
366356
let err = execute(deps.as_mut(), mock_env(), hacker_info, update_msg.clone()).unwrap_err();
367357
assert_eq!(
368-
err.to_string(),
369-
ContractError::Base(Unauthorized {}).to_string()
358+
err,
359+
ContractError::Cw721(Cw721ContractError::NotCreator {})
370360
);
371361

372362
// Update token metadata

contracts/collections/sg721-updatable/src/error.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
use cosmwasm_std::StdError;
2+
use cw721::error::Cw721ContractError;
23
use cw_utils::PaymentError;
34
use sg1::FeeError;
45
use thiserror::Error;
56

6-
#[derive(Error, Debug)]
7+
#[derive(Error, Debug, PartialEq)]
78
pub enum ContractError {
9+
#[error("{0}")]
10+
Cw721(#[from] Cw721ContractError),
11+
812
#[error("{0}")]
913
Std(#[from] StdError),
1014

@@ -17,9 +21,6 @@ pub enum ContractError {
1721
#[error("{0}")]
1822
Fee(#[from] FeeError),
1923

20-
#[error("TokenIdNotFound")]
21-
TokenIdNotFound {},
22-
2324
#[error("TokenMetadataFrozen")]
2425
TokenMetadataFrozen {},
2526

packages/sg721/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ impl<TNftExtensionMsg, TCollectionExtensionMsg, TExtensionMsg>
200200
extension,
201201
} => Cw721ExecuteMsg::UpdateNftInfo {
202202
token_id,
203-
token_uri,
203+
token_uri: token_uri.into(),
204204
extension,
205205
},
206206
ExecuteMsg::SetWithdrawAddress { address } => {

0 commit comments

Comments
 (0)