主页 > imtoken冷钱包安全吗 > 深入比特币原理(三)-交易输入(input)和输出(output)

深入比特币原理(三)-交易输入(input)和输出(output)

imtoken冷钱包安全吗 2023-11-12 05:13:39

这部分的内容很重要。如果你没有很好地掌握这一节,你就无法真正理解比特币的运行原理。请务必学清楚。

比特币的交易模型是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:六个区块内确认