Merge branch 'master' into dev

This commit is contained in:
Doyle 2019-05-27 10:05:14 +10:00
commit 62a5d7abe5
3 changed files with 44 additions and 3 deletions

View file

@ -61,6 +61,7 @@ namespace cryptonote
{97407, "504af73abbaba85a14ddc16634658bf4dcc241dc288b1eaad09e216836b71023"},
{98552, "2058d5c675bd91284f4996435593499c9ab84a5a0f569f57a86cde2e815e57da"},
{144650, "a1ab207afc790675070ecd7aac874eb0691eb6349ea37c44f8f58697a5d6cbc4"},
{266284, "c42801a37a41e3e9f934a266063483646072a94bfc7269ace178e93c91414b1f"},
};
crypto::hash get_newest_hardcoded_checkpoint(cryptonote::network_type nettype, uint64_t *height)

View file

@ -988,6 +988,7 @@ namespace service_nodes
break;
}
m_transient_state.rollback_events.push_back(std::unique_ptr<rollback_event>(new rollback_key_image_unlock(block_height, snode_key)));
node_info.requested_unlock_height = unlock_height;
early_exit = true;
}
@ -1068,6 +1069,20 @@ namespace service_nodes
}
break;
case rollback_event::key_image_unlock:
{
auto *rollback = reinterpret_cast<rollback_key_image_unlock *>(event);
auto iter = m_transient_state.service_nodes_infos.find(rollback->m_key);
if (iter == m_transient_state.service_nodes_infos.end())
{
MERROR("Could not find service node pubkey in rollback key image unlock");
rollback_applied = false;
break;
}
iter->second.requested_unlock_height = KEY_IMAGE_AWAITING_UNLOCK_HEIGHT;
}
break;
default:
{
MERROR("Unhandled rollback type");
@ -1387,6 +1402,11 @@ namespace service_nodes
{
}
service_node_list::rollback_key_image_unlock::rollback_key_image_unlock(uint64_t block_height, crypto::public_key const &key)
: service_node_list::rollback_event(block_height, key_image_unlock), m_key(key)
{
}
bool service_node_list::store()
{
int hf_version = m_blockchain.get_current_hard_fork_version();
@ -1433,6 +1453,7 @@ namespace service_nodes
case rollback_event::new_type: data_to_store.events.push_back(*reinterpret_cast<rollback_new *>(event_ptr.get())); break;
case rollback_event::prevent_type: data_to_store.events.push_back(*reinterpret_cast<prevent_rollback *>(event_ptr.get())); break;
case rollback_event::key_image_blacklist_type: data_to_store.events.push_back(*reinterpret_cast<rollback_key_image_blacklist *>(event_ptr.get())); break;
case rollback_event::key_image_unlock: data_to_store.events.push_back(*reinterpret_cast<rollback_key_image_unlock *>(event_ptr.get())); break;
default:
MERROR("On storing service node data, unknown rollback event type encountered");
return false;
@ -1555,6 +1576,13 @@ namespace service_nodes
*i = from;
m_transient_state.rollback_events.push_back(std::unique_ptr<rollback_event>(i));
}
else if (event.type() == typeid(rollback_key_image_unlock))
{
const auto& from = boost::get<rollback_key_image_unlock>(event);
auto *i = new rollback_key_image_unlock();
*i = from;
m_transient_state.rollback_events.push_back(std::unique_ptr<rollback_event>(i));
}
else
{
MERROR("Unhandled rollback event type in restoring data to service node list.");

View file

@ -106,7 +106,6 @@ namespace service_nodes
bool is_fully_funded() const { return total_contributed >= staking_requirement; }
size_t total_num_locked_contributions() const;
int dummy; // FIXME(doyle)
BEGIN_SERIALIZE_OBJECT()
VARINT_FIELD(version)
VARINT_FIELD(registration_height)
@ -124,7 +123,6 @@ namespace service_nodes
{
VARINT_FIELD(swarm_id)
}
VARINT_FIELD(dummy)
END_SERIALIZE()
};
@ -207,6 +205,7 @@ namespace service_nodes
new_type,
prevent_type,
key_image_blacklist_type,
key_image_unlock,
};
rollback_event() = default;
@ -272,7 +271,19 @@ namespace service_nodes
FIELD(m_was_adding_to_blacklist)
END_SERIALIZE()
};
typedef boost::variant<rollback_change, rollback_new, prevent_rollback, rollback_key_image_blacklist> rollback_event_variant;
struct rollback_key_image_unlock : public rollback_event
{
rollback_key_image_unlock() { type = key_image_unlock; }
rollback_key_image_unlock(uint64_t block_height, crypto::public_key const &key);
crypto::public_key m_key;
BEGIN_SERIALIZE()
FIELDS(*static_cast<rollback_event *>(this))
FIELDS(m_key)
END_SERIALIZE()
};
typedef boost::variant<rollback_change, rollback_new, prevent_rollback, rollback_key_image_blacklist, rollback_key_image_unlock> rollback_event_variant;
struct quorum_for_serialization
{
@ -381,3 +392,4 @@ VARIANT_TAG(binary_archive, service_nodes::service_node_list::rollback_change, 0
VARIANT_TAG(binary_archive, service_nodes::service_node_list::rollback_new, 0xa2);
VARIANT_TAG(binary_archive, service_nodes::service_node_list::prevent_rollback, 0xa3);
VARIANT_TAG(binary_archive, service_nodes::service_node_list::rollback_key_image_blacklist, 0xa4);
VARIANT_TAG(binary_archive, service_nodes::service_node_list::rollback_key_image_unlock, 0xa5);