简介

买卖(Transaction)是比特币体系的信息载体,最小单元。而块(Block)便是将这些基础单元打包装箱,贴上封条,并串联起来。巨大算力保证了块的安全,也就保证了单个买卖的安全。

类型

买卖有三种常见类型:产值买卖(Generation),组成地址买卖(Script Hash),通用地址买卖(Pubkey Hash)。该分类并非严厉意义的,仅仅依据买卖的输入输出做的简略区别。

Generation TX

每个Block都对应一个产值买卖(Generation TX),该类买卖是没有输入买卖的,挖出的新币是一切币的源头。

Script Hash TX

该类买卖现在不是很常见,大部分人或许没有听说过,但是非常有意义。未来应该会在某些场合频频运用。该类买卖的承受地址不是一般意义的地址,而是一个组成地址,以3开头(对,以3开头的也是比特币地址!)。三对公私钥,能够生成一个组成地址。在生成进程时指定n of 3中的n,n规模是[1, 3],若n=1,则仅需一个私钥签名即可花费该地址的币,若n=3,则需求三把私钥依次签名才能够。

Pubkey Hash TX

该类是最常见的买卖类型,由N个输入、M个输出构成。

数据结构

买卖中寄存的是钱银一切权的流通信息,一切权登记在比特币地址上(Public Key)。这些信息是全网公开的,以明文形式存储(比特币体系里的一切数据都是明文的),只有当需求搬运钱银一切权时,才需求用私钥签名来验证。

字段大小 描绘 数据类型 解说
4 version, 版别 uint32_t 买卖数据结构的版别号
1+ tx_in count, 输入数量 var_int 输入买卖的数量
41+ tx_in tx_in[] 输入买卖的数组,每个输入>=41字节
1+ tx_out count, 输出数量 var_int 输出地址的数量
9+ tx_out tx_out[] 输入地址的数组,每个输入>=9字节
4 lock_time, 确定时间 uint32_t 见下方解说

lock_time是一个多意字段,表明在某个高度的Block之前或某个时间点之前该买卖处于确定态,无法录入进Block。

意义
0 立即收效
< 500000000 意义为Block高度,处于该Block之前为确定(不收效)
>= 500000000 意义为Unix时间戳,处于该时间之前为确定(不收效)

若该笔买卖的一切输入买卖的sequence字段,均为INT32最大值(0xffffffff),则疏忽lock_time字段。不然,该买卖在未到达Block高度或到达某个时间之前,是不会被录入进Block中的。

示例

为了演示便利,咱们读取稍早期的块数据,以高度116219 Block为例。

# ~ bitcoind getblock 0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“hash” : “0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611″,
“confirmations” : 144667,
“size” : 1536,
“height” : 116219,
“version” : 1,
“merkleroot” : “587fefd748f899f84d0fa1d8a3876fdb406a4bb8f54a31445cb72564701daea6″,
“tx” : [
"be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e",
"a387039eca66297ba51ef2da3dcc8a0fc745bcb511e20ed9505cc6762be037bb",
"2bd83162e264abf59f9124ca517050065f8c8eed2a21fbf85d454ee4e0e4c267",
"028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743",
"3a06b6615756dc3363a8567fbfa8fe978ee0ba06eb33fd844886a0f01149ad62"
],
“time” : 1301705313,
“nonce” : 1826107553,
“bits” : “1b00f339″,
“difficulty” : 68977.78463021,
“previousblockhash” : “00000000000010d549135eb39bd3bbb1047df8e1512357216e8a85c57a1efbfb”,
“nextblockhash” : “000000000000e9fcc59a6850f64a94476a30f5fe35d6d8c4b4ce0b1b04103a77″
}
该Block里面有5笔买卖,第一笔为Generation TX,解析出来看一下具体内容:

