在经过一段时间的学习之后,我对比特币的交易有一些了解了,于是就尝试着使用node.js来编写这个交易的逻辑,于是就在网上寻找到了bitcoinjs这个中间件,不得不说,这个中间件是真的强大,里面几乎涵盖了所有交易要用到一些功能,比如创建transaction,创建私钥,通过私钥和目的地址创建交易等等,很强大,做BTC相关的开发的同学不要错过。在使用之后问题了,bitcoinjs是在BTC下面使用的,如果拿到BCH上面去使用就会出现
mandatory-script-verify-flag-failed (Signature must use SIGHASH_FORKID)
这个错误我现在也不懂到底是怎么回事,通过网络了解到,只是在BCH和BTC上有区别。后来我在GitHub上面寻找有关BCH的node.js 中间件,于是就找到了bitcoincashjs这个中间件,和bitcoinjs差不多,在功能上都是一个类型的,不过我很纳闷的是它的start很少但是fork书相对较高??

一开始,你得在你的账号下面创建一些地址, 然后去弄一些测试用的BCH,我的BCH测试服务器上产生的地址就是这样的

const bch = require('bitcoincashjs');
const privateKey = new bch.PrivateKey('cT6E7cf3YAYuDeFLwkrtVNQpD5axtPqtpBfW88jEVLooCBBwi8YA');
const utxo = {
'txId' : '4714796e7816d327c6d3cd0a433ecab3b1a87925ffca24243cb0b0242ce5a3bb',
'outputIndex' : 1,
'address' : 'qq2r8zwkk0rmu3x9yh6lxj0knm80jsdv45x94pgk22',
'script' : '76a01474b291eb86b265beeabc8bd6d7d57557f56244dd88ac',
'satoshis' : 1000000000
};
const transaction = new bch.Transaction()
.from(utxo)
.to('qp6t9y0ts6ext0h2hj9ad474v4tl2cjym5z49g5rg0', 999990000)
.sign(privateKey);
console.log(transaction.toString())

报错了。。。然后,我就带着问题去找答案,终于没有找到答案,应为实在是太简单了,报错信息已经说明白了。好吧,我承认我没有看完也没有仔细看那本《精通比特币》的书,很多的东西我都不知到,完全是瞎搞。后来经过我仔细的思考和观察,发现可以用私钥生成地址,于是我就在服务器上用命令行取到他们的私钥,然后生成地址。写在代码里面。
const bch = require('bitcoincashjs');
const privateKey = new bch.PrivateKey('cW6E7cf3YAYuDeFLwkrtVNQpD5axtPqtpBfW88jEVLooCBBwi8WA');
const utxo = {
'txId' : '4714796e7816d327c6d3cd0a433ecab3b1a87925ffca24243cb0b0242ce5a3bb',
'outputIndex' : 1,
'address' : 'mr9zbZsDtng5r7mv6N24cDAoQGLwZge1ps',
'script' : '76a91474b291eb86b265beeabc8bd6d7d56557f56244dd88ac',
'satoshis' : 1000000000
};
const transaction = new bch.Transaction()
.from(utxo)
.to('mhMmYqtR9wzbW9otiurkG9AGVNzjfww36v', 999990000)
.sign(privateKey);
console.log(transaction.toString())
ok 大功告成,不报错,拿到了数据
0100000001bba3e52c24b0b03c2424caff2579a8b1b3ca3e430acdd3c627d316786e791447010000006b483045022100a266fc5288c91f99439796383cbb71c06ea43cebb41dfd00ba8851cf80fb1e81022072b3622e8b3d4edfe569b0b449f0e45e252eb33f79fa37ac5b560f537940a795412102cbcacfb88f6ff955cc933b54416262af967ad333da237e7ab6b64f9af679d51bffffffff01f0a29a3b000000001976a914143389d6b3c7be44c525f5f349f69ecef941acad88ac00000000
然后sendrawtransaction 到我的服务器上,成功的发布了。

大功告成,于是我到blocktrail产看是否有记录。发现有这条记录。
https://www.blocktrail.com/tBCC/address/mhMmYqtR9wzbW9otiurkG9AGVNzjfww36v
至此,终于开启了我的区块链学习之旅。
网友评论