比特币程序员:如何追到戴安娜(DianaCoin)? 情人节攻略

比特币程序员:如何追到戴安娜(DianaCoin)? 情人节攻略(比特币女孩)

题记:女人的衣柜里总差一件衣服,男人的钱包里总差一些美元。那么比特币程序员的荷包里,穷的只剩技术。

当年我的女朋友名字叫戴安娜(Diana)。幸好,她还不是英国的王妃戴安娜,咱可没有查尔斯王子有钱。

情人节(劫)(2015年)马上到了,该送她什么了?送就送她一个亿吧(DianaCoin)。

造币记

声明:我们将使用比特币的0.10源代码(现在是0.16版本),新的数字币命名为“newcoin”,我的mac 上装的是Debian Jessie(Debian 8)系统。

(一)获取源代码

打开命令行shell。在主目录下创建一个名为“src”的新目录。输入:

cdmkdir srccd src

下载源码:https://bitcoin.org/en/release/v0.10.0。它的名字可能是bebitcoin-0.10.0 tar.gz(1)。将它复制到新目录并解压:

cp ~/Downloads/bitcoin-0.10.0\(1\).tar.gz .tar xvf bitcoin-0.10.0\(1\).tar.gzcp -r bitcoin-0.10.0 newcoin

(二)建立依赖环境

suecho 'deb-src ftp://ftp.us.debian.org/debian/ sid main contrib non-free' >> /etc/apt/sources.listapt-get updateapt-get build-dep bitcoinapt-get –install-recommends install libbitcoin-devexit

(三)makefile(自动生成系统)

cd bitcoin-0.10.0aclocalautomake --add-missing./configure --with-incompatible-bdbmake

(四)检查测试,确保生成的可执行文件实际存在。

ls src/bitcoindls src/bitcoin-clils src/qt/bitcoin-qt

(五)为你的数字币命名

cd ~/src/newcoinfind . -type f -print0 | xargs -0 sed -i 's/bitcoin/newcoin/g'find . -type f -print0 | xargs -0 sed -i 's/Bitcoin/Newcoin/g'find . -type f -print0 | xargs -0 sed -i 's/BitCoin/Newcoin/g'find . -type f -print0 | xargs -0 sed -i 's/BITCOIN/NEWCOIN/g'find . -type f -print0 | xargs -0 sed -i 's/BTC/NCN/g'find . -type f -print0 | xargs -0 sed -i 's/btc/NCN/g'find . -type f -print0 | xargs -0 sed -i 's/Btc/NCN/g'find . -exec rename 's/bitcoin/newcoin/' {} ";"find . -exec rename 's/btc/NCN/' {} ";"find . -exec rename 's/bitcoin/newcoin/' {} ";"find . -exec rename 's/btc/NCN/' {} ";"find . -exec rename 's/bitcoin/newcoin/' {} ";"find . -exec rename 's/btc/NCN/' {} ";"

将每个包含“bitcoin”或“btc”字符串的文件重命名,包括所有下级目录。

(六)拼写错误纠正,和修正版权声明。