# ~ bitcoind getrawtransaction be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e 1
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“hex” : “01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff070439f3001b0134ffffffff014034152a010000004341045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac00000000″,
“txid” : “be8f08d7f519eb863a68cf292ca51dbab7c9b49f50a96d13f2db32e432db363e”,
“version” : 1,
“locktime” : 0,
“vin” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"coinbase" : "0439f3001b0134",
"sequence" : 4294967295
}
],
“vout” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"value" : 50.01000000,
"n" : 0,
"scriptPubKey" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dce OP_CHECKSIG",
"hex" : "41045b3aaa284d169c5ae2d20d0b0673468ed3506aa8fea5976eacaf1ff304456f6522fbce1a646a24005b8b8e771a671f564ca6c03e484a1c394bf96e2a4ad01dceac",
"reqSigs" : 1,
"type" : "pubkey",
"addresses" : [
"1LgZTvoTJ6quJNCURmBUaJJkWWQZXkQnDn"
]
}
}
],
“blockhash” : “0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611″,
“confirmations” : 145029,
“time” : 1301705313,
“blocktime” : 1301705313
}
Generation TX的输入不是一个买卖,而带有coinbase字段的结构。该字段的值由挖出此Block的人填写,这是一种“特权”:能够把信息写入钱银体系(咱们很喜欢用体系中的数据结构字段名来命名站点,例如blockchain、coinbase等,这些词的各种后缀域名都被抢注一空)。中本聪在比特币的第一个买卖中的写入的coinbase值是:

“coinbase”:”04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73″
将该段16进制转换为ASCII字符,便是那段著名的创世块留言:

The Times 03/Jan/2009 Chancellor on brink of second bailout for banks
接下来展现的是一个三个输入、两个输出的一般买卖:
# ~ bitcoind getrawtransaction 028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743 1
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“hex” : “0100000003c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7000000008a473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbeffffffffc9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffffc98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff0200bd0105000000001976a914634228c26cf40a02a05db93f2f98b768a8e0e61b88acc096c7a6030000001976a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac00000000″,
“txid” : “028cfae228f8a4b0caee9c566bd41aed36bcd237cdc0eb18f0331d1e87111743″,
“version” : 1,
“locktime” : 0,
“vin” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
"vout" : 0,
"scriptSig" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01 048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe",
"hex" : "473044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af0141048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe"
},
"sequence" : 4294967295
},
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"txid" : "b79a4803014177ea0139c95f09c6903c01bb8f80d039631afd68cabf7eb0f3c9",
"vout" : 1,
"scriptSig" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d01 042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a",
"hex" : "47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026a"
},
"sequence" : 4294967295
},
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"txid" : "da30b272fb73d78108ff80ddd1ac2f76419533af79ad06a5b3c70fc4a62086c9",
"vout" : 1,
"scriptSig" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "3045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d01 04a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f",
"hex" : "483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2f"
},
"sequence" : 4294967295
}
],
“vout” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"value" : 0.84000000,
"n" : 0,
"scriptPubKey" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "OP_DUP OP_HASH160 634228c26cf40a02a05db93f2f98b768a8e0e61b OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a914634228c26cf40a02a05db93f2f98b768a8e0e61b88ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"1A3q9pDtR4h8wpvyb8SVpiNPpT8ZNbHY8h"
]
}
},
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“value” : 156.83000000,
“n” : 1,
“scriptPubKey” : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“asm” : “OP_DUP OP_HASH160 7514080ab2fcac0764de3a77d10cb790c71c74c2 OP_EQUALVERIFY OP_CHECKSIG”,
“hex” : “76a9147514080ab2fcac0764de3a77d10cb790c71c74c288ac”,
“reqSigs” : 1,
“type” : “pubkeyhash”,
“addresses” : [
"1Bg44FZsoTeYteRykC1XHz8facWYKhGvQ8"
]
}
}
],
“blockhash” : “0000000000007c639f2cbb23e4606a1d022fa4206353b9d92e99f5144bd74611″,
“confirmations” : 147751,
“time” : 1301705313,
“blocktime” : 1301705313
}
字段hex记录了一切相关信息,后边显示的是hex解析出来的各类字段信息。下面把逐个分化hex内容(hex能够从上面的直接看到):
01000000 // 版别号,UINT32
03 // Tx输入数量,变长INT。3个输入。

