@@ -255,7 +255,8 @@ BOOST_AUTO_TEST_CASE(it_parses_a_payload_from_a_legacy_contract_key_and_value)
255255
256256 const NN::BeaconPayload payload = NN::BeaconPayload::Parse (key, value);
257257
258- BOOST_CHECK_EQUAL (payload.m_version , NN::BeaconPayload::CURRENT_VERSION);
258+ // Legacy beacon payloads always parse to version 1:
259+ BOOST_CHECK_EQUAL (payload.m_version , 1 );
259260 BOOST_CHECK (payload.m_cpid == cpid);
260261 BOOST_CHECK (payload.m_beacon .m_public_key == TestKey::Public ());
261262 BOOST_CHECK_EQUAL (payload.m_beacon .m_timestamp , 0 );
@@ -274,33 +275,44 @@ BOOST_AUTO_TEST_CASE(it_behaves_like_a_contract_payload)
274275 BOOST_CHECK (payload.RequiredBurnAmount () > 0 );
275276}
276277
277- BOOST_AUTO_TEST_CASE (it_checks_whether_the_payload_is_well_formed_for_add )
278+ BOOST_AUTO_TEST_CASE (it_checks_whether_the_payload_is_well_formed )
278279{
279280 const NN::Cpid cpid = NN::Cpid::Parse (" 00010203040506070809101112131415" );
280281 NN::BeaconPayload valid (cpid, NN::Beacon (TestKey::Public ()));
281282 valid.m_signature = TestKey::Signature ();
282283
283284 BOOST_CHECK (valid.WellFormed (NN::ContractAction::ADD) == true );
285+ BOOST_CHECK (valid.WellFormed (NN::ContractAction::REMOVE) == true );
284286
285287 NN::BeaconPayload zero_cpid{NN::Cpid (), NN::Beacon (TestKey::Public ())};
286288 zero_cpid.m_signature = TestKey::Signature ();
287289
288290 // A zero CPID is technically valid...
289291 BOOST_CHECK (zero_cpid.WellFormed (NN::ContractAction::ADD) == true );
292+ BOOST_CHECK (zero_cpid.WellFormed (NN::ContractAction::REMOVE) == true );
290293
291294 NN::BeaconPayload missing_key (cpid, NN::Beacon ());
292295 missing_key.m_signature = TestKey::Signature ();
293296
294297 BOOST_CHECK (missing_key.WellFormed (NN::ContractAction::ADD) == false );
298+ BOOST_CHECK (missing_key.WellFormed (NN::ContractAction::REMOVE) == false );
295299}
296300
297- BOOST_AUTO_TEST_CASE (it_checks_whether_the_payload_is_well_formed_for_delete )
301+ BOOST_AUTO_TEST_CASE (it_checks_whether_a_legacy_v1_payload_is_well_formed )
298302{
299303 const NN::Cpid cpid = NN::Cpid::Parse (" 00010203040506070809101112131415" );
300- NN::BeaconPayload valid (cpid, NN::Beacon ());
301- valid.m_signature = TestKey::Signature ();
304+ const NN::Beacon beacon (TestKey::Public ());
302305
303- BOOST_CHECK (valid.WellFormed (NN::ContractAction::REMOVE) == true );
306+ const NN::BeaconPayload add = NN::BeaconPayload (1 , cpid, beacon);
307+
308+ BOOST_CHECK (add.WellFormed (NN::ContractAction::ADD) == true );
309+ // Legacy beacon deletion contracts ignore the value:
310+ BOOST_CHECK (add.WellFormed (NN::ContractAction::REMOVE) == true );
311+
312+ const NN::BeaconPayload remove = NN::BeaconPayload (1 , cpid, NN::Beacon ());
313+
314+ BOOST_CHECK (remove.WellFormed (NN::ContractAction::ADD) == false );
315+ BOOST_CHECK (remove.WellFormed (NN::ContractAction::REMOVE) == true );
304316}
305317
306318BOOST_AUTO_TEST_CASE (it_signs_the_payload)
@@ -335,7 +347,7 @@ BOOST_AUTO_TEST_CASE(it_verifies_the_payload_signature)
335347 BOOST_CHECK (payload.VerifySignature ());
336348}
337349
338- BOOST_AUTO_TEST_CASE (it_serializes_to_a_stream_for_add )
350+ BOOST_AUTO_TEST_CASE (it_serializes_to_a_stream )
339351{
340352 const NN::Cpid cpid = NN::Cpid::Parse (" 00010203040506070809101112131415" );
341353 const NN::Beacon beacon (TestKey::Public ());
@@ -358,20 +370,22 @@ BOOST_AUTO_TEST_CASE(it_serializes_to_a_stream_for_add)
358370 expected.end ());
359371}
360372
361- BOOST_AUTO_TEST_CASE (it_deserializes_from_a_stream_for_add )
373+ BOOST_AUTO_TEST_CASE (it_deserializes_from_a_stream )
362374{
363375 const NN::Cpid cpid = NN::Cpid::Parse (" 00010203040506070809101112131415" );
364376 const NN::Beacon beacon (TestKey::Public ());
365377 const std::vector<uint8_t > signature = TestKey::Signature ();
366378
367- CDataStream stream = CDataStream (SER_NETWORK, PROTOCOL_VERSION)
379+ CDataStream stream_add = CDataStream (SER_NETWORK, PROTOCOL_VERSION)
368380 << NN::BeaconPayload::CURRENT_VERSION
369381 << cpid
370382 << beacon
371383 << signature;
372384
385+ CDataStream stream_remove = stream_add;
386+
373387 NN::BeaconPayload payload;
374- payload.Unserialize (stream , NN::ContractAction::ADD);
388+ payload.Unserialize (stream_add , NN::ContractAction::ADD);
375389
376390 BOOST_CHECK_EQUAL (payload.m_version , NN::BeaconPayload::CURRENT_VERSION);
377391 BOOST_CHECK (payload.m_cpid == cpid);
@@ -385,45 +399,13 @@ BOOST_AUTO_TEST_CASE(it_deserializes_from_a_stream_for_add)
385399 signature.end ());
386400
387401 BOOST_CHECK (payload.WellFormed (NN::ContractAction::ADD) == true );
388- }
389402
390- BOOST_AUTO_TEST_CASE (it_serializes_to_a_stream_for_delete)
391- {
392- const NN::Cpid cpid = NN::Cpid::Parse (" 00010203040506070809101112131415" );
393- NN::BeaconPayload payload (cpid, NN::Beacon ());
394- payload.m_signature = TestKey::Signature ();
395-
396- const CDataStream expected = CDataStream (SER_NETWORK, PROTOCOL_VERSION)
397- << NN::BeaconPayload::CURRENT_VERSION
398- << cpid
399- << payload.m_signature ;
400-
401- CDataStream stream (SER_NETWORK, PROTOCOL_VERSION);
402- payload.Serialize (stream, NN::ContractAction::REMOVE);
403-
404- BOOST_CHECK_EQUAL_COLLECTIONS (
405- stream.begin (),
406- stream.end (),
407- expected.begin (),
408- expected.end ());
409- }
410-
411- BOOST_AUTO_TEST_CASE (it_deserializes_from_a_stream_for_delete)
412- {
413- const NN::Cpid cpid = NN::Cpid::Parse (" 00010203040506070809101112131415" );
414- const std::vector<uint8_t > signature = TestKey::Signature ();
415-
416- CDataStream stream = CDataStream (SER_NETWORK, PROTOCOL_VERSION)
417- << NN::BeaconPayload::CURRENT_VERSION
418- << cpid
419- << signature;
420-
421- NN::BeaconPayload payload;
422- payload.Unserialize (stream, NN::ContractAction::REMOVE);
403+ payload = NN::BeaconPayload ();
404+ payload.Unserialize (stream_remove, NN::ContractAction::REMOVE);
423405
424406 BOOST_CHECK_EQUAL (payload.m_version , NN::BeaconPayload::CURRENT_VERSION);
425407 BOOST_CHECK (payload.m_cpid == cpid);
426- BOOST_CHECK (payload.m_beacon .m_public_key . Raw (). empty () == true );
408+ BOOST_CHECK (payload.m_beacon .m_public_key == TestKey::Public () );
427409 BOOST_CHECK_EQUAL (payload.m_beacon .m_timestamp , 0 );
428410
429411 BOOST_CHECK_EQUAL_COLLECTIONS (
0 commit comments