主页 > imtoken冷钱包安全吗 > 深入比特币原理(三)-交易输入(input)和输出(output)
深入比特币原理(三)-交易输入(input)和输出(output)
这部分的内容很重要。如果你没有很好地掌握这一节,你就无法真正理解比特币的运行原理。请务必学清楚。
比特币的交易模型是UTXO(未花费交易输出),即只记录未花费的比特币输出,每笔交易花费一个或多个之前的输出。
什么是 UTXO?
借一张网上的图
我们在现实世界中的支付系统是基于账户模型的,也就是说每个人都有一个账户,在不同的账户中进行支付的加减法类似如下:
UTXO的实现,如下图所示:
从上图可以看出,比特币的实际存储是一笔又一笔的交易,而最终始终只有未花费的交易输出,也就是UTXO。
这个设计最初是由中本聪创造的。与传统账户模式相比,具有以下优势:
1.账户数据库会继续扩大,因为账户不会被删除,UTXO数据库大小会小很多。
2.由于只保留未使用的输出,每个比特币用户可以拥有几乎无限数量的地址,从而提高匿名性。
3.UTXO 带来了高并发交易的可能。想象一下传统的账户模型。每个人的账户交易必须是线性的,不能并发。现在每个人都可能有多个UTXO,可以同时发起多个交易,实现并发。
此外,还有一种特殊的交易叫做 Coinbase 交易,即矿工挖出的比特币。该交易没有输入,只有输出(Coinbase 交易将在挖矿章节中讨论)。本节内容均以非coinbase交易为例。
比特币交易的解码内容
从解码内容可以看出,比特币交易是由输入和输出组成的,而不是账户地址。
{
"version": 1,
"locktime": 0,
#交易输入(input)部分
"vin": [
{
#输入引用的交易(transaction)HASH
"txid": "7957a35fe64f80d234d76d83a2a8f1a0d8149a41d81de548f0a65a8a999f6f18",
#引用交易中的UTXO索引(第一个为0,此处代表上述txid交易中的第一个UTXO)
"vout": 0,
#解锁脚本,用于解锁UTXO的脚本(这是可以花费这笔UTXO的关键信息)
"scriptSig": "3045022100884d142d86652a3f47ba4746ec719bbfbd040a570b1deccbb6498c75c4ae24cb02204b9f039ff08df09cbe9f6addac960298cad530a863ea8f53982c09db8f6e3813
[ALL] 0484ecc0d46f1918b30928fa0e4ed99f16a0fb4fde0735e7ade8416ab9fe423cc5412336376789d172787ec3457eee41c04f4938de5cc17b4a10fa336a8d752adf",
"sequence": 4294967295
}
],
#交易输出(output)部分
"vout": [
{
#第一个输出的比特币数量
"value": 0.01500000,
#锁定脚本,后续的交易如要使用该输出,必须解锁锁定脚本
"scriptPubKey": "OP_DUP OP_HASH160 ab68025513c3dbd2f7b92a94e0581f5d50f654e7 OP_EQUALVERIFY OP_CHECKSIG"
},
{
#第二个输出的比特币数量
"value": 0.08450000,
"scriptPubKey": "OP_DUP OP_HASH160 7f9b1a7fb68d60c536c2fd8aeaa53a8f3cc025a8 OP_EQUALVERIFY OP_CHECKSIG",
}
]
}
从上面可以看出,比特币交易中没有账户余额信息比特币设计原理,只有输入和输出两部分信息。
说得更直白一点,比特币交易类似于现实世界中的直接支票交易。例如,A 向 B 写入一张 100 元的支票,其中 A 为输入,B 为输出。当B需要付C 50元时,B没有去银行兑现支票再付C,而是直接开两张新支票,一张给C 50元比特币设计原理,一张给自己,然后是原来的100元。作废的支票是指不基于帐户模型的付款。
最后附上交易输入输出的内容格式:
输入
输出
交易费
比特币需要为每笔交易向矿工支付交易费用。比特币早期,交易费用基本为0,但随着交易数量的增加,交易费用逐渐开始上涨。除了产生新的比特币之外,交易费用是对矿工的另一个激励。比特币全部挖完后,矿工的收入全部来自交易手续费。交易费用的特点如下:
1.交易费用既是一种激励机制,也是一种安全机制,使攻击者在网络上充斥大量交易时在经济上处于不利地位。
2.交易费用以字节计算,而不是比特币。
3.目前所有交易都使用动态交易手续费,交易手续费的高低会影响矿工(加入区块链)正在处理的交易的优先级。很少会被处理甚至在网络上广播。
4.交易费用不会存储在交易信息中,而是由输出(output)和输入(input)的差额代替(如果你想自己创建交易,你必须支付注意输出的数量,因为无论大小,交易的差额都会由矿工获得)
交易费用 = SUM(所有输入)- SUM(所有输出)
5.@ >估算当前合适的交易费用
访问第三方网站:
目前合适的交易可以通过这个网站页面估算 费用如图,目前是(2018/2/27)快速确认的手续费是50 satoshis/byte(一般交易大小为 226 字节)
可以通过调用网站提供HTTP REST API计算不同优先级的交易费用
$ 卷曲
{"fastestFee":50,"halfHourFee":40,"hourFee":20}
fastestFee:最快的确认
halfHourFee:三个区块内确认
hourFee:六个区块内确认