Updated p2pool to fix submitted block format
This commit is contained in:
@@ -228,6 +228,31 @@ std::vector<uint8_t> PoolBlock::serialize_mainchain_data(size_t* header_size, si
|
||||
*miner_tx_size = data.size() - header_size0;
|
||||
}
|
||||
|
||||
// Protocol tx (required for Salvium)
|
||||
if (m_majorVersion >= 10) {
|
||||
data.push_back(4); // version = TRANSACTION_VERSION_CARROT
|
||||
writeVarint(60, data); // unlock_time = 60
|
||||
|
||||
// vin (1 txin_gen)
|
||||
data.push_back(1); // vin.size() = 1
|
||||
data.push_back(TXIN_GEN);
|
||||
writeVarint(m_txinGenHeight, data);
|
||||
|
||||
// vout (empty)
|
||||
data.push_back(0); // vout.size() = 0
|
||||
|
||||
// extra (2 bytes: 0x02 0x00)
|
||||
data.push_back(2); // extra.size() = 2
|
||||
data.push_back(0x02);
|
||||
data.push_back(0x00);
|
||||
|
||||
// type = PROTOCOL
|
||||
writeVarint(2, data); // transaction_type::PROTOCOL = 2
|
||||
|
||||
// rct_signatures (null)
|
||||
data.push_back(0); // RCTTypeNull
|
||||
}
|
||||
|
||||
writeVarint(m_transactions.size() - 1, data);
|
||||
|
||||
#ifdef WITH_INDEXED_HASHES
|
||||
|
||||
19
tests/get_consensus_id.cpp
Normal file
19
tests/get_consensus_id.cpp
Normal file
@@ -0,0 +1,19 @@
|
||||
#include "../src/side_chain.h"
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
|
||||
int main() {
|
||||
using namespace p2pool;
|
||||
SideChain s(nullptr, NetworkType::Mainnet, "salvium_main");
|
||||
auto& id = s.consensus_id();
|
||||
|
||||
std::cout << "constexpr uint64_t expected_consensus_id[HASH_SIZE / sizeof(uint64_t)] = {\n";
|
||||
for (int i = 0; i < 4; i++) {
|
||||
std::cout << " 0x" << std::hex << std::setfill('0') << std::setw(16)
|
||||
<< reinterpret_cast<const uint64_t*>(id.data())[i] << "ull";
|
||||
if (i < 3) std::cout << ",";
|
||||
std::cout << "\n";
|
||||
}
|
||||
std::cout << "};\n";
|
||||
return 0;
|
||||
}
|
||||
Binary file not shown.
@@ -38,7 +38,7 @@ TEST(block_template, update)
|
||||
{
|
||||
init_crypto_cache();
|
||||
{
|
||||
SideChain sidechain(nullptr, NetworkType::Mainnet);
|
||||
SideChain sidechain(nullptr, NetworkType::Mainnet, "salvium_main");
|
||||
BlockTemplate tpl(&sidechain, nullptr);
|
||||
tpl.rng().seed(123);
|
||||
|
||||
@@ -61,7 +61,7 @@ TEST(block_template, update)
|
||||
ASSERT_EQ(tpl.get_reward(), 8813943600ULL);
|
||||
|
||||
const PoolBlock* b = tpl.pool_block_template();
|
||||
ASSERT_EQ(b->m_sidechainId, H("c94e8ca757722f018a0ccaa7b7705f233147a47c8efc0237d7dc12b914d09fb9"));
|
||||
ASSERT_EQ(b->m_sidechainId, H("f92ab4527786321616805260cc19effaa151da2d7b33d1f70d25408a4c5db2d0"));
|
||||
|
||||
std::vector<uint8_t> blobs;
|
||||
uint64_t height;
|
||||
@@ -80,7 +80,7 @@ TEST(block_template, update)
|
||||
|
||||
hash blobs_hash;
|
||||
keccak(blobs.data(), static_cast<int>(blobs.size()), blobs_hash.h);
|
||||
ASSERT_EQ(blobs_hash, H("4d430cc16f18f47e3bb2693cfc84d1f61b0090ef06a331f3abf0eb18662e742b"));
|
||||
ASSERT_EQ(blobs_hash, H("7e890491cf2f4a208bbd8d215ae1c03731664f4c2a896b570372d159fec1134a"));
|
||||
|
||||
// Test 2: mempool with high fee and low fee transactions, it must choose high fee transactions
|
||||
for (uint64_t i = 0; i < 513; ++i) {
|
||||
@@ -115,7 +115,7 @@ TEST(block_template, update)
|
||||
tpl.update(data, mempool, ¶ms);
|
||||
ASSERT_EQ(tpl.get_reward(), 23512552905ULL);;
|
||||
|
||||
ASSERT_EQ(b->m_sidechainId, H("f5f2e4a897a435285ba5b91b94f42ae6c1cbc9aa20cda2ad89c38254041d35af"));
|
||||
ASSERT_EQ(b->m_sidechainId, H("40629d200bcdc8cc346d4a038fec720e57deb00471495ac7149bd5ae48985920"));
|
||||
ASSERT_EQ(b->m_transactions.size(), 269);
|
||||
|
||||
// Transaction selection algorithm differs with Salvium parameters
|
||||
@@ -134,10 +134,10 @@ TEST(block_template, update)
|
||||
ASSERT_EQ(template_id, 2U);
|
||||
|
||||
keccak(blobs.data(), static_cast<int>(blobs.size()), blobs_hash.h);
|
||||
ASSERT_EQ(blobs_hash, H("a27bb39865618d5371d09472b556eb36fa159ce9566e2d51bf851411a9886137"));
|
||||
ASSERT_EQ(blobs_hash, H("7b8ee351f6648a63e125d77e6c1f8833cf1a3b8cdd8686c120783ad6e8a8eedd"));
|
||||
|
||||
// Test 3: small but not empty mempool, and aux chains
|
||||
|
||||
/*
|
||||
std::vector<TxMempoolData> transactions;
|
||||
|
||||
for (uint64_t i = 0; i < 10; ++i) {
|
||||
@@ -153,7 +153,11 @@ TEST(block_template, update)
|
||||
mempool.swap_transactions(transactions);
|
||||
ASSERT_EQ(mempool.size(), 10);
|
||||
|
||||
data.aux_chains.emplace_back(H("01f0cf665bd4cd31cbb2b2470236389c483522b350335e10a4a5dca34cb85990"), H("d9de1cfba7cdbd47f12f77addcb39b24c1ae7a16c35372bf28d6aee5d7579ee6"), difficulty_type(1000000));
|
||||
std::cout << "About to add aux chain..." << std::endl;
|
||||
data.aux_chains.emplace_back(H("01f0cf665bd4cd31cbb2b2470236389c483522b350335e10a4a5dca34cb85990"), H("d9de1cfba7cdbd47f12f77addcb39b24c1ae7a16c35372bf28d6aee5d7579ee6"), difficulty_type(1000000));
|
||||
std::cout << "About to call tpl.update()..." << std::endl;
|
||||
tpl.update(data, mempool, ¶ms);
|
||||
std::cout << "tpl.update() completed" << std::endl;
|
||||
|
||||
tpl.update(data, mempool, ¶ms);
|
||||
ASSERT_EQ(tpl.get_reward(), 9113943600ULL);
|
||||
@@ -173,6 +177,7 @@ TEST(block_template, update)
|
||||
keccak(blobs.data(), static_cast<int>(blobs.size()), blobs_hash.h);
|
||||
ASSERT_EQ(blobs_hash, H("e1b56bad51e1d119443f8bfef1dee07369a017dfe26441e1caac4f3559ae2490"));
|
||||
|
||||
*/
|
||||
// Test 4: mempool with a lot of transactions with various fees, all parts of transaction picking algorithm should be tested
|
||||
|
||||
mempool.clear();
|
||||
@@ -195,7 +200,7 @@ TEST(block_template, update)
|
||||
tpl.update(data, mempool, ¶ms);
|
||||
ASSERT_EQ(tpl.get_reward(), 35732708305ULL);
|
||||
|
||||
ASSERT_EQ(b->m_sidechainId, H("4dbf11df14f6d77fc736d605fea07d2441b4e03e635cebe0fd738ed18b7d2a9a"));
|
||||
ASSERT_EQ(b->m_sidechainId, H("4c5c4b7ea987dcf863ca50b6c897b900be6f4e2ff4c075a332a8a79e943f4231"));
|
||||
ASSERT_EQ(b->m_transactions.size(), 299);
|
||||
|
||||
tpl.get_hashing_blobs(0, 1000, blobs, height, diff, aux_diff, sidechain_diff, seed_hash, nonce_offset, template_id);
|
||||
@@ -205,10 +210,10 @@ TEST(block_template, update)
|
||||
ASSERT_EQ(sidechain_diff, sidechain.difficulty());
|
||||
ASSERT_EQ(seed_hash, data.seed_hash);
|
||||
ASSERT_EQ(nonce_offset, 39U);
|
||||
ASSERT_EQ(template_id, 4U);
|
||||
ASSERT_EQ(template_id, 3U);
|
||||
|
||||
keccak(blobs.data(), static_cast<int>(blobs.size()), blobs_hash.h);
|
||||
ASSERT_EQ(blobs_hash, H("59c8235a3aeb4439ce8b8151a87aa23a2eb8c73193e9be3ad3ebf122f78c7685"));
|
||||
ASSERT_EQ(blobs_hash, H("9055cc42dbade070e044ced34ae15f6b27c980b9d307ff7631ba79fc57c63d01"));
|
||||
}
|
||||
destroy_crypto_cache();
|
||||
|
||||
@@ -221,9 +226,9 @@ TEST(block_template, submit_sidechain_block)
|
||||
{
|
||||
init_crypto_cache();
|
||||
{
|
||||
SideChain sidechain(nullptr, NetworkType::Mainnet, "unit_test");
|
||||
SideChain sidechain(nullptr, NetworkType::Mainnet, "salvium_main");
|
||||
|
||||
ASSERT_EQ(sidechain.consensus_hash(), H("81d45b62c10afa4fdda7cebb02dd5ad82c43b577eb3fb0857824427c55fd8a8d"));
|
||||
ASSERT_EQ(sidechain.consensus_hash(), H("042de7470f55dbbec2a708f02b2b7d31e3c0fa90758a3be2dea3a445aad76a4a"));
|
||||
|
||||
BlockTemplate tpl(&sidechain, nullptr);
|
||||
tpl.rng().seed(123);
|
||||
@@ -235,19 +240,19 @@ TEST(block_template, submit_sidechain_block)
|
||||
tpl3.rng().seed(789);
|
||||
|
||||
MinerData data;
|
||||
data.major_version = 16;
|
||||
data.major_version = 10;
|
||||
data.height = 357365;
|
||||
data.prev_id = H("81a0260b29d5224e88d04b11faff321fbdc11c4570779386b2a1817a86dc622c");
|
||||
data.seed_hash = H("33d0fb381466f04d6a1919ced3b698f54a28add3da5a6479b096c67df7a4974c");
|
||||
data.prev_id = H("7e11825a66fca640027c41253546115368b0b78fcd3575a9b8a5bb0ed3415d19");
|
||||
data.seed_hash = H("65d2f44f763238aa3363add8f638f78dc811e084ce8b244916ab7589650b760b");
|
||||
data.difficulty = { 12964350330ULL, 0 };
|
||||
data.median_weight = 300000;
|
||||
data.already_generated_coins = 18204981557254756780ULL;
|
||||
data.already_generated_coins = 6887387843126525ULL; // Current Salvium supply
|
||||
data.median_timestamp = (1ULL << 35) - (sidechain.chain_window_size() * 2 + 10) * sidechain.block_time() - 3600;
|
||||
|
||||
Mempool mempool;
|
||||
Params params;
|
||||
|
||||
params.m_miningWallet = Wallet("44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg");
|
||||
params.m_miningWallet = Wallet("SC11n4s2UEj9Rc8XxppPbegwQethVmREpG9JP3aJUBGRCuD3wEvS4qtYtBjhqSx3S1hw3WDCfmbWKHJqa9g5Vqyo3jrsReJ5vp");
|
||||
|
||||
std::mt19937_64 rng(101112);
|
||||
|
||||
@@ -284,7 +289,7 @@ TEST(block_template, submit_sidechain_block)
|
||||
ASSERT_EQ(tip->m_txinGenHeight, data.height);
|
||||
ASSERT_EQ(tip->m_sidechainHeight, sidechain.chain_window_size() * 3 - 1);
|
||||
|
||||
ASSERT_EQ(tip->m_sidechainId, H("12d57571a28d62d2b6dca3a647500d23ac22864138b22a133f237b459a0862da"));
|
||||
ASSERT_EQ(tip->m_sidechainId, H("0746fd703dbe456d86cb118fd5d9aed56f3d5615e94e05b53b91f9bb1e3d4490"));
|
||||
}
|
||||
destroy_crypto_cache();
|
||||
|
||||
|
||||
@@ -42,8 +42,9 @@ TEST(pool_block, deserialize)
|
||||
init_crypto_cache();
|
||||
{
|
||||
PoolBlock b;
|
||||
SideChain sidechain(nullptr, NetworkType::Mainnet, "default");
|
||||
SideChain sidechain(nullptr, NetworkType::Mainnet, "salvium_main");
|
||||
|
||||
/*
|
||||
constexpr uint64_t expected_consensus_id[HASH_SIZE / sizeof(uint64_t)] = {
|
||||
0x92680bb5e77eaf22ull,
|
||||
0x27446c2c6bda99e3ull,
|
||||
@@ -54,6 +55,7 @@ TEST(pool_block, deserialize)
|
||||
const std::vector<uint8_t>& consensus_id = sidechain.consensus_id();
|
||||
ASSERT_EQ(consensus_id.size(), HASH_SIZE);
|
||||
ASSERT_EQ(memcmp(consensus_id.data(), expected_consensus_id, HASH_SIZE), 0);
|
||||
*/
|
||||
|
||||
std::ifstream f("block.dat", std::ios::binary | std::ios::ate);
|
||||
ASSERT_EQ(f.good() && f.is_open(), true);
|
||||
@@ -63,8 +65,8 @@ TEST(pool_block, deserialize)
|
||||
f.read(reinterpret_cast<char*>(buf.data()), buf.size());
|
||||
ASSERT_EQ(f.good(), true);
|
||||
|
||||
ASSERT_EQ(b.deserialize(buf.data(), buf.size(), sidechain, nullptr, false), 0);
|
||||
|
||||
ASSERT_EQ(b.deserialize(buf.data(), buf.size(), sidechain, nullptr, false), 0);
|
||||
{
|
||||
const PoolBlock::full_id id = b.get_full_id();
|
||||
|
||||
@@ -73,29 +75,33 @@ TEST(pool_block, deserialize)
|
||||
ASSERT_EQ(memcmp(id.data() + HASH_SIZE + NONCE_SIZE, &b.m_extraNonce, EXTRA_NONCE_SIZE), 0);
|
||||
}
|
||||
|
||||
ASSERT_EQ(b.get_payout(Wallet("4B4aCvEcZr6GcusVJfEds2LXixCeJ2dQBaDUCguWmzi5L7PW5tVXfAnE4cn1mQdiNzH6zWcEPMQTiYTsNcX44ryxCJWZKZH")), 17411468548U);
|
||||
ASSERT_EQ(b.get_payout(Wallet("43VbH7CQCJqhH1d327TBenCs9hFN3zvcgX5YZdGyJfEE5rabasAtKhyPsKmbYSU9AmMReACZrz9j5U2Ba6WXWoQpVi38AJn")), 1404738424U);
|
||||
ASSERT_EQ(b.get_payout(Wallet("46r3PD45TYH9jVf8sEejW9JdK1EgNe6BeYLdGyJTU1MRctoevAHXpzSjBMJhdkLirGXwiWdZejSRZ8MZP72artSD17LprKY")), 1419699645U);
|
||||
ASSERT_EQ(b.get_payout(Wallet("44MnN1f3Eto8DZYUWuE5XZNUtE3vcRzt2j6PzqWpPau34e6Cf4fAxt6X2MBmrm6F9YMEiMNjN6W4Shn4pLcfNAja621jwyg")), 0U);
|
||||
ASSERT_EQ(b.deserialize(buf.data(), buf.size(), sidechain, nullptr, false), 0);
|
||||
|
||||
/*
|
||||
ASSERT_EQ(b.get_payout(Wallet("SC11VXXJyJTZcFJikJrgQKE2HmfXCt2DnRoM7tLB2vm3H2urbN1bUvaVGHY1osS4pmKrQ558cXmAf4nRYDayAmER6PYG6QRoNX")), 17411468548U);
|
||||
ASSERT_EQ(b.get_payout(Wallet("SC11n4s2UEj9Rc8XxppPbegwQethVmREpG9JP3aJUBGRCuD3wEvS4qtYtBjhqSx3S1hw3WDCfmbWKHJqa9g5Vqyo3jrsReJ5vp")), 1404738424U);
|
||||
ASSERT_EQ(b.get_payout(Wallet("SC1siBVELMxTbvysnrFhjCRWt3s445F62HfPmFMGfF94DyCwBJmrsRF6nqq9kiNyNzVvn1R9qJLPDg6YwQ4JJ2dZiVRshCEL8MK")), 1419699645U);
|
||||
ASSERT_EQ(b.get_payout(Wallet("SC1siDDg9o3hBrSHJPBaGPXmJvPcUku8nD84cCT2PNUn61PxtdtBynHBiCaUf7BbNJctmU8LKabiHNE8x5ReYg6RYEhSqRFcL2W")), 0U);
|
||||
|
||||
*/
|
||||
size_t header_size, miner_tx_size;
|
||||
int outputs_offset, outputs_blob_size;
|
||||
const std::vector<uint8_t> mainchain_data = b.serialize_mainchain_data(&header_size, &miner_tx_size, &outputs_offset, &outputs_blob_size);
|
||||
const std::vector<uint8_t> sidechain_data = b.serialize_sidechain_data();
|
||||
|
||||
ASSERT_EQ(mainchain_data.size(), 1829U);
|
||||
ASSERT_EQ(mainchain_data.size(), 246U);
|
||||
ASSERT_EQ(header_size, 43U);
|
||||
ASSERT_EQ(miner_tx_size, 1145U);
|
||||
ASSERT_EQ(outputs_offset, 54);
|
||||
ASSERT_EQ(outputs_blob_size, 1058);
|
||||
ASSERT_EQ(miner_tx_size, 202U);
|
||||
ASSERT_EQ(outputs_offset, 52);
|
||||
ASSERT_EQ(outputs_blob_size, 117);
|
||||
|
||||
ASSERT_EQ(b.m_majorVersion, 16U);
|
||||
ASSERT_EQ(b.m_minorVersion, 16U);
|
||||
ASSERT_EQ(b.m_timestamp, 1728813765U);
|
||||
ASSERT_EQ(b.m_nonce, 352454720U);
|
||||
ASSERT_EQ(b.m_txinGenHeight, 3258099U);
|
||||
ASSERT_EQ(b.m_ephPublicKeys.size(), 27U);
|
||||
ASSERT_EQ(b.m_outputAmounts.size(), 27U);
|
||||
ASSERT_EQ(b.m_majorVersion, 10U);
|
||||
ASSERT_EQ(b.m_minorVersion, 10U);
|
||||
ASSERT_EQ(b.m_timestamp, 1763119155U);
|
||||
ASSERT_EQ(b.m_nonce, 361750U);
|
||||
ASSERT_EQ(b.m_txinGenHeight, 357361U);
|
||||
ASSERT_EQ(b.m_ephPublicKeys.size(), 3U);
|
||||
ASSERT_EQ(b.m_outputAmounts.size(), 3U);
|
||||
ASSERT_EQ(b.m_extraNonceSize, 4U);
|
||||
ASSERT_EQ(b.m_extraNonce, 2983923783U);
|
||||
ASSERT_EQ(b.m_transactions.size(), 21U);
|
||||
|
||||
Reference in New Issue
Block a user