提交 30daa923 编写于 作者: W Wang Zhi

update hdddeposit contract

上级 0ce9d232
......@@ -3,7 +3,7 @@
"types": [],
"structs": [
{
"name": "accdeposit",
"name": "acc2deposit",
"base": "",
"fields": [
{
......@@ -21,7 +21,7 @@
]
},
{
"name": "minerdeposit",
"name": "miner2dep",
"base": "",
"fields": [
{
......@@ -35,6 +35,10 @@
{
"name": "deposit",
"type": "asset"
},
{
"name": "dep_total",
"type": "asset"
}
]
},
......@@ -99,7 +103,15 @@
{
"name": "quant",
"type": "asset"
}
},
{
"name": "acc_type",
"type": "uint8"
},
{
"name": "caller",
"type": "name"
}
]
},
{
......@@ -197,15 +209,15 @@
],
"tables": [
{
"name": "accdeposit",
"type": "accdeposit",
"name": "acc2deposit",
"type": "acc2deposit",
"index_type": "i64",
"key_names": [],
"key_types": []
},
{
"name": "minerdeposit",
"type": "minerdeposit",
"name": "miner2dep",
"type": "miner2dep",
"index_type": "i64",
"key_names": [],
"key_types": []
......
......@@ -37,18 +37,20 @@ void hdddeposit::paydeposit(name user, uint64_t minerid, asset quant) {
eosio_assert( real_balance.amount >= quant.amount, "user balance not enough." );
//insert or update minerdeposit table
minerdeposit_table _mdeposit(_self, minerid);
minerdeposit_table _mdeposit(_self, _self);
auto miner = _mdeposit.find( minerid );
if ( miner == _mdeposit.end() ) {
_mdeposit.emplace( _self, [&]( auto& a ){
a.minerid = minerid;
a.account_name = user;
a.deposit = quant;
a.dep_total = quant;
});
} else {
_mdeposit.modify( miner, 0, [&]( auto& a ) {
eosio_assert(a.account_name == user, "must use same account to increase deposit.");
a.deposit += quant;
a.dep_total += quant;
});
}
......@@ -70,9 +72,9 @@ void hdddeposit::undeposit(name user, uint64_t minerid, asset quant) {
require_auth(_self); // need hdd official account to sign this action.
eosio_assert(is_account(user), "user is not an account.");
eosio_assert(quant.symbol == CORE_SYMBOL, "must use YTA for hdd deposit.");
eosio_assert(quant.symbol == CORE_SYMBOL, "must use core asset for hdd deposit.");
minerdeposit_table _mdeposit(_self, minerid);
minerdeposit_table _mdeposit(_self, _self);
accdeposit_table _deposit(_self, user.value);
const auto& miner = _mdeposit.get( minerid, "no deposit record for this minerid.");
eosio_assert( miner.deposit.amount >= quant.amount, "overdrawn deposit." );
......@@ -102,7 +104,7 @@ void hdddeposit::payforfeit(name user, uint64_t minerid, asset quant, uint8_t ac
eosio_assert(is_account(user), "user is not an account.");
eosio_assert(quant.symbol == CORE_SYMBOL, "must use YTA for hdd deposit.");
minerdeposit_table _mdeposit(_self, minerid);
minerdeposit_table _mdeposit(_self, _self);
accdeposit_table _deposit(_self, user.value);
const auto& miner = _mdeposit.get( minerid, "no deposit record for this minerid.");
eosio_assert( miner.deposit.amount >= quant.amount, "overdrawn deposit." );
......@@ -177,9 +179,39 @@ void hdddeposit::cutvote(name user, uint8_t acc_type, name caller) {
void hdddeposit::clearminer(uint64_t minerid) {
require_auth(_self);
minerdeposit_table _mdeposit(_self, minerid);
/*
minerdeposit_table _mdeposit(_self, _self);
_mdeposit.emplace( _self, [&]( auto& a ){
a.minerid = 100001;
a.account_name = name{N(usernamefang)};
a.deposit = asset{0, CORE_SYMBOL};
});
_mdeposit.emplace( _self, [&]( auto& a ){
a.minerid = 100002;
a.account_name = name{N(usernamexiao)};
a.deposit = asset{0, CORE_SYMBOL};
});
_mdeposit.emplace( _self, [&]( auto& a ){
a.minerid = 100003;
a.account_name = name{N(usernamefang)};
a.deposit = asset{0, CORE_SYMBOL};
});
_mdeposit.emplace( _self, [&]( auto& a ){
a.minerid = 100004;
a.account_name = name{N(usernamexiao)};
a.deposit = asset{0, CORE_SYMBOL};
});
*/
minerdeposit_table _mdeposit(_self, _self);
const auto& miner = _mdeposit.get( minerid, "no deposit record for this minerid.");
_mdeposit.erase( miner );
}
void hdddeposit::clearacc(name user) {
......
......@@ -7,6 +7,8 @@
using eosio::name;
using eosio::asset;
using eosio::multi_index;
using eosio::indexed_by;
using eosio::const_mem_fun;
class hdddeposit : public eosio::contract {
......@@ -33,22 +35,26 @@ class hdddeposit : public eosio::contract {
bool is_bp_account(uint64_t uservalue);
//记录某个账户缴纳的押金总量和当前需要缴纳的罚款总量
struct accdeposit {
struct acc2deposit {
name account_name;
asset deposit;
asset forfeit;
uint64_t primary_key()const { return account_name.value; }
};
typedef multi_index<N(accdeposit), accdeposit> accdeposit_table;
typedef multi_index<N(acc2deposit), acc2deposit> accdeposit_table;
//记录哪个账户为哪个矿机抵押了多少钱
struct minerdeposit {
struct miner2dep {
uint64_t minerid; //矿机ID
name account_name;
asset deposit;
asset dep_total;
uint64_t primary_key()const { return minerid; }
uint64_t by_accname()const { return account_name.value; }
};
typedef multi_index<N(minerdeposit), minerdeposit> minerdeposit_table;
typedef multi_index<N(miner2dep), miner2dep,
indexed_by<N(accname), const_mem_fun<miner2dep, uint64_t, &miner2dep::by_accname> >
> minerdeposit_table;
struct deposit_rate
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册