diff --git a/contracts/eosio.system/delegate_bandwidth.cpp b/contracts/eosio.system/delegate_bandwidth.cpp index 297623f1558172f619604adbca09c2de0775a567..dceca34b649477a612935f4556c180c69353c920 100644 --- a/contracts/eosio.system/delegate_bandwidth.cpp +++ b/contracts/eosio.system/delegate_bandwidth.cpp @@ -227,14 +227,13 @@ namespace eosiosystem { }); } //create or replace deferred transaction - /* XXX - refund act; - act.owner = from; + //refund act; + //act.owner = from; eosio::transaction out( now() + refund_delay + refund_expiration_time ); - out.actions.emplace_back( permission_level{ from, N(active) }, _self, N(refund), act ); + out.actions.emplace_back( permission_level{ from, N(active) }, _self, N(refund), from ); out.delay_sec = refund_delay; out.send( from, receiver ); - */ + if ( asset(0) < unstake_net_quantity + unstake_cpu_quantity ) { decrease_voting_power( from, unstake_net_quantity + unstake_cpu_quantity ); } diff --git a/contracts/eosio.system/eosio.system.hpp b/contracts/eosio.system/eosio.system.hpp index b6ce09a2c5d0a91debb137f5ccda7fa971e2456e..962aef8b2c1dad9d4e93a25559613aca77d5d635 100644 --- a/contracts/eosio.system/eosio.system.hpp +++ b/contracts/eosio.system/eosio.system.hpp @@ -69,7 +69,7 @@ namespace eosiosystem { uint64_t primary_key()const { return owner; } uint128_t by_votes()const { return total_votes; } - bool active() const { return packed_key.size() == sizeof(public_key); } + bool active() const { return 0 < packed_key.size(); } EOSLIB_SERIALIZE( producer_info, (owner)(total_votes)(prefs)(packed_key) (per_block_payments)(last_rewards_claim) diff --git a/contracts/eosio.system/voting.cpp b/contracts/eosio.system/voting.cpp index 2423de77f1b0f773b839db8fd312c8aedd496e9e..4d47da4c425358d3156a280d970e7a1112f662ff 100644 --- a/contracts/eosio.system/voting.cpp +++ b/contracts/eosio.system/voting.cpp @@ -58,23 +58,27 @@ namespace eosiosystem { * @pre authority of producer to register * */ - void system_contract::regproducer( const account_name producer, const bytes& producer_key, const eosio_parameters& prefs ) { + void system_contract::regproducer( const account_name producer, const bytes& packed_producer_key, const eosio_parameters& prefs ) { + //eosio::print("produce_key: ", producer_key.size(), ", sizeof(public_key): ", sizeof(public_key), "\n"); require_auth( producer ); producers_table producers_tbl( _self, _self ); auto prod = producers_tbl.find( producer ); + //check that we can unpack producer key + public_key producer_key = eosio::unpack( packed_producer_key ); + if ( prod != producers_tbl.end() ) { producers_tbl.modify( prod, producer, [&]( producer_info& info ){ info.prefs = prefs; - info.packed_key = producer_key; + info.packed_key = eosio::pack( producer_key ); }); } else { producers_tbl.emplace( producer, [&]( producer_info& info ){ info.owner = producer; info.total_votes = 0; info.prefs = prefs; - info.packed_key = producer_key; + info.packed_key = eosio::pack( producer_key ); }); } } @@ -232,7 +236,8 @@ namespace eosiosystem { schedule.producers.emplace_back(); schedule.producers.back().producer_name = it->owner; eosio_assert( sizeof(schedule.producers.back().block_signing_key) == it->packed_key.size(), "size mismatch" ); - std::copy( it->packed_key.begin(), it->packed_key.end(), schedule.producers.back().block_signing_key.data.data() ); + schedule.producers.back().block_signing_key = eosio::unpack( it->packed_key ); + //std::copy( it->packed_key.begin(), it->packed_key.end(), schedule.producers.back().block_signing_key.data.data() ); base_per_transaction_net_usage[n] = it->prefs.base_per_transaction_net_usage; base_per_transaction_cpu_usage[n] = it->prefs.base_per_transaction_cpu_usage;