From e6a042f75256008edf38c73cc55f6499fc306a7a Mon Sep 17 00:00:00 2001 From: root Date: Wed, 17 Mar 2021 15:54:16 +0000 Subject: [PATCH] v1.6.1 --- README.md | 94 +++++--- build/SimpleAssets/SimpleAssets.abi | 32 +-- build/SimpleAssets/SimpleAssets.wasm | Bin 279077 -> 240229 bytes include/SimpleAssets.hpp | 18 +- include/backtoken.hpp | 330 +++++++++++++++++++++++++++ src/SimpleAssets.cpp | 77 ++++--- 6 files changed, 455 insertions(+), 96 deletions(-) create mode 100644 include/backtoken.hpp diff --git a/README.md b/README.md index 8d1c714..bc4040d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # SimpleAssets -*document version 29 July 2020* +*document version 17 March 2021* ## Scope: 1. [Introduction](#introduction) - [Resources](#resources) + - [Author RAM Payer](#author-ram-payer) - [Token Types](#token-types) 2. [Contract actions](#contract-actions) 3. [Data Structures](#data-structures) @@ -61,6 +62,12 @@ https://github.com/CryptoLions/SimpleAssets/blob/master/include/SimpleAssets.hpp Events Receiver Example for authors: https://github.com/CryptoLions/SimpleAssets-EventReceiverExample +--------------------------- +## Author RAM Payer + +NFT authors can enable Author RAM Payer for some or all of their NFTs, and pay for all the RAM associated with transfers so that users don't have to. + +[Read more about Author RAM Payer](https://simpleassets.io/simple-assets-author-ram-payer-solution-post/) --------------------------- ## Token Types @@ -78,7 +85,7 @@ Both are stringified JSONs. For example: `{\"key1\":\"some-string\", \"key2\":5 **Category** is an optional field that lets you group your NFTs for convenience. Category names must be less than or equal to 12 characters (a-z, 1-5). -**Offer/Claim** versus **Transfer** - If you transfer an NFT, the sender pays for RAM. As an alternative, you can simply offer the NFT, and the user claiming will pay for their RAM. *(Note: we are working toward a feature that allows NFT authors to reserve a lot of RAM which will spare users for paying for transfers.)* +**Offer/Claim** versus **Transfer** - If you transfer an NFT, the sender pays for RAM. As an alternative, you can simply offer the NFT, and the user claiming will pay for their RAM. *(Note: We've deployed an [Author RAM Payer](https://simpleassets.io/simple-assets-author-ram-payer-solution-post/) feature that allows NFT authors to pay for all the RAM of their NFTs.)* #### RAM usage @@ -216,39 +223,46 @@ offers { ## Authors ```c++ -authors { - name author; // assets author, who will be able to create and update assets; - - string data; // author’s data (json) will be used by markets for better display; - // recommendations: logo, info, url; - - string stemplate; // data (json) schema to tell third-party markets how to display each NFT field. - // key: state values, where key is the key from mdata or idata; - // recommended values: - // txt | default type - // url | show as clickable URL - // img | link to img file - // webgl | link to webgl file - // mp3 | link to mp3 file - // video | link to video file - // hide | do not show - // imgb | image as string in binary format - // webglb | webgl binary - // mp3b | mp3 binary - // videob | video binary - - string imgpriority; // Specifies primary image field for categories of NFTs. - // - // This is used when you want your NFTs primary image to be something other - // than a URL to an image field specified in the field img. It also allows you to - // create categories of NFTs with different primary image fields. - // - // data is a strigified json. - // key: NFT categories. - // value: a field from idata or mdata to be used as the primary image for - // all NFTs of that category. +authors { + name author; // assets author, who will be able to create and update assets; + + string dappinfo; // stringified JSON. Recommendations to include: + // name - name of the application + // company - name of the company + // logo - url to image + // url - url to the game's websites + // info - short description of application + // defaultfee - 100x the % fee you'd like to collect from marketplaces. (for 2%, 200) + + string fieldtypes; // data (json) schema to tell third-party markets how to display each NFT field. + // key: state values, where key is the key from mdata or idata; + // recommended values: + + // txt | default type + // url | show as clickable URL + // img | link to img file + // webgl | link to webgl file + // mp3 | link to mp3 file + // video | link to video file + // hide | do not show + // imgb | image as string in binary format + // webglb | webgl binary + // mp3b | mp3 binary + // videob | video binary + // + + string priorityimg; // Specifies primary image field for categories of NFTs. + // + // This is used when you want your NFTs primary image to be something other + // than a URL to an image field specified in the field img. It also allows you to + // create categories of NFTs with different primary image fields. + // + // data is a strigified json. + // key: NFT categories. + // value: a field from idata or mdata to be used as the primary image for + // all NFTs of that category. -} +} ``` ## Delegates @@ -319,9 +333,8 @@ snttassets { ```c++ nttoffers { uint64_t id; // id of the offer for claim (increments automatically) - name author; // ft author - name owner; // ft owner - asset quantity; // quantity + name author; // ntt author + name owner; // ntt owner name offeredto; // account who can claim the offer uint64_t cdate; // offer creation date } @@ -661,6 +674,13 @@ to be the main image. ----------------- # Change Logs +## Change Log v1.6.1 +- support for token-back NFT contract +- Changed map structure type to vector in `saeclaim` and `saechautor` log actions +- Code refactoring +- Typo fixed +- Added new developers function: `sa_time_to_wait` + ## Change Log v1.6.0 - Added author ram payer option - Added actions setarampayer, delarampayer diff --git a/build/SimpleAssets/SimpleAssets.abi b/build/SimpleAssets/SimpleAssets.abi index 73270da..b7b4dac 100644 --- a/build/SimpleAssets/SimpleAssets.abi +++ b/build/SimpleAssets/SimpleAssets.abi @@ -787,20 +787,6 @@ } ] }, - { - "name": "pair_uint64_name", - "base": "", - "fields": [ - { - "name": "key", - "type": "uint64" - }, - { - "name": "value", - "type": "name" - } - ] - }, { "name": "saeburn", "base": "", @@ -841,7 +827,7 @@ }, { "name": "assetids", - "type": "pair_uint64_name[]" + "type": "tuple_uint64_name[]" }, { "name": "memo", @@ -863,7 +849,7 @@ }, { "name": "assetids", - "type": "pair_uint64_name[]" + "type": "tuple_uint64_name[]" } ] }, @@ -1249,6 +1235,20 @@ } ] }, + { + "name": "tuple_uint64_name", + "base": "", + "fields": [ + { + "name": "field_0", + "type": "uint64" + }, + { + "name": "field_1", + "type": "name" + } + ] + }, { "name": "undelegate", "base": "", diff --git a/build/SimpleAssets/SimpleAssets.wasm b/build/SimpleAssets/SimpleAssets.wasm index 5cd726a2cd7c5bcc78acba7373b19a5f65baf554..15c0ee6600cdee2bfbe75f8443fcae620b4f2cac 100755 GIT binary patch delta 50966 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

}*(4=LC|>NCGK3&PbvjqU>mJgr5lF<3S5%$| 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

D`3vuA^K8i>jSTJ*Q^Ne6 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 diff --git a/include/SimpleAssets.hpp b/include/SimpleAssets.hpp index 7733953..0b0bdb7 100644 --- a/include/SimpleAssets.hpp +++ b/include/SimpleAssets.hpp @@ -1,6 +1,6 @@ /* * @file - * @author (C) 2020 by CryptoLions [ https://CryptoLions.io ] + * @author (C) 2021 by CryptoLions [ https://CryptoLions.io ] * @version 1.6.0 * * @section LICENSE @@ -23,6 +23,7 @@ * Presentation: https://medium.com/@cryptolions/introducing-simple-assets-b4e17caafaa4 * Event Receiver: https://github.com/CryptoLions/SimpleAssets-EventReceiverExample */ +#pragma once #include #include @@ -450,7 +451,7 @@ CONTRACT SimpleAssets : public contract{ * Update the data field of a fungible token. * * @param author is fungible token author. - * @param sym is fingible token symbol ("GOLD", "WOOD", etc.). + * @param sym is fungible token symbol ("GOLD", "WOOD", etc.). * @param data is stringified JSON (recommend including keys `img` and `name` for better displaying by markets). * @return no return value. */ @@ -772,7 +773,7 @@ CONTRACT SimpleAssets : public contract{ * @param memo is memo for change author action. * @return no return value. */ - ACTION saechauthor( name author, name newauthor, name owner, map< uint64_t, name >& assetids, string memo ); + ACTION saechauthor( name author, name newauthor, name owner, vector< tuple >& assetids, string memo ); using saechauthor_action = action_wrapper< "saechauthor"_n, &SimpleAssets::saechauthor >; /* @@ -806,7 +807,8 @@ CONTRACT SimpleAssets : public contract{ * @param assetids is array of asset id's to claim. * @return no return value. */ - ACTION saeclaim( name author, name claimer, map< uint64_t, name >& assetids ); + + ACTION saeclaim(name author, name claimer, vector< tuple >& assetids); using saeclaim_action = action_wrapper< "saeclaim"_n, &SimpleAssets::saeclaim >; /* @@ -887,6 +889,13 @@ CONTRACT SimpleAssets : public contract{ return result; } + static string sa_time_to_wait(uint64_t time_in_seconds) { + uint64_t s, h, m = 0; + m = time_in_seconds / 60; + h = m / 60; + return "Time to wait " + to_string(int(h)) + " hours " + to_string(int(m % 60)) + " minutes " + to_string(int(time_in_seconds % 60)) + " seconds"; + } + private: const uint16_t MAX_MEMO_SIZE = 512; const uint64_t IMPOSSIBLE_ID = 1; @@ -916,7 +925,6 @@ CONTRACT SimpleAssets : public contract{ void add_balancef( name owner, name author, asset value, name ram_payer ); void check_empty_vector( vector< uint64_t >& vector_ids, string vector_name = "assetids" ); void check_memo_size( const string & memo ); - std::string timeToWait( uint64_t time_in_seconds ); name get_payer( name author, name category, uint64_t id ); template diff --git a/include/backtoken.hpp b/include/backtoken.hpp new file mode 100644 index 0000000..59a2cdf --- /dev/null +++ b/include/backtoken.hpp @@ -0,0 +1,330 @@ + +#include +#include +#include +#include +#include + +using namespace eosio; +using namespace std; + +class[[eosio::contract("backtoken")]] backtoken : public contract{ + public: + using contract::contract; + struct symbol_ex; + struct token_ex; + + backtoken(name receiver, name code, datastream ds) + : contract(receiver, code, ds) {} + + ACTION tokenprep(name owner, uint64_t nft_id, const vector& symbols); + using tokenprep_action = action_wrapper< "tokenprep"_n, &backtoken::tokenprep >; +#ifdef DEBUG + ACTION delbtoken(uint64_t nft_id); + using delbtoken_action = action_wrapper< "delbtoken"_n, &backtoken::delbtoken >; +#endif + + ACTION onburn(name owner, uint64_t nft_id); + using onburn_action = action_wrapper< "onburn"_n, &backtoken::onburn >; + + ACTION getversion(); + using getversion_action = action_wrapper<"getversion"_n, &backtoken::getversion>; + + [[eosio::on_notify("simpleassets::transfer")]] void ontransfersa(name from, name to, vector& assetids, string memo); + [[eosio::on_notify("*::transfer")]] void ontransfer(name from, name to, asset quantity, string memo); + [[eosio::on_notify("simpleassets::transferf")]] void ontransferf(name from, name to, name author, asset quantity, string memo); + + void send_tokens(name owner, const vector& tokens, string memo); + void process_memo(name from, name to, const vector & tokens, const string& memo); + +public: + enum token_type { SA_NFT = 0, SA_FT = 1, TOKEN = 2 }; + + typedef uint64_t token_type_t; + + struct symbol_ex + { + extended_symbol symbol_ex; + token_type_t token_type; + + name get_contract() const + { + return symbol_ex.get_contract(); + } + + symbol get_symbol() const + { + return symbol_ex.get_symbol(); + } + }; + + struct token_ex + { + uint64_t token_id; + extended_asset quantity_ex; + token_type_t token_type; + + symbol get_symbol() const + { + return quantity_ex.quantity.symbol; + } + + bool is_token_valid() const + { + return token_id != 0; + } + + uint64_t get_amount() const + { + return quantity_ex.quantity.amount; + } + + asset get_quantity() const + { + return quantity_ex.quantity; + } + + name get_contract() const + { + return quantity_ex.contract; + } + + bool operator==(token_ex const & rhs) const + { + auto result = false; + if (this->token_type == rhs.token_type) + { + if (this->is_nft()) + { + result = this->token_id == rhs.token_id; + } + else if (this->is_ft() || this->is_token()) + { + result = this->get_contract() == rhs.get_contract() && this->get_quantity() == rhs.get_quantity(); + } + } + return result; + } + + void prepare_tokenex(const symbol_ex& sym) + { + switch (sym.token_type) + { + case SA_NFT: + { + set_nft(0); + break; + } + case SA_FT: + { + extended_asset ext_asset{ 0, sym.symbol_ex }; + set_ft(ext_asset); + break; + } + case TOKEN: + { + extended_asset ext_asset{ 0, sym.symbol_ex }; + set_token(ext_asset); + break; + } + } + } + + void set_token(extended_asset token_quantity_ex) + { + token_id = 0; + token_type = TOKEN; + quantity_ex = token_quantity_ex; + } + + void set_token(name contract, asset quantity) + { + token_id = 0; + token_type = TOKEN; + quantity_ex.contract = contract; + quantity_ex.quantity = quantity; + } + + void set_ft(extended_asset ft_quantity_ex) + { + token_id = 0; + token_type = SA_FT; + quantity_ex = ft_quantity_ex; + } + + void set_ft(name ft_author, asset ft_quantity) + { + token_id = 0; + token_type = SA_FT; + quantity_ex.contract = ft_author; + quantity_ex.quantity = ft_quantity; + } + + void set_nft(uint64_t tokenid) + { + token_id = tokenid; + token_type = SA_NFT; + quantity_ex = extended_asset(); + } + + bool is_ft() const + { + return (token_type == SA_FT); + } + + bool is_token() const + { + return (token_type == TOKEN); + } + + bool is_nft() const + { + return (token_type == SA_NFT); + } + + string to_print_type() const + { + string result; + switch (token_type) + { + case SA_NFT: + { + result = "SA_NFT"; + break; + } + case SA_FT: + { + result = "SA_FT"; + break; + } + case TOKEN: + { + result = "TOKEN"; + break; + } + } + return result; + } + + static vector token_to_tokenexs(name author, asset quantity) { + + vector result; + token_ex token; + token.set_token(author, quantity); + result.emplace_back(token); + + return result; + } + + static vector ft_to_tokenexs(name author, asset quantity) { + + vector result; + token_ex token; + token.set_ft(author, quantity); + result.emplace_back(token); + + return result; + } + + static vector nfts_to_tokenexs(vector& assetids) { + vector result; + + for (auto i = 0; i < assetids.size(); i++) { + token_ex token; + token.set_nft(assetids[i]); + result.emplace_back(token); + } + + return result; + } + + }; + + /* + * Back token table + */ + TABLE sbacktoken{ + uint64_t nft_id; + vector tokens; + + auto primary_key() const { + return nft_id; + } + + void prepare_tokens(const vector& symbols) + { + for (auto it_symbol_ex = symbols.begin(); it_symbol_ex != symbols.end(); it_symbol_ex++) + { + const auto& it = find_if(tokens.begin(), tokens.end(), + [&](const token_ex& one_token) { return one_token.get_contract() == it_symbol_ex->get_contract() + && one_token.get_symbol() == it_symbol_ex->get_symbol() + && one_token.token_type == it_symbol_ex->token_type; }); + + if (it == tokens.end()){ + token_ex tkn; + tkn.prepare_tokenex(*it_symbol_ex); + tokens.emplace_back(tkn); + } + } + } + + void append_token(const token_ex& token) + { + if (token.token_type == SA_FT || token.token_type == TOKEN) + { + const auto author = token.quantity_ex.contract; + const auto symbol = token.quantity_ex.quantity.symbol; + const auto token_type = token.token_type; + + const auto& it = find_if(tokens.begin(), tokens.end(), + [&](const token_ex& one_token) { return one_token.quantity_ex.contract == author + && one_token.get_symbol() == symbol + && one_token.token_type == token_type; }); + + if (it != tokens.end()) + { + it->quantity_ex.quantity.amount += token.quantity_ex.quantity.amount; + } + else + { + check(false, + "Prepare tokens before append. Tokenex for contract: " + author.to_string() + + " symbol : " + symbol.code().to_string() + " type : " + token.to_print_type() + " does not exist "); + } + + } + else if (token.token_type == SA_NFT) + { + const auto contract = token.quantity_ex.contract; + const auto token_type = token.token_type; + + const auto& it = find_if(tokens.begin(), tokens.end(), + [&](const token_ex& one_token) { return one_token.get_contract() == contract + && one_token.token_id == 0 + && one_token.token_type == token_type; }); + + if (it != tokens.end()) + { + it->token_id = token.token_id; + } + else + { + check(false, "Prepare tokens before append. Token with type SA_NFT and token_id = 0 does no exist"); + } + } + } + + void append_tokens(const vector& append_tokens) + { + for (auto it_append_token = append_tokens.begin(); it_append_token != append_tokens.end(); it_append_token++) + { + append_token(*it_append_token); + } + } + + }; + typedef eosio::multi_index< "backtokens"_n, sbacktoken > backtokens; + + backtokens backtokent = { _self, _self.value }; + +}; \ No newline at end of file diff --git a/src/SimpleAssets.cpp b/src/SimpleAssets.cpp index 9b14e51..d302a27 100644 --- a/src/SimpleAssets.cpp +++ b/src/SimpleAssets.cpp @@ -1,4 +1,6 @@ #include +#include +const name BACKTOKEN_CONTRACT = "simplebacked"_n; // BackToken CONTRACT ACTION SimpleAssets::updatever( string version ) { @@ -15,7 +17,7 @@ ACTION SimpleAssets::changeauthor( name author, name newauthor, name owner, vect sassets assets_f( _self, owner.value ); - map< name, map< uint64_t, name > > uniqauthor; + map< name, vector< tuple > > uniqauthor; for ( auto i = 0; i < assetids.size(); ++i ) { @@ -36,11 +38,11 @@ ACTION SimpleAssets::changeauthor( name author, name newauthor, name owner, vect + " has usearam = true. Set usearam = false before changing author. Asset id: " + to_string(assetids[i])); } - assets_f.modify( itr, author, [&]( auto& a ) { a.author = newauthor; }); - uniqauthor[itr->author][assetids[i]] = itr->owner; + + uniqauthor[itr->author].emplace_back(make_tuple(assetids[i] , itr->owner)); } // Send Event as deferred @@ -50,7 +52,7 @@ ACTION SimpleAssets::changeauthor( name author, name newauthor, name owner, vect } } -ACTION SimpleAssets::saechauthor( name author, name newauthor, name owner, map< uint64_t, name >& assetids, string memo ) { +ACTION SimpleAssets::saechauthor( name author, name newauthor, name owner, vector< tuple >& assetids, string memo ) { require_recipient( author ); } @@ -154,7 +156,8 @@ ACTION SimpleAssets::claim( name claimer, vector& assetids ) { }); } - map< name, map< uint64_t, name > > uniqauthor; + map< name, vector< tuple > > uniqauthor; + for ( auto i = 0; i < assetids.size(); ++i ) { auto itrc = offert.require_find( assetids[i], string("Cannot find offer for asset id: " + to_string(assetids[i]) + " that you're attempting to claim.").c_str() ); @@ -182,7 +185,7 @@ ACTION SimpleAssets::claim( name claimer, vector& assetids ) { }); //Events - uniqauthor[itr->author][assetids[i]] = itrc->owner; + uniqauthor[itr->author].emplace_back(make_tuple(assetids[i], itr->owner)); assets_f.erase( itr ); offert.erase( itrc ); @@ -198,7 +201,7 @@ ACTION SimpleAssets::claim( name claimer, vector& assetids ) { } } -ACTION SimpleAssets::saeclaim(name author, name claimer, map< uint64_t, name >& assetids) { +ACTION SimpleAssets::saeclaim(name author, name claimer, vector< tuple >& assetids) { require_recipient(author); } @@ -250,7 +253,7 @@ ACTION SimpleAssets::transfer( name from, name to, vector& assetids, s } } else { - check( false, "Asset id: " + to_string(assetids[i]) + " cannot be transferred because it is delegated to " + itrd->delegatedto.to_string() ); + check( false, "Asset id: " + to_string(assetids[i]) + " cannot be transferred because it is delegated from " + itrd->delegatedto.to_string() ); } } @@ -377,15 +380,31 @@ ACTION SimpleAssets::burn( name owner, vector& assetids, string memo ) require_auth( owner ); sassets assets_f( _self, owner.value ); map< name, vector > uniqauthor; + backtoken::backtokens backtokent = { BACKTOKEN_CONTRACT, BACKTOKEN_CONTRACT.value }; for ( auto i = 0; i < assetids.size(); ++i ) { + + const auto asset_id = assetids[i]; - auto itr = assets_f.require_find( assetids[i], string("Asset id: " + to_string(assetids[i]) + " was not found.").c_str() ); - check( !(itr->container.size() != 0), "Asset id: " + to_string(assetids[i]) + " has " + to_string(itr->container.size()) + " attached NFT assets. Detach them before burning." ); - check( !(itr->containerf.size() != 0), "Asset id: " + to_string(assetids[i]) + " has " + to_string(itr->containerf.size()) + " attached FT assets. Detach them before burning." ); - check( owner.value == itr->owner.value, "Asset id: " + to_string(assetids[i]) + " you're attempting to burn is not yours. Owner is " + itr->owner.to_string() + ", you entered owner " + owner.to_string() ); - check( offert.find( assetids[i] ) == offert.end(), "Asset id: " + to_string(assetids[i]) + " has an open offer and cannot be burned." ); - check( delegatet.find( assetids[i] ) == delegatet.end(), "Asset id: " + to_string(assetids[i]) + " is delegated and cannot be burned." ); + auto itr = assets_f.require_find( asset_id, string("Asset id: " + to_string( asset_id ) + " was not found.").c_str() ); + check( !( itr->container.size() != 0 ), "Asset id: " + to_string( asset_id ) + " has " + to_string( itr->container.size() ) + " attached NFT assets. Detach them before burning." ); + check( !( itr->containerf.size() != 0 ), "Asset id: " + to_string( asset_id ) + " has " + to_string( itr->containerf.size() ) + " attached FT assets. Detach them before burning." ); + check( owner.value == itr->owner.value, "Asset id: " + to_string( asset_id ) + " you're attempting to burn is not yours. Owner is " + itr->owner.to_string() + ", you entered owner " + owner.to_string() ); + check( offert.find( asset_id ) == offert.end(), "Asset id: " + to_string( asset_id ) + " has an open offer and cannot be burned." ); + check( delegatet.find( asset_id ) == delegatet.end(), "Asset id: " + to_string( asset_id ) + " is delegated and cannot be burned." ); + + if ( backtokent.find( asset_id ) != backtokent.end() ) + { + if (is_account(BACKTOKEN_CONTRACT)) + { + action( + permission_level{ get_self(), "active"_n }, + BACKTOKEN_CONTRACT, + "onburn"_n, + make_tuple(owner, asset_id) + ).send(); + } + } //Events uniqauthor[itr->author].push_back( assetids[i] ); @@ -487,13 +506,13 @@ ACTION SimpleAssets::undelegate( name owner, vector& assetids ) { const auto itrc = delegatet.require_find( assetids[i], string( "Asset id: " + to_string( assetids[i] ) + " is not delegated").c_str() ); check( owner == itrc->owner, "You are not the owner of asset id: " + to_string( assetids[i]) + ". Owner is: " + itrc->owner.to_string() + " , you entered: " + owner.to_string() ); - check( !(from != itrc->delegatedto), "All delegated assets in assetids must be delegated to one account. For asset id: " + to_string( assetids[i] ) + " delegatedto = " + itrc->delegatedto.to_string() + " but it must be same with first asset which has delegatedto = " + from.to_string()); + check( !(from != itrc->delegatedto), "All delegated assets in assetids must be delegated from one account. For asset id: " + to_string( assetids[i] ) + " delegatedto = " + itrc->delegatedto.to_string() + " but it must be same with first asset which has delegatedto = " + from.to_string()); const auto itr = assets_f.require_find(assetids[i], string("Asset id: " + to_string(assetids[i]) + " cannot be found in scope " + from.to_string()).c_str()); check( itr->owner == itrc->delegatedto, "Owner does not match DELEGATEDTO for asset id: " + to_string( assetids[i] ) + " .Owner = " + itr->owner.to_string() + " but it must be " + itrc->delegatedto.to_string() + " for this asset"); check((itrc->cdate + itrc->period) < current_time_point().sec_since_epoch(), - "Cannot undelegate until the PERIOD expires. " + timeToWait(abs((int)((uint64_t)(itrc->cdate + itrc->period) - (uint64_t)current_time_point().sec_since_epoch())))); + "Cannot undelegate until the PERIOD expires. " + sa_time_to_wait(abs((int)((uint64_t)(itrc->cdate + itrc->period) - (uint64_t)current_time_point().sec_since_epoch())))); if ( i != 0 ) { assetidsmemo += ", "; @@ -865,7 +884,7 @@ void SimpleAssets::attachdeatch( name owner, name author, asset quantity, uint64 check( itr->author == author, "Different authors. For asset id: " + to_string( assetidc ) + " author is " + itr->author.to_string() + " you entered author = " + author.to_string() ); const auto itr_delegeted = delegatet.find( assetidc ); - check( itr_delegeted == delegatet.end(), "Asset id: " + to_string( assetidc ) + " is delegated to " + itr_delegeted->delegatedto.to_string() ); + check( itr_delegeted == delegatet.end(), "Asset id: " + to_string( assetidc ) + " is delegated from " + itr_delegeted->delegatedto.to_string() ); const auto itr_offered = offert.find( assetidc ); check( itr_offered == offert.end(), "Asset id: " + to_string( assetidc ) + " has an open offer to " + itr_offered->offeredto.to_string() + "and cannot be delegated." ); @@ -1004,7 +1023,8 @@ ACTION SimpleAssets::claimntt( name claimer, vector& assetids ) { require_auth( claimer ); require_recipient( claimer ); snttassets assets_claimer( _self, claimer.value ); - map< name, map< uint64_t, name > > uniqauthor; + + map< name, vector< tuple > > uniqauthor; for ( auto i = 0; i < assetids.size(); ++i ) { @@ -1028,7 +1048,7 @@ ACTION SimpleAssets::claimntt( name claimer, vector& assetids ) { }); //Events - uniqauthor[itr->author][assetids[i]] = itrc->owner; + uniqauthor[itr->author].emplace_back(make_tuple(assetids[i], itr->owner)); assets_owner.erase( itr ); nttoffert.erase( itrc ); @@ -1180,25 +1200,6 @@ asset SimpleAssets::get_balance( name token_contract_account, name owner, name a return accountstable.get( statstable.get( sym_code.raw() ).id ).balance; } -std::string SimpleAssets::timeToWait( uint64_t time_in_seconds ){ - - uint64_t s, h, m = 0; - m = time_in_seconds / 60; - h = m / 60; - return "Time to wait " + std::to_string(int(h)) + " hours " + std::to_string(int(m % 60)) + " minutes " + std::to_string(int(time_in_seconds % 60)) + " seconds"; -} - -EOSIO_DISPATCH( SimpleAssets, ( create )( createlog )( transfer )( burn )( update ) -( offer )( canceloffer )( claim ) -( authorreg )( authorupdate ) -( delegate )( undelegate )( delegatemore )( attach )( detach ) -( createf )( updatef )( issuef )( transferf )( burnf ) -( offerf )( cancelofferf )( claimf ) -( attachf )( detachf )( openf )( closef ) -( updatever )( createntt )( burnntt )( createnttlog )( claimntt )( updatentt )( changeauthor ) -( mdadd )( mdupdate )( mdremove )( mdaddlog ) ( burnlog ) ( burnnttlog ) ( burnflog ) -( saetransfer ) ( saeburn ) ( saechauthor ) ( saecreate ) ( saeclaim ) ( setarampayer ) ( delarampayer ) ) - //============================================================================================================ //=======================================- SimpleAssets.io -==================================================