Compare commits
9 commits
feature/re
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d3d967a2d7 | ||
|
|
178756bd34 | ||
|
|
1f70857d64 | ||
|
|
97e85a849d | ||
|
|
dc4cdd6e4b | ||
|
|
1472066af6 | ||
|
|
a641b8e93f | ||
|
|
aa099f960f | ||
|
|
f0654e5ffd |
22 changed files with 325 additions and 296 deletions
|
|
@ -134,11 +134,8 @@ RUN \
|
||||||
libsodium-dev
|
libsodium-dev
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
git clone https://github.com/libbitcoin/libbitcoin-build.git && \
|
git clone --branch version3.8.0 --depth 1 https://gitlab.com/PBSA/peerplays-1.0/libbitcoin-explorer.git && \
|
||||||
cd libbitcoin-build && \
|
cd libbitcoin-explorer && \
|
||||||
git reset --hard 92c215fc1ffa272bab4d485d369d0306db52d69d && \
|
|
||||||
./generate3.sh && \
|
|
||||||
cd ../libbitcoin-explorer && \
|
|
||||||
./install.sh && \
|
./install.sh && \
|
||||||
ldconfig && \
|
ldconfig && \
|
||||||
rm -rf /home/peerplays/src/*
|
rm -rf /home/peerplays/src/*
|
||||||
|
|
|
||||||
|
|
@ -134,11 +134,8 @@ RUN \
|
||||||
libsodium-dev
|
libsodium-dev
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
git clone https://github.com/libbitcoin/libbitcoin-build.git && \
|
git clone --branch version3.8.0 --depth 1 https://gitlab.com/PBSA/peerplays-1.0/libbitcoin-explorer.git && \
|
||||||
cd libbitcoin-build && \
|
cd libbitcoin-explorer && \
|
||||||
git reset --hard 92c215fc1ffa272bab4d485d369d0306db52d69d && \
|
|
||||||
./generate3.sh && \
|
|
||||||
cd ../libbitcoin-explorer && \
|
|
||||||
./install.sh && \
|
./install.sh && \
|
||||||
ldconfig && \
|
ldconfig && \
|
||||||
rm -rf /home/peerplays/src/*
|
rm -rf /home/peerplays/src/*
|
||||||
|
|
|
||||||
|
|
@ -77,11 +77,8 @@ sudo ldconfig
|
||||||
|
|
||||||
libbitcoin-explorer setup:
|
libbitcoin-explorer setup:
|
||||||
```
|
```
|
||||||
git clone https://github.com/libbitcoin/libbitcoin-build.git
|
git clone --branch version3.8.0 --depth 1 https://gitlab.com/PBSA/peerplays-1.0/libbitcoin-explorer.git
|
||||||
cd libbitcoin-build
|
cd libbitcoin-explorer
|
||||||
git reset --hard 92c215fc1ffa272bab4d485d369d0306db52d69d
|
|
||||||
./generate3.sh
|
|
||||||
cd ../libbitcoin-explorer
|
|
||||||
sudo ./install.sh
|
sudo ./install.sh
|
||||||
sudo ldconfig
|
sudo ldconfig
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -2197,7 +2197,7 @@ vector<variant> database_api_impl::lookup_vote_ids(const vector<vote_id_type> &v
|
||||||
case vote_id_type::committee: {
|
case vote_id_type::committee: {
|
||||||
auto itr = committee_idx.find(id);
|
auto itr = committee_idx.find(id);
|
||||||
if (itr != committee_idx.end())
|
if (itr != committee_idx.end())
|
||||||
result.emplace_back(variant(*itr, 1));
|
result.emplace_back(variant(*itr, 2)); // Depth of committee_member_object is 1, add 1 to be safe
|
||||||
else
|
else
|
||||||
result.emplace_back(variant());
|
result.emplace_back(variant());
|
||||||
break;
|
break;
|
||||||
|
|
@ -2205,7 +2205,7 @@ vector<variant> database_api_impl::lookup_vote_ids(const vector<vote_id_type> &v
|
||||||
case vote_id_type::witness: {
|
case vote_id_type::witness: {
|
||||||
auto itr = witness_idx.find(id);
|
auto itr = witness_idx.find(id);
|
||||||
if (itr != witness_idx.end())
|
if (itr != witness_idx.end())
|
||||||
result.emplace_back(variant(*itr, 1));
|
result.emplace_back(variant(*itr, 2)); // Depth of witness_object is 1, add 1 here to be safe
|
||||||
else
|
else
|
||||||
result.emplace_back(variant());
|
result.emplace_back(variant());
|
||||||
break;
|
break;
|
||||||
|
|
@ -2213,11 +2213,15 @@ vector<variant> database_api_impl::lookup_vote_ids(const vector<vote_id_type> &v
|
||||||
case vote_id_type::worker: {
|
case vote_id_type::worker: {
|
||||||
auto itr = for_worker_idx.find(id);
|
auto itr = for_worker_idx.find(id);
|
||||||
if (itr != for_worker_idx.end()) {
|
if (itr != for_worker_idx.end()) {
|
||||||
result.emplace_back(variant(*itr, 1));
|
result.emplace_back(variant(*itr, 4)); // Depth of worker_object is 3, add 1 here to be safe.
|
||||||
|
// If we want to extract the balance object inside,
|
||||||
|
// need to increase this value
|
||||||
} else {
|
} else {
|
||||||
auto itr = against_worker_idx.find(id);
|
auto itr = against_worker_idx.find(id);
|
||||||
if (itr != against_worker_idx.end()) {
|
if (itr != against_worker_idx.end()) {
|
||||||
result.emplace_back(variant(*itr, 1));
|
result.emplace_back(variant(*itr, 4)); // Depth of worker_object is 3, add 1 here to be safe.
|
||||||
|
// If we want to extract the balance object inside,
|
||||||
|
// need to increase this value
|
||||||
} else {
|
} else {
|
||||||
result.emplace_back(variant());
|
result.emplace_back(variant());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -386,23 +386,14 @@ vector<uint64_t> database::get_random_numbers(uint64_t minimum, uint64_t maximum
|
||||||
|
|
||||||
bool database::is_asset_creation_allowed(const string &symbol)
|
bool database::is_asset_creation_allowed(const string &symbol)
|
||||||
{
|
{
|
||||||
time_point_sec now = head_block_time();
|
|
||||||
std::unordered_set<std::string> post_son_hf_symbols = {"ETH", "USDT", "BNB", "ADA", "DOGE", "XRP", "USDC", "DOT", "UNI", "BUSD", "BCH", "LTC", "SOL", "LINK", "MATIC", "THETA",
|
|
||||||
"WBTC", "XLM", "ICP", "DAI", "VET", "ETC", "TRX", "FIL", "XMR", "EGR", "EOS", "SHIB", "AAVE", "CRO", "ALGO", "AMP", "BTCB",
|
|
||||||
"BSV", "KLAY", "CAKE", "FTT", "LEO", "XTZ", "TFUEL", "MIOTA", "LUNA", "NEO", "ATOM", "MKR", "FEI", "WBNB", "UST", "AVAX",
|
|
||||||
"STEEM", "HIVE", "HBD", "SBD", "BTS"};
|
|
||||||
if (symbol == "BTC")
|
if (symbol == "BTC")
|
||||||
{
|
{
|
||||||
if (now < HARDFORK_SON_TIME)
|
if (head_block_time() < HARDFORK_SON_TIME)
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (post_son_hf_symbols.find(symbol) != post_son_hf_symbols.end())
|
|
||||||
{
|
|
||||||
if (now >= HARDFORK_SON_TIME)
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} }
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,7 @@ struct worker_pay_visitor
|
||||||
worker.pay_worker(pay, db);
|
worker.pay_worker(pay, db);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
void database::update_worker_votes()
|
void database::update_worker_votes()
|
||||||
{
|
{
|
||||||
auto& idx = get_index_type<worker_index>();
|
auto& idx = get_index_type<worker_index>();
|
||||||
|
|
@ -185,6 +186,28 @@ void database::update_worker_votes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void database::hotfix_2024()
|
||||||
|
{
|
||||||
|
if (head_block_time() >= HARDFORK_HOTFIX_2024_TIME)
|
||||||
|
{
|
||||||
|
if (get_chain_id().str() == "6b6b5f0ce7a36d323768e534f3edb41c6d6332a541a95725b98e28d140850134")
|
||||||
|
{
|
||||||
|
const auto& vb_idx = get_index_type<vesting_balance_index>().indices().get<by_id>();
|
||||||
|
auto vbo = vb_idx.find(vesting_balance_id_type(388));
|
||||||
|
if (vbo != vb_idx.end())
|
||||||
|
{
|
||||||
|
if (vbo->owner == account_id_type(14786))
|
||||||
|
{
|
||||||
|
modify(*vbo, [&]( vesting_balance_object& _vbo)
|
||||||
|
{
|
||||||
|
_vbo.owner = account_id_type(0);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void database::pay_sons_before_hf_ethereum()
|
void database::pay_sons_before_hf_ethereum()
|
||||||
{
|
{
|
||||||
const auto now = head_block_time();
|
const auto now = head_block_time();
|
||||||
|
|
@ -2283,7 +2306,7 @@ void database::perform_son_tasks()
|
||||||
// Add vote_ids for HIVE and ETHEREUM to all existing SONs
|
// Add vote_ids for HIVE and ETHEREUM to all existing SONs
|
||||||
const auto &all_sons = get_index_type<son_index>().indices().get<by_id>();
|
const auto &all_sons = get_index_type<son_index>().indices().get<by_id>();
|
||||||
for (const son_object &son : all_sons) {
|
for (const son_object &son : all_sons) {
|
||||||
vote_id_type existing_vote_id_bitcoin;
|
const auto existing_vote_id_bitcoin = son.get_bitcoin_vote_id();
|
||||||
vote_id_type new_vote_id_hive;
|
vote_id_type new_vote_id_hive;
|
||||||
vote_id_type new_vote_id_eth;
|
vote_id_type new_vote_id_eth;
|
||||||
|
|
||||||
|
|
@ -2300,7 +2323,7 @@ void database::perform_son_tasks()
|
||||||
// Duplicate all votes from bitcoin to hive
|
// Duplicate all votes from bitcoin to hive
|
||||||
const auto &all_accounts = get_index_type<account_index>().indices().get<by_id>();
|
const auto &all_accounts = get_index_type<account_index>().indices().get<by_id>();
|
||||||
for (const auto &account : all_accounts) {
|
for (const auto &account : all_accounts) {
|
||||||
if (account.options.votes.count(existing_vote_id_bitcoin) != 0) {
|
if (existing_vote_id_bitcoin.valid() && account.options.votes.count(*existing_vote_id_bitcoin) != 0) {
|
||||||
modify(account, [new_vote_id_hive](account_object &a) {
|
modify(account, [new_vote_id_hive](account_object &a) {
|
||||||
a.options.votes.insert(new_vote_id_hive);
|
a.options.votes.insert(new_vote_id_hive);
|
||||||
});
|
});
|
||||||
|
|
@ -2510,6 +2533,7 @@ void database::perform_chain_maintenance(const signed_block& next_block, const g
|
||||||
update_active_committee_members();
|
update_active_committee_members();
|
||||||
update_active_sons();
|
update_active_sons();
|
||||||
update_worker_votes();
|
update_worker_votes();
|
||||||
|
hotfix_2024();
|
||||||
|
|
||||||
const dynamic_global_property_object& dgpo = get_dynamic_global_properties();
|
const dynamic_global_property_object& dgpo = get_dynamic_global_properties();
|
||||||
|
|
||||||
|
|
|
||||||
7
libraries/chain/hardfork.d/HOTFIX_2024.hf
Normal file
7
libraries/chain/hardfork.d/HOTFIX_2024.hf
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
#ifndef HARDFORK_HOTFIX_2024_TIME
|
||||||
|
#ifdef BUILD_PEERPLAYS_TESTNET
|
||||||
|
#define HARDFORK_HOTFIX_2024_TIME (fc::time_point_sec::from_iso_string("2023-12-20T00:00:00"))
|
||||||
|
#else
|
||||||
|
#define HARDFORK_HOTFIX_2024_TIME (fc::time_point_sec::from_iso_string("2023-12-20T00:00:00"))
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
@ -2,6 +2,6 @@
|
||||||
#ifdef BUILD_PEERPLAYS_TESTNET
|
#ifdef BUILD_PEERPLAYS_TESTNET
|
||||||
#define HARDFORK_SON_FOR_ETHEREUM_TIME (fc::time_point_sec::from_iso_string("2023-07-17T12:00:00"))
|
#define HARDFORK_SON_FOR_ETHEREUM_TIME (fc::time_point_sec::from_iso_string("2023-07-17T12:00:00"))
|
||||||
#else
|
#else
|
||||||
#define HARDFORK_SON_FOR_ETHEREUM_TIME (fc::time_point_sec::from_iso_string("2023-07-31T12:00:00"))
|
#define HARDFORK_SON_FOR_ETHEREUM_TIME (fc::time_point_sec::from_iso_string("2023-10-24T12:00:00"))
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -594,6 +594,7 @@ namespace graphene { namespace chain {
|
||||||
const flat_map<sidechain_type, vector<son_sidechain_info> >& new_active_sons );
|
const flat_map<sidechain_type, vector<son_sidechain_info> >& new_active_sons );
|
||||||
void update_son_wallet( const flat_map<sidechain_type, vector<son_sidechain_info> >& new_active_sons );
|
void update_son_wallet( const flat_map<sidechain_type, vector<son_sidechain_info> >& new_active_sons );
|
||||||
void update_worker_votes();
|
void update_worker_votes();
|
||||||
|
void hotfix_2024();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
double calculate_vesting_factor(const account_object& stake_account);
|
double calculate_vesting_factor(const account_object& stake_account);
|
||||||
|
|
|
||||||
|
|
@ -100,6 +100,7 @@ private:
|
||||||
uint16_t retries_threshold = 150;
|
uint16_t retries_threshold = 150;
|
||||||
|
|
||||||
bool first_block_skipped;
|
bool first_block_skipped;
|
||||||
|
bool son_processing_enabled;
|
||||||
void on_applied_block(const signed_block &b);
|
void on_applied_block(const signed_block &b);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -135,7 +136,8 @@ peerplays_sidechain_plugin_impl::peerplays_sidechain_plugin_impl(peerplays_sidec
|
||||||
}
|
}
|
||||||
return net_handlers;
|
return net_handlers;
|
||||||
}()),
|
}()),
|
||||||
first_block_skipped(false) {
|
first_block_skipped(false),
|
||||||
|
son_processing_enabled(false) {
|
||||||
}
|
}
|
||||||
|
|
||||||
peerplays_sidechain_plugin_impl::~peerplays_sidechain_plugin_impl() {
|
peerplays_sidechain_plugin_impl::~peerplays_sidechain_plugin_impl() {
|
||||||
|
|
@ -871,7 +873,16 @@ void peerplays_sidechain_plugin_impl::settle_sidechain_transactions(sidechain_ty
|
||||||
|
|
||||||
void peerplays_sidechain_plugin_impl::on_applied_block(const signed_block &b) {
|
void peerplays_sidechain_plugin_impl::on_applied_block(const signed_block &b) {
|
||||||
if (first_block_skipped) {
|
if (first_block_skipped) {
|
||||||
|
if (son_processing_enabled) {
|
||||||
schedule_son_processing();
|
schedule_son_processing();
|
||||||
|
} else {
|
||||||
|
const fc::time_point now_fine = fc::time_point::now();
|
||||||
|
const fc::time_point_sec now = now_fine + fc::microseconds(500000);
|
||||||
|
if (plugin.database().get_slot_time(1) >= now) {
|
||||||
|
son_processing_enabled = true;
|
||||||
|
schedule_son_processing();
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
first_block_skipped = true;
|
first_block_skipped = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -680,7 +680,7 @@ void sidechain_net_handler::on_applied_block(const signed_block &b) {
|
||||||
const bool is_tracked_asset =
|
const bool is_tracked_asset =
|
||||||
((sidechain == sidechain_type::bitcoin) && (transfer_op.amount.asset_id == gpo.parameters.btc_asset())) ||
|
((sidechain == sidechain_type::bitcoin) && (transfer_op.amount.asset_id == gpo.parameters.btc_asset())) ||
|
||||||
((sidechain == sidechain_type::ethereum) && (transfer_op.amount.asset_id == gpo.parameters.eth_asset())) ||
|
((sidechain == sidechain_type::ethereum) && (transfer_op.amount.asset_id == gpo.parameters.eth_asset())) ||
|
||||||
((sidechain == sidechain_type::ethereum) && (transfer_op.amount.asset_id != gpo.parameters.btc_asset()) && (transfer_op.amount.asset_id != gpo.parameters.hbd_asset()) && (transfer_op.amount.asset_id != gpo.parameters.hive_asset())) ||
|
((sidechain == sidechain_type::ethereum) && (transfer_op.amount.asset_id != gpo.parameters.btc_asset()) && (transfer_op.amount.asset_id != gpo.parameters.hbd_asset()) && (transfer_op.amount.asset_id != gpo.parameters.hive_asset()) && (transfer_op.amount.asset_id != asset_id_type())) ||
|
||||||
((sidechain == sidechain_type::hive) && (transfer_op.amount.asset_id == gpo.parameters.hbd_asset())) ||
|
((sidechain == sidechain_type::hive) && (transfer_op.amount.asset_id == gpo.parameters.hbd_asset())) ||
|
||||||
((sidechain == sidechain_type::hive) && (transfer_op.amount.asset_id == gpo.parameters.hive_asset()));
|
((sidechain == sidechain_type::hive) && (transfer_op.amount.asset_id == gpo.parameters.hive_asset()));
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ public:
|
||||||
{
|
{
|
||||||
fixture_.init_nathan();
|
fixture_.init_nathan();
|
||||||
fixture_.generate_blocks(HARDFORK_SON_FOR_ETHEREUM_TIME);
|
fixture_.generate_blocks(HARDFORK_SON_FOR_ETHEREUM_TIME);
|
||||||
fixture_.generate_block();
|
fixture_.generate_maintenance_block();
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_son(const std::string& account_name, const std::string& son_url,
|
void create_son(const std::string& account_name, const std::string& son_url,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue