1. 比特币交易概述
简单来说,交易告知全网:比特币的持有者已授权把比特币转帐给其他人。而新持有者能够再次授权,转移给该比特币所有权链中的其他人,产生另一笔交易来花掉这些比特币,后面的持有者在花费比特币也是用类似的方式。
**
交易也包含了每一笔被转移的比特币(输入)的所有权证明,它以所有者的数字签名形式存在,并可以被任何人独立验证。在比特币术语中,“消费”指的是签署一笔交易:转移一笔以前交易的比特币给以比特币地址所标识的新所有者。
交易是将钱从交易输入移至输出。输入是指钱币的来源,通常是之前一笔交易的输出。交易的输出则是通过关联一个密钥的方式将钱赋予一个新的所有者。目的密钥被称为是安全锁(Encumbrance)。这样就给资金强加了一个要求:有签名才能在以后的交易中赎回资金。一笔交易的输出可以被当做另一笔新交易的输入,这样随着钱从一个地址被移动到另一个地址的同时形成了一条所有权链(如图1-2)。
图1-2
交易形成了一条链,最近交易的输入对应以前交易的输出。第二条交易中,Alice的密钥提供了解锁之前交易输出的签名,因此向比特币网络证明她拥有这笔钱。Alice将0.1BTC中的一部分支付给Bob,同时“阻塞”该输出,只有Bob签名后才能使用这笔钱。这就描述了在Alice和Bob之间钱的转移。上图展示了从Joe到Alice再到Bob的交易链。
1.1 常见的交易形式
最常见的交易形式是从一个地址到另一个地址的简单支付,这种交易也常常包含给支付者的“找零”。一般交易有一个输入和两个输出,如图1-3所示:
图1-3
另一种常见的交易形式是集合多个输入到一个输出(如图1-4)的模式。这相当于现实生活中将很多硬币和纸币零钱兑换为一个大额面钞。像这样的交易有时由钱包应用产生来清理许多在支付过程收到的小数额的找零。
图1-4
最后,另一种在比特币账簿中常见的交易形式是将一个输入分配给多个输出,即多个接收者(如图1-5)的交易。这类交易有时被商业实体用作分配资金,例如给多个雇员发工资的情形。
图1-5
2. 交易的构建
钱包应用知道如何选取合适的输入和输出以建立用户期望的交易。用户只需要指定目标地址和金额,其余细节由钱包应用在后台自动完成。很重要的一点是,钱包应用甚至可以在完全离线时建立交易。就像在家里写张支票,之后放到信封发给银行一样,比特币交易建立和签名时不用连接比特币网络。只有在执行交易时才需要将交易发送到网络。
2.1 获取正确输入
付钱的前提是有足够的钱可供支付。大多数钱包应用维护一个用钱包自己的密钥锁定的一个“未消费交易输出”的小型数据库。完整客户端含有整个区块链中所有交易的所有未消费输出副本。这使得钱包能够拿这些输出构建交易,又能在收到新交易时很快验证其输入是否正确。然而,完整客户端占太大的磁盘空间,所以大多数钱包使用轻量级客户端,只保存用户自己的未消费输出。
如果钱包客户端没有某一未消费交易输出,它可以通过不同的服务者提供的各种API或完整索引节点的JSON PRC API从比特币网络中拿到这一交易信息。
查询1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK
的所有未消费信息
$ curl https://blockchain.info/unspent?active=1Cdid9KFAaatwczBwBttQcwXYCpvK8h7FK
{
"notice": "",
"unspent_outputs": [
{
// 交易哈希
"tx_hash_big_endian": "ce3454376a468f3fa7f241355724dd340fde63b9e51d7da3c3197a97691d0534",
"tx_hash": "34051d69977a19c3a37d1de5b963de0f34dd24573541f2a73f8f466a375434ce",
// 帐户位于该交易的输出位置
"tx_output_n": 1,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 9978,
"value_hex": "26fa",
"confirmations": 43403,
"tx_index": 1830290334084931
},
{
"tx_hash_big_endian": "b45a9cb4a1061b7c48752757c44c28575051366483c54c9934036130c4752289",
"tx_hash": "892275c430610334994cc5836436515057284cc4572775487c1b06a1b49c5ab4",
"tx_output_n": 1,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 6236,
"value_hex": "185c",
"confirmations": 132484,
"tx_index": 4824995125922848
},
{
"tx_hash_big_endian": "ee5f17e9d821ca5d3ad7b221ba48820e8301a79e57a8660c7ac1b8db2b5c34bd",
"tx_hash": "bd345c2bdbb8c17a0c66a8579ea701830e8248ba21b2d73a5dca21d8e9175fee",
"tx_output_n": 1,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 3020,
"value_hex": "0bcc",
"confirmations": 164516,
"tx_index": 6657042634471192
},
{
"tx_hash_big_endian": "1c65aea26b6cb5711ada1418b61465b0a7eec6c82dc499c91f99e3260e57b9a2",
"tx_hash": "a2b9570e26e3991fc999c42dc8c6eea7b06514b61814da1a71b56c6ba2ae651c",
"tx_output_n": 0,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 10000,
"value_hex": "2710",
"confirmations": 249701,
"tx_index": 5725341222231155
},
{
"tx_hash_big_endian": "0e07ec4be87cd9291cbcb3fec88c601a8ad6fd3d4341ed88376a8ccdb80c2305",
"tx_hash": "05230cb8cd8c6a3788ed41433dfdd68a1a608cc8feb3bc1c29d97ce84bec070e",
"tx_output_n": 0,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 10000,
"value_hex": "2710",
"confirmations": 249701,
"tx_index": 180739053826445
},
{
"tx_hash_big_endian": "d1a81e8555f11d5df3527338a11d37ba745cf7a300edff3e98d0387a0c47a6b8",
"tx_hash": "b8a6470c7a38d0983effed00a3f75c74ba371da1387352f35d1df155851ea8d1",
"tx_output_n": 0,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 10000,
"value_hex": "2710",
"confirmations": 249710,
"tx_index": 6496777474623258
},
{
"tx_hash_big_endian": "1f4c52db84b1021ee0300ebcd57b07b1b465744d29ac5b62b21c9d9f03d649d0",
"tx_hash": "d049d6039f9d1cb2625bac294d7465b4b1077bd5bc0e30e01e02b184db524c1f",
"tx_output_n": 0,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 11100,
"value_hex": "2b5c",
"confirmations": 250616,
"tx_index": 7328497336054691
},
{
"tx_hash_big_endian": "ddef943391fbeb63729b67a39db138e767162da8d1947f4030e8b35d6fdb7b41",
"tx_hash": "417bdb6f5db3e830407f94d1a82d1667e738b19da3679b7263ebfb913394efdd",
"tx_output_n": 0,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 10000,
"value_hex": "2710",
"confirmations": 253154,
"tx_index": 2304006985332349
},
{
"tx_hash_big_endian": "79acb2dab272e4c8f833a4655534edda326a8bad979cca8179090df99df61d3f",
"tx_hash": "3f1df69df90d097981ca9c97ad8b6a32daed345565a433f8c8e472b2dab2ac79",
"tx_output_n": 1,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 719787,
"value_hex": "0afbab",
"confirmations": 333345,
"tx_index": 2220733572784545
},
{
"tx_hash_big_endian": "a1df3b7b7de92e6d5d57797409013c2ec8944320530847ddd3b8aa4d777f71d9",
"tx_hash": "d9717f774daab8d3dd470853204394c82e3c01097479575d6d2ee97d7b3bdfa1",
"tx_output_n": 0,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 1000000,
"value_hex": "0f4240",
"confirmations": 339232,
"tx_index": 7650607777822039
},
{
"tx_hash_big_endian": "29ef6dc905026dfef5d2be8adc8f4178947e74129e21d35aea64b969c1fd6503",
"tx_hash": "0365fdc169b964ea5ad3219e12747e9478418fdc8abed2f5fe6d0205c96def29",
"tx_output_n": 0,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 100000,
"value_hex": "0186a0",
"confirmations": 347073,
"tx_index": 119570684524332
},
{
"tx_hash_big_endian": "0627052b6f28912f2703066a912ea577f2ce4da4caa5a5fbd8a57286c345c2f2",
"tx_hash": "f2c245c38672a5d8fba5a5caa44dcef277a52e916a0603272f91286f2b052706",
"tx_output_n": 1,
"script": "76a9147f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a888ac",
"value": 8450000,
"value_hex": "0080efd0",
"confirmations": 402690,
"tx_index": 8541318656609876
}
]
}