Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/.idea
/cmake-build-debug/
55 changes: 34 additions & 21 deletions include/dgoods.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ using namespace std;
using namespace eosio;
using namespace utility;

CONTRACT dgoods: public contract {
class [[eosio::contract]] dgoods: public contract {
public:
using contract::contract;

Expand All @@ -23,10 +23,12 @@ CONTRACT dgoods: public contract {
dgoods(name receiver, name code, datastream<const char*> ds)
: contract(receiver, code, ds) {}

ACTION setconfig(const symbol_code& symbol,
[[eosio::action]]
void setconfig(const symbol_code& symbol,
const string& version);

ACTION create(const name& issuer,
[[eosio::action]]
void create(const name& issuer,
const name& rev_partner,
const name& category,
const name& token_name,
Expand All @@ -39,60 +41,71 @@ CONTRACT dgoods: public contract {
const uint32_t& max_issue_days,
const asset& max_supply);

ACTION issue(const name& to,
[[eosio::action]]
void issue(const name& to,
const name& category,
const name& token_name,
const asset& quantity,
const string& relative_uri,
const string& memo);

ACTION freezemaxsup( const name& category, const name& token_name );
[[eosio::action]]
void freezemaxsup( const name& category, const name& token_name );

ACTION burnnft(const name& owner,
[[eosio::action]]
void burnnft(const name& owner,
const vector<uint64_t>& dgood_ids);

ACTION burnft(const name& owner,
[[eosio::action]]
void burnft(const name& owner,
const uint64_t& category_name_id,
const asset& quantity);

void buynft(const name& from, const name& to, const asset& quantity, const string& memo);
[[eosio::action]]
void buynft(const name& from, const name& to, const asset& quantity, const string& memo);

ACTION transfernft(const name& from,
[[eosio::action]]
void transfernft(const name& from,
const name& to,
const vector<uint64_t>& dgood_ids,
const string& memo);

ACTION transferft(const name& from,
[[eosio::action]]
void transferft(const name& from,
const name& to,
const name& category,
const name& token_name,
const asset& quantity,
const string& memo);

ACTION listsalenft(const name& seller,
[[eosio::action]]
void listsalenft(const name& seller,
const vector<uint64_t>& dgood_ids,
const asset& net_sale_amount);

ACTION closesalenft(const name& seller,
[[eosio::action]]
void closesalenft(const name& seller,
const uint64_t& batch_id);

ACTION logcall(const uint64_t& dgood_id);
[[eosio::action]]
void logcall(const uint64_t& dgood_id);

ACTION logsale(const vector<uint64_t>& dgood_ids,
[[eosio::action]]
void logsale(const vector<uint64_t>& dgood_ids,
const name& seller,
const name& buyer,
const name& receiver);


TABLE lockednfts {
struct [[eosio::table]] lockednfts {
uint64_t dgood_id;

uint64_t primary_key() const { return dgood_id; }
};

// now() gets current time in sec
// uint32_t 604800 is 1 week in seconds
TABLE asks {
struct [[eosio::table]] asks {
uint64_t batch_id;
vector<uint64_t> dgood_ids;
name seller;
Expand All @@ -103,23 +116,23 @@ CONTRACT dgoods: public contract {
uint64_t get_seller() const { return seller.value; }
};

TABLE tokenconfigs {
struct [[eosio::table]] tokenconfigs {
name standard;
string version;
symbol_code symbol;
uint64_t category_name_id;
uint64_t next_dgood_id;
};

TABLE categoryinfo {
struct [[eosio::table]] categoryinfo {
name category;

uint64_t primary_key() const { return category.value; }
};


// scope is category, then token_name is unique
TABLE dgoodstats {
struct [[eosio::table]] dgoodstats {
bool fungible;
bool burnable;
bool sellable;
Expand All @@ -139,7 +152,7 @@ CONTRACT dgoods: public contract {
};

// scope is self
TABLE dgood {
struct [[eosio::table]] dgood {
uint64_t id;
uint64_t serial_number;
name owner;
Expand All @@ -155,7 +168,7 @@ CONTRACT dgoods: public contract {
EOSLIB_SERIALIZE( dgood, (id)(serial_number)(owner)(category)(token_name)(relative_uri) )

// scope is owner
TABLE accounts {
struct [[eosio::table]] accounts {
uint64_t category_name_id;
name category;
name token_name;
Expand Down
38 changes: 26 additions & 12 deletions src/dgoods.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#include <dgoods.hpp>
#include <math.h>

ACTION dgoods::setconfig(const symbol_code& sym, const string& version) {
[[eosio::action]]
void dgoods::setconfig(const symbol_code& sym, const string& version) {

require_auth( get_self() );
// valid symbol
Expand All @@ -16,7 +17,8 @@ ACTION dgoods::setconfig(const symbol_code& sym, const string& version) {
config_table.set( config_singleton, get_self() );
}

ACTION dgoods::create(const name& issuer,
[[eosio::action]]
void dgoods::create(const name& issuer,
const name& rev_partner,
const name& category,
const name& token_name,
Expand Down Expand Up @@ -99,7 +101,8 @@ ACTION dgoods::create(const name& issuer,
}


ACTION dgoods::issue(const name& to,
[[eosio::action]]
void dgoods::issue(const name& to,
const name& category,
const name& token_name,
const asset& quantity,
Expand Down Expand Up @@ -151,7 +154,8 @@ ACTION dgoods::issue(const name& to,
});
}

ACTION dgoods::burnnft(const name& owner,
[[eosio::action]]
void dgoods::burnnft(const name& owner,
const vector<uint64_t>& dgood_ids) {
require_auth(owner);

Expand Down Expand Up @@ -186,7 +190,8 @@ ACTION dgoods::burnnft(const name& owner,
}
}

ACTION dgoods::burnft(const name& owner,
[[eosio::action]]
void dgoods::burnft(const name& owner,
const uint64_t& category_name_id,
const asset& quantity) {
require_auth(owner);
Expand All @@ -210,7 +215,8 @@ ACTION dgoods::burnft(const name& owner,
});
}

ACTION dgoods::transfernft(const name& from,
[[eosio::action]]
void dgoods::transfernft(const name& from,
const name& to,
const vector<uint64_t>& dgood_ids,
const string& memo ) {
Expand All @@ -229,7 +235,8 @@ ACTION dgoods::transfernft(const name& from,
_changeowner( from, to, dgood_ids, memo, true );
}

ACTION dgoods::transferft(const name& from,
[[eosio::action]]
void dgoods::transferft(const name& from,
const name& to,
const name& category,
const name& token_name,
Expand Down Expand Up @@ -261,7 +268,8 @@ ACTION dgoods::transferft(const name& from,
_add_balance(to, get_self(), category, token_name, dgood_stats.category_name_id, quantity);
}

ACTION dgoods::listsalenft(const name& seller,
[[eosio::action]]
void dgoods::listsalenft(const name& seller,
const vector<uint64_t>& dgood_ids,
const asset& net_sale_amount) {
require_auth( seller );
Expand Down Expand Up @@ -303,7 +311,8 @@ ACTION dgoods::listsalenft(const name& seller,
});
}

ACTION dgoods::closesalenft(const name& seller,
[[eosio::action]]
void dgoods::closesalenft(const name& seller,
const uint64_t& batch_id) {
ask_index ask_table( get_self(), get_self().value );
const auto& ask = ask_table.get( batch_id, "cannot find sale to close" );
Expand Down Expand Up @@ -377,16 +386,19 @@ void dgoods::buynft(const name& from,
}

// method to log dgood_id and match transaction to action
ACTION dgoods::logcall(const uint64_t& dgood_id) {
[[eosio::action]]
void dgoods::logcall(const uint64_t& dgood_id) {
require_auth( get_self() );
}

// method to logsuccessful sale
ACTION dgoods::logsale(const vector<uint64_t>& dgood_ids, const name& seller, const name& buyer, const name& receiver) {
[[eosio::action]]
void dgoods::logsale(const vector<uint64_t>& dgood_ids, const name& seller, const name& buyer, const name& receiver) {
require_auth( get_self() );
}

ACTION dgoods::freezemaxsup(const name& category, const name& token_name) {
[[eosio::action]]
void dgoods::freezemaxsup(const name& category, const name& token_name) {
require_auth( get_self() );

// dgoodstats table
Expand Down Expand Up @@ -566,6 +578,8 @@ extern "C" {
auto self = receiver;

if ( code == self ) {
bool executed = false; // TODO: REMOVE THIS

switch( action ) {
EOSIO_DISPATCH_HELPER( dgoods, (setconfig)(create)(issue)(burnnft)(burnft)(transfernft)(transferft)(listsalenft)(closesalenft)(logcall)(freezemaxsup) )
}
Expand Down