我爱编程

《精通比特币》研读记录(二)-交易

2018-04-16  本文已影响25人  不要动自己人

0x00 交易的锁定时间-LockTime

Locktime 有两个作用:1. 生效的最早时间。2. 生效的最早区块高度。

一笔交易,只有到达或者超过这个时间或者区块高度,交易才能被发送到网络和加入到链中进行验证。

LockTime = 0 ,表示立即可以发送到比特币网络进行验证,立刻生效。 0 < LockTime <= 5亿 ,表示区块的交易在指定LockTime高度之后的区块中生效。 LockTime > 5亿,表示一个从1970/01/01日起的时间戳,表示在该时间之后生效。

Locktime, also known as nLockTime from the variable name used in the reference client, defines the earliest time that a transaction is valid and can be relayed on the network or added to the block chain

image

0x01 比特币系统的常用的交易类型

为了让所有节点都能识别交易,因此将交易信息标准化是必不可少的,比特币的区块链主要支持以下五种交易标准:
P2PKH、P2PK、MS、P2SH和OP_Return。他们通用都用Script脚本语言来表达。

PS:五中不同交易认证的类型,是定义了一种“使用某交易输出的一种使用规则和条件”。

P2PKH

P2PKH(Pay to Public Key Hash),大部分交易都是该类型。
比特币的交易验证依赖于脚本CScript,它可以分为两类:一个锁定脚本和一个解锁脚本。在交易输出中为锁定脚本,在交易输入中为解锁脚本。
其中每个指令的结果都是入栈或者出栈。而付费的人(消耗UTXO)需要把自己的私钥签名和完整的公钥作为脚本指令的前缀,也当做两条指令处理。

image

脚本的执行过程(摘自验证签名脚本):

假设,有两个交易:
交易a(Alice 转给Bob 1比特币)
交易b(Bob 转给 Carol 0.5比特币)

两个脚本组合起来:

<Bob Sig> <Bob PubKey> OP_DUP OP_HASH160 <Bob PubKeyHash> OP_EQUAL OP_CHECKSIG

那么上述P2PKSH脚本的执行过程如下:

image
总结:

P2PKH交易标准,使用者只需要提供自己私钥的签名和自己的公钥即可证明“交易输出”的所有权。

P2PK

首先,与P2PKH相比,P2PK从名字缩写看少了个HP2PKH在锁定脚本中暴露的是公钥的哈希-Public Key Hash,而P2PK模式在锁定脚本中暴露的直接是公钥-Public Key

其次,P2PK模式的验证过程更加简单。

两个脚本组合起来:

<Bob Signature> <Bob Public Key> OP_CHECKSIG
总结:

P2PK交易标准,使用者只需要提供私钥签名即可证明“交易输出”的所有权。因使用者的公钥本身就暴露在锁定脚本中了。

MS(Multipart-Signature)

MS(BIP11)即多重签名脚本模式,他在锁定脚本中给了了N个公钥,要求至少提供M个私钥签名,才能解锁。

两个脚本组合起来:

OP_0 <Bob Signature 1> <Bob Signature 2> <Bob Signature 3>...<Bob Signature M> M <Bob Public Key 1> <Bob Public Key 2> ... <Bob Public Key N> N OP_CHECKMULTISIG
总结:
  1. 作为支付方,需要获得被支付者的至少N个公钥,才能进行支付(脚本锁定)。
  2. 对于被支付者,有利于将多个秘钥分到不同人的手中,避免独权。

P2SH(Pay-to-Script-Hash)

虽然多重签名十分强大,但也有一些缺点:

  1. 在给Bob支付之前,支付者必须�知道Bob的至少M个公钥(即Bob需要将至少M个公钥给到别人)。
  2. 多个公钥会导致解锁脚本长度增大,增加交易成本。
  3. 未消耗的资金,都会作为UTXO的记录在所有节点存储器中,这无会疑增负担。

P2SH正是为了解决这一实际难题而被引入的,它旨在使复杂脚本的运用能与直接向比特币地址支付一样简单.

即:1.降低Bob需要将至少M个公钥给到支付者 2. 解决减少“解锁脚本”的长度。3. 减少UTXO的大小 。

不含P2SH的复杂脚本
Locking Script 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 OP_CHECKMULTISIG
Unlocking Script Sig1 Sig2
P2SH复杂脚本
Redeem Script 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 OP_CHECKMULTISIG
Locking Script OP_HASH160 <redeem-script-hash> OP_EQUAL
Unlocking Script Sig1 Sig2 redeem script

其中redeem-script-hash计算方式为:redeem-script-hash=RIPEMD160(Hash160(redeem-script))

总结:
  1. P2SH中,锁定脚本中使用脚本Hash的形式来取代MS原本中多公钥的形式。
  2. P2SH中,锁定脚本相比MS降低了内容的大小,也直接降低了所有节点存储UTXO的大小。
    P2SH有点:

P2SH 地址

P2SH的另一个重要特征是,它能将脚本哈希编译为一个地址(详见BIP0013)。

PS:文章内容同步到本人CSDN博客
PS:人多力量大,欢迎各位喜欢比特币区块链技术的同学加群:683746794 大家一起交流

上一篇 下一篇

猜你喜欢

热点阅读