“链”上情人节,教你用区块链表白!

2019-02-14
摘要:这个情人节你准备怎么过?

【菜鸟区块链】

编辑丨月老班主任

导语


浪漫的情人节,空气中都弥漫着粉红色的甜蜜气息,这样的节日总会促成许多美好的起点,之后回忆起那些瞬间,便化作爱情的记忆。但送女友或者潜在女友情人节礼物,却变成直男们的千古难题。送花太大众可能被认错人,口红挑错喜欢的颜色会适得其反,代表永恒的钻石可能被认为是在求婚,程序员们如何选出独特又让人印象深刻的礼品呢?今年,我们教你怎样通过区块链为自己的另一半留下浪漫的印记,因为永恒、不可更改性和公开性的特性,爱她就送她区块链上的告白,锁住你们一生一世的浪漫情缘吧!



区块链求爱


尽管区块链一直以来都被用于验证一些比较正式的内容,比如说金融记录或身份信息等,现在也成了示爱的工具。第一个区块链示爱发生在弗罗里达州的迪士尼乐园,大卫•蒙德鲁斯和乔伊斯•巴约把他们的婚礼誓言记录在区块链上。


SingularDTV首席执行官扎克•勒博和他的妻子金•杰克逊也决定让他们的婚姻在以太坊区块链中走向永恒。去年11月2号他们在纽约举行了婚礼,并且在区块链上创建了婚约,记录了自己的誓言。


比特币交易平台上,也有人在第448064个区块以交易的形式秀了一把恩爱,具体内容如下图所示:



DayahDover,你的性格无可比拟。你很聪明,能做到很多人做不到的事。你总是很优雅。你就是我的全世界,给我的生活带来了无限的乐趣。Daya,我永远爱你。



如何将告白放入区块链上


现在有很多基于公开区块链的货币,我们可以利用它们写入永恒的誓言,下面以比特币为例。


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


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


在比特币交易网站,选择比特币提现,输入我们本地钱包的收款地址,就可以把网站上的比特币提现到本地钱包。需要注意的是,比特币的每一笔交易是要出交易费的。


2)在Bitcoin Core中,导出私钥


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


walletpassphrase 本地钱包密码 600


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


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


dumpprivkey 1DobCXYvc4xVSmdPdnZ6xUPGwetaSCma5C


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


3)在VS中新建一个命令行程序,添加NBitcoin的引用


在.Net环境下,最好的比特币开发库是NBitcoin,我们要新建一笔交易,包含我们要在放区块链上的一句话,就可以用这个库轻松完成。新建VS下的控制台应用程序,使用nuget添加NBitcoin的引用。


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


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



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


Bitcoin Transaction 0327f4669b3eea71ef351c8d89877b037fa1a270095426877d7961a8a4de5892


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


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


varblockr = 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

});


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


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


18fNiqtV1gQPF9A5BwGis6VfX66R5Tjq7p。


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


BitcoinAddressreceiveAddress = new BitcoinPubKeyAddress("18fNiqtV1gQPF9A5BwGis6VfX66R5Tjq7p", Network.Main);

payment.Outputs.Add(new TxOut()

{

Value = Money.Coins(0.0004198m),

ScriptPubKey = receiveAddress.ScriptPubKey

});


这里我需要说明一下我的比特币流转的安排,我的输入比特币是0.00052比特币,我打算把其中的0.0004198转移到新建的地址中,接下来还有另一个Output,就是放一句话的地方,我打算意思性的放0.0000001,而Input和Output的差额0.0001001作为手续费!


6)编码一句话,并放在OP_RETURN后面,将这个脚本也作为另一个输出


最重要的地方到了,我们需要放入我们自定义的内容(一句话,一个Hash值都行),根据网上的文档(https://en.bitcoin.it/wiki/OP_RETURN),后面可以跟80字节的内容,也就是说如果是汉字的话,可以放40个了!虽然没有微博的140字那么长,但是应该也够我们用了吧!


这是我们放0.0000001比特币在这上面,其实放0也是可以的!因为用英文更容易被国外的网站Decode,所以我建议采用ASCII编码英文。


string text = "Input what you want to say!";

var bytes = Encoding.ASCII.GetBytes(text);

payment.Outputs.Add(new TxOut()

{

Value = Money.Coins(0.0000001m),

ScriptPubKey = TxNullDataTemplate.Instance.GenerateScriptPubKey(bytes)

});


7)使用前面步骤2导出的私钥,对这笔交易签名


现在我们整个payment对象已经有了输入和输出,剩下的就是对输入进行签名,也就是说证明我对1DobCXYvc4xVSmdPdnZ6xUPGwetaSCma5C这个地址上的比特币有使用权。


BitcoinSecretpkBitcoinSecret = new BitcoinSecret("这里是私钥字符串");

payment.Inputs[0].ScriptSig = pkBitcoinSecret.ScriptPubKey;

payment.Sign(pkBitcoinSecret, false);


8)调用Bitcoin Core,将我们的交易发布到互联网上


至此,我们的工作已经完成,接下来就是等待矿工处理我们的这笔交易了。如果我们给的交易费高,那么可能很快。


using (var node = Node.ConnectToLocal(Network.Main)) //Connect to the node

{

node.VersionHandshake(); //Say hello

node.SendMessage(new InvPayload(InventoryType.MSG_TX, payment.GetHash()));

node.SendMessage(new TxPayload(payment));

Thread.Sleep(10000); //Wait a moment

}


这里发送交易到网络是调用了BitCoin Core的,所以必须保证BitCoin Core是打开的。一旦发送成功,我们可以在比特币钱包中看到多了一笔交易记录:



好了,就这么简单,我们就可以把想说的话放在比特币的区块链上。放在上面也就意味着,永远不会被删除,被全世界的人都能看到!感觉就是技术宅的表白神器啊!所以一定要三思,不然表白没成功,或者成了前女友,这句话又永远无法被删除,以后怎么给新女友交代啊?!


内容来源:阿里云大学



声明:币圈有风险,投资需谨慎,本文纯属个人观点,不作任何投资意见;本文内容来源于网络,如需转载,请联系原作者。


- 互动环节 -


  这个情人节你怎么过?


欢迎各位童鞋积极留言互动,班主任会在留言中抽选一位童鞋送上价值199的区块链大礼包。




「菜鸟人物」 

 老猫 伟明 | 李林  

    宝二爷 | 冯文杰 | 孙宇晨   


「菜鸟推荐」 

 BCH | EOS | AE  | IPFS

 以太坊 | 瑞波币 |  波场 | 艾达币  


「菜鸟课堂」

 公链 | 矿工 | 私钥  | 分叉 

拜占庭 | Token |  比特币 | 区块链 


声明:本文观点仅代表作者本人,不代表凤梨财经赞同或证实其观点描述。如若侵权,请联系我们删除文章。