/*** 第一组Input Tx ***/
// Tx Hash,固定32字节
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7
00000000 // 消费的Tx坐落前向买卖输出的第0个,UINT32,固定4字节
8a // 签名的长度, 0x8A = 138字节
// 138字节长度的签名,含有两个部分:公钥+签名
47 // 公钥长度,047 = 71字节
3044022055bac1856ecbc377dd5e869b1a84ed1d5228c987b098c095030c12431a4d5249022055523130a9d0af5fc27828aba43b464ecb1991172ba2a509b5fbd6cac97ff3af01
41 // 签名长度,041 = 65字节
048aefd78bba80e2d1686225b755dacea890c9ca1be10ec98173d7d5f2fefbbf881a6e918f3b051f8aaaa3fcc18bbf65097ce8d30d5a7e5ef8d1005eaafd4b3fbe
ffffffff // sequence,0xffffffff = 4294967295, UINT32, 固定4字节

/*** 第二组Input Tx。与上同理,省略分化 ***/
c9f3b07ebfca68fd1a6339d0808fbb013c90c6095fc93901ea77410103489ab7010000008a47304402206b993231adec55e6085e75f7dc5ca6c19e42e744cd60abaff957b1c352b3ef9a022022a22fec37dfa2c646c78d9a0753d56cb4393e8d0b22dc580ef1aa6cccef208d0141042ff65bd6b3ef04253225405ccc3ab2dd926ff2ee48aac210819698440f35d785ec3cec92a51330eb0c76cf49e9e474fb9159ab41653a9c1725c031449d31026affffffff

/*** 第三组Input Tx ***/
c98620a6c40fc7b3a506ad79af339541762facd1dd80ff0881d773fb72b230da010000008b483045022040a5d957e087ed61e80f1110bcaf4901b5317c257711a6cbc54d6b98b6a8563f02210081e3697031fe82774b8f44dd3660901e61ac5a99bff2d0efc83ad261da5b4f1d014104a7d1a57e650613d3414ebd59e3192229dc09d3613e547bdd1f83435cc4ca0a11c679d96456cae75b1f5563728ec7da1c1f42606db15bf554dbe8a829f3a8fe2fffffffff

02 // Tx输出数量,变长INT。两个输出。

/*** 第一组输出 ***/
00bd010500000000 // 输出的币值,UINT64,8个字节。字节序需翻转,~= 0x000000000501bd00 = 84000000 satoshi
19 // 输出意图地址字节数, 019 = 25字节,由一些操作码与数值构成
// 目标地址
// 076 -> OP_DUP(stack ops)
// 0xa9 -> OP_HASH160(crypto)
// 014 -> 长度,014 = 20字节
76 a9 14
// 地址的HASH160值,20字节
634228c26cf40a02a05db93f2f98b768a8e0e61b
// 088 -> OP_EQUALVERIFY(bit logic)
// 0xac -> OP_CHECKSIG(crypto)
88 ac

/*** 第二组输出 ***/
c096c7a603000000
19
76 a9 14 7514080ab2fcac0764de3a77d10cb790c71c74c2 88 ac

00000000 // lock_time,UINT32,固定4字节
Tx Hash,俗称买卖ID,由hex得出:Tx Hash = SHA256(SHA256(hex))。由于每个买卖只能成为下一个的输入,有且仅有一次,那么不存在输入彻底相同的买卖,那么就不存在相同的Tx Hash(SHA256磕碰概率极小,所以无需考虑Hash磕碰的问题,就像无需考虑地址私钥被他人撞到相同)。

即便如此,在体系里仍然发生了相同的Tx Hash,是某位矿工兄弟挖出Block后,打包Block时忘掉修改Generation Tx coinbase字段的值,币量相同且输出至相同的地址,那么就结构了两个彻底一模相同的买卖,分别坐落两个Block的第一个方位。这个对体系不会发生什么问题,但只要花费其间一笔,另一个也被花费了。相同的Generation Tx相当于覆盖了另一个,白白丢失了挖出的币。该买卖ID为e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468,第一次出现在#91722,第二次出现在#91880。

比特币交易的数据结构与签名类型

买卖签名

签名是对一切权的验证,节点收到买卖播送后,会对买卖进行验证,通往后则录入进内存、打包进Block,不然,丢弃之。签名就类似传统纸质合同盖章、签字进程,合法搬运一切权的保证手法。

