Skip to content

Commit c5d72a6

Browse files
Merge pull request #19 from ReverseControl/GREEN
Lessons Learned in 24 hours
2 parents cfd630b + 6b6a369 commit c5d72a6

3 files changed

Lines changed: 39 additions & 51 deletions

File tree

src/chainparams.cpp

Lines changed: 26 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,12 @@ static CBlock CreateGenesisBlock(
4343

4444
//Genesis parameters for different networks on FACT0RN.
4545
if( nTime == 1650443545){
46-
genesis.nP1 = uint1024S("0x82bd"); //Regtest
46+
genesis.nP1 = uint1024S("0xb5ff"); //Regtest
4747
}
4848
else if ( nTime == 1650442708 ){
49-
genesis.nP1 = uint1024S("0x29bd98fec7408110c833e1c50642d"); //Testnet
49+
genesis.nP1 = uint1024S("0x166ad939aed84a268f7c2ae4f5d"); //Testnet
5050
} else if (nTime == 1650449340 ) {
51-
genesis.nP1 = uint1024S("0x746e26c03bb7955ab2db0322c02bd"); //Mainnet
51+
genesis.nP1 = uint1024S("0x5b541e0fc53ad9c40daa99c31c17b"); //Mainnet
5252
}
5353

5454
genesis.vtx.push_back(MakeTransactionRef(std::move(txNew)));
@@ -70,7 +70,7 @@ static CBlock CreateGenesisBlock(
7070
*/
7171
static CBlock CreateGenesisBlock(uint32_t nTime, uint64_t nNonce, uint16_t nBits, int32_t nVersion, int64_t wOffset, const CAmount& genesisReward)
7272
{
73-
const char* pszTimestamp = "The Times 04/Apr/2022 Russia Strikes Hard as It Pushes to Seize Donbas Region";
73+
const char* pszTimestamp = "The Times 4/20/2022 Russia Strikes Hard as It Pushes to Seize Donbas Region";
7474
const CScript genesisOutputScript = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG;
7575
return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, wOffset, genesisReward);
7676
}
@@ -82,7 +82,7 @@ class CMainParams : public CChainParams {
8282
public:
8383
CMainParams() {
8484
strNetworkID = CBaseChainParams::MAIN;
85-
genesis = CreateGenesisBlock( 1650449340ULL , 42069ULL, 230, 0 , 3068LL, 0);
85+
genesis = CreateGenesisBlock( 1650449340ULL , 4081969520ULL, 230, 0 , 2375LL, 0);
8686
consensus.hashGenesisBlock = genesis.GetHash();
8787
consensus.signet_blocks = false;
8888
consensus.signet_challenge.clear();
@@ -132,22 +132,10 @@ class CMainParams : public CChainParams {
132132
m_assumed_blockchain_size = 420;
133133
m_assumed_chain_state_size = 6;
134134

135-
//TODO_FACTOR: Add assert for genesis block.
136-
137-
// Note that of those which support the service bits prefix, most only support a subset of
138-
// possible options.
139-
// This is fine at runtime as we'll fall back to using them as an addrfetch if they don't support the
140-
// service bits we want, but we should get them updated to support all service bits wanted by any
141-
// release ASAP to avoid it where possible.
142-
//vSeeds.emplace_back("seed.bitcoin.sipa.be"); // Pieter Wuille, only supports x1, x5, x9, and xd
143-
//vSeeds.emplace_back("dnsseed.bluematt.me"); // Matt Corallo, only supports x9
144-
//vSeeds.emplace_back("dnsseed.bitcoin.dashjr.org"); // Luke Dashjr
145-
//vSeeds.emplace_back("seed.bitcoinstats.com"); // Christian Decker, supports x1 - xf
146-
//vSeeds.emplace_back("seed.bitcoin.jonasschnelli.ch"); // Jonas Schnelli, only supports x1, x5, x9, and xd
147-
//vSeeds.emplace_back("seed.btc.petertodd.org"); // Peter Todd, only supports x1, x5, x9, and xd
148-
//vSeeds.emplace_back("seed.bitcoin.sprovoost.nl"); // Sjors Provoost
149-
//vSeeds.emplace_back("dnsseed.emzy.de"); // Stephan Oeste
150-
//vSeeds.emplace_back("seed.bitcoin.wiz.biz"); // Jason Maurice
135+
//Assert for genesis block.
136+
consensus.hashGenesisBlock = genesis.GetHash();
137+
assert(consensus.hashGenesisBlock == uint256S("79cb40f8075b0e3dc2bc468c5ce2a7acbe0afd36c6c3d3a134ea692edac7de49"));
138+
assert(genesis.hashMerkleRoot == uint256S("fe56b75eb001df55cfe63e768ff54a7a376a3108119c9cedd1c6b5045649b108"));
151139

152140
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,0);
153141
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,5);
@@ -166,7 +154,7 @@ class CMainParams : public CChainParams {
166154

167155
checkpointData = {
168156
{
169-
{0, consensus.hashGenesisBlock} // replace me with a hardcoded uint256 before release
157+
{0, uint256S("79cb40f8075b0e3dc2bc468c5ce2a7acbe0afd36c6c3d3a134ea692edac7de49") }
170158
}
171159
};
172160

@@ -190,7 +178,7 @@ class CTestNetParams : public CChainParams {
190178
public:
191179
CTestNetParams() {
192180
strNetworkID = CBaseChainParams::TESTNET;
193-
genesis = CreateGenesisBlock( 1650442708ULL, 420ULL, 228, 0, 2750LL, 0);
181+
genesis = CreateGenesisBlock( 1650442708ULL, 4143631544ULL, 210, 0, -2813, 0);
194182
consensus.hashGenesisBlock = genesis.GetHash();
195183
consensus.signet_blocks = false;
196184
consensus.signet_challenge.clear();
@@ -202,7 +190,7 @@ class CTestNetParams : public CChainParams {
202190
consensus.SegwitHeight = 1;
203191
consensus.TaprootHeight = 1;
204192
consensus.MinBIP9WarningHeight = 1; // segwit activation height + miner confirmation window
205-
consensus.powLimit = 228;
193+
consensus.powLimit = 210;
206194
consensus.nPowTargetTimespan = 24 * 60 * 60; // two weeks
207195
consensus.nPowTargetSpacing = 5 * 60;
208196
consensus.fPowAllowMinDifficultyBlocks = true;
@@ -233,16 +221,14 @@ class CTestNetParams : public CChainParams {
233221
m_assumed_blockchain_size = 40;
234222
m_assumed_chain_state_size = 2;
235223

236-
//TODO_FACTOR: Add assert for genesis block.
224+
//Assert for genesis block.
225+
consensus.hashGenesisBlock = genesis.GetHash();
226+
assert(consensus.hashGenesisBlock == uint256S("550bbf0a444d9f92189f067dd225f5b8a5d92587ebc2e8398d143236072580af"));
227+
assert(genesis.hashMerkleRoot == uint256S("fe56b75eb001df55cfe63e768ff54a7a376a3108119c9cedd1c6b5045649b108"));
237228

229+
//Seeds
238230
vFixedSeeds.clear();
239231
vSeeds.clear();
240-
// nodes with support for servicebits filtering should be at the top
241-
//vSeeds.emplace_back("testnet-seed.bitcoin.jonasschnelli.ch");
242-
//vSeeds.emplace_back("seed.tbtc.petertodd.org");
243-
//vSeeds.emplace_back("seed.testnet.bitcoin.sprovoost.nl");
244-
//vSeeds.emplace_back("testnet-seed.bluematt.me"); // Just a static list of stable node(s), only supports x9
245-
246232
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
247233
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
248234
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
@@ -260,7 +246,7 @@ class CTestNetParams : public CChainParams {
260246

261247
checkpointData = {
262248
{
263-
{0, consensus.hashGenesisBlock} // replace me with a hardcoded uint256 before release
249+
{0, uint256S("550bbf0a444d9f92189f067dd225f5b8a5d92587ebc2e8398d143236072580af") }
264250
}
265251
};
266252

@@ -368,10 +354,7 @@ class SigNetParams : public CChainParams {
368354
//Number of rounds for gHash to generate random Ws around which to search for semiprimes.
369355
consensus.hashRounds = 1;
370356

371-
//TODO_FACTOR: Add assert for genesis block.
372-
373357
vFixedSeeds.clear();
374-
375358
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
376359
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
377360
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
@@ -395,7 +378,7 @@ class CRegTestParams : public CChainParams {
395378
public:
396379
explicit CRegTestParams(const ArgsManager& args) {
397380
strNetworkID = CBaseChainParams::REGTEST;
398-
genesis = CreateGenesisBlock( 1650443545ULL, 7188792851871390278ULL, 32, 0, -145, 0);
381+
genesis = CreateGenesisBlock( 1650443545ULL, 2706135317ULL, 32, 0, 254, 0);
399382
consensus.hashGenesisBlock = genesis.GetHash();
400383
consensus.signet_blocks = false;
401384
consensus.signet_challenge.clear();
@@ -438,8 +421,6 @@ class CRegTestParams : public CChainParams {
438421
//Number of rounds for gHash to generate random Ws around which to search for semiprimes.
439422
consensus.hashRounds = 1;
440423

441-
//TODO_FACTOR: Add assert for genesis block.
442-
443424
UpdateActivationParametersFromArgs(args);
444425

445426
vFixedSeeds.clear(); //!< Regtest mode doesn't have any fixed seeds.
@@ -450,23 +431,18 @@ class CRegTestParams : public CChainParams {
450431
m_is_test_chain = true;
451432
m_is_mockable_chain = true;
452433

434+
//Assert for genesis block.
435+
consensus.hashGenesisBlock = genesis.GetHash();
436+
assert(consensus.hashGenesisBlock == uint256S("38039464f800f026086985e81e6af3ceb35c2b93f042d79ab637d692eb002136"));
437+
assert(genesis.hashMerkleRoot == uint256S("fe56b75eb001df55cfe63e768ff54a7a376a3108119c9cedd1c6b5045649b108"));
438+
439+
453440
checkpointData = {
454441
{
455-
{0, uint256S("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")},
442+
{0, uint256S("38039464f800f026086985e81e6af3ceb35c2b93f042d79ab637d692eb002136")},
456443
}
457444
};
458445

459-
m_assumeutxo_data = MapAssumeutxo{
460-
{
461-
110,
462-
{AssumeutxoHash{uint256S("0x1ebbf5850204c0bdb15bf030f47c7fe91d45c44c712697e4509ba67adb01c618")}, 110},
463-
},
464-
{
465-
200,
466-
{AssumeutxoHash{uint256S("0x51c8d11d8b5c1de51543c579736e786aa2736206d1e11e627568029ce092cf62")}, 200},
467-
},
468-
};
469-
470446
chainTxData = ChainTxData{
471447
0,
472448
0,

src/miner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
163163
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, chainparams.GetConsensus());
164164
pblock->nNonce = 0;
165165
pblock->wOffset = 0;
166-
pblock->nP1 = uint1024S("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001") << (int)floor(pblock->nBits/2 - 1);
166+
pblock->nP1 = uint1024S("0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001") << ( (pblock->nBits >> 1) + (pblock->nBits & 1) - 1 );
167167

168168
// Create coinbase transaction.
169169
CMutableTransaction coinbaseTx;

src/pow.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,18 @@ bool CheckProofOfWork( const CBlockHeader& block, const Consensus::Params& param
145145
LogPrint(BCLog::POW, "nP1: %s\n", mpz_get_str(NULL, 10, nP1));
146146
LogPrint(BCLog::POW, "nP2: %s\n", mpz_get_str(NULL, 10, nP2));
147147

148+
//Check the bitsizes are as expected
149+
const uint16_t nP1_bitsize = mpz_sizeinbase(nP1, 2);
150+
const uint16_t expected_bitsize = (block.nBits >> 1) + (block.nBits & 1);
151+
152+
if (nP1_bitsize != expected_bitsize){
153+
LogPrintf("pow error: nP1 expected bitsize=%s, actual size=%s\n", nP1_bitsize, expected_bitsize);
154+
mpz_clear(n);
155+
mpz_clear(nP1);
156+
mpz_clear(nP2);
157+
return false;
158+
}
159+
148160
//Check nP1 is a factor
149161
mpz_t n_check;
150162
mpz_init( n_check );

0 commit comments

Comments
 (0)