@@ -91,6 +91,18 @@ pub type ClassInfoOf<T> =
9191 ClassInfo < <T as Config >:: TokenId , <T as frame_system:: Config >:: AccountId , <T as Config >:: ClassData > ;
9292pub 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+
94106decl_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
114140decl_module ! {
0 commit comments