Skip to content

Commit 098811d

Browse files
authored
Add genesis config for nft (#351)
* Updated Substrate version * Add genesis config for storage * Remove unnecessary struct * Refactored add_genesis_config section * Add proper handling * Refactor genesis BTreeMap to Vec * Add comments to genesis type aliases
1 parent 0e85957 commit 098811d

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

nft/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ authors = ["Acala Developers"]
88
edition = "2018"
99

1010
[dependencies]
11+
serde = { version = "1.0.111", optional = true }
1112
codec = { package = "parity-scale-codec", version = "1.3.0", default-features = false }
1213
sp-std = { version = "2.0.1", default-features = false }
1314
sp-runtime = { version = "2.0.1", default-features = false }
@@ -22,6 +23,7 @@ sp-core = { version = "2.0.1", default-features = false }
2223
[features]
2324
default = ["std"]
2425
std = [
26+
"serde",
2527
"codec/std",
2628
"sp-std/std",
2729
"sp-runtime/std",

nft/src/lib.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,18 @@ pub type ClassInfoOf<T> =
9191
ClassInfo<<T as Config>::TokenId, <T as frame_system::Config>::AccountId, <T as Config>::ClassData>;
9292
pub type TokenInfoOf<T> = TokenInfo<<T as frame_system::Config>::AccountId, <T as Config>::TokenData>;
9393

94+
pub type GenesisTokenData<T> = (
95+
<T as frame_system::Config>::AccountId, // Token owner
96+
Vec<u8>, // Token metadata
97+
<T as Config>::TokenData,
98+
);
99+
pub type GenesisTokens<T> = (
100+
<T as frame_system::Config>::AccountId, // Token class owner
101+
Vec<u8>, // Token class metadata
102+
<T as Config>::ClassData,
103+
Vec<GenesisTokenData<T>>, // Vector of tokens belonging to this class
104+
);
105+
94106
decl_storage! {
95107
trait Store for Module<T: Config> as NonFungibleToken {
96108
/// Next available class ID.
@@ -109,6 +121,20 @@ decl_storage! {
109121
#[cfg(not(feature = "disable-tokens-by-owner"))]
110122
pub TokensByOwner get(fn tokens_by_owner): double_map hasher(twox_64_concat) T::AccountId, hasher(twox_64_concat) (T::ClassId, T::TokenId) => Option<()>;
111123
}
124+
add_extra_genesis {
125+
config(tokens): Vec<GenesisTokens<T>>;
126+
127+
build(|config: &GenesisConfig<T>| {
128+
config.tokens.iter().for_each(|token_class| {
129+
let class_id = Module::<T>::create_class(&token_class.0, token_class.1.to_vec(), token_class.2.clone())
130+
.expect("Create class cannot fail while building genesis");
131+
for (account_id, token_metadata, token_data) in &token_class.3 {
132+
Module::<T>::mint(&account_id, class_id, token_metadata.to_vec(), token_data.clone())
133+
.expect("Token mint cannot fail during genesis");
134+
}
135+
})
136+
})
137+
}
112138
}
113139

114140
decl_module! {

0 commit comments

Comments
 (0)