Author

Topic: Forked and Debug Qtum make new cryptocurrency (Read 74 times)

newbie
Activity: 3
Merit: 0
February 23, 2022, 12:31:27 PM
#1
Hi

Very easy Debug Qtum to find genesis block hash
Please review my video
Like and sub me for more video
Thank

https://www.youtube.com/watch?v=5rqiGruTe4E


Code:
############################### Change magic key make new chain #################################

git clone https://github.com/qtumproject/qtum --recursive

consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000000000000000000000000");// Start

https://en.bitcoin.it/wiki/List_of_address_prefixes

58 Q

70-71 V
132-133 v



############################## Make publickey ##################################

openssl ecparam -genkey -name secp256k1 -out genesiscoinbase.pem

openssl ec -in genesiscoinbase.pem -text > genesiscoinbase.hex

################################################################

date +%s


############################## Genesis hash Debug ##################################


File  src/chainparams.cpp

Add before

/**
 * Main network
 */
#######################
static void MineGenesis(CBlockHeader& genesisBlock, const uint256& powLimit, bool noProduction)
{
    if(noProduction)
        genesisBlock.nTime = std::time(0);
    genesisBlock.nNonce = 0;

    LogPrintf("NOTE: Genesis nTime = %u \n", genesisBlock.nTime);
    LogPrintf("WARN: Genesis nNonce (BLANK!) = %u \n", genesisBlock.nNonce);

    arith_uint256 besthash;
    memset(&besthash,0xFF,32);
    arith_uint256 hashTarget = UintToArith256(powLimit);
    LogPrintf("Target: %s\n", hashTarget.GetHex().c_str());
    arith_uint256 newhash = UintToArith256(genesisBlock.GetHash());
    while (newhash > hashTarget) {
        genesisBlock.nNonce++;
        if (genesisBlock.nNonce == 0) {
            LogPrintf("NONCE WRAPPED, incrementing time\n");
            ++genesisBlock.nTime;
        }
        // If nothing found after trying for a while, print status
        if ((genesisBlock.nNonce & 0xfff) == 0)
            LogPrintf("nonce %08X: hash = %s (target = %s)\n",
                   genesisBlock.nNonce, newhash.ToString().c_str(),
                   hashTarget.ToString().c_str());

        if(newhash < besthash) {
            besthash = newhash;
            LogPrintf("New best: %s\n", newhash.GetHex().c_str());
        }
        newhash = UintToArith256(genesisBlock.GetHash());
    }
    LogPrintf("Genesis nTime = %u \n", genesisBlock.nTime);
    LogPrintf("Genesis nNonce = %u \n", genesisBlock.nNonce);
    LogPrintf("Genesis nBits: %08x\n", genesisBlock.nBits);
    LogPrintf("Genesis Hash = %s\n", newhash.ToString().c_str());
    LogPrintf("Genesis hashStateRoot = %s\n", genesisBlock.hashStateRoot.ToString().c_str());
    LogPrintf("Genesis Hash Merkle Root = %s\n", genesisBlock.hashMerkleRoot.ToString().c_str());
}
#######################

####################### 1. Mainnet #######################

Find and replace
#######################
        genesis = CreateGenesisBlock(1504695029, 8026361, 0x1f00ffff, 1, 50 * COIN);
        consensus.hashGenesisBlock = genesis.GetHash();
        assert(consensus.hashGenesisBlock == uint256S("0x000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c"));
        assert(genesis.hashMerkleRoot == uint256S("0xed34050eb5909ee535fcb07af292ea55f3d2f291187617b44d3282231405b96d"));
#######################
with
#######################
//Debug Mainnet
        startNewChain = true;

        genesis = CreateGenesisBlock(1506211200, 0, 0x1f00ffff, 1, 50 * COIN);// Change time and set nonce =0

        if (startNewChain)
            MineGenesis(genesis, consensus.powLimit, false);

//genesis = CreateGenesisBlock(1504695029, 8026361, 0x1f00ffff, 1, 50 * COIN);
        consensus.hashGenesisBlock = genesis.GetHash();
        //assert(consensus.hashGenesisBlock == uint256S("0x000075aef83cf2853580f8ae8ce6f8c3096cfa21d98334d6e3f95e5582ed986c"));
        //assert(genesis.hashMerkleRoot == uint256S("0xed34050eb5909ee535fcb07af292ea55f3d2f291187617b44d3282231405b96d"));