签名类型

由于一个买卖的输入、输出都或许具有多个,那么签名也具有多种类型,现在共三类:SIGHASH_ALL, SIGHASH_NONE, SIGHASH_SINGLE。

SIGHASH_ALL

该签名类型为默许类型,也是现在绝大部分买卖选用的,望文生义即签名整单买卖。首先,安排一切输出、输入,就像上文分化Hex进程相同,每个输入都对应一个签名,暂时留空,其他包括sequence等字段均须填写,这样就形成了一个完好的买卖Hex(只缺签名字段)。然后,每一个输入均需运用私钥对该段数据进行签名,签名完结后各自填入相应的方位,N个输入N个签名。简略了解便是:关于该笔单子,认可且只认可的这些输入、输出,并赞同花费我的那笔输入。

SIGHASH_NONE

该签名类型是最自在松懈的,仅对输入签名,不对输出签名,输出能够恣意指定。或人对某笔币签名后交给你,你能够在恣意时间填入恣意承受地址,播送出去令其收效。简略了解便是:我赞同花费我的那笔钱,至于给谁,我不关心。

SIGHASH_SINGLE

该签名类型其次自在松懈,仅对自己的输入、输出签名,并留空sequence字段。其输入的次第对应其输出的次第,比方输入是第3个,那么签名的输出也是第三个。简略了解便是:我赞同花费我的那笔钱,且只能花费到我认可的输出,至于单子里的其他输入、输出,我不关心。

买卖的结构、签名与播送

上篇介绍了买卖结构、签名等,为了更直观的知道比特币,凭借bitcoind演示手动结构并播送买卖的完好进程。

一般买卖

1. 找出未花费的币(unspent output)

经过指令:listunspent [minconf=1] [maxconf=9999999] ["address",...]列出某个地址未花费的币(买卖),minconf/maxconf表明该笔收入买卖的承认数规模,假如需求列出还未承认的买卖,需将minconf设置为0。

履行:

bitcoind listunspent 0 100 ‘["1Lab618UuWjLmVA1Q64tHZXcLoc4397ZX3"]‘
输出:

[
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"txid" : "296ea7bf981b44999d689853d17fe0ceb852a8a34e68fcd19f0a41e589132156",
"vout" : 0,
"address" : "1Lab618UuWjLmVA1Q64tHZXcLoc4397ZX3",
"account" : "",
"scriptPubKey" : "76a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac",
"amount" : 0.19900000,
"confirmations" : 1
}
]
咱们找到该地址的一个未花费买卖,坐落买卖296ea7bf981b4499…9f0a41e589132156的第0个方位。

2. 创立待发送买卖

创立待发送买卖,由指令:createrawtransaction [https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg"txid":txid,"vout":n},...] https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgaddress:amount,…}来完结。咱们将 0.1 BTC发送至 1Q8s4qDRbCbFypG5AFNR9tFC57PStkPX1x ,并付出 0.0001 BTC做为矿工费。输入买卖的额度为 0.199 ,输出为 0.1 + 0.0001 = 0.1001 ,那么还剩余: 0.199 – 0.1001 = 0.0989 ,将此作为找零发回给自己。

履行:

bitcoind createrawtransaction \
‘[https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg"txid":"296ea7bf981b44999d689853d17fe0ceb852a8a34e68fcd19f0a41e589132156","vout":0}]‘ \
‘https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg“1Q8s4qDRbCbFypG5AFNR9tFC57PStkPX1x”:0.1, “1Lab618UuWjLmVA1Q64tHZXcLoc4397ZX3″:0.0989}’
输出:

010000000156211389e5410a9fd1fc684ea3a852b8cee07fd15398689d99441b98bfa76e290000000000ffffffff0280969800000000001976a914fdc7990956642433ea75cabdcc0a9447c5d2b4ee88acd0e89600000000001976a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac00000000
经过指令:decoderawtransaction ,能够将此段十六进制字符串解码。

履行:

