创建自己的数字货币 Part 2

创建自己的数字货币 Part 2

视频教程地址: 
http://v.youku.com/v_show/id_XMzM5ODcyODkxNg==.html?spm=a2h3j.8428770.3416059.1 
http://v.youku.com/v_show/id_XMzM5ODg0MDc5Mg==.html?spm=a2h3j.8428770.3416059.1 
http://v.youku.com/v_show/id_XMzM5ODk1MzU1Ng==.html?spm=a2h3j.8428770.3416059.1 
http://v.youku.com/v_show/id_XMzQwMTU1MjMzMg==.html?spm=a2h3j.8428770.3416059.1

接下来我们将对代码进行关键性的修改,包括main.cpp checkpoints.cpp

main.cpp:创世区块、nTime、 nNonce

这里写图片描述
这里写图片描述
在main.cpp中找到以上两处代码,删掉uint256后面的校验值,只留下0x即可,然后对pchMessageStart的4个值进行调整,例如: 
这里写图片描述 
这里写图片描述
找到下列代码,将其中红框框选的部分作出修改,比如前5位改为12345。改其他数字也可以,只要保证数量相同 
这里写图片描述
然后将上图中的“NY Times 05/Oct 2011 Steve…”这句话改为任意一句你喜欢的话,比如”I like it” 
百度current epoch time获取到当前的时间数值,我现在是1515922950 
这里写图片描述 
接下来将下图中的两个nNonce修改为0,两个nTime修改为刚刚百度得到的值 
删除block.hashMerkleRoot == uint256(“0x97d….ed9”)中间97d到ed9的这段字符串,只留下0x 
这里写图片描述
修改时间设置,我这里分别改成了nTargetTimespan = 10 * 30和 nTargetSpacing = 1* 30 
这里写图片描述

checkpoints.cpp : 删除checkpoints

只留下map_list_of的第一行,其他的行全删掉,第一行的内容修改为 ( 0, uint256(“0x”)) 
这里写图片描述
然后找到下面这个位置 
这里写图片描述
注释掉1410516073,4896865, 7000.0 , 1365458829, 547, 576这6行(在行首添加//) 
将545, uint256(“0xa0fea..e602”))修改为0, uint256(“0x”))

net.cpp 修改dnsseeds

这里写图片描述 
其中的strMainNetDNSSeed有6行数据,删掉中间4行,将第一行的修改为{“learncointools.com”, “192.168.1.122”},其中192.168.1.122换成你自己ubuntu的IP

修改bitcoin-qt.pro为maxcoin-qt.pro

加入创世区块生成代码

在main.cpp的第2810行加入下面代码:

if (true && block.GetHash() != hashGenesisBlock)
        {
            printf("Searching for genesis block...\n");
            // This will figure out a valid hash and Nonce if you're
            // creating a different genesis block:
            uint256 hashTarget = CBigNum().SetCompact(block.nBits).getuint256();
            uint256 thash;
            char scratchpad[SCRYPT_SCRATCHPAD_SIZE];

            loop
            {
                scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad);
                if (thash <= hashTarget)
                    break;
                if ((block.nNonce & 0xFFF) == 0)
                {
                    printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str());
                }
                ++block.nNonce;
                if (block.nNonce == 0)
                {
                    printf("NONCE WRAPPED, incrementing time\n");
                    ++block.nTime;
                }
            }
            printf("block.nTime = %u \n", block.nTime);
            printf("block.nNonce = %u \n", block.nNonce);
            printf("block.GetHash = %s\n", block.GetHash().ToString().c_str());

            }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

加入的位置是在assert(block.hashMerkleRoot == uint256(“0x”));的下面,这是我们刚刚修改过的地方 
这里写图片描述

保存一个干净的代码

这一点很重要,待会代码需要上传到github

首次编译

在src目录下执行make -f makefile.unix USE_UPNP=-

首次运行

运行maxcoind,正常情况下会crush。此时回到用户根目录,会有一个.maxcoin的隐藏文件夹,打开其中的debug.log文件,它的最后一行就是merkle数值 
这里写图片描述 
把这个数值放到main.cpp中 
这里写图片描述
放到0x后面,这是我们之前修改的地方

第二次编译运行

在src目录下执行make -f makefile.unix USE_UPNP=- 
再次运行maxcoind,此时它会重新计算创世区块和nNone,一段时间后会再次崩溃,我用的IBM3250服务器,可能花了10多分钟

猜你喜欢

转载自blog.csdn.net/weixin_38313047/article/details/80839538