From 7fe77f835e87cb9b5e586822fcedcaeda6272c7d Mon Sep 17 00:00:00 2001 From: Vincent Mwendwa Date: Tue, 16 Apr 2019 13:45:06 +0300 Subject: [PATCH] removed unnecessary comments from smtsbusiness.cpp --- sc/smtsbusiness/smtsbusiness.abi | 272 ------------------------------ sc/smtsbusiness/smtsbusiness.cpp | 24 +-- sc/smtsbusiness/smtsbusiness.wasm | Bin 30278 -> 0 bytes 3 files changed, 4 insertions(+), 292 deletions(-) delete mode 100644 sc/smtsbusiness/smtsbusiness.abi delete mode 100755 sc/smtsbusiness/smtsbusiness.wasm diff --git a/sc/smtsbusiness/smtsbusiness.abi b/sc/smtsbusiness/smtsbusiness.abi deleted file mode 100644 index 7a51b24..0000000 --- a/sc/smtsbusiness/smtsbusiness.abi +++ /dev/null @@ -1,272 +0,0 @@ -{ - "____comment": "This file was generated with eosio-abigen. DO NOT EDIT ", - "version": "eosio::abi/1.1", - "types": [], - "structs": [ - { - "name": "Account", - "base": "", - "fields": [ - { - "name": "balance", - "type": "asset" - } - ] - }, - { - "name": "AssetStats", - "base": "", - "fields": [ - { - "name": "supply", - "type": "asset" - }, - { - "name": "max_supply", - "type": "asset" - }, - { - "name": "issuer", - "type": "name" - } - ] - }, - { - "name": "CommodityUnitPrice", - "base": "", - "fields": [ - { - "name": "comm_name", - "type": "symbol_code" - }, - { - "name": "unit_price", - "type": "asset" - } - ] - }, - { - "name": "CreateCmmdty", - "base": "", - "fields": [ - { - "name": "issuer", - "type": "name" - }, - { - "name": "max_supply", - "type": "asset" - }, - { - "name": "unit_price", - "type": "asset" - } - ] - }, - { - "name": "CreateToken", - "base": "", - "fields": [ - { - "name": "max_supply", - "type": "asset" - } - ] - }, - { - "name": "DeleteData", - "base": "", - "fields": [] - }, - { - "name": "Fulfill", - "base": "", - "fields": [ - { - "name": "merchant_acct", - "type": "name" - }, - { - "name": "ir_id", - "type": "uint64" - } - ] - }, - { - "name": "InvRequest", - "base": "", - "fields": [ - { - "name": "from", - "type": "name" - }, - { - "name": "to", - "type": "name" - }, - { - "name": "quantity", - "type": "asset" - } - ] - }, - { - "name": "InventoryReq", - "base": "", - "fields": [ - { - "name": "id", - "type": "uint64" - }, - { - "name": "from", - "type": "name" - }, - { - "name": "to", - "type": "name" - }, - { - "name": "quantity", - "type": "asset" - }, - { - "name": "unit_price", - "type": "asset" - }, - { - "name": "status", - "type": "string" - } - ] - }, - { - "name": "Issue", - "base": "", - "fields": [ - { - "name": "to", - "type": "name" - }, - { - "name": "quantity", - "type": "asset" - }, - { - "name": "memo", - "type": "string" - } - ] - }, - { - "name": "Pay", - "base": "", - "fields": [ - { - "name": "customerAcct", - "type": "name" - }, - { - "name": "irId", - "type": "uint64" - } - ] - }, - { - "name": "Transfer", - "base": "", - "fields": [ - { - "name": "from", - "type": "name" - }, - { - "name": "to", - "type": "name" - }, - { - "name": "quantity", - "type": "asset" - }, - { - "name": "memo", - "type": "string" - } - ] - } - ], - "actions": [ - { - "name": "createcomm", - "type": "CreateCmmdty", - "ricardian_contract": "" - }, - { - "name": "createcurr", - "type": "CreateToken", - "ricardian_contract": "" - }, - { - "name": "deletedata", - "type": "DeleteData", - "ricardian_contract": "" - }, - { - "name": "fulfill", - "type": "Fulfill", - "ricardian_contract": "" - }, - { - "name": "inventoryreq", - "type": "InvRequest", - "ricardian_contract": "" - }, - { - "name": "issue", - "type": "Issue", - "ricardian_contract": "" - }, - { - "name": "pay", - "type": "Pay", - "ricardian_contract": "" - }, - { - "name": "transfer", - "type": "Transfer", - "ricardian_contract": "" - } - ], - "tables": [ - { - "name": "accounts", - "type": "Account", - "index_type": "i64", - "key_names": [], - "key_types": [] - }, - { - "name": "cunitprices", - "type": "CommodityUnitPrice", - "index_type": "i64", - "key_names": [], - "key_types": [] - }, - { - "name": "inventreqs", - "type": "InventoryReq", - "index_type": "i64", - "key_names": [], - "key_types": [] - }, - { - "name": "stat", - "type": "AssetStats", - "index_type": "i64", - "key_names": [], - "key_types": [] - } - ], - "ricardian_clauses": [], - "variants": [] -} \ No newline at end of file diff --git a/sc/smtsbusiness/smtsbusiness.cpp b/sc/smtsbusiness/smtsbusiness.cpp index 1df9534..0d21b48 100644 --- a/sc/smtsbusiness/smtsbusiness.cpp +++ b/sc/smtsbusiness/smtsbusiness.cpp @@ -5,7 +5,6 @@ namespace SmtsBusiness { void SmtsBusiness::CreateToken(const asset& max_supply) { - // Currency assets can only be created by the owner of this contract require_auth(_self); asset yelos = {0, symbol{"YELOS", 4}}; @@ -14,7 +13,6 @@ namespace SmtsBusiness { action{ permission_level{_self,"active"_n}, - // account that owns the contract. In this case, the name of the contract == name of the account _self, "issue"_n, std::make_tuple(_self, max_supply, std::string{"Created Tokens Issued to Token Owner"}) @@ -25,12 +23,10 @@ namespace SmtsBusiness { require_auth(issuer); - // Accounts curr_acc(_self, issuer); Stats commodityStats(_self, unit_price.symbol.code().raw()); auto existing_stats_iter = commodityStats.find(unit_price.symbol.code().raw()); eosio_assert(existing_stats_iter != commodityStats.end(), "specified currency doesn't exist"); - // auto existing = statsdata.find(asset_sym.code().raw()); Create(issuer, max_supply); CommodityUnitPrices commUnitPrices(_self, issuer.value); auto existing_smrts_iter = commUnitPrices.find(max_supply.symbol.code().raw()); @@ -44,7 +40,6 @@ namespace SmtsBusiness { action { permission_level {issuer,"active"_n}, - // account that owns the contract. In this case, the name of the contract == name of the account _self, "issue"_n, std::make_tuple(issuer, max_supply, std::string{"Created Tokens Issued to Token Owner"}) @@ -58,7 +53,6 @@ namespace SmtsBusiness { } } - // Define new configuration for a new asset void SmtsBusiness::Create(const name& issuer, const asset& max_supply) { auto asset_sym = max_supply.symbol; @@ -84,14 +78,10 @@ namespace SmtsBusiness { eosio_assert(asset_sym.is_valid(), "invalid symbol name"); eosio_assert(memo.size() <= 256, "memo has more than 256 bytes"); - // auto asset_sym_val = asset_sym.raw(); - // code --> _self --> contract - // scope --> _self.value --> contract Stats tokenStats(_self, asset_sym.code().raw()); auto existing = tokenStats.find(asset_sym.code().raw()); eosio_assert(existing != tokenStats.end(), "asset with symbol does not exist, create token before Issue"); - // An asset can only be Issued by the creator. require_auth(existing->issuer); eosio_assert(quantity.is_valid(), "invalid quantity"); eosio_assert(quantity.amount > 0, "must Issue positive quantity"); @@ -108,7 +98,6 @@ namespace SmtsBusiness { if(to != existing->issuer ) { action inline_action = action( permission_level{existing->issuer,"active"_n}, - // account that owns the contract. In this case, the name of the contract == name of the account _self, "transfer"_n, std::make_tuple(existing->issuer, to, quantity, memo) @@ -150,14 +139,11 @@ namespace SmtsBusiness { auto rcvr_acc = accounts.find(value.symbol.raw()); if(rcvr_acc == accounts.end()) { - // this only happens when the account 'to' is receiving the asset for the - // first time. - // to == from - accounts.emplace(payer, [&](auto& a ) { + accounts.emplace(payer, [&](auto& a) { a.balance = value; }); } else { - accounts.modify(rcvr_acc, payer, [&](auto& a ) { + accounts.modify(rcvr_acc, payer, [&](auto& a) { a.balance += value; }); } @@ -167,7 +153,7 @@ namespace SmtsBusiness { Accounts accounts(_self, payer.value); const auto& sndr_acc = accounts.get(value.symbol.raw(), "no balance object found"); - eosio_assert(sndr_acc.balance.amount >= value.amount, "overdrawn balance" ); + eosio_assert(sndr_acc.balance.amount >= value.amount, "overdrawn balance"); if(sndr_acc.balance.amount == value.amount ) { accounts.erase(sndr_acc); @@ -209,7 +195,6 @@ namespace SmtsBusiness { // one acct to another action { permission_level{inv_req.to, "active"_n}, - // account that owns the contract. In this case, the name of the contract == name of the account _self, "transfer"_n, std::make_tuple(inv_req.to, inv_req.from, inv_req.quantity, std::string{"Inv Req fulfilled"}) @@ -232,7 +217,6 @@ namespace SmtsBusiness { // make the transfer action { permission_level{customerAcct, "active"_n}, - // account that owns the contract. In this case, the name of the contract == name of the account _self, "transfer"_n, std::make_tuple( @@ -249,7 +233,7 @@ namespace SmtsBusiness { require_auth(_self); asset yelos = {0, {"YELOS", 4}}; - asset iron = {0, {"IRON", 4}}; + asset iron = {0, {"IRON", 2}}; Stats st1(_self, yelos.symbol.code().raw()); auto itr1 = st1.begin(); diff --git a/sc/smtsbusiness/smtsbusiness.wasm b/sc/smtsbusiness/smtsbusiness.wasm deleted file mode 100755 index 4be027f2fd959425690f8c938b8267deab81d060..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30278 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