提交 beabe753 编写于 作者: W wangxxzhiyy

update contracts

上级 d64dc596
......@@ -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": [
......
......@@ -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))
......@@ -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;
}
......@@ -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",
......
......@@ -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))
......@@ -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;
}
*/
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册