bitcoind decoderawtransaction ’010000000156211389e5410a9fd1fc684ea3a852b8cee07fd15398689d99441b98bfa76e290000000000ffffffff0280969800000000001976a914fdc7990956642433ea75cabdcc0a9447c5d2b4ee88acd0e89600000000001976a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac00000000′
输出:
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“txid” : “54f773a3fdf7cb3292fc76b46c97e536348b3a0715886dbfd2f60e115fb3a8f0″,
“version” : 1,
“locktime” : 0,
“vin” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"txid" : "296ea7bf981b44999d689853d17fe0ceb852a8a34e68fcd19f0a41e589132156",
"vout" : 0,
"scriptSig" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "",
"hex" : ""
},
"sequence" : 4294967295
}
],
“vout” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"value" : 0.10000000,
"n" : 0,
"scriptPubKey" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "OP_DUP OP_HASH160 fdc7990956642433ea75cabdcc0a9447c5d2b4ee OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a914fdc7990956642433ea75cabdcc0a9447c5d2b4ee88ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"1Q8s4qDRbCbFypG5AFNR9tFC57PStkPX1x"
]
}
},
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“value” : 0.09890000,
“n” : 1,
“scriptPubKey” : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“asm” : “OP_DUP OP_HASH160 d6c492056f3f99692b56967a42b8ad44ce76b67a OP_EQUALVERIFY OP_CHECKSIG”,
“hex” : “76a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac”,
“reqSigs” : 1,
“type” : “pubkeyhash”,
“addresses” : [
"1Lab618UuWjLmVA1Q64tHZXcLoc4397ZX3"
]
}
}
]
}
至此,一个“空白买卖”就结构好了,尚未运用私钥对买卖进行签名,字段scriptSig是留空的,无签名的买卖是无效的。此刻的Tx ID并不是终究的Tx ID,填入签名后Tx ID会发生变化。

在手动创立买卖时,有必要注意输入、输出的值,非常简单犯错的是忘掉结构找零输出(如非必要勿手动结构买卖)。曾经有人结构买卖时忘掉找零,发生了付出 200 BTC 的矿工费的人间惨剧,所幸的是录入该笔买卖的Block由著名挖矿团队“烤猫(Friedcat)”挖得,该团队非常宽厚的退回了多余费用。

3. 签名

买卖签名运用指令:

signrawtransaction \
[https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg"txid":txid,"vout":n,"scriptPubKey":hex,"redeemScript":hex},...] [,...] \
[sighashtype="ALL"]
第一个参数是创立的待签名买卖的十六进制字符串;
第二个参数有点类似创立买卖时的参数,不过需求多出一个公钥字段scriptPubKey,其他节点验证买卖时是经过公钥和签名来完结的,所以要供给公钥;假如是组成地址,则需求供给redeemScript;
第三个参数是行将花费的币所在地址的私钥,用来对买卖进行签名,假如该地址私钥现已导入至bitcoind中,则无需显式供给;
最终一个参数表明签名类型,在上一篇里,介绍了三种买卖签名类型;
签名之前需求找到scriptPubKey,提取输入买卖信息即可获取(也能够依据其公钥自行计算),由指令:getrawtransaction [verbose=0]完结。

履行:

bitcoind getrawtransaction 296ea7bf981b44999d689853d17fe0ceb852a8a34e68fcd19f0a41e589132156 1
输出:

