Skip to content

Commit 5793545

Browse files
authored
Merge pull request #105 from public-awesome/release/v0.1.13
new UniversalNftExtension
2 parents eb47798 + e943d01 commit 5793545

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

contracts/ics721-base-tester/src/contract.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ pub fn execute(
6565

6666
mod receive_callbacks {
6767
use cosmwasm_std::{ensure_eq, from_json, DepsMut, Empty, MessageInfo, Response};
68-
use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension};
68+
use cw721::DefaultOptionalCollectionExtension;
69+
use ics721::state::UniversalDefaultOptionalNftExtension;
6970
use ics721_types::{
7071
ibc_types::NonFungibleTokenPacketData,
7172
types::{Ics721AckCallbackMsg, Ics721ReceiveCallbackMsg, Ics721Status},
@@ -135,7 +136,7 @@ mod receive_callbacks {
135136
.query_wasm_smart::<cw721::msg::OwnerOfResponse>(
136137
nft_contract,
137138
&cw721::msg::Cw721QueryMsg::<
138-
DefaultOptionalNftExtension,
139+
UniversalDefaultOptionalNftExtension,
139140
DefaultOptionalCollectionExtension,
140141
Empty,
141142
>::OwnerOf {
@@ -182,7 +183,7 @@ mod receive_callbacks {
182183
.query_wasm_smart::<cw721::msg::OwnerOfResponse>(
183184
nft_contract,
184185
&cw721::msg::Cw721QueryMsg::<
185-
DefaultOptionalNftExtension,
186+
UniversalDefaultOptionalNftExtension,
186187
DefaultOptionalCollectionExtension,
187188
Empty,
188189
>::OwnerOf {

packages/ics721/src/ibc_packet_receive.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,8 @@ pub(crate) fn receive_ibc_packet(
6262
load_nft_contract_for_class_id(deps.storage, local_class_id.to_string())
6363
.map_err(|_| ContractError::NoNftContractForClassId(local_class_id.to_string()))
6464
} else {
65-
let nft_contract =
66-
match query_nft_contract_for_class_id(deps.storage, local_class_id.clone()) {
67-
Ok(nft_contract) => nft_contract,
68-
Err(_) => None, // not found, occurs on initial transfer when we don't have the contract address
69-
};
65+
let nft_contract = query_nft_contract_for_class_id(deps.storage, local_class_id.clone())
66+
.unwrap_or_default();
7067
match nft_contract {
7168
Some(nft_contract) => Ok(nft_contract),
7269
None => {

packages/ics721/src/state.rs

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use cosmwasm_schema::{cw_serde, schemars::JsonSchema};
22
use cosmwasm_std::{Addr, Binary, ContractInfoResponse, Empty, Timestamp};
3-
use cw721::{DefaultOptionalCollectionExtension, DefaultOptionalNftExtension};
3+
use cw721::{state::Trait, DefaultOptionalCollectionExtension};
44
use cw_pause_once::PauseOrchestrator;
55
use cw_storage_plus::{Index, IndexList, IndexedMap, Item, Map, UniqueIndex};
66
use serde::{Deserialize, Serialize};
@@ -79,7 +79,22 @@ pub struct UniversalCollectionInfoResponse {
7979
pub struct UniversalNftInfoResponse {
8080
pub token_uri: Option<String>,
8181

82-
pub extension: DefaultOptionalNftExtension,
82+
pub extension: UniversalDefaultOptionalNftExtension,
83+
}
84+
85+
pub type UniversalDefaultOptionalNftExtension = Option<UniversalNftExtension>;
86+
87+
#[derive(Serialize, Deserialize, Default, Clone, Debug, PartialEq)]
88+
pub struct UniversalNftExtension {
89+
pub image: Option<String>,
90+
pub image_data: Option<String>,
91+
pub external_url: Option<String>,
92+
pub description: Option<String>,
93+
pub name: Option<String>,
94+
pub attributes: Option<Vec<Trait>>,
95+
pub background_color: Option<String>,
96+
pub animation_url: Option<String>,
97+
pub youtube_url: Option<String>,
8398
}
8499

85100
/// Collection data send by ICS721 on source chain. It is an optional class data for interchain transfer to target chain.
@@ -133,20 +148,21 @@ impl<'a> IndexList<ClassIdInfo> for ClassIdInfoIndexes<'a> {
133148
#[cfg(test)]
134149
mod tests {
135150
use cosmwasm_std::{from_json, to_json_binary};
136-
use cw721::{DefaultOptionalNftExtension, NftExtension};
151+
152+
use crate::state::{UniversalDefaultOptionalNftExtension, UniversalNftExtension};
137153

138154
use super::UniversalAllNftInfoResponse;
139155

140156
#[test]
141157
fn test_universal_deserialize() {
142-
let start = cw721::msg::AllNftInfoResponse::<DefaultOptionalNftExtension> {
158+
let start = cw721::msg::AllNftInfoResponse::<UniversalDefaultOptionalNftExtension> {
143159
access: cw721::msg::OwnerOfResponse {
144160
owner: "foo".to_string(),
145161
approvals: vec![],
146162
},
147163
info: cw721::msg::NftInfoResponse {
148164
token_uri: None,
149-
extension: Some(NftExtension {
165+
extension: Some(UniversalNftExtension {
150166
..Default::default()
151167
}),
152168
},
@@ -158,7 +174,7 @@ mod tests {
158174
assert_eq!(end.info.token_uri, None);
159175
assert_eq!(
160176
end.info.extension,
161-
Some(NftExtension {
177+
Some(UniversalNftExtension {
162178
..Default::default()
163179
})
164180
)

0 commit comments

Comments
 (0)