使用C#将一句话放入比特币的区块链上

最近在看区块链和比特币的知识,顺便简单研究了一下BitCoin的脚本语言,发现OP_RETURN这个命令可以在后面放入自己想说的内容,很多侧链啊,公证之类就是利用了这个特性,可以把一句话,或者一个哈希值放在这个命令后面,于是我也想试一试,看看能不能成功。

由于本人对C#很熟悉,所以采用的是网上的.Net BitCoin的开源库NBitcoin。下面是实现过程。

1. 去买一定量的比特币。

这个不用多说了,到火币网,OKCoin等比特币交易所都可以购买,因为是实验的需要,所以并不需要买很多,几元~十几元人民币对应的比特币即可,多买点也行,以后留着说不定还能升值。

2. 下载并安装Bitcoin Core,然后把交易网站购买的比特币提现到本地的比特币钱包中。

接下来我们需要安装比特币官方的钱包,BitCoin Core,官网下载地址是:https://bitcoin.org/en/download  最好是选择Windows安装版,下载并安装好后,打开bitcoin-qt.exe,系统会给我们创建一个新的比特币接收地址,当然,我们也可以自己创建新的比特币接收地址。在“文件”-》“正在接收地址”下,可以看到当前钱包的接收地址。

image

在比特币交易网站,选择比特币提现,输入我们本地钱包的收款地址,就可以把网站上的比特币提现到本地钱包。需要注意的是,比特币的每一笔交易是要出交易费的,而交易费的多少就决定了转账到本地的快慢。以我之前提现的经验,我设置的交易费是0.0001比特币,大概也就是人民币8毛钱,这种情况下需要2天才到账,所以大家想快点到账,就得提高点手续费了。

3. 在Bitcoin Core中,导出私钥。

现在比特币已经在我们本地钱包的账户下了,接下来就需要导出本地钱包收款地址对应的私钥。具体做法是打开“帮助”-》“调试窗口”,在控制台的选项卡下,输入:

walletpassphrase 本地钱包密码 600

这个命令是解锁钱包,以便于接下来导出密钥。

以我的这个收款地址“1DobCXYvc4xVSmdPdnZ6xUPGwetaSCma5C”为例,我们再运行以下命令,BitCoin Core就会输出该地址对应的密钥了:

dumpprivkey 1DobCXYvc4xVSmdPdnZ6xUPGwetaSCma5C

把这个密钥字符串保存下来,有这个密钥,就能花费该收款地址中的比特币,所以千万不要告诉别人!我们接下来通过程序创建一笔交易的时候就会用到该密钥。

4. 在VS中新建一个命令行程序,添加NBitcoin的引用。

在.Net环境下,最好的比特币开发库是NBitcoin,我们要新建一笔交易,包含我们要在放区块链上的一句话,就可以用这个库轻松完成。

新建VS下的控制台应用程序,使用nuget添加NBitcoin的引用。

5. 找到上一次提现到比特币钱包的TransactionID,这就是我们要创建一笔新交易的比特币的输入。

回到比特币钱包BitCoin Core,在主界面的“交易记录”选项卡中,可以看到之前提现比特币的交易记录。

image

把这个Transaction ID复制下来,我们到网上查询这个Transaction的具体情况:

https://blockchain.info/tx/0327f4669b3eea71ef351c8d89877b037fa1a270095426877d7961a8a4de5892

我们可以看到在这边交易中,有2个Output,其中我们的地址1DobCXYvc4xVSmdPdnZ6xUPGwetaSCma5C是第一个,也就是Index为0。

接下来在C#中新建一个Transaction,把这个交易作为新建交易的输入:

var blockr = new BlockrTransactionRepository(); Transaction inputTran = blockr.Get("0327f4669b3eea71ef351c8d89877b037fa1a270095426877d7961a8a4de5892");//0.00052 Transaction payment = new Transaction(); payment.Inputs.Add(new TxIn() { PrevOut = new OutPoint(inputTran.GetHash(), 0) //前面通过网站查询,我们的Index是0 }); 

6. 在比特币钱包中新建一个收款地址,作为我们这边交易的比特币接收方。

重新回到比特币钱包BitCoin Core,在“文件”-》“正在接收地址”中,我们可以新建一个比特币收款地址,把这个地址作为我们交易的输出。这里,我采用的地址是:18fNiqtV1gQPF9A5BwGis6VfX66R5Tjq7p

于是我们对应的C#语句是:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14102.html