https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“hex” : “01000000010511331f639e974283d3909496787a660583dc88f41598d177e225b5f352314a000000006c493046022100be8c796122ec598295e6dfd6664a20a7e20704a17f76d3d925c9ec421ca60bc1022100cf9f2d7b9f24285f7c119c91f24521e5483f6b141de6ee55658fa70116ee04d4012103cad07f6de0b181891b5291a5bc82b228fe6509699648b0b53556dc0057eeb5a4ffffffff0160a62f01000000001976a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac00000000″,
“txid” : “296ea7bf981b44999d689853d17fe0ceb852a8a34e68fcd19f0a41e589132156″,
“version” : 1,
“locktime” : 0,
“vin” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"txid" : "4a3152f3b525e277d19815f488dc8305667a78969490d38342979e631f331105",
"vout" : 0,
"scriptSig" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "3046022100be8c796122ec598295e6dfd6664a20a7e20704a17f76d3d925c9ec421ca60bc1022100cf9f2d7b9f24285f7c119c91f24521e5483f6b141de6ee55658fa70116ee04d401 03cad07f6de0b181891b5291a5bc82b228fe6509699648b0b53556dc0057eeb5a4",
"hex" : "493046022100be8c796122ec598295e6dfd6664a20a7e20704a17f76d3d925c9ec421ca60bc1022100cf9f2d7b9f24285f7c119c91f24521e5483f6b141de6ee55658fa70116ee04d4012103cad07f6de0b181891b5291a5bc82b228fe6509699648b0b53556dc0057eeb5a4"
},
"sequence" : 4294967295
}
],
“vout” : [
https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"value" : 0.19900000,
"n" : 0,
"scriptPubKey" : https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
"asm" : "OP_DUP OP_HASH160 d6c492056f3f99692b56967a42b8ad44ce76b67a OP_EQUALVERIFY OP_CHECKSIG",
"hex" : "76a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac",
"reqSigs" : 1,
"type" : "pubkeyhash",
"addresses" : [
"1Lab618UuWjLmVA1Q64tHZXcLoc4397ZX3"
]
}
}
],
“blockhash” : “000000000000000488f18f7659acd85b2bd06a5ed2c4439eea74a8b968d16656″,
“confirmations” : 19,
“time” : 1383235737,
“blocktime” : 1383235737
}
scriptPubKey坐落”vout”[0]–>“scriptPubKey”–>“hex”,即: 76a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac 。

签名运用ECDSA算法,对其,“空白买卖”签名之,履行:

bitcoind signrawtransaction \
“010000000156211389e5410a9fd1fc684ea3a852b8cee07fd15398689d99441b98bfa76e290000000000ffffffff0280969800000000001976a914fdc7990956642433ea75cabdcc0a9447c5d2b4ee88acd0e89600000000001976a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac00000000″ \
‘[https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg"txid":"296ea7bf981b44999d689853d17fe0ceb852a8a34e68fcd19f0a41e589132156","vout":0,"scriptPubKey":"76a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac"}]‘
输出:

https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“hex” : “010000000156211389e5410a9fd1fc684ea3a852b8cee07fd15398689d99441b98bfa76e29000000008c493046022100f9da4f53a6a4a8317f6e7e9cd9a7b76e0f5e95dcdf70f1b1e2b3548eaa3a6975022100858d48aed79da8873e09b0e41691f7f3e518ce9a88ea3d03f7b32eb818f6068801410477c075474b6798c6e2254d3d06c1ae3b91318ca5cc62d18398697208549f798e28efb6c55971a1de68cca81215dd53686c31ad8155cdc03563bf3f73ce87b4aaffffffff0280969800000000001976a914fdc7990956642433ea75cabdcc0a9447c5d2b4ee88acd0e89600000000001976a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac00000000″,
“complete” : true
}
签名后,签名值会填入上文所述的空字段中,从而得到一个完好的买卖。可经过上文介绍的指令decoderawtransaction 解码查看之。

最终一步,便是将其播送出去,等候网络传播至一切节点,约10~60秒播送至全球节点,取决与你的节点的网络连接状况。稍后一些时间,就会进入Block中。播送由指令sendrawtransaction 来完结。假如没有运行节点,能够经过公共节点的API进行播送,例如:blockchain.info/pushtx。

履行:

bitcoind sendrawtransaction \
“010000000156211389e5410a9fd1fc684ea3a852b8cee07fd15398689d99441b98bfa76e29000000008c493046022100f9da4f53a6a4a8317f6e7e9cd9a7b76e0f5e95dcdf70f1b1e2b3548eaa3a6975022100858d48aed79da8873e09b0e41691f7f3e518ce9a88ea3d03f7b32eb818f6068801410477c075474b6798c6e2254d3d06c1ae3b91318ca5cc62d18398697208549f798e28efb6c55971a1de68cca81215dd53686c31ad8155cdc03563bf3f73ce87b4aaffffffff0280969800000000001976a914fdc7990956642433ea75cabdcc0a9447c5d2b4ee88acd0e89600000000001976a914d6c492056f3f99692b56967a42b8ad44ce76b67a88ac00000000″
输出:

