From ee3a7210bf2a209b5b1d151d18f819bff3733cf4 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 2 Nov 2014 08:11:28 -0600 Subject: [PATCH] Moving block type in to header. --- rai/core/core.cpp | 17 +++++++++++------ rai/core/core.hpp | 1 + rai/test/block.cpp | 18 ------------------ rai/test/message.cpp | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/rai/core/core.cpp b/rai/core/core.cpp index 29b61f6e..753cc19e 100644 --- a/rai/core/core.cpp +++ b/rai/core/core.cpp @@ -1040,10 +1040,9 @@ void rai::election::announce_vote () void rai::network::confirm_block (std::unique_ptr block_a, uint64_t sequence_a) { - rai::confirm_ack confirm; + rai::confirm_ack confirm (std::move (block_a)); confirm.vote.address = client.representative; confirm.vote.sequence = sequence_a; - confirm.vote.block = std::move (block_a); rai::private_key prv; auto error (client.wallet.fetch (client.representative, prv)); assert (!error); @@ -1417,9 +1416,8 @@ void rai::processor::process_confirmation (rai::block const & block_a, rai::endp rai::private_key prv; auto error (client.wallet.fetch (client.representative, prv)); assert (!error); - rai::confirm_ack outgoing; + rai::confirm_ack outgoing (block_a.clone ()); outgoing.vote.address = client.representative; - outgoing.vote.block = block_a.clone (); outgoing.vote.sequence = 0; rai::sign_message (prv, client.representative, outgoing.vote.hash (), outgoing.vote.signature); assert (!rai::validate_message (client.representative, outgoing.vote.hash (), outgoing.vote.signature)); @@ -1454,6 +1452,13 @@ message (rai::message_type::confirm_ack) { } +rai::confirm_ack::confirm_ack (std::unique_ptr block_a) : +message (rai::message_type::confirm_ack) +{ + block_type_set (block_a->type ()); + vote.block = std::move (block_a); +} + bool rai::confirm_ack::deserialize (rai::stream & stream_a) { auto result (read_header (stream_a, version_max, version_using, version_min, type, extensions)); @@ -1470,7 +1475,7 @@ bool rai::confirm_ack::deserialize (rai::stream & stream_a) result = read (stream_a, vote.sequence); if (!result) { - vote.block = rai::deserialize_block (stream_a); + vote.block = rai::deserialize_block (stream_a, block_type ()); result = vote.block == nullptr; } } @@ -1485,7 +1490,7 @@ void rai::confirm_ack::serialize (rai::stream & stream_a) write (stream_a, vote.address); write (stream_a, vote.signature); write (stream_a, vote.sequence); - rai::serialize_block (stream_a, *vote.block); + vote.block->serialize (stream_a); } bool rai::confirm_ack::operator == (rai::confirm_ack const & other_a) const diff --git a/rai/core/core.hpp b/rai/core/core.hpp index 913c43c9..04a4b72b 100644 --- a/rai/core/core.hpp +++ b/rai/core/core.hpp @@ -198,6 +198,7 @@ namespace rai { { public: confirm_ack (); + confirm_ack (std::unique_ptr ); bool deserialize (rai::stream &); void serialize (rai::stream &) override; void visit (rai::message_visitor &) const override; diff --git a/rai/test/block.cpp b/rai/test/block.cpp index 393b460d..15e13875 100644 --- a/rai/test/block.cpp +++ b/rai/test/block.cpp @@ -168,24 +168,6 @@ TEST (send_block, copy) ASSERT_EQ (block1, block2); } -TEST (confirm_ack, serialization) -{ - rai::confirm_ack con1; - rai::keypair key1; - con1.vote.address = key1.pub; - con1.vote.block = std::unique_ptr (new rai::send_block); - rai::sign_message (key1.prv, key1.pub, con1.vote.block->hash (), con1.vote.signature); - std::vector bytes; - { - rai::vectorstream stream1 (bytes); - con1.serialize (stream1); - } - rai::bufferstream stream2 (bytes.data (), bytes.size ()); - rai::confirm_ack con2; - con2.deserialize (stream2); - ASSERT_EQ (con1, con2); -} - TEST (block_store, empty_blocks) { leveldb::Status init; diff --git a/rai/test/message.cpp b/rai/test/message.cpp index c04c4e6e..ae8df6ef 100644 --- a/rai/test/message.cpp +++ b/rai/test/message.cpp @@ -76,4 +76,21 @@ TEST (message, publish_serialization) ASSERT_EQ (0x01, version_using); ASSERT_EQ (0x01, version_max); ASSERT_EQ (rai::message_type::publish, type); +} + +TEST (message, confirm_ack_serialization) +{ + rai::confirm_ack con1 (std::unique_ptr (new rai::send_block)); + rai::keypair key1; + con1.vote.address = key1.pub; + rai::sign_message (key1.prv, key1.pub, con1.vote.block->hash (), con1.vote.signature); + std::vector bytes; + { + rai::vectorstream stream1 (bytes); + con1.serialize (stream1); + } + rai::bufferstream stream2 (bytes.data (), bytes.size ()); + rai::confirm_ack con2; + con2.deserialize (stream2); + ASSERT_EQ (con1, con2); } \ No newline at end of file