Smart Contract Examples


Creating Asset and transfer to owner account ownerowner22:

name SIMPLEASSETSCONTRACT = „simpleassets“_n;

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();


1. Please add in your hpp file info about assets structure

TABLE account {
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 container;
std::vector containerf;

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 >> sassets;

2. Searching and using info

name SIMPLEASSETSCONTRACT = „simpleassets“_n;
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

name SIMPLEASSETSCONTRACT = „simpleassets“_n;

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 SIMPLEASSETSCONTRACT = „simpleassets“_n;

name author = get_self();
name from = „lioninjungle“_n;
name to = „ohtigertiger“_n;

uint64_t assetid = 100000000000187;

std::vector assetids;
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 SIMPLEASSETSCONTRACT = „simpleassets“_n;

name author = get_self();
name from = „lioninjungle“_n;
name to = „ohtigertiger“_n;

uint64_t assetid1 = 100000000000187;
uint64_t assetid2 = 100000000000188;

std::vector assetids;
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 SIMPLEASSETSCONTRACT = „simpleassets“_n;

name owner = „lioninjungle“_n;
uint64_t assetid1 = 100000000000187;
uint64_t assetid2 = 100000000000188;

std::vector assetids;
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

name SIMPLEASSETSCONTRACT = „simpleassets“_n;

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

name SIMPLEASSETSCONTRACT = „simpleassets“_n;

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

name SIMPLEASSETSCONTRACT = „simpleassets“_n;

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();