b5f8da1ea9e02ec3cc0765f9600f49945e94ed4b0c88ed0648896bf3e213205d
回来的是Transaction Hash值,即该买卖的ID。至此,买卖结构、签名、发送的完好进程完结了。

组成地址买卖

组成地址以3开头,能够完成多方办理财物,极大进步安全性,也能够轻松完成根据比特币原生的三方买卖担保付出。一个M-of-N的模式:

m https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgpubkey}…https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpgpubkey} n OP_CHECKMULTISIG
M和N需满足:

1<=N<=3
1<=M<=N
能够是1 of 1,1 of 2,2 of 3等组合,一般选择N=3:

1 of 3,最大程度私钥冗余。防丢私钥丢失,3把私钥中恣意一把即可签名发币,即便丢掉2把都能够保证不受丢失;
2 of 3,进步私钥冗余度的一起处理单点信赖问题。3把私钥恣意2把私钥可签名发币,三方不彻底信赖的景象,即中介买卖中,非常适用;
3 of 3,最大程度处理资金信赖问题,无私钥冗余。有必要3把私钥悉数签名才能发币,适用多方共同办理重要财物,但任何一方遗失私钥均造成严重丢失;
组成地址的买卖结构、签名、发送进程与一般买卖类似,这儿只介绍如何创立一个组成地址。大神Gavin Andresen现已演示过,下面内容摘自其gist.

首先,需求三对公钥、私钥。公钥创立地址、私钥用于签名。

# No.1
0491bba2510912a5bd37da1fb5b1673010e43d2c6d812c514e91bfa9f2eb129e1c183329db55bd868e209aac2fbc02cb33d98fe74bf23f0c235d6126b1d8334f86 / 5JaTXbAUmfPYZFRwrYaALK48fN6sFJp4rHqq2QSXs8ucfpE4yQU
# No.2
04865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac09ef122b1a986818a7cb624532f062c1d1f8722084861c5c3291ccffef4ec6874 / 5Jb7fCeh1Wtm4yBBg3q3XbT6B525i17kVhy3vMC9AqfR6FH2qGk
# No.3
048d2455d2403e08708fc1f556002f1b6cd83f992d085097f9974ab08a28838f07896fbab08f39495e15fa6fad6edbfb1e754e35fa1c7844c41f322a1863d46213 / 5JFjmGo5Fww9p8gvx48qBYDJNAzR9pmH5S389axMtDyPT8ddqmw
运用指令:createmultisig <’["key","key"]‘>来组成,其间key为公钥,创立地址时仅需公钥。创立类型是2 of 3.

输入:

bitcoind createmultisig 2 \
‘["0491bba2510912a5bd37da1fb5b1673010e43d2c6d812c514e91bfa9f2eb129e1c183329db55bd868e209aac2fbc02cb33d98fe74bf23f0c235d6126b1d8334f86","04865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac09ef122b1a986818a7cb624532f062c1d1f8722084861c5c3291ccffef4ec6874","048d2455d2403e08708fc1f556002f1b6cd83f992d085097f9974ab08a28838f07896fbab08f39495e15fa6fad6edbfb1e754e35fa1c7844c41f322a1863d46213"]‘
输出:

https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg
“address” : “3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC”,
“redeemScript” : “52410491bba2510912a5bd37da1fb5b1673010e43d2c6d812c514e91bfa9f2eb129e1c183329db55bd868e209aac2fbc02cb33d98fe74bf23f0c235d6126b1d8334f864104865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac09ef122b1a986818a7cb624532f062c1d1f8722084861c5c3291ccffef4ec687441048d2455d2403e08708fc1f556002f1b6cd83f992d085097f9974ab08a28838f07896fbab08f39495e15fa6fad6edbfb1e754e35fa1c7844c41f322a1863d4621353ae”
}
得到的组成地址是:3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC,该地址没有公钥,仅有redeemScript,作用与公钥相同。后续的结构、签名、发送进程与上文一般地址买卖类似,略去。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注