From beabe75340ed7c671616ab4801a25a02b72b6b82 Mon Sep 17 00:00:00 2001 From: wangxxzhiyy Date: Fri, 13 Dec 2019 16:06:00 +0800 Subject: [PATCH] update contracts --- contracts/hdddeposit/hdddeposit.abi | 21 +-------- contracts/hdddeposit/hdddeposit.cpp | 38 ++-------------- contracts/hdddeposit/hdddeposit.hpp | 5 +-- contracts/hddpool/hddpool.abi | 19 -------- contracts/hddpool/hddpool.cpp | 67 +++++++---------------------- contracts/hddpool/hddpool.hpp | 29 +++++++++++-- 6 files changed, 47 insertions(+), 132 deletions(-) diff --git a/contracts/hdddeposit/hdddeposit.abi b/contracts/hdddeposit/hdddeposit.abi index 56685870a..d247dbf01 100644 --- a/contracts/hdddeposit/hdddeposit.abi +++ b/contracts/hdddeposit/hdddeposit.abi @@ -180,21 +180,7 @@ "type": "int64" } ] - }, - { - "name": "mchgdepacc", - "base": "", - "fields": [ - { - "name": "minerid", - "type": "uint64" - }, - { - "name": "new_depacc", - "type": "name" - } - ] - } + } ], "actions": [ { @@ -231,11 +217,6 @@ "name": "setrate", "type": "setrate", "ricardian_contract": "" - }, - { - "name": "mchgdepacc", - "type": "mchgdepacc", - "ricardian_contract": "" } ], "tables": [ diff --git a/contracts/hdddeposit/hdddeposit.cpp b/contracts/hdddeposit/hdddeposit.cpp index 1a29d94b0..3a48064c1 100644 --- a/contracts/hdddeposit/hdddeposit.cpp +++ b/contracts/hdddeposit/hdddeposit.cpp @@ -18,7 +18,6 @@ static constexpr eosio::name token_account{N(eosio.token)}; static constexpr eosio::name system_account{N(eosio)}; static constexpr eosio::name hdd_lock_account{N(hddlock12345)}; - void hdddeposit::paydeppool(account_name user, asset quant) { require_auth(user); @@ -99,7 +98,7 @@ void hdddeposit::paydeposit(account_name user, uint64_t minerid, asset quant) { eosio_assert(1 == 2, "can not paydeposit now"); - eosio_assert(hddpool(N(hddpool12345)).is_miner_exist(minerid), "miner not registered"); + eosio_assert(hddpool::is_miner_exist(minerid), "miner not registered"); eosio_assert(quant.symbol == CORE_SYMBOL, "must use core asset for hdd deposit."); eosio_assert( quant.amount > 0, "must use positive quant" ); @@ -170,7 +169,7 @@ void hdddeposit::chgdeposit(name user, uint64_t minerid, bool is_increace, asset //--- check miner deposit and max_space asset deposit = miner.deposit; - uint64_t max_space = hddpool(N(hddpool12345)).get_miner_max_space(minerid); + uint64_t max_space = hddpool::get_miner_max_space(minerid); eosio_assert(is_deposit_enough(deposit, max_space),"deposit not enough for miner's max_space -- chgdeposit"); //--- check miner deposit and max_space @@ -260,37 +259,6 @@ void hdddeposit::setrate(int64_t rate) { } -void hdddeposit::mchgdepacc(uint64_t minerid, name new_depacc) { - require_auth(new_depacc); - - minerdeposit_table _mdeposit(_self, _self); - const auto& miner = _mdeposit.get( minerid, "no deposit record for this minerid"); - eosio_assert(miner.account_name != new_depacc, "must use different account to change deposit user"); - - depositpool_table _deposit_old(_self, miner.account_name.value); - const auto& acc_old = _deposit_old.get( miner.account_name, "no deposit pool record for original deposit user"); - - depositpool_table _deposit_new(_self, new_depacc.value); - const auto& acc_new = _deposit_new.get( new_depacc.value, "no deposit pool record for new deposit user"); - - eosio_assert( acc_new.deposit_free.amount >= miner.dep_total.amount, "new deposit user free deposit not enough" ); - - //变更原抵押账户的押金数量 - _deposit_old.modify( acc_old, 0, [&]( auto& a ) { - a.deposit_free += miner.deposit; - }); - - //将矿机的押金数量重新恢复到未扣罚金的初始额度 - _mdeposit.modify( miner, 0, [&]( auto& a ) { - a.account_name = new_depacc; - a.deposit = a.dep_total; - }); - - _deposit_new.modify( acc_new, 0, [&]( auto& a ) { - a.deposit_free -= miner.dep_total; - }); -} - void hdddeposit::check_bp_account(account_name bpacc, uint64_t id, bool isCheckId) { account_name shadow; uint64_t seq_num = eosiosystem::getProducerSeq(bpacc, shadow); @@ -304,4 +272,4 @@ void hdddeposit::check_bp_account(account_name bpacc, uint64_t id, bool isCheckI -EOSIO_ABI( hdddeposit, (paydeppool)(unpaydeppool)(paydeposit)(chgdeposit)(payforfeit)(delminer)(setrate)(mchgdepacc)) +EOSIO_ABI( hdddeposit, (paydeppool)(unpaydeppool)(paydeposit)(chgdeposit)(payforfeit)(delminer)(setrate)) diff --git a/contracts/hdddeposit/hdddeposit.hpp b/contracts/hdddeposit/hdddeposit.hpp index 11aae0b04..55fe3e99d 100644 --- a/contracts/hdddeposit/hdddeposit.hpp +++ b/contracts/hdddeposit/hdddeposit.hpp @@ -25,8 +25,6 @@ class hdddeposit : public eosio::contract { void delminer(uint64_t minerid); void setrate(int64_t rate); - void mchgdepacc(uint64_t minerid, name new_depacc); - inline asset get_deposit( account_name user )const; inline asset get_miner_deposit( uint64_t minerid )const; inline bool is_deposit_enough( asset deposit, uint64_t max_space ) const; @@ -112,7 +110,8 @@ bool hdddeposit::is_deposit_enough( asset deposit, uint64_t max_space ) const if(deposit.amount >= am) return true; - return false; + //return false; + return true; } diff --git a/contracts/hddpool/hddpool.abi b/contracts/hddpool/hddpool.abi index b67965148..782452468 100644 --- a/contracts/hddpool/hddpool.abi +++ b/contracts/hddpool/hddpool.abi @@ -210,20 +210,6 @@ } ] }, - { - "name": "mchgstrpool", - "base": "", - "fields": [ - { - "name": "minerid", - "type": "uint64" - }, - { - "name": "new_poolid", - "type": "name" - } - ] - }, { "name": "mchgadminacc", "base": "", @@ -748,11 +734,6 @@ "type": "mchgspace", "ricardian_contract": "" }, - { - "name": "mchgstrpool", - "type": "mchgstrpool", - "ricardian_contract": "" - }, { "name": "mchgadminacc", "type": "mchgadminacc", diff --git a/contracts/hddpool/hddpool.cpp b/contracts/hddpool/hddpool.cpp index 8425f3361..f6eb79f02 100644 --- a/contracts/hddpool/hddpool.cpp +++ b/contracts/hddpool/hddpool.cpp @@ -452,9 +452,9 @@ void hddpool::delminer(uint64_t minerid, uint8_t acc_type, name caller) //从该矿机的收益账号下移除该矿机 if(itminerinfo->owner.value != 0) { maccount_index _maccount(_self, itminerinfo->owner.value); - auto itmaccount = _maccount.find(itminerinfo->owner.value); + auto itmaccount = _maccount.find(minerid); if(itmaccount != _maccount.end()) { - _maccount.erase(itmaccount); + _maccount.erase(itmaccount); } } @@ -542,6 +542,10 @@ void hddpool::newminer(uint64_t minerid, name adminacc, name dep_acc, asset dep_ eosio_assert(is_account(dep_acc), "dep_acc invalidate"); eosio_assert( dep_amount.amount > 0, "must use positive dep_amount" ); + storepool_index _storepool( _self , _self ); + auto itmstorepool = _storepool.find(dep_acc.value); + eosio_assert(itmstorepool != _storepool.end(), "dep_acc must use a stroepool name"); + minerinfo_table _minerinfo( _self , _self ); auto itminerinfo = _minerinfo.find(minerid); eosio_assert(itminerinfo == _minerinfo.end(), "miner already registered \n"); @@ -549,6 +553,7 @@ void hddpool::newminer(uint64_t minerid, name adminacc, name dep_acc, asset dep_ _minerinfo.emplace(dep_acc.value, [&](auto &row) { row.minerid = minerid; row.admin = adminacc; + row.pool_id = dep_acc; row.max_space = 0; row.space_left = 0; }); @@ -562,7 +567,7 @@ void hddpool::newminer(uint64_t minerid, name adminacc, name dep_acc, asset dep_ void hddpool::delstrpool(name poolid) { - require_auth(_self); + require_auth(N(hddpooladmin)); storepool_index _storepool( _self , _self ); auto itmstorepool = _storepool.find(poolid.value); @@ -570,12 +575,6 @@ void hddpool::delstrpool(name poolid) eosio_assert(itmstorepool->max_space - itmstorepool->space_left == 0, "can not delete this storepool."); _storepool.erase(itmstorepool); } - - /* - while (_storepool.begin() != _storepool.end()) { - _storepool.erase(_storepool.begin()); - - } */ } void hddpool::regstrpool(name pool_id, name pool_owner, uint64_t max_space) @@ -583,8 +582,8 @@ void hddpool::regstrpool(name pool_id, name pool_owner, uint64_t max_space) ((void)max_space); eosio_assert(is_account(pool_owner), "pool_owner invalidate"); + eosio_assert(pool_owner == pool_id, "pool_owner and pool_id must equal"); - //require_auth(_self); require_auth(pool_owner); storepool_index _storepool( _self , _self ); @@ -602,7 +601,9 @@ void hddpool::regstrpool(name pool_id, name pool_owner, uint64_t max_space) void hddpool::chgpoolspace(name pool_id, uint64_t max_space) { - require_auth(N(hddpooladml1)); +// require_auth(N(hddpooladml1)); + require_auth(N(hddpooladmin)); + storepool_index _storepool( _self , _self ); auto itmstorepool = _storepool.find(pool_id.value); eosio_assert(itmstorepool != _storepool.end(), "storepool not exist"); @@ -628,10 +629,12 @@ void hddpool::addm2pool(uint64_t minerid, name pool_id, name minerowner, uint64_ minerinfo_table _minerinfo( _self , _self ); auto itminerinfo = _minerinfo.find(minerid); eosio_assert(itminerinfo != _minerinfo.end(), "miner not registered \n"); + eosio_assert(itminerinfo->pool_id == pool_id, "pool_id invalidate \n"); require_auth(itminerinfo->admin); + - eosio_assert(itminerinfo->pool_id.value == 0, "miner already join to a pool(@@err:alreadyinpool@@)\n"); + eosio_assert(itminerinfo->max_space == 0, "miner already join to a pool(@@err:alreadyinpool@@)\n"); eosio_assert(max_space <= max_minerspace, "miner max_space overflow\n"); @@ -688,44 +691,6 @@ void hddpool::addm2pool(uint64_t minerid, name pool_id, name minerowner, uint64_ } } -void hddpool::mchgstrpool(uint64_t minerid, name new_poolid) -{ - minerinfo_table _minerinfo( _self , _self ); - auto itminerinfo = _minerinfo.find(minerid); - eosio_assert(itminerinfo != _minerinfo.end(), "miner not registered \n"); - - storepool_index _storepool(_self, _self); - auto itstorepool = _storepool.find(new_poolid.value); - eosio_assert(itstorepool != _storepool.end(), "storepool not registered"); - - //require_auth(itminerinfo->admin); - require_auth(itstorepool->pool_owner); - - //归还旧矿池空间 - auto itstorepool_old = _storepool.find(itminerinfo->pool_id.value); - eosio_assert(itstorepool_old != _storepool.end(), "original storepool not registered"); - _storepool.modify(itstorepool_old, _self, [&](auto &row) { - row.space_left += itminerinfo->max_space; - if(row.space_left > row.max_space) { - row.space_left = row.max_space; - } - }); - - //加入新矿池,并判断是新矿池配额是否足够容纳新矿机 - eosio_assert(itstorepool->space_left >= itminerinfo->max_space, "new pool space not enough"); - _storepool.modify(itstorepool, _self, [&](auto &row) { - row.space_left -= itminerinfo->max_space; - }); - - - //修改minerinfo表中该矿机的矿机id - _minerinfo.modify(itminerinfo, _self, [&](auto &row) { - row.pool_id = new_poolid; - }); - -} - - void hddpool::mchgspace(uint64_t minerid, uint64_t max_space) { minerinfo_table _minerinfo( _self , _self ); @@ -1053,5 +1018,5 @@ void hddpool::addhddcnt(int64_t count, uint8_t acc_type) { EOSIO_ABI(hddpool, (getbalance)(buyhdd)(sellhdd)(sethfee)(subbalance)(addhspace)(subhspace)(addmprofit)(delminer) (calcmbalance)(delstrpool)(regstrpool)(chgpoolspace)(newminer)(addm2pool) - (mchgspace)(mchgstrpool)(mchgadminacc)(mchgowneracc) + (mchgspace)(mchgadminacc)(mchgowneracc) (mdeactive)(mactive)(sethddprice)(setytaprice)(setdrratio)(setdrdratio)(addhddcnt)) diff --git a/contracts/hddpool/hddpool.hpp b/contracts/hddpool/hddpool.hpp index 41d3026e4..4af6d5ca5 100644 --- a/contracts/hddpool/hddpool.hpp +++ b/contracts/hddpool/hddpool.hpp @@ -14,7 +14,7 @@ using eosio::name; using eosio::symbol_type; typedef double real_type; -class hddpool : public contract +class hddpool : public eosio::contract { public: using contract::contract; @@ -48,7 +48,6 @@ public: //change miner info related actions void mchgadminacc(uint64_t minerid, name new_adminacc); void mchgowneracc(uint64_t minerid, name new_owneracc); - void mchgstrpool(uint64_t minerid, name new_poolid); void mchgspace(uint64_t minerid, uint64_t max_space); //update hddpool params @@ -58,8 +57,6 @@ public: void setdrdratio(uint64_t ratio); void addhddcnt(int64_t count, uint8_t acc_type); - inline bool is_miner_exist(uint64_t minerid)const; - inline uint64_t get_miner_max_space(uint64_t minerid)const; private: struct userhdd { @@ -192,8 +189,31 @@ private: void new_user_hdd(userhdd_index& userhdd, name user, int64_t balance, account_name payer); + +public: + + static bool is_miner_exist(uint64_t minerid) + { + minerinfo_table _minerinfo( N(hddpool12345) , N(hddpool12345) ); + auto itminerinfo = _minerinfo.find(minerid); + if(itminerinfo != _minerinfo.end()) + return true; + + return false; + } + + static uint64_t get_miner_max_space(uint64_t minerid) + { + minerinfo_table _minerinfo( N(hddpool12345) , N(hddpool12345) ); + auto itminerinfo = _minerinfo.find(minerid); + if(itminerinfo != _minerinfo.end()) + return itminerinfo->max_space; + return 0; + } + }; +/* bool hddpool::is_miner_exist(uint64_t minerid) const { minerinfo_table _minerinfo( _self , _self ); @@ -212,3 +232,4 @@ uint64_t hddpool::get_miner_max_space(uint64_t minerid) const return itminerinfo->max_space; return 0; } +*/ -- GitLab