深入比特币原理(五)脚本实例

一、多重签名交易

多重签名交易允许同一笔交易输出需要多个私钥才能解锁,就是说锁定脚本设置条件,有N个公钥被记录在脚本中,其中至少有M个必须提供签名才能解锁。N是密钥的总数,M是验证所需的签名数量。

二、时间锁

1.交易时间锁

比特币的交易中存在"locktime"参数,用于表示该笔交易在何时被广播到比特币网络中

0 < locktime < 500million:代表区块高度(block height)

locktime >= 500million:代表时间戳

2.锁定时间验证(Check Lock Time Verify(以下简称CLTV))

CLTV是一种基于UTXO的时间锁,通过在P2SH赎回脚本(redeem script)中添加CHECKLOCKTIMEVERIFY命令对时间进行校验。

CLTV赎回脚本示例:

CHECKLOCKTIMEVERIFY DROP DUP HASH160 <Bob's Public Key Hash> EQUALVERIFY CHECKSIG

当要解锁前,需要先校验,如果校验成功,删除,正常执行解锁脚本。

交易时间锁的特点:

交易时间锁要求该笔交易在指定时间后才向全网广播,所以在时间到达前该交易并不计入区块链中。导致如果在时间到达前付款人发起另一笔交易,双重支付并产生同一笔输入,则实际上前一笔交易会失效,这使收款人没有任何保障。

但是由于这个特性,给了付款人考虑时间,如果付款人对于交易后悔,可以防止该交易生效。

三、数据记录输出

比特币去中心化分布式数据库的特性,使许多开发者开始利用交易脚本作出除支付以外的尝试,如数字公证服务、证券证明、智能合约等。

基于上面的需求,RETURN命令出现,该命令可以用于范围特定的数据,并记录到比特币区块链当中作为永久保存

RETURN脚本示例

scriptPubkey:RETURN

scriptSig:

从脚本可以看到通常输入脚本为NULL

特点

1.RETURN的数据量大小限制为80bytes,通常包含hash值(如SHA256结果)与服务内容的前缀(如Proof of Existence的前缀为8-byte DOCPROOF)。

2.使用RETURN命令的输出无法被用于支付,所以不应该包含比特币在RETURN输出中,尝试包含RETURN的输出作为输入的交易会被认为无效。

3.使用RETURN的输出不会被存储在矿工的UTXO集中,避免了内存占用,但是会写入到区块链中。

四、P2SH

P2SH的好处:

1.锁定脚本简化,减小了交易的空间占用

2.P2SH地址使付款人无需关心复杂的操作,只需向地址支付即可

3.P2SH使多重签名脚本的负担转移到收款人身上,而不是付款人

(1)只有当需要解锁P2SH地址上的比特币进行付款时才会发生,延迟了占用较多空间交易发生的时间。

(2)多重签名导致的交易大小扩大仍然存在,只是由锁定脚本转移到了解锁脚本上。

多重签名会有如下问题:

1.交易臃肿,N个公钥都要包含在交易的输出中(锁定脚本中),增加了交易的大小同时增加了交易费用,另外还增加了矿工维护UTXO的负担。

2.付款用户必须根据你提供的所有公钥信息对交易中的锁定脚本进行定制,给支付带来极大的不便利。

P2SH的出现即是为了解决多重签名存在的这些问题,P2SH增加赎回脚本(Redeem Script)概念,P2SH脚本内容示例:

赎回脚本: 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 CHECKMULTISIG

锁定脚本: HASH160 <20-byte hash of redeem script> EQUAL

解锁脚本: Sig1 Sig2

锁定脚本从多重签名锁定脚本变成了原脚本的哈希,赎回脚本内容为原来的多重签名锁定脚本内容,解锁脚本中增加了赎回脚本的内容。

所以执行的情况变成如下:

1.先对比解锁脚本中的赎回脚本内容哈希与锁定脚本中是否一致

Sig1 Sig2 HASH160 <20-byte hash of redeem script> EQUAL

2.如果上面的对比结果一致,则变成执行如下内容(回到了多重脚本验证的情况)

Sig1 Sig2 2 PubKey1 PubKey2 PubKey3 PubKey4 PubKey5 5 CHECKMULTISIG


温馨提示:
1、本站所有内容皆转载自网络。2、本站所有转载内容只代表原作者观点,不代表本站立场。
3、本站所有转载内容仅供学习参考,不构成任何投资建议。
4、本站与项目方没有任何利益关系,不接受捐赠,不接受打赏。

Subscribe to nobody
Receive the latest updates directly to your inbox.
Verification
This entry has been permanently stored onchain and signed by its creator.