From 5981d2750046ff41a58d3694bb2d6ac9d02963c1 Mon Sep 17 00:00:00 2001 From: Davor Hirunda Date: Sun, 30 Oct 2022 01:35:43 +0000 Subject: [PATCH 1/4] Fix for undo crash --- .../chain/sidechain_address_evaluator.cpp | 14 +++-- tests/tests/sidechain_addresses_test.cpp | 60 +++++++++++++++++-- 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/libraries/chain/sidechain_address_evaluator.cpp b/libraries/chain/sidechain_address_evaluator.cpp index 625ef2f0..9204e88b 100644 --- a/libraries/chain/sidechain_address_evaluator.cpp +++ b/libraries/chain/sidechain_address_evaluator.cpp @@ -24,9 +24,10 @@ object_id_type add_sidechain_address_evaluator::do_apply(const sidechain_address if (addr_itr != sidechain_addresses_idx.end()) { - db().modify(*addr_itr, [&](sidechain_address_object &sao) { - sao.expires = db().head_block_time(); - }); + //db().modify(*addr_itr, [&](sidechain_address_object &sao) { + // sao.expires = db().head_block_time(); + //}); + db().remove(*addr_itr); } const auto& new_sidechain_address_object = db().create( [&]( sidechain_address_object& obj ){ @@ -106,9 +107,10 @@ void_result delete_sidechain_address_evaluator::do_apply(const sidechain_address const auto& idx = db().get_index_type().indices().get(); auto sidechain_address = idx.find(op.sidechain_address_id); if(sidechain_address != idx.end()) { - db().modify(*sidechain_address, [&](sidechain_address_object &sao) { - sao.expires = db().head_block_time(); - }); + //db().modify(*sidechain_address, [&](sidechain_address_object &sao) { + // sao.expires = db().head_block_time(); + //}); + db().remove(*sidechain_address); } return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/tests/tests/sidechain_addresses_test.cpp b/tests/tests/sidechain_addresses_test.cpp index 755ad37f..b04024ec 100644 --- a/tests/tests/sidechain_addresses_test.cpp +++ b/tests/tests/sidechain_addresses_test.cpp @@ -151,18 +151,66 @@ BOOST_AUTO_TEST_CASE( sidechain_address_delete_test ) { sign(trx, alice_private_key); PUSH_TX(db, trx, ~0); } - time_point_sec now = db.head_block_time(); + //time_point_sec now = db.head_block_time(); generate_block(); { BOOST_TEST_MESSAGE("Check sidechain_address_delete_operation results"); const auto& idx = db.get_index_type().indices().get(); - BOOST_REQUIRE( idx.size() == 1 ); - auto obj = idx.find( boost::make_tuple( alice_id, sidechain_type::bitcoin, time_point_sec::maximum() ) ); - BOOST_REQUIRE( obj == idx.end() ); - auto expired_obj = idx.find( boost::make_tuple( alice_id, sidechain_type::bitcoin, now ) ); - BOOST_REQUIRE( expired_obj != idx.end() ); + //BOOST_REQUIRE( idx.size() == 1 ); + //auto obj = idx.find( boost::make_tuple( alice_id, sidechain_type::bitcoin, time_point_sec::maximum() ) ); + //BOOST_REQUIRE( obj == idx.end() ); + //auto expired_obj = idx.find( boost::make_tuple( alice_id, sidechain_type::bitcoin, now ) ); + //BOOST_REQUIRE( expired_obj != idx.end() ); + BOOST_REQUIRE( idx.size() == 0 ); + } +} + +BOOST_AUTO_TEST_CASE(sidechain_address_delete_create_test) { + + BOOST_TEST_MESSAGE("sidechain_address_delete_create_test"); + + INVOKE(sidechain_address_add_test); + + GET_ACTOR(alice); + + const auto &idx = db.get_index_type().indices().get(); + BOOST_REQUIRE(idx.size() == 1); + auto obj = idx.find(boost::make_tuple(alice_id, sidechain_type::bitcoin, time_point_sec::maximum())); + BOOST_REQUIRE(obj != idx.end()); + + { + BOOST_TEST_MESSAGE("Delete and create sidechain address"); + sidechain_address_delete_operation op_del; + op_del.payer = alice_id; + op_del.sidechain_address_id = sidechain_address_id_type(0); + op_del.sidechain_address_account = alice_id; + op_del.sidechain = obj->sidechain; + + sidechain_address_add_operation op_create; + op_create.payer = alice_id; + op_create.sidechain_address_account = alice_id; + op_create.sidechain = sidechain_type::bitcoin; + op_create.deposit_public_key = "deposit_public_key"; + op_create.withdraw_public_key = "withdraw_public_key"; + op_create.withdraw_address = "withdraw_address"; + + trx.operations.push_back(op_del); + trx.operations.push_back(op_create); + sign(trx, alice_private_key); + PUSH_TX(db, trx, ~0); + } + + // both transactions should goes in one block (delete + create) + generate_block(); + + { + BOOST_TEST_MESSAGE("Check sidechain_address_delete_add_operation results"); + const auto &idx = db.get_index_type().indices().get(); + BOOST_REQUIRE(idx.size() == 1); + auto obj = idx.find(boost::make_tuple(alice_id, sidechain_type::bitcoin, time_point_sec::maximum())); + BOOST_REQUIRE(obj != idx.end()); } } -- 2.45.2 From c0203e99e327359dbb1af87963cae5838710ef56 Mon Sep 17 00:00:00 2001 From: hirunda Date: Wed, 2 Nov 2022 22:54:44 +0100 Subject: [PATCH 2/4] Add HARDFORK for delete sidechain address --- libraries/chain/hardfork.d/SIDECHAIN.hf | 7 +++++ .../chain/sidechain_address_evaluator.cpp | 28 +++++++++++-------- tests/tests/sidechain_addresses_test.cpp | 6 ++++ 3 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 libraries/chain/hardfork.d/SIDECHAIN.hf diff --git a/libraries/chain/hardfork.d/SIDECHAIN.hf b/libraries/chain/hardfork.d/SIDECHAIN.hf new file mode 100644 index 00000000..63f24235 --- /dev/null +++ b/libraries/chain/hardfork.d/SIDECHAIN.hf @@ -0,0 +1,7 @@ +#ifndef HARDFORK_SIDECHAIN_DELETE_TIME +#ifdef BUILD_PEERPLAYS_TESTNET +#define HARDFORK_SIDECHAIN_DELETE_TIME (fc::time_point_sec::from_iso_string("2022-11-02T02:00:00")) +#else +#define HARDFORK_SIDECHAIN_DELETE_TIME (fc::time_point_sec::from_iso_string("2022-11-02T02:00:00")) +#endif +#endif diff --git a/libraries/chain/sidechain_address_evaluator.cpp b/libraries/chain/sidechain_address_evaluator.cpp index 9204e88b..44408d42 100644 --- a/libraries/chain/sidechain_address_evaluator.cpp +++ b/libraries/chain/sidechain_address_evaluator.cpp @@ -22,12 +22,14 @@ object_id_type add_sidechain_address_evaluator::do_apply(const sidechain_address const auto &sidechain_addresses_idx = db().get_index_type().indices().get(); const auto &addr_itr = sidechain_addresses_idx.find(std::make_tuple(op.sidechain_address_account, op.sidechain, time_point_sec::maximum())); - if (addr_itr != sidechain_addresses_idx.end()) - { - //db().modify(*addr_itr, [&](sidechain_address_object &sao) { - // sao.expires = db().head_block_time(); - //}); - db().remove(*addr_itr); + if (addr_itr != sidechain_addresses_idx.end()) { + if (db().head_block_time() >= HARDFORK_SIDECHAIN_DELETE_TIME) { + db().remove(*addr_itr); + } else { + db().modify(*addr_itr, [&](sidechain_address_object &sao) { + sao.expires = db().head_block_time(); + }); + } } const auto& new_sidechain_address_object = db().create( [&]( sidechain_address_object& obj ){ @@ -106,11 +108,15 @@ void_result delete_sidechain_address_evaluator::do_apply(const sidechain_address { try { const auto& idx = db().get_index_type().indices().get(); auto sidechain_address = idx.find(op.sidechain_address_id); - if(sidechain_address != idx.end()) { - //db().modify(*sidechain_address, [&](sidechain_address_object &sao) { - // sao.expires = db().head_block_time(); - //}); - db().remove(*sidechain_address); + + if (sidechain_address != idx.end()) { + if (db().head_block_time() >= HARDFORK_SIDECHAIN_DELETE_TIME) { + db().remove(*sidechain_address); + } else { + db().modify(*sidechain_address, [&](sidechain_address_object &sao) { + sao.expires = db().head_block_time(); + }); + } } return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/tests/tests/sidechain_addresses_test.cpp b/tests/tests/sidechain_addresses_test.cpp index b04024ec..12fb97bf 100644 --- a/tests/tests/sidechain_addresses_test.cpp +++ b/tests/tests/sidechain_addresses_test.cpp @@ -129,6 +129,9 @@ BOOST_AUTO_TEST_CASE( sidechain_address_delete_test ) { BOOST_TEST_MESSAGE("sidechain_address_delete_test"); + generate_blocks(HARDFORK_SIDECHAIN_DELETE_TIME); + generate_block(); + INVOKE(sidechain_address_add_test); GET_ACTOR(alice); @@ -171,6 +174,9 @@ BOOST_AUTO_TEST_CASE(sidechain_address_delete_create_test) { BOOST_TEST_MESSAGE("sidechain_address_delete_create_test"); + generate_blocks(HARDFORK_SIDECHAIN_DELETE_TIME); + generate_block(); + INVOKE(sidechain_address_add_test); GET_ACTOR(alice); -- 2.45.2 From 6310c6beb346e16ff1dc2cba337da17060492b4e Mon Sep 17 00:00:00 2001 From: hirunda Date: Thu, 3 Nov 2022 14:13:36 +0100 Subject: [PATCH 3/4] Set correct date for HARDFORK --- libraries/chain/hardfork.d/SIDECHAIN.hf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/chain/hardfork.d/SIDECHAIN.hf b/libraries/chain/hardfork.d/SIDECHAIN.hf index 63f24235..3a0a3990 100644 --- a/libraries/chain/hardfork.d/SIDECHAIN.hf +++ b/libraries/chain/hardfork.d/SIDECHAIN.hf @@ -1,7 +1,7 @@ #ifndef HARDFORK_SIDECHAIN_DELETE_TIME #ifdef BUILD_PEERPLAYS_TESTNET -#define HARDFORK_SIDECHAIN_DELETE_TIME (fc::time_point_sec::from_iso_string("2022-11-02T02:00:00")) +#define HARDFORK_SIDECHAIN_DELETE_TIME (fc::time_point_sec::from_iso_string("2022-11-16T02:00:00")) #else -#define HARDFORK_SIDECHAIN_DELETE_TIME (fc::time_point_sec::from_iso_string("2022-11-02T02:00:00")) +#define HARDFORK_SIDECHAIN_DELETE_TIME (fc::time_point_sec::from_iso_string("2022-11-16T02:00:00")) #endif #endif -- 2.45.2 From 36b408e18e83c5caf99405e59898558982fb9050 Mon Sep 17 00:00:00 2001 From: hirunda Date: Thu, 3 Nov 2022 15:12:50 +0100 Subject: [PATCH 4/4] Remove commented lines in tests --- tests/tests/sidechain_addresses_test.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/tests/sidechain_addresses_test.cpp b/tests/tests/sidechain_addresses_test.cpp index 12fb97bf..cd0fb876 100644 --- a/tests/tests/sidechain_addresses_test.cpp +++ b/tests/tests/sidechain_addresses_test.cpp @@ -161,11 +161,6 @@ BOOST_AUTO_TEST_CASE( sidechain_address_delete_test ) { BOOST_TEST_MESSAGE("Check sidechain_address_delete_operation results"); const auto& idx = db.get_index_type().indices().get(); - //BOOST_REQUIRE( idx.size() == 1 ); - //auto obj = idx.find( boost::make_tuple( alice_id, sidechain_type::bitcoin, time_point_sec::maximum() ) ); - //BOOST_REQUIRE( obj == idx.end() ); - //auto expired_obj = idx.find( boost::make_tuple( alice_id, sidechain_type::bitcoin, now ) ); - //BOOST_REQUIRE( expired_obj != idx.end() ); BOOST_REQUIRE( idx.size() == 0 ); } } -- 2.45.2