LogPrintf("Main Genesis nTime = %u \n", genesis.nTime);
        LogPrintf("Main Genesis nNonce = %u \n", genesis.nNonce);
        LogPrintf("Main Genesis nBits: %08x\n", genesis.nBits);
        LogPrintf("Main Genesis Hash = %s\n", genesis.GetHash().ToString().c_str());
        LogPrintf("Main Genesis hashStateRoot = %s\n", genesis.hashStateRoot.ToString().c_str());
        LogPrintf("Main Genesis Hash Merkle Root = %s\n", genesis.hashMerkleRoot.ToString().c_str());
//End Debug Mainnet

####################### 2. Testnet #######################

Find and replace
#######################
        genesis = CreateGenesisBlock(1504695029, 7349697, 0x1f00ffff, 1, 50 * COIN);
        consensus.hashGenesisBlock = genesis.GetHash();
        assert(consensus.hashGenesisBlock == uint256S("0x0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222"));
        assert(genesis.hashMerkleRoot == uint256S("0xed34050eb5909ee535fcb07af292ea55f3d2f291187617b44d3282231405b96d"));
#######################
with
#######################
//Debug Testnet
        startNewChain = true;

        genesis = CreateGenesisBlock(1645276728, 0, 0x1f00ffff, 1, 50 * COIN);// Change time and set nonce =0

        if (startNewChain)
            MineGenesis(genesis, consensus.powLimit, false);

        //genesis = CreateGenesisBlock(1504695029, 7349697, 0x1f00ffff, 1, 50 * COIN);
        consensus.hashGenesisBlock = genesis.GetHash();
        //assert(consensus.hashGenesisBlock == uint256S("0x0000e803ee215c0684ca0d2f9220594d3f828617972aad66feb2ba51f5e14222"));
        //assert(genesis.hashMerkleRoot == uint256S("0xed34050eb5909ee535fcb07af292ea55f3d2f291187617b44d3282231405b96d"));

        LogPrintf("Test Genesis nTime = %u \n", genesis.nTime);
        LogPrintf("Test Genesis nNonce = %u \n", genesis.nNonce);
        LogPrintf("Test Genesis nBits: %08x\n", genesis.nBits);
        LogPrintf("Test Genesis Hash = %s\n", genesis.GetHash().ToString().c_str());
        LogPrintf("Test Genesis hashStateRoot = %s\n", genesis.hashStateRoot.ToString().c_str());
        LogPrintf("Test Genesis Hash Merkle Root = %s\n", genesis.hashMerkleRoot.ToString().c_str());
//End Debug Testnet

####################### 3. Regtest #######################

Find and replace
#######################
        genesis = CreateGenesisBlock(1504695029, 17, 0x207fffff, 1, 50 * COIN);
        consensus.hashGenesisBlock = genesis.GetHash();
        assert(consensus.hashGenesisBlock == uint256S("0x665ed5b402ac0b44efc37d8926332994363e8a7278b7ee9a58fb972efadae943"));
        assert(genesis.hashMerkleRoot == uint256S("0xed34050eb5909ee535fcb07af292ea55f3d2f291187617b44d3282231405b96d"));
#######################
with
#######################
//Debug Regtest
        startNewChain = true;

        genesis = CreateGenesisBlock(1506211200, 17, 0x207fffff, 1, 50 * COIN);// Change time and set nonce = any number

        if (startNewChain)
            MineGenesis(genesis, consensus.powLimit, false);

        //genesis = CreateGenesisBlock(1504695029, 17, 0x207fffff, 1, 50 * COIN);
        consensus.hashGenesisBlock = genesis.GetHash();
        //assert(consensus.hashGenesisBlock == uint256S("0x665ed5b402ac0b44efc37d8926332994363e8a7278b7ee9a58fb972efadae943"));
        //assert(genesis.hashMerkleRoot == uint256S("0xed34050eb5909ee535fcb07af292ea55f3d2f291187617b44d3282231405b96d"));

        LogPrintf("Reg Genesis nTime = %u \n", genesis.nTime);
        LogPrintf("Reg Genesis nNonce = %u \n", genesis.nNonce);
        LogPrintf("Reg Genesis nBits: %08x\n", genesis.nBits);
        LogPrintf("Reg Genesis Hash = %s\n", genesis.GetHash().ToString().c_str());
        LogPrintf("Reg Genesis hashStateRoot = %s\n", genesis.hashStateRoot.ToString().c_str());
        LogPrintf("Reg Genesis Hash Merkle Root = %s\n", genesis.hashMerkleRoot.ToString().c_str());
