创建自己的数字货币 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

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

checkpoints.cpp : 删除checkpoints

只留下map_list_of的第一行,其他的行全删掉,第一行的内容修改为 ( 0, uint256(“0x”))
创建自己的数字货币 Part 2_第9张图片
然后找到下面这个位置
创建自己的数字货币 Part 2_第10张图片
注释掉1410516073,4896865, 7000.0 , 1365458829, 547, 576这6行(在行首添加//)
将545, uint256(“0xa0fea..e602”))修改为0, uint256(“0x”))

net.cpp 修改dnsseeds

创建自己的数字货币 Part 2_第11张图片
其中的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());

            }

加入的位置是在assert(block.hashMerkleRoot == uint256(“0x”));的下面,这是我们刚刚修改过的地方
创建自己的数字货币 Part 2_第12张图片

保存一个干净的代码

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

首次编译

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

首次运行

运行maxcoind,正常情况下会crush。此时回到用户根目录,会有一个.maxcoin的隐藏文件夹,打开其中的debug.log文件,它的最后一行就是merkle数值
创建自己的数字货币 Part 2_第13张图片
把这个数值放到main.cpp中
创建自己的数字货币 Part 2_第14张图片
放到0x后面,这是我们之前修改的地方

第二次编译运行

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


后续如果大家有需要出相关的视频,有问题或者交流可以进群 425499445 讨论,只有知识共享才能促进比特币的繁荣。

你可能感兴趣的:(maxcoin)