比特币基础教学之:怎样手动签名比特币交易

在各种比特币钱包客户端越来越简单易用的今天,小伙伴们早已经习惯使用各种比特币钱包客户端来发送比特币了。但是你知道么,其实比特币的发送不用比特币钱包客户端也能自己手动进行。今天编者就来演示一下如何手动对一个比特币交易进行签名并发送的过程


在比特币系统中,比特币是依附于Transaction交易单存在的,比特币系统的实质就是数字货币交易单,确切的说是数字货币交易(Transactions)的数字签名链,它是使用椭圆曲线加密算法 ECDSA进行签名的。

所有的交易记录构成了比特币的总账本ledger,但是和传统银行的中心化系统不同,比特币的总账本Ledger是保存在整个P2P网络上的,而传统银行的账本由中心服务器保存。

下面,编者就来演示一下如何对单个一笔交易进行手动的签名。Sign Raw Transaction首先,小伙伴们需要打开P2PBUCKS的脑钱包工具页面,点击比特币发送程式。我们就利用这个页面上的工具来进行签名。为了安全起见,你可以Ctrl+S保存整个网页页面,自己离线进行以下试验。1 在Private Key中输入一个比特币地址的私钥,这里私钥必须是Bitcoin-QT钱包格式的,即必须是以数字“5”开头的。在输入完成后,下面的Source Address会自动计算出该私钥所对应的比特币地址。2 在Destination Address中黏贴需要交易转账的目标地址,并输入发送比特币的数量,在这里你必须把矿工费用也考虑进去,如果第一步中比特币地址上的余额少于最低的矿工费用(0.0001BTC)可能交易无法成功。

生成签名交易单
3 在完成上面两步之后,JSON Transaction和Raw Transaction就已经自动生成了,我们在Fee的输入框中打入支付比特币矿工的费用,一般在0.0001BTC到0.0005BTC之间。然后点击Send Transaction完成此次交易。

广播到P2P网络
4 Raw Transaction会通过Blockchain.info被广播到整个P2P网络上并等待矿工节点的确认,一旦确认完成此次交易便成立了。

在上面的例子中,编者进行的这次交易的HASH值为:
679fdf8a1fa09f78af2fe60041ddbda78b39bb59dd5d0471d3a9c4de6a35acd1
小伙伴可以点击查看Blockchain上面的交易记录。其它方式进行手动签名交易在上面,编者只是进行了一个对比特币交易进行手动签名的演示,用的工具是脑钱包中Transaction程式,其实用其它方法也可以对交易进行签名。1小伙伴们可以在Bitcoin-Qt中本聪客户端中使用bitcoind命令行下进行手动签名交易,使用createrawtransaction,signrawtransaction和sendrawtransaction这三个命令即可。2使用比特币Python工具箱,我们使用其他开发者的比特币程序库也能进行交易签名,比如,PYTHON命令行下的比特币钱包工具箱一文中所提到的比特币Python工具箱。


> from pybitcointools import *
> priv = sha256('some big long brainwallet password') //脑钱包生成比特币地址和私钥
> priv
'57c617d9b4e1f7af6ec97ca2ff57e94a28279a7eedd4d12a99fa11170e94f5a4'
> pub = privtopub(priv)
> pub
'0420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9'
> addr = pubtoaddr(pub)
> addr
'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'
> h = history(addr) // 得到前一个交易的Hash值
> h
[{'output': u'97f7c7d8ac85e40c255f8a763b6cd9a68f3a94d2e93e8bfa08f977b92e55465e:0', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}, {'output': u'4cc806bb04f730c445c60b3e0f4f44b54769a1c196ca37d8d4002135e4abd171:1', 'value': 50000, 'address': u'1CQLd3bhw4EzaURHbKCwM5YZbUQfA4ReY6'}] > outs = [{'value': 90000, 'address': '16iw1MQ1sy1DtRPYw3ao1bCamoyBJtRB4t'}] > tx = mktx(h,outs) //merkel 哈希值计算
> tx
'01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f7970000000000ffffffff71d1abe4352100d4d837ca96c1a16947b5444f0f3e0bc645c430f704bb06c84c0100000000ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d02873c88ac00000000'
> tx2 = sign(tx,0,priv) //用私钥签名交易
> tx2
'01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f797000000008b483045022100fc9ec3f6c66f630604e76309092ae00b48d39a83f8683bbf9d6310084e70eabd022058333d7a1d2158529ce39f9b48dea23dedefbe85028cdceab34e1ee9b1518c3201410420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff71d1abe4352100d4d837ca96c1a16947b5444f0f3e0bc645c430f704bb06c84c0100000000ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d02873c88ac00000000'
> tx3 = sign(tx2,1,priv) //用私钥签名交易
> tx3
'01000000025e46552eb977f908fa8b3ee9d2943a8fa6d96c3b768a5f250ce485acd8c7f797000000008b483045022100fc9ec3f6c66f630604e76309092ae00b48d39a83f8683bbf9d6310084e70eabd022058333d7a1d2158529ce39f9b48dea23dedefbe85028cdceab34e1ee9b1518c3201410420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff71d1abe4352100d4d837ca96c1a16947b5444f0f3e0bc645c430f704bb06c84c010000008c493046022100da7fa563ce34af5a4c8167a2978cb5517ded494e52a29ea4103ff2c67bce77c102210094a18bda1109591a82d5cf5e4446b12b3c399401c0f668755ac7f614eb3baa7701410420f34c2786b4bae593e22596631b025f3ff46e200fc1d4b52ef49bbdc2ed00b26c584b7e32523fb01be2294a1f8a5eb0cf71a203cc034ced46ea92a8df16c6e9ffffffff01905f0100000000001976a9143ec6c3ed8dfc3ceabcc1cbdb0c5aef4e2d02873c88ac00000000'
> pushtx(tx3) // 向网络广播交易
'Transaction Submitted'

祝小伙伴们玩的愉快

作者:P2PBUCKS,比特币基础教学系列为比巴克原创内容,比巴克对其保有权利。任何对基础教学系列文章的转载必须注明作者及出处链接,对于任何侵犯版权的行为,比巴克会法律追究!