Smart Contract Examples
- Creating Asset and transfer to owner account ownerowner22:
- Creating Asset with requireclaim option for ownerowner22:
- Search asset and get assets info
- Update Asset
- Transfer One Asset
- Transfer two Asset to same receiver with same memo
- Burn Assets
- issuef (fungible) issue created token
- transferf (fungible) by author if authorctrl is enabled
- burnf (fungible) by author if authorctrl is enabled
Creating Asset and transfer to owner account ownerowner22:
name author = get_self();
name category = «weapon»_n;
name owner = «ownerowner22″_n;
string idata = «{\»power\»: 10, \»speed\»: 2.2, \»name\»: \»Magic Sword\» }»;
string mdata = «{\»color\»: \»bluegold\», \»level\»: 3, \»stamina\»: 5, \»img\»: \»https://bit.ly/2MYh8EA\» }»;
action createAsset = action(
permission_level{author, «active»_n},
SIMPLEASSETSCONTRACT,
«create»_n,
std::make_tuple( author, category, owner, idata, mdata, 0 )
);
createAsset.send();
Creating Asset with requireclaim option for ownerowner22:
name SIMPLEASSETSCONTRACT = «simpleassets»_n;
name author = get_self();
name category = «balls»_n;
name owner = «ownerowner22″_n;
string idata = «{\»radius\»: 2, \»weigh\»: 5, \»material\»: \»rubber\», \»name\»: \»Baseball\» }»;
string mdata = «{\»color\»: \»white\», \»decay\»: 99, \»img\»: \»https://i.imgur.com/QoTcosp.png\» }»;
action createAsset = action(
permission_level{author, «active»_n},
SIMPLEASSETSCONTRACT,
«create»_n,
std::make_tuple( author, category, owner, idata, mdata, 1 )
);
createAsset.send();
Search asset and get assets info
1. Please add in your hpp file info about assets structure
uint64_t id;
name author;
asset balance;
uint64_t primary_key()const {
return id;
}
};
typedef eosio::multi_index< "accounts"_n, account > accounts;
TABLE sasset {
uint64_t id;
name owner;
name author;
name category;
string idata;
string mdata;
std::vector
std::vector
auto primary_key() const {
return id;
}
uint64_t by_author() const {
return author.value;
}
};
typedef eosio::multi_index< "sassets"_n, sasset,
eosio::indexed_by< "author"_n, eosio::const_mem_fun
2. Searching and using info
name author = get_self();
name owner = «lioninjungle»_n;
uint64_t assetid = 100000000000187
sassets assets(SIMPLEASSETSCONTRACT, owner.value);
auto idx = assets.find(assetid);
check(idx != assets.end(), «Asset not found or not yours»);
check (idx->author == author, «Asset is not from this author»);
auto idata = json::parse(idx->idata); // for parsing json here is used nlohmann lib
auto mdata = json::parse(idx->mdata); // https://github.com/nlohmann/json
check(mdata[«cd»] < now(), "Not ready yet for usage");
Update Asset
auto mdata = json::parse(idxp->mdata);
mdata[«cd»] = now() + 84600;
name author = get_self();
name owner = «ownerowner22″_n;
uint64_t assetid = 100000000000187;
action saUpdate = action(
permission_level{author, «active»_n},
SIMPLEASSETSCONTRACT,
«update»_n,
std::make_tuple(author, owner, assetid, mdata.dump())
);
saUpdate.send();
Transfer One Asset
name author = get_self();
name from = «lioninjungle»_n;
name to = «ohtigertiger»_n;
uint64_t assetid = 100000000000187;
std::vector
assetids.push_back(assetid);
string memo = «Transfer one asset»;
action saTransfer = action(
permission_level{from, «active»_n},
SIMPLEASSETSCONTRACT,
«transfer»_n,
std::make_tuple(from, to, assetids, memo)
);
saTransfer.send();
Transfer two Asset to same receiver with same memo
name author = get_self();
name from = «lioninjungle»_n;
name to = «ohtigertiger»_n;
uint64_t assetid1 = 100000000000187;
uint64_t assetid2 = 100000000000188;
std::vector
assetids.push_back(assetid1);
assetids.push_back(assetid2);
string memo = «Transfer two asset»
action saTransfer = action(
permission_level{from, «active»_n},
SIMPLEASSETSCONTRACT,
«transfer»_n,
std::make_tuple(from, to, assetids, memo)
);
saTransfer.send();
Burn Assets
name owner = «lioninjungle»_n;
uint64_t assetid1 = 100000000000187;
uint64_t assetid2 = 100000000000188;
std::vector
assetids.push_back(assetid1);
assetids.push_back(assetid2);
string memo = «Transfer two asset»
action saBurn = action(
permission_level{owner, «active»_n},
SIMPLEASSETSCONTRACT,
«transfer»_n,
std::make_tuple(owner, assetids, memo)
);
saBurn.send();
issuef (fungible) issue created token
asset wood;
wood.amount = 100;
wood.symbol = symbol(«WOOD», 0);
name author = get_self();
name to = «lioninjungle»_n;
std::string memo = «WOOD faucet»;
action saRes1 = action(
permission_level{author, «active»_n},
SIMPLEASSETSCONTRACT,
«issuef»_n,
std::make_tuple(to, author, wood, memo)
);
saRes1.send();
transferf (fungible) by author if authorctrl is enabled
asset wood;
wood.amount = 20;
wood.symbol = symbol(«WOOD», 0);
name from = «lioninjungle»_n;
name to = get_self();
name author = get_self();
std::string memo = «best WOOD»;
action saRes1 = action(
permission_level{from, «active»_n},
SIMPLEASSETSCONTRACT,
«transferf»_n,
std::make_tuple(from, to, author, wood, memo)
);
saRes1.send();
burnf (fungible) by author if authorctrl is enabled
asset wood;
wood.amount = 20;
wood.symbol = symbol(«WOOD», 0);
name author = get_self();
name from = «lioninjungle»_n;
std::string memo = «WOOD for oven»;
action saRes1 = action(
permission_level{author, «active»_n},
SIMPLEASSETSCONTRACT,
«burnf»_n,
std::make_tuple(from, author, wood, memo)
);
saRes1.send();