Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

merge eosio-v1.6.4 to develop branch #77

Merged
merged 24 commits into from
Apr 17, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
3b15c4f
Wrong tag/branch name
fsword Feb 23, 2019
60dcf1a
Merge pull request #6823 from fsword/patch-1
heifner Feb 25, 2019
7c1e14a
Call recover keys before transactions execution so trx->sig_cpu_usage…
heifner Mar 5, 2019
12d9961
Consolidated Security Fixes for 1.6.3
heifner Mar 5, 2019
1d48532
Merge pull request #6870 from EOSIO/sig-cpu-usage-1.6.x
heifner Mar 6, 2019
517fd2c
Merge pull request #6881 from EOSIO/feature/1.6.3-security-omnibus
heifner Mar 6, 2019
bf85b4f
Bump version to 1.6.3
heifner Mar 6, 2019
5e8e294
Merge pull request #6886 from EOSIO/bump-to-1.6.3
heifner Mar 6, 2019
ac3051a
disable asio's experimental string_view usage on macos
spoonincode Mar 29, 2019
3a221ce
fc sync - Remove fc::shared_ptr & refactor logging code to not use it
spoonincode Mar 29, 2019
920e81f
chainbase sync - Remove boost thread and locking code
spoonincode Mar 29, 2019
ce4cced
Merge pull request #7021 from EOSIO/asio_exp_string_view_removal_16x
spoonincode Mar 31, 2019
d52e1bd
Merge pull request #7030 from EOSIO/remove_fc_shared_ptr_16x
spoonincode Mar 31, 2019
b01684c
Fix for close() called while async_read in-flight
heifner Mar 29, 2019
6584f17
Can't call connected(), it checks flag that is only set after first read
heifner Mar 29, 2019
57d5a9c
Merge pull request #7033 from EOSIO/chainbase_remove_boost_thread_16x
heifner Apr 1, 2019
2ff9a34
Merge pull request #7040 from EOSIO/net-plugin-close-fix-1.6.x
heifner Apr 1, 2019
53fca50
print action traces in cleos even if nonmandatory fields are missing
arhag Apr 2, 2019
82a2c0f
Merge pull request #7045 from EOSIO/cleos-transaction-trace-fixes-to-1.6
heifner Apr 2, 2019
bf33876
Consolidated Security Fixes for 1.6.4
heifner Apr 2, 2019
eeec125
Merge pull request #7048 from EOSIO/1.6.4-security-omnibus
heifner Apr 2, 2019
4d85e7e
Bump version to 1.6.4
heifner Apr 2, 2019
b2cc2a8
Merge pull request #7050 from EOSIO/dump-to-1.6.4
heifner Apr 3, 2019
e276df2
merge eosio-v1.6.4 to develop branch
vonhenry Apr 17, 2019
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
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,11 @@ FIND_PACKAGE(Boost 1.67 REQUIRED COMPONENTS
locale
iostreams)

# Some new stdlibc++s will #error on <experimental/string_view>; a problem for boost pre-1.69
if( APPLE AND UNIX )
add_definitions(-DBOOST_ASIO_DISABLE_STD_EXPERIMENTAL_STRING_VIEW)
endif()

if( WIN32 )

message( STATUS "Configuring EOSIO on WIN32")
Expand Down
1 change: 1 addition & 0 deletions Docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -200,3 +200,4 @@ The `blocks` data are stored under `--data-dir` by default, and the wallet files

Currently, the mongodb plugin is disabled in `config.ini` by default, you have to change it manually in `config.ini` or you can mount a `config.ini` file to `/opt/eosio/bin/data-dir/config.ini` in the docker-compose file.


