Bitcoin交易分析---手动构建交易

战史        2019-08-13   来源:豆豆君大世界

bitcoin交易核心是由bitcoin脚本构成。在很多交易中,一笔交易常常包含了多种脚本,在开发过程中如果只使用源码编译出来的rpc函数sendtoaddress去测试交易是很有限的,一些组合的脚本交易也很难构造出来,此时需要手动构造交易脚本,包括输入输出的次序,等等。

手动构造交易主要分三步,下面以具体的命令说明如下:


第一步:构造基础的元交易

./bitcoin-cli -datadir=data -rpcwallet="wallet6" createrawtransaction "[{\"txid\":\"c08e5f5082603a54479163a6ee76f9f85263fefb3eeb9fa58332e06d91f35141\",\"vout\":0},{\"txid\":\"c45b4068ebfe648c09ec9a23da5c9c083800c0efd9512eb22c5c842cbd7dfe50\",\"vout\":1}]" "[{\"2N3BUUr22gCmSjW5kEDZs9Rgte5a5ydiYZq\":0.8}, {\"2MzNatVWBsSnM1h9K6WBCfGkQDejQvShx1Y\":0.19994880}]" 250

说明:

  • createrawtransaction第一个[{}]的参数是输入,第二个[{}]参数是输出,最后一个参数250是locktime。

  • 构造元交易的时候要注意找零,如果不找零,矿工费太多,后面发送交易会失败。一般正常脚本交易一个INPUT的Fee是3320聪,两个INPUT的Fee是5120聪。

执行完这条rpc指令后会得到一段元数据,可以参考前面的文章分析知道这就是个基础交易的元交易。
02000000024151f3916de03283a59feb3efbfe6352f8f976eea6639147543a6082505f8ec00000000000feffffff50fe7dbd2c845c2cb22e51d9efc00038089c5cda239aec098c64feeb68405bc40100000000feffffff0200b4c4040000000017a9146cfbb111c1550006f65f6ddff366ed8e04ba94d287001931010000000017a9144e2d3d20ac9b3c6dc0f70fc8c77ac79689f7259787fa000000


第二步:签名元交易

./bitcoin-cli -datadir=data -rpcwallet="wallet6" signrawtransactionwithwallet "02000000024151f3916de03283a59feb3efbfe6352f8f976eea6639147543a6082505f8ec00000000000feffffff50fe7dbd2c845c2cb22e51d9efc00038089c5cda239aec098c64feeb68405bc40100000000feffffff0200b4c4040000000017a9146cfbb111c1550006f65f6ddff366ed8e04ba94d287001931010000000017a9144e2d3d20ac9b3c6dc0f70fc8c77ac79689f7259787fa000000"

说明:

  • 签名元交易时一定要指定钱包-rpcwallet,私钥全部保存在钱包里头。

执行完这条rpc指令后也会得到一段元数据,可以参考前面的文章分析知道这是一个签好名的隔离认证交易脚本和一个普通的P2PKH交易脚本的组合交易。

020000000001024151f3916de03283a59feb3efbfe6352f8f976eea6639147543a6082505f8ec000000000171600149a5aad289aa86d7d6b4520d00839e2e6fa0afa76feffffff50fe7dbd2c845c2cb22e51d9efc00038089c5cda239aec098c64feeb68405bc4010000006a47304402201859148471c261d6dfa97c7cb19e30ca238889e539e225dffac50a31ebfb998c02200ff421f38077e7582b12fb660e296a5d7989cfc977748a781bd6c01be4859197012102eab49161c94d22feef3906d263a5a5413965c8620fd08ec5449126857ee42850feffffff0200b4c4040000000017a9146cfbb111c1550006f65f6ddff366ed8e04ba94d287001931010000000017a9144e2d3d20ac9b3c6dc0f70fc8c77ac79689f725978702473044022068e8fb95b4e758c2b4896b41c8bedbabd0d8f9652bdb7a45591e6b97b9ba7f48022036114b57ec3f0c140ec32155c59bb5e5a82124630bcf9b6367adcf3a44180c51012102c5410dd899f494f50b3193b3ab4eb2a8e785a9e4e646f12804675b54bd45521900fa000000


第三步:发送交易

./bitcoin-cli -datadir=data -rpcwallet="wallet6" sendrawtransaction "020000000001024151f3916de03283a59feb3efbfe6352f8f976eea6639147543a6082505f8ec000000000171600149a5aad289aa86d7d6b4520d00839e2e6fa0afa76feffffff50fe7dbd2c845c2cb22e51d9efc00038089c5cda239aec098c64feeb68405bc4010000006a47304402201859148471c261d6dfa97c7cb19e30ca238889e539e225dffac50a31ebfb998c02200ff421f38077e7582b12fb660e296a5d7989cfc977748a781bd6c01be4859197012102eab49161c94d22feef3906d263a5a5413965c8620fd08ec5449126857ee42850feffffff0200b4c4040000000017a9146cfbb111c1550006f65f6ddff366ed8e04ba94d287001931010000000017a9144e2d3d20ac9b3c6dc0f70fc8c77ac79689f725978702473044022068e8fb95b4e758c2b4896b41c8bedbabd0d8f9652bdb7a45591e6b97b9ba7f48022036114b57ec3f0c140ec32155c59bb5e5a82124630bcf9b6367adcf3a44180c51012102c5410dd899f494f50b3193b3ab4eb2a8e785a9e4e646f12804675b54bd45521900fa000000"

执行完这条rpc指令后会得到这笔交易的交易ID:efa48611fb520bc5f2c89122a4f4c9727c3474d99e8b1f4e97abfd5155bbbd88

手动构造交易基本就完成了,后续可以通过手动挖矿等方式打包交易,通过rpc指令查看,分析,验证交易。

相关阅读