grep -ir bitcsed -i 's/bitcon/newcoin/' src/qt/locale/newcoin_da.tssed -i 's/bitcion/newcoin/' src/qt/locale/newcoin_ar.tssed -i 's/Bitconi/Newcoin/' src/qt/locale/newcoin_et.tsfind . -type f -print0 | xargs -0 sed -i '/opyright/ s/Newcoin/Bitcoin/' {} ";"sed -i 's/newcoin/bitcoin/g' doc/release-notes/*sed -i 's/Newcoin/Bitcoin/g' doc/release-notes/*find . -type f -print0 | xargs -0 sed -i '/opyright/ s/Newcoin/Bitcoin/' {} ";"sed -i 's/newcoin/bitcoin/g' doc/release-notes/*sed -i 's/Newcoin/Bitcoin/g' doc/release-notes/*

(七)更改端口

比特币在其主要网络上使用端口8332和18332,测试网络上使用8333和18333。newcoin使用不同的端口,可以同时运行客户端。

find . -type f -print0 | xargs -0 sed -i 's/8332/9443/' {} ";"find . -type f -print0 | xargs -0 sed -i 's/8333/9444/' {} ";"

(八)再次输入:

aclocal;automake --add-missing;./configure --with-incompatible-bdb;make

再等几分钟。

(九)批量编辑。

现在开始做一些非常具体的编辑。

(1)修改newcoin / src/目录下的chainparams.cpp。

编辑后,应该如下所示:

static Checkpoints::MapCheckpoints mapCheckpoints =boost::assign::map_list_of( 0, uint256("0x001"));

(2)更改协议的“魔法”字节

在dataregtest设置另一个变量名为CMainParams。你有很多事情要改变。前四行代码设定值在数组calledpchmessagestart。这些是网络的“神奇字节”;它们是一系列四字节,将消息标识为属于特定的协议。0xf9,0xbe,0xb4,和0xd9的比特币使用。你想用别的东西,所以没有人能欺骗你的newcoin客户端连接到比特币网络,反之亦然。不要紧,这些都只是他们不匹配使用其他协议的人(尤其是其他cryptocurrency块链)。它们的值必须在0到255之间。我建议回到shell终端使用。

echo $RANDOMopenssl ecparam -genkey -name secp256k1 -out alertkey.pemopenssl ec -in alertkey.pem -text > alertkey.hexopenssl ecparam -genkey -name secp256k1 -out testnetalert.pemopenssl ec -in testnetalert.pem -text > testnetalert.hexopenssl ecparam -genkey -name secp256k1 -out genesiscoinbase.pemopenssl ec -in testnetalert.pem -text > genesiscoinbase.hex

(3)创建私钥。

openssl ecparam -genkey -name secp256k1 -out alertkey.pemopenssl ec -in alertkey.pem -text > alertkey.hexopenssl ecparam -genkey -name secp256k1 -out testnetalert.pemopenssl ec -in testnetalert.pem -text > testnetalert.hexopenssl ecparam -genkey -name secp256k1 -out genesiscoinbase.pemopenssl ec -in testnetalert.pem -text > genesiscoinbase.hex

将创建私钥和放入文件命名alertkey.pem,testnetalert.pem,和genesiscoinbase.pem。

(4)编辑时间戳字符串

const char* pszTimestamp = "The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";

(5)设置创世块的Coinbase key

cat genesiscoinbase.hextxNew.vout[0].scriptPubKey = CScript() << ParseHex("...") << OP_CHECKSIG;

(6)删除对比特币种子节点的引用

vFixedSeeds.clear();vSeeds.clear();

(7)添加代码到创世块

genesis.nNonce = 414098458;

之后和

hashGenesisBlock = genesis.GetHash();assert(hashGenesisBlock == uint256("....."));assert(genesis.hashMerkleRoot == uint256("....."));

之前粘贴如下代码:

hashGenesisBlock = uint256("0x01")if (true && genesis.GetHash() != hashGenesisBlock) { Logprintf("recalculating params for mainnet.\n"); Logprintf("old mainnet genesis nonce: %s\n", genesis.nNonce.ToString().c_str()); Logprintf("old mainnet genesis hash: %s\n", hashGenesisBlock.ToString().c_str()); // deliberately empty for loop finds nonce value. for(genesis.nNonce == 0; genesis.GetHash() > bnProofOfWorkLimit; genesis.nNonce++){ } Logprintf("new mainnet genesis merkle root: %s\n", genesis.hashMerkleRoot.ToString().c_str()); Logprintf("new mainnet genesis nonce: %s\n", genesis.nNonce.ToString().c_str()); Logprintf("new mainnet genesis hash: %s\n", genesis.GetHash().ToString().c_str()); }

(8)现在再次输入:

make

(9)现在运行newcoin QT,挖掘你的创世纪块。

故事的结局呢?呵呵,还是留下点悬念好了。

我是创客哈雷,一个比特币程序员,祝天下Coder都能抱得美人归!