difftreelog
Contract update
in: master
2 files changed
smart_contract/ink-types-node-runtime/.gitignorediffbeforeafterboth--- a/smart_contract/ink-types-node-runtime/.gitignore
+++ b/smart_contract/ink-types-node-runtime/.gitignore
@@ -1,6 +1,6 @@
# Ignore build artifacts
/target/
-/**/target/
+/examples/**/target/
# Ignore backup files creates by cargo fmt.
**/*.rs.bk
@@ -13,4 +13,4 @@
**/.vscode/**
# Ignore history files.
-**/.history/**
+**/.history/**
\ No newline at end of file
smart_contract/ink-types-node-runtime/calls/lib.rsdiffbeforeafterboth1#![cfg_attr(not(feature = "std"), no_std)]23use ink_lang as ink;45#[ink::contract(version = "0.1.0", env = NodeRuntimeTypes)]6mod calls {7 use ink_core::env;8 use ink_prelude::vec::Vec;9 use ink_prelude::*;10 use ink_types_node_runtime::{calls as runtime_calls, NodeRuntimeTypes};11 use scale::{12 Decode,13 Encode,14 };1516 #[derive(Encode, Decode)]17 pub struct NftItemType {18 pub collection: u64,19 pub owner: AccountId,20 pub data: Vec<u8>,21 }2223 /// This simple dummy contract dispatches substrate runtime calls24 #[ink(storage)]25 struct Calls {}2627 impl Calls {28 #[ink(constructor)]29 fn new(&mut self) {}3031 #[ink(message)]32 fn transfer(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {33 env::println(&format!(34 "transfer invoke_runtime params {:?}, {:?}, {:?} ",35 collection_id, item_id, new_owner36 ));3738 let transfer_call = runtime_calls::transfer(collection_id, item_id, new_owner);39 // dispatch the call to the runtime40 let result = self.env().invoke_runtime(&transfer_call);4142 // report result to console43 // NOTE: println should only be used on a development chain)44 env::println(&format!("transfer invoke_runtime result {:?}", result));45 }4647 // SafeTransfer4849 #[ink(message)]50 fn approve(&self, approved: AccountId, collection_id: u64, item_id: u64) {51 env::println(&format!(52 "approve invoke_runtime params {:?}, {:?}, {:?} ",53 approved, collection_id, item_id54 ));5556 let approve_call = runtime_calls::approve(approved, collection_id, item_id);57 // dispatch the call to the runtime58 let result = self.env().invoke_runtime(&approve_call);5960 // report result to console61 // NOTE: println should only be used on a development chain)62 env::println(&format!("approve invoke_runtime result {:?}", result));63 }6465 #[ink(message)]66 fn get_approved(&self, collection_id: u64, item_id: u64) -> Vec<AccountId> {67 let mut key = vec![68 // Precomputed: Twox128("Nft")69 244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,70 // Precomputed: Twox128("ApprovedList")71 86, 163, 236, 207, 221, 111, 252, 227, 254, 40, 142, 38, 40, 224, 192, 18,72 ];7374 let key_ext = vec![75 146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,76 ];77 key.extend_from_slice(&key_ext);7879 // collection id 80 let mut collection_bytes: Vec<u8> = collection_id.to_be_bytes().iter().cloned().collect();81 collection_bytes.reverse();82 key.extend_from_slice(&collection_bytes.as_slice());8384 // item id 85 let mut item_bytes: Vec<u8> = item_id.to_be_bytes().iter().cloned().collect();86 item_bytes.reverse();87 key.extend_from_slice(&item_bytes.as_slice()); 8889 // fetch from runtime storage90 let result = self.env().get_runtime_storage::<Vec<AccountId>>(&key[..]);91 92 match result {93 Some(Ok(accounts)) => { 94 env::println(&format!("get_approved result {:?}", accounts));95 accounts 96 },97 Some(Err(err)) => {98 env::println(&format!("Error reading {:?}", err));99 vec![]100 }101 None => {102 env::println(&format!("No data at key {:?}", key));103 vec![]104 }105 }106 }107108 #[ink(message)]109 fn get_test(&self) -> bool {110 true111 }112113 #[ink(message)]114 fn transfer_from(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {115 env::println(&format!(116 "transfer_from invoke_runtime params {:?}, {:?}, {:?} ",117 collection_id, item_id, new_owner118 ));119120 let transfer_from_call =121 runtime_calls::transfer_from(collection_id, item_id, new_owner);122 // dispatch the call to the runtime123 let result = self.env().invoke_runtime(&transfer_from_call);124125 // report result to console126 // NOTE: println should only be used on a development chain)127 env::println(&format!("transfer_from invoke_runtime result {:?}", result));128 }129130 // SafeTransferFrom131132 #[ink(message)]133 fn create_item(&self, collection_id: u64, properties: Vec<u8>) {134 env::println(&format!(135 "create_item invoke_runtime params {:?}, {:?} ",136 collection_id, properties137 ));138139 let create_item_call = runtime_calls::create_item(collection_id, properties);140 // dispatch the call to the runtime141 let result = self.env().invoke_runtime(&create_item_call);142143 // report result to console144 // NOTE: println should only be used on a development chain)145 env::println(&format!("create_item invoke_runtime result {:?}", result));146 }147148 #[ink(message)]149 fn burn_item(&self, collection_id: u64, item_id: u64) {150 env::println(&format!(151 "burn_item invoke_runtime params {:?}, {:?}",152 collection_id, item_id153 ));154155 let burn_item_call = runtime_calls::burn_item(collection_id, item_id);156 // dispatch the call to the runtime157 let result = self.env().invoke_runtime(&burn_item_call);158159 // report result to console160 // NOTE: println should only be used on a development chain)161 env::println(&format!("burn_item invoke_runtime result {:?}", result));162 }163164 // GetOwner165 #[ink(message)]166 fn get_owner(&self, collection_id: u64, token_id: u64) -> AccountId {167 let mut key = vec![168 // Precomputed: Twox128("Nft")169 244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,170 // Precomputed: Twox128("ItemList")171 116, 232, 175, 181, 237, 113, 149, 125, 139, 77, 55, 251, 115, 253, 29, 240,172 ];173174 let key_ext = vec![175 146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,176 ];177 key.extend_from_slice(&key_ext);178179 // collection id 180 let mut collection_bytes: Vec<u8> = collection_id.to_be_bytes().iter().cloned().collect();181 collection_bytes.reverse();182 key.extend_from_slice(&collection_bytes.as_slice());183184 // token id 185 let mut token_bytes: Vec<u8> = token_id.to_be_bytes().iter().cloned().collect();186 token_bytes.reverse();187 key.extend_from_slice(&token_bytes.as_slice()); 188189 // fetch from runtime storage 190 let result = self.env().get_runtime_storage::<NftItemType>(&key[..]);191 192 match result {193 Some(Ok(item)) => { 194 env::println(&format!("get_owner result {:?}", item.owner));195 item.owner196 },197 Some(Err(err)) => {198 env::println(&format!("Error reading {:?}", err));199 AccountId::from([0u8; 32])200 }201 None => {202 env::println(&format!("No data at key {:?}", key));203 AccountId::from([0u8; 32])204 }205 }206 }207208 #[ink(message)]209 fn get_balance_of(&self, collection_id: u64, owner: AccountId) -> u64 {210 let mut key = vec![211 // Precomputed: Twox128("Nft")212 244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,213 // Precomputed: Twox128("Balance")214 78, 168, 234, 12, 1, 250, 164, 43, 110, 179, 68, 168, 92, 71, 179, 135,215 ];216217 let key_ext = vec![218 15, 97, 136, 0, 76, 187, 168, 28, 239, 85, 170, 23, 77, 81, 248, 159,219 ];220 key.extend_from_slice(&key_ext);221222 // collection id 223 let mut collection_bytes: Vec<u8> = collection_id.to_be_bytes().iter().cloned().collect();224 collection_bytes.reverse();225 key.extend_from_slice(&collection_bytes.as_slice());226227 // owner228 key.extend_from_slice(&owner.encode()); 229230 // fetch from runtime storage231 let result = self.env().get_runtime_storage::<u64>(&key[..]);232 233 match result {234 Some(Ok(balance)) => { 235 env::println(&format!("get_balance_of result {:?}", balance));236 balance237 },238 Some(Err(err)) => {239 env::println(&format!("Error reading {:?}", err));240 0241 }242 None => {243 env::println(&format!("No data at key {:?}", key));244 0245 }246 }247 }248 }249}1#![cfg_attr(not(feature = "std"), no_std)]23use ink_lang as ink;45#[ink::contract(version = "0.1.0", env = NodeRuntimeTypes)]6mod calls {7 use ink_core::env;8 use ink_prelude::vec::Vec;9 use ink_prelude::*;10 use ink_types_node_runtime::{calls as runtime_calls, NodeRuntimeTypes};11 use scale::{12 Decode,13 Encode,14 };1516 #[derive(Encode, Decode)]17 pub struct NftItemType {18 pub collection: u64,19 pub owner: AccountId,20 pub data: Vec<u8>,21 }2223 /// This simple dummy contract dispatches substrate runtime calls24 #[ink(storage)]25 struct Calls {}2627 impl Calls {28 #[ink(constructor)]29 fn new(&mut self) {}3031 #[ink(message)]32 fn transfer(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {33 env::println(&format!(34 "transfer invoke_runtime params {:?}, {:?}, {:?} ",35 collection_id, item_id, new_owner36 ));3738 let transfer_call = runtime_calls::transfer(collection_id, item_id, new_owner);39 // dispatch the call to the runtime40 let result = self.env().invoke_runtime(&transfer_call);4142 // report result to console43 // NOTE: println should only be used on a development chain)44 env::println(&format!("transfer invoke_runtime result {:?}", result));45 }4647 // SafeTransfer4849 #[ink(message)]50 fn approve(&self, approved: AccountId, collection_id: u64, item_id: u64) {51 env::println(&format!(52 "approve invoke_runtime params {:?}, {:?}, {:?} ",53 approved, collection_id, item_id54 ));5556 let approve_call = runtime_calls::approve(approved, collection_id, item_id);57 // dispatch the call to the runtime58 let result = self.env().invoke_runtime(&approve_call);5960 // report result to console61 // NOTE: println should only be used on a development chain)62 env::println(&format!("approve invoke_runtime result {:?}", result));63 }6465 #[ink(message)]66 fn get_approved(&self, collection_id: u64, item_id: u64) -> Vec<AccountId> {67 let mut key = vec![68 // Precomputed: Twox128("Nft")69 244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,70 // Precomputed: Twox128("ApprovedList")71 86, 163, 236, 207, 221, 111, 252, 227, 254, 40, 142, 38, 40, 224, 192, 18,72 ];7374 let key_ext = vec![75 146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,76 ];77 key.extend_from_slice(&key_ext);7879 // collection id 80 let mut collection_bytes: Vec<u8> = collection_id.to_be_bytes().iter().cloned().collect();81 collection_bytes.reverse();82 key.extend_from_slice(&collection_bytes.as_slice());8384 // item id 85 let mut item_bytes: Vec<u8> = item_id.to_be_bytes().iter().cloned().collect();86 item_bytes.reverse();87 key.extend_from_slice(&item_bytes.as_slice()); 8889 // fetch from runtime storage90 let result = self.env().get_runtime_storage::<Vec<AccountId>>(&key[..]);91 92 match result {93 Some(Ok(accounts)) => { 94 env::println(&format!("get_approved result {:?}", accounts));95 accounts 96 },97 Some(Err(err)) => {98 env::println(&format!("Error reading {:?}", err));99 vec![]100 }101 None => {102 env::println(&format!("No data at key {:?}", key));103 vec![]104 }105 }106 }107108 #[ink(message)]109 fn transfer_from(&self, collection_id: u64, item_id: u64, new_owner: AccountId) {110 env::println(&format!(111 "transfer_from invoke_runtime params {:?}, {:?}, {:?} ",112 collection_id, item_id, new_owner113 ));114115 let transfer_from_call =116 runtime_calls::transfer_from(collection_id, item_id, new_owner);117 // dispatch the call to the runtime118 let result = self.env().invoke_runtime(&transfer_from_call);119120 // report result to console121 // NOTE: println should only be used on a development chain)122 env::println(&format!("transfer_from invoke_runtime result {:?}", result));123 }124125 // SafeTransferFrom126127 #[ink(message)]128 fn create_item(&self, collection_id: u64, properties: Vec<u8>) {129 env::println(&format!(130 "create_item invoke_runtime params {:?}, {:?} ",131 collection_id, properties132 ));133134 let create_item_call = runtime_calls::create_item(collection_id, properties);135 // dispatch the call to the runtime136 let result = self.env().invoke_runtime(&create_item_call);137138 // report result to console139 // NOTE: println should only be used on a development chain)140 env::println(&format!("create_item invoke_runtime result {:?}", result));141 }142143 #[ink(message)]144 fn burn_item(&self, collection_id: u64, item_id: u64) {145 env::println(&format!(146 "burn_item invoke_runtime params {:?}, {:?}",147 collection_id, item_id148 ));149150 let burn_item_call = runtime_calls::burn_item(collection_id, item_id);151 // dispatch the call to the runtime152 let result = self.env().invoke_runtime(&burn_item_call);153154 // report result to console155 // NOTE: println should only be used on a development chain)156 env::println(&format!("burn_item invoke_runtime result {:?}", result));157 }158159 // GetOwner160 #[ink(message)]161 fn get_owner(&self, collection_id: u64, token_id: u64) -> AccountId {162 let mut key = vec![163 // Precomputed: Twox128("Nft")164 244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,165 // Precomputed: Twox128("ItemList")166 116, 232, 175, 181, 237, 113, 149, 125, 139, 77, 55, 251, 115, 253, 29, 240,167 ];168169 let key_ext = vec![170 146, 214, 40, 117, 20, 27, 72, 25, 232, 204, 175, 194, 112, 244, 140, 100,171 ];172 key.extend_from_slice(&key_ext);173174 // collection id 175 let mut collection_bytes: Vec<u8> = collection_id.to_be_bytes().iter().cloned().collect();176 collection_bytes.reverse();177 key.extend_from_slice(&collection_bytes.as_slice());178179 // token id 180 let mut token_bytes: Vec<u8> = token_id.to_be_bytes().iter().cloned().collect();181 token_bytes.reverse();182 key.extend_from_slice(&token_bytes.as_slice()); 183184 // fetch from runtime storage 185 let result = self.env().get_runtime_storage::<NftItemType>(&key[..]);186 187 match result {188 Some(Ok(item)) => { 189 env::println(&format!("get_owner result {:?}", item.owner));190 item.owner191 },192 Some(Err(err)) => {193 env::println(&format!("Error reading {:?}", err));194 AccountId::from([0u8; 32])195 }196 None => {197 env::println(&format!("No data at key {:?}", key));198 AccountId::from([0u8; 32])199 }200 }201 }202203 #[ink(message)]204 fn get_balance_of(&self, collection_id: u64, owner: AccountId) -> u64 {205 let mut key = vec![206 // Precomputed: Twox128("Nft")207 244, 63, 251, 230, 30, 244, 104, 116, 157, 54, 23, 172, 26, 99, 196, 183,208 // Precomputed: Twox128("Balance")209 78, 168, 234, 12, 1, 250, 164, 43, 110, 179, 68, 168, 92, 71, 179, 135,210 ];211212 let key_ext = vec![213 15, 97, 136, 0, 76, 187, 168, 28, 239, 85, 170, 23, 77, 81, 248, 159,214 ];215 key.extend_from_slice(&key_ext);216217 // collection id 218 let mut collection_bytes: Vec<u8> = collection_id.to_be_bytes().iter().cloned().collect();219 collection_bytes.reverse();220 key.extend_from_slice(&collection_bytes.as_slice());221222 // owner223 key.extend_from_slice(&owner.encode()); 224225 // fetch from runtime storage226 let result = self.env().get_runtime_storage::<u64>(&key[..]);227 228 match result {229 Some(Ok(balance)) => { 230 env::println(&format!("get_balance_of result {:?}", balance));231 balance232 },233 Some(Err(err)) => {234 env::println(&format!("Error reading {:?}", err));235 0236 }237 None => {238 env::println(&format!("No data at key {:?}", key));239 0240 }241 }242 }243 }244}