Skip to content

Commit

Permalink
Merge pull request #1012 from toxeus/master
Browse files Browse the repository at this point in the history
Fix bc::settings::genesis_block type.
  • Loading branch information
evoskuil committed Aug 15, 2018
2 parents 7ff28cd + e7d5d1b commit 05234cf
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 27 deletions.
2 changes: 1 addition & 1 deletion examples/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ int bc::main(int argc, char* argv[])
#endif

// Extracting Satoshi's words from genesis block.
const auto block = bc::settings(bc::config::settings::mainnet)
const chain::block block = bc::settings(bc::config::settings::mainnet)
.genesis_block;
const auto& coinbase = block.transactions().front();
const auto& input = coinbase.inputs().front();
Expand Down
10 changes: 9 additions & 1 deletion include/bitcoin/bitcoin/config/block.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@
#include <string>
#include <bitcoin/bitcoin/define.hpp>
#include <bitcoin/bitcoin/chain/block.hpp>
#include <bitcoin/bitcoin/settings.hpp>

namespace libbitcoin {

class settings;

namespace config {

/**
Expand Down Expand Up @@ -59,6 +61,12 @@ class BC_API block
*/
block(const block& other);

/**
* Move assignment operator.
* @param[in] other The object to move into self on assignment.
*/
block& operator=(chain::block&& other);

/**
* Override the equality operator.
* @param[in] other The other object with which to compare.
Expand Down
4 changes: 2 additions & 2 deletions include/bitcoin/bitcoin/settings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#ifndef LIBBITCOIN_SETTINGS_HPP
#define LIBBITCOIN_SETTINGS_HPP

#include <bitcoin/bitcoin/chain/block.hpp>
#include <bitcoin/bitcoin/config/block.hpp>
#include <bitcoin/bitcoin/config/settings.hpp>
#include <bitcoin/bitcoin/define.hpp>

Expand Down Expand Up @@ -56,7 +56,7 @@ class BC_API settings
// The target number of blocks for 2 weeks of work (2016 blocks).
size_t retargeting_interval;

chain::block genesis_block;
config::block genesis_block;

// Fork settings.
//--------------------------------------------------------------------------
Expand Down
6 changes: 6 additions & 0 deletions src/config/block.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,12 @@ block::block(const block& other)
{
}

block& block::operator=(chain::block&& other)
{
value_ = std::move(other);
return *this;
}

bool block::operator==(const block& other) const
{
return value_ == other.value_;
Expand Down
16 changes: 8 additions & 8 deletions src/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ settings::settings(config::settings context)
{
case config::settings::mainnet:
{
genesis_block.from_data({
genesis_block = chain::block::factory({
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -91,7 +91,7 @@ settings::settings(config::settings context)
0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12, 0xde,
0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57,
0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d, 0x5f,
0xac, 0x00, 0x00, 0x00, 0x00});
0xac, 0x00, 0x00, 0x00, 0x00}, *this);
net_active = 750;
net_enforce = 950;
net_sample = 1000;
Expand All @@ -115,7 +115,7 @@ settings::settings(config::settings context)

case config::settings::testnet:
{
genesis_block.from_data({
genesis_block = chain::block::factory({
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -151,7 +151,7 @@ settings::settings(config::settings context)
0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12, 0xde,
0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57,
0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d, 0x5f,
0xac, 0x00, 0x00, 0x00, 0x00});
0xac, 0x00, 0x00, 0x00, 0x00}, *this);
net_active = 51;
net_enforce = 75;
net_sample = 100;
Expand All @@ -175,7 +175,7 @@ settings::settings(config::settings context)

case config::settings::regtest:
{
genesis_block.from_data({
genesis_block = chain::block::factory({
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -211,13 +211,13 @@ settings::settings(config::settings context)
0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12, 0xde,
0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57,
0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d, 0x5f,
0xac, 0x00, 0x00, 0x00, 0x00});
0xac, 0x00, 0x00, 0x00, 0x00}, *this);
bip65_freeze = 1351;
bip66_freeze = 1251;
bip34_freeze = 0;
bip16_activation_time = 0x4f3af580;
const config::checkpoint genesis_checkpoint(genesis_block.hash(),
0);
const config::checkpoint genesis_checkpoint(
static_cast<chain::block>(genesis_block).hash(), 0);

// Since bip90 assumes a historical bip34 activation block,
// use genesis.
Expand Down
12 changes: 6 additions & 6 deletions test/chain/block.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,23 +273,23 @@ BOOST_AUTO_TEST_CASE(block__from_data__insufficient_transaction_bytes__failure)

BOOST_AUTO_TEST_CASE(block__genesis__mainnet__valid_structure)
{
const auto genesis = settings(bc::config::settings::mainnet).genesis_block;
const chain::block genesis = settings(bc::config::settings::mainnet).genesis_block;
BOOST_REQUIRE(genesis.is_valid());
BOOST_REQUIRE_EQUAL(genesis.transactions().size(), 1u);
BOOST_REQUIRE(genesis.header().merkle() == genesis.generate_merkle_root());
}

BOOST_AUTO_TEST_CASE(block__genesis__testnet__valid_structure)
{
const auto genesis = settings(bc::config::settings::testnet).genesis_block;
const chain::block genesis = settings(bc::config::settings::testnet).genesis_block;
BOOST_REQUIRE(genesis.is_valid());
BOOST_REQUIRE_EQUAL(genesis.transactions().size(), 1u);
BOOST_REQUIRE(genesis.header().merkle() == genesis.generate_merkle_root());
}

BOOST_AUTO_TEST_CASE(block__genesis__regtest__valid_structure)
{
const auto genesis = settings(bc::config::settings::regtest).genesis_block;
const chain::block genesis = settings(bc::config::settings::regtest).genesis_block;
BOOST_REQUIRE(genesis.is_valid());
BOOST_REQUIRE_EQUAL(genesis.transactions().size(), 1u);
BOOST_REQUIRE(genesis.header().merkle() == genesis.generate_merkle_root());
Expand All @@ -298,7 +298,7 @@ BOOST_AUTO_TEST_CASE(block__genesis__regtest__valid_structure)

BOOST_AUTO_TEST_CASE(block__factory_1__genesis_mainnet__success)
{
const auto genesis = settings(bc::config::settings::mainnet).genesis_block;
const chain::block genesis = settings(bc::config::settings::mainnet).genesis_block;
BOOST_REQUIRE_EQUAL(genesis.serialized_size(), 285u);
BOOST_REQUIRE_EQUAL(genesis.header().serialized_size(), 80u);

Expand All @@ -319,7 +319,7 @@ BOOST_AUTO_TEST_CASE(block__factory_1__genesis_mainnet__success)

BOOST_AUTO_TEST_CASE(block__factory_2__genesis_mainnet__success)
{
const auto genesis = settings(bc::config::settings::mainnet).genesis_block;
const chain::block genesis = settings(bc::config::settings::mainnet).genesis_block;
BOOST_REQUIRE_EQUAL(genesis.serialized_size(), 285u);
BOOST_REQUIRE_EQUAL(genesis.header().serialized_size(), 80u);

Expand All @@ -341,7 +341,7 @@ BOOST_AUTO_TEST_CASE(block__factory_2__genesis_mainnet__success)

BOOST_AUTO_TEST_CASE(block__factory_3__genesis_mainnet__success)
{
const auto genesis = settings(bc::config::settings::mainnet).genesis_block;
const chain::block genesis = settings(bc::config::settings::mainnet).genesis_block;
BOOST_REQUIRE_EQUAL(genesis.serialized_size(), 285u);
BOOST_REQUIRE_EQUAL(genesis.header().serialized_size(), 80u);

Expand Down
3 changes: 2 additions & 1 deletion test/chain/header.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -453,7 +453,8 @@ BOOST_AUTO_TEST_CASE(header__proof1__genesis_mainnet__expected)

BOOST_AUTO_TEST_CASE(header__proof2__genesis_mainnet__expected)
{
const auto block = settings(bc::config::settings::mainnet).genesis_block;
const chain::block block = settings(bc::config::settings::mainnet)
.genesis_block;
BOOST_REQUIRE_EQUAL(block.header().proof(), 0x0000000100010001);
}

Expand Down
2 changes: 1 addition & 1 deletion test/chain/satoshi_words.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ BOOST_AUTO_TEST_SUITE(satoshi_words)
BOOST_AUTO_TEST_CASE(satoshi_words_mainnet)
{
// Create mainnet genesis block (contains a single coinbase transaction).
const auto block = settings(bc::config::settings::mainnet).genesis_block;
const chain::block block = bc::settings(bc::config::settings::mainnet).genesis_block;
const auto& transactions = block.transactions();
BOOST_REQUIRE_EQUAL(transactions.size(), 1u);

Expand Down
6 changes: 3 additions & 3 deletions test/message/block.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ BOOST_AUTO_TEST_CASE(block__constructor_7__always__equals_params)

BOOST_AUTO_TEST_CASE(block__factory_data_1__genesis_mainnet__success)
{
const auto genesis = settings(bc::config::settings::mainnet).genesis_block;
const chain::block genesis = settings(bc::config::settings::mainnet).genesis_block;
BOOST_REQUIRE_EQUAL(genesis.serialized_size(), 285u);
BOOST_REQUIRE_EQUAL(genesis.header().serialized_size(), 80u);

Expand All @@ -204,7 +204,7 @@ BOOST_AUTO_TEST_CASE(block__factory_data_1__genesis_mainnet__success)

BOOST_AUTO_TEST_CASE(block__factory_data_2__genesis_mainnet__success)
{
const auto genesis = settings(bc::config::settings::mainnet).genesis_block;
const chain::block genesis = settings(bc::config::settings::mainnet).genesis_block;
BOOST_REQUIRE_EQUAL(genesis.serialized_size(), 285u);
BOOST_REQUIRE_EQUAL(genesis.header().serialized_size(), 80u);

Expand Down Expand Up @@ -233,7 +233,7 @@ BOOST_AUTO_TEST_CASE(block__factory_data_2__genesis_mainnet__success)

BOOST_AUTO_TEST_CASE(block__factory_data_3__genesis_mainnet__success)
{
const auto genesis = settings(config::settings::mainnet).genesis_block;
const chain::block genesis = settings(config::settings::mainnet).genesis_block;
BOOST_REQUIRE_EQUAL(genesis.serialized_size(), 285u);
BOOST_REQUIRE_EQUAL(genesis.header().serialized_size(), 80u);

Expand Down
11 changes: 7 additions & 4 deletions test/settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ BOOST_AUTO_TEST_CASE(settings__construct__mainnet_context__expected)
BOOST_REQUIRE_EQUAL(configuration.min_timespan, 302400);
BOOST_REQUIRE_EQUAL(configuration.max_timespan, 4838400);
BOOST_REQUIRE_EQUAL(configuration.retargeting_interval, 2016);
BOOST_REQUIRE_EQUAL(configuration.genesis_block.to_data(), data_chunk({
const chain::block genesis_block = configuration.genesis_block;
BOOST_REQUIRE_EQUAL(genesis_block.to_data(), data_chunk({
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -164,7 +165,8 @@ BOOST_AUTO_TEST_CASE(settings__construct__testnet_context__expected)
BOOST_REQUIRE_EQUAL(configuration.min_timespan, 302400);
BOOST_REQUIRE_EQUAL(configuration.max_timespan, 4838400);
BOOST_REQUIRE_EQUAL(configuration.retargeting_interval, 2016);
BOOST_REQUIRE_EQUAL(configuration.genesis_block.to_data(), data_chunk({
const chain::block genesis_block = configuration.genesis_block;
BOOST_REQUIRE_EQUAL(genesis_block.to_data(), data_chunk({
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -253,7 +255,8 @@ BOOST_AUTO_TEST_CASE(settings__construct__regtest_context__expected)
BOOST_REQUIRE_EQUAL(configuration.min_timespan, 302400);
BOOST_REQUIRE_EQUAL(configuration.max_timespan, 4838400);
BOOST_REQUIRE_EQUAL(configuration.retargeting_interval, 2016);
BOOST_REQUIRE_EQUAL(configuration.genesis_block.to_data(), data_chunk({
const chain::block genesis_block = configuration.genesis_block;
BOOST_REQUIRE_EQUAL(genesis_block.to_data(), data_chunk({
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -301,7 +304,7 @@ BOOST_AUTO_TEST_CASE(settings__construct__regtest_context__expected)
BOOST_REQUIRE_EQUAL(configuration.bip66_freeze, 1251);
BOOST_REQUIRE_EQUAL(configuration.bip34_freeze, 0);
BOOST_REQUIRE_EQUAL(configuration.bip16_activation_time, 0x4f3af580);
const config::checkpoint genesis(configuration.genesis_block.hash(), 0);
const config::checkpoint genesis(genesis_block.hash(), 0);
BOOST_REQUIRE_EQUAL(configuration.bip34_active_checkpoint, genesis);
BOOST_REQUIRE_EQUAL(configuration.bip9_bit0_active_checkpoint, genesis);
BOOST_REQUIRE_EQUAL(configuration.bip9_bit1_active_checkpoint, genesis);
Expand Down

0 comments on commit 05234cf

Please sign in to comment.