1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,4 @@ BOSCore bases on EOSIO, so you can also referer:
[EOSIO Developer Portal](https://developers.eos.io).



20 changes: 7 additions & 13 deletions libraries/chain/controller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -430,14 +430,7 @@ struct controller_impl {

void clear_all_undo() {
// Rewind the database to the last irreversible block
db.with_write_lock([&] {
db.undo_all();
/*
FC_ASSERT(db.revision() == self.head_block_num(),
"Chainbase revision does not match head block num",
("rev", db.revision())("head_block", self.head_block_num()));
*/
});
db.undo_all();
}

void add_contract_tables_to_snapshot( const snapshot_writer_ptr& snapshot ) const {
Expand Down Expand Up @@ -1149,6 +1142,9 @@ struct controller_impl {
transaction_trace_ptr trace;
try {
auto start = fc::time_point::now();
const bool check_auth = !self.skip_auth_check() && !trx->implicit;
// call recover keys so that trx->sig_cpu_usage is set correctly
const flat_set<public_key_type>& recovered_keys = check_auth ? trx->recover_keys( chain_id ) : flat_set<public_key_type>();
if( !explicit_billed_cpu_time ) {
fc::microseconds already_consumed_time( EOS_PERCENT(trx->sig_cpu_usage.count(), conf.sig_cpu_bill_pct) );

Expand Down Expand Up @@ -1180,15 +1176,13 @@ struct controller_impl {
}
trx_context.delay = fc::seconds(trn.delay_sec);

if( !self.skip_auth_check() && !trx->implicit ) {
if( check_auth ) {
authorization.check_authorization(
trn.actions,
trx->recover_keys( chain_id ),
recovered_keys,
{},
trx_context.delay,
[](){}
/*std::bind(&transaction_context::add_cpu_usage_and_check_time, &trx_context,
std::placeholders::_1)*/,
[&trx_context](){ trx_context.checktime(); },
false
);
}
Expand Down
66 changes: 25 additions & 41 deletions plugins/net_plugin/net_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -593,9 +593,6 @@ namespace eosio {

const string peer_name();

void txn_send_pending(const vector<transaction_id_type>& ids);
void txn_send(const vector<transaction_id_type>& txn_lis);

void blk_send_branch();
void blk_send(const block_id_type& blkid);
void stop_send();
Expand Down Expand Up @@ -742,6 +739,7 @@ namespace eosio {
void rejected_block(const block_id_type& id);

void recv_block(const connection_ptr& conn, const block_id_type& msg, uint32_t bnum);
void expire_blocks( uint32_t bnum );
void recv_transaction(const connection_ptr& conn, const transaction_id_type& id);
void recv_notice(const connection_ptr& conn, const notice_message& msg, bool generated);

Expand Down Expand Up @@ -848,27 +846,6 @@ namespace eosio {
fc_dlog(logger, "canceling wait on ${p}", ("p",peer_name()));
cancel_wait();
if( read_delay_timer ) read_delay_timer->cancel();
pending_message_buffer.reset();
}

void connection::txn_send_pending(const vector<transaction_id_type>& ids) {
const std::set<transaction_id_type, sha256_less> known_ids(ids.cbegin(), ids.cend());
my_impl->expire_local_txns();
for(auto tx = my_impl->local_txns.begin(); tx != my_impl->local_txns.end(); ++tx ){
const bool found = known_ids.find( tx->id ) != known_ids.cend();
if( !found ) {
queue_write( tx->serialized_txn, true, []( boost::system::error_code ec, std::size_t ) {} );
}
}
}

void connection::txn_send(const vector<transaction_id_type>& ids) {
for(const auto& t : ids) {
auto tx = my_impl->local_txns.get<by_id>().find(t);
if( tx != my_impl->local_txns.end() ) {
queue_write( tx->serialized_txn, true, []( boost::system::error_code ec, std::size_t ) {} );
}
}
}

void connection::blk_send_branch() {
Expand Down Expand Up @@ -1697,11 +1674,23 @@ namespace eosio {
}

void dispatch_manager::rejected_block(const block_id_type& id) {
fc_dlog(logger,"not sending rejected transaction ${tid}",("tid",id));
fc_dlog( logger, "rejected block ${id}", ("id", id) );
auto range = received_blocks.equal_range(id);
received_blocks.erase(range.first, range.second);
}

void dispatch_manager::expire_blocks( uint32_t lib_num ) {
for( auto i = received_blocks.begin(); i != received_blocks.end(); ) {
const block_id_type& blk_id = i->first;
uint32_t blk_num = block_header::num_from_id( blk_id );
if( blk_num <= lib_num ) {
i = received_blocks.erase( i );
} else {
++i;
}
}
}

void dispatch_manager::bcast_transaction(const transaction_metadata_ptr& ptrx) {
std::set<connection_ptr> skips;
const auto& id = ptrx->id;
Expand Down Expand Up @@ -1926,6 +1915,7 @@ namespace eosio {
auto current_endpoint = *endpoint_itr;
++endpoint_itr;
c->connecting = true;
c->pending_message_buffer.reset();
connection_wptr weak_conn = c;
c->socket->async_connect( current_endpoint, [weak_conn, endpoint_itr, this] ( const boost::system::error_code& err ) {
auto c = weak_conn.lock();
Expand Down Expand Up @@ -2129,7 +2119,7 @@ namespace eosio {
conn->pending_message_buffer.get_buffer_sequence_for_boost_async_read(), completion_handler,
[this,weak_conn]( boost::system::error_code ec, std::size_t bytes_transferred ) {
auto conn = weak_conn.lock();
if (!conn) {
if (!conn || !conn->socket || !conn->socket->is_open()) {
return;
}

Expand Down Expand Up @@ -2490,17 +2480,6 @@ namespace eosio {
break;
}
case catch_up : {
if( msg.known_trx.pending > 0) {
// plan to get all except what we already know about.
req.req_trx.mode = catch_up;
send_req = true;
size_t known_sum = local_txns.size();
if( known_sum ) {
for( const auto& t : local_txns.get<by_id>() ) {
req.req_trx.ids.push_back( t.id );
}
}
}
break;
}
case normal: {
Expand Down Expand Up @@ -2558,14 +2537,17 @@ namespace eosio {

switch (msg.req_trx.mode) {
case catch_up :
c->txn_send_pending(msg.req_trx.ids);
break;
case normal :
c->txn_send(msg.req_trx.ids);
break;
case none :
if(msg.req_blocks.mode == none)
c->stop_send();
// no break
case normal :
if( !msg.req_trx.ids.empty() ) {
elog( "Invalid request_message, req_trx.ids.size ${s}", ("s", msg.req_trx.ids.size()) );
close(c);
return;
}
break;
default:;
}
Expand Down Expand Up @@ -2693,6 +2675,7 @@ namespace eosio {
}
else {
sync_master->rejected_block(c, blk_num);
dispatcher->rejected_block( blk_id );
}
}

Expand Down Expand Up @@ -2754,6 +2737,7 @@ namespace eosio {

controller& cc = chain_plug->chain();
uint32_t lib = cc.last_irreversible_block_num();
dispatcher->expire_blocks( lib );
for ( auto &c : connections ) {
auto &stale_txn = c->trx_state.get<by_block_num>();
stale_txn.erase( stale_txn.lower_bound(1), stale_txn.upper_bound(lib) );
Expand Down
11 changes: 7 additions & 4 deletions programs/cleos/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -438,22 +438,25 @@ bytes json_or_file_to_bin( const account_name& account, const action_name& actio

void print_action_tree( const fc::variant& action ) {
print_action( action );
const auto& inline_traces = action["inline_traces"].get_array();
for( const auto& t : inline_traces ) {
print_action_tree( t );
if( action.get_object().contains( "inline_traces" ) ) {
const auto& inline_traces = action["inline_traces"].get_array();
for( const auto& t : inline_traces ) {
print_action_tree( t );
}
}
}

void print_result( const fc::variant& result ) { try {
if (result.is_object() && result.get_object().contains("processed")) {
const auto& processed = result["processed"];
const auto& transaction_id = processed["id"].as_string();
string status = processed["receipt"].is_object() ? processed["receipt"]["status"].as_string() : "failed";
string status = "failed";
int64_t net = -1;
int64_t cpu = -1;
if( processed.get_object().contains( "receipt" )) {
const auto& receipt = processed["receipt"];
if( receipt.is_object()) {
status = receipt["status"].as_string();
net = receipt["net_usage_words"].as_int64() * 8;
cpu = receipt["cpu_usage_us"].as_int64();
}
Expand Down