//End Debug Regtest



##############################################
File src/chainparams.h

Add below

bool startNewChain;

before

CCheckpointData checkpointData;




############################### Build your debug chain #################################

sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils git cmake libboost-all-dev libgmp3-dev

sudo apt-get install software-properties-common

sudo add-apt-repository ppa:bitcoin/bitcoin

sudo apt-get update

sudo apt-get install libdb4.8-dev libdb4.8++-dev


sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler qrencode


./autogen.sh

./configure

make -j4

#### Take 20-30 min to complete ####


cd src/qt

./qtum-qt

qtum-qt: validation.cpp:1639: void InvalidChainFound(CBlockIndex*): Assertion `tip' failed.
Aborted (core dumped)

############################## Find genesis hash, nonce debug.log ##################################

Ctr H

View hidden file and folder


############## MainNet Find ##############

2022-02-19T14:16:06Z Main Genesis nTime = 1645278122
2022-02-19T14:16:06Z Main Genesis nNonce = 35110
2022-02-19T14:16:06Z Main Genesis nBits: 1f00ffff
2022-02-19T14:16:06Z Main Genesis Hash = 00007c13b508f80a556139c390a06ee51e59ecd9246e03bf00acac4299a508b0
2022-02-19T14:16:06Z Main Genesis hashStateRoot = 9514771014c9ae803d8cea2731b2063e83de44802b40dce2d06acd02d0ff65e9
2022-02-19T14:16:06Z Main Genesis Hash Merkle Root = 49e2dd855ad104b945cd2f6980d7d69d0470bc69646dbdb77a275b4196f7a55f

############## TestNet Find ##############

2022-02-19T14:16:06Z Test Genesis nTime = 1645278327
2022-02-19T14:16:06Z Test Genesis nNonce = 13721
2022-02-19T14:16:06Z Test Genesis nBits: 1f00ffff
2022-02-19T14:16:06Z Test Genesis Hash = 00008067af1d36cacf194d0f0508ee0f58371314b84e21cbf4ec3d60f1f4cc2c
2022-02-19T14:16:06Z Test Genesis hashStateRoot = 9514771014c9ae803d8cea2731b2063e83de44802b40dce2d06acd02d0ff65e9
2022-02-19T14:16:06Z Test Genesis Hash Merkle Root = 49e2dd855ad104b945cd2f6980d7d69d0470bc69646dbdb77a275b4196f7a55f

############## RegTest Find ##############

2022-02-19T14:16:06Z Reg Genesis nTime = 1645278420
2022-02-19T14:16:06Z Reg Genesis nNonce = 1
2022-02-19T14:16:06Z Reg Genesis nBits: 207fffff
2022-02-19T14:16:06Z Reg Genesis Hash = 71b2f068167ce06588cb167d10acbffc4e069ab6172fc5db6c24e3e83e10e1b9
2022-02-19T14:16:06Z Reg Genesis hashStateRoot = 9514771014c9ae803d8cea2731b2063e83de44802b40dce2d06acd02d0ff65e9
2022-02-19T14:16:06Z Reg Genesis Hash Merkle Root = 49e2dd855ad104b945cd2f6980d7d69d0470bc69646dbdb77a275b4196f7a55f

############################## Change back your chainparams.cpp with new info ##################################

Remove //Debug Mainnet
Remove //Debug Testnet
Remove //Debug Regtest


############################## Change back your chainparams.h ##################################

src/chainparams.h

Remove

bool startNewChain;


############################### Build your new chain #################################

cd ../..

make -j4

cd src/qt

./qtum-qt


Now you completed fork Qtum for new chain

Let check

Have Fun
Good luck!
Jump to: