知识库详情
知识库

以“词条释义”的形式对比特币区块链技术中经常涉及的术语及基本概念进行专业化的阐释和解读。

OP_CODESEPARATOR
返回上级
BSV区块链编辑 2022-04-14 18:20 333

OP_CODESEPARATOR最初被设计用来插入在ScriptPubKey和ScriptSig之间,由脚本评估引擎实现。当在ScriptPubKey中调用OP_CHECKSIG时,OP_CODESEPARATOR将删除在它之前的所有内容。在默认情况下, ScriptSig将被完整地删除掉,因为包含签名的ScriptSig不能被签名签署。

没有任何规则阻止用户将OP_CODESEPARATOR插入到ScriptPubKey中,但是OP_CODESEPARATOR只有在同一个ScriptPubKey中被OP_CHECKSIG读取时才会生效OP_CHECKSIG 将向前读取至最接近它的之前的OP_CODESEPARATOR,并删除在它之前的所有消息内容。

一个例子

基于以上的了解,我们可以构造如下ScriptPubKey:

OP_CODESEPARATOR OP_CHECKSIGVERIFY OP_CODESEPARATOR OP_CHECKSIGVERIFY OP_CODESEPARATOR OP_CHECKSIG

要解锁此ScriptPubKey,我们可以使用以下ScriptSig:

<Sig A> <PK A> <Sig B> <PK B> <Sig C> <PK C>

请注意,第一个OP_CHECKSIG将在以下消息中验证 <Sig C> <PK C>:

OP_CHECKSIGVERIFY OP_CODESEPARATOR OP_CHECKSIGVERIFY OP_CODESEPARATOR OP_CHECKSIG

第二个OP_CHECKSIG将在以下消息中验证 <Sig B> <PK B>:

OP_CHECKSIGVERIFY OP_CODESEPARATOR OP_CHECKSIG

即用于创建签名的消息哈希不包括脚本评估引擎插入的第一个OP_CHECKSIGVERIFY和OP_CODESEPARATOR。

第三个OP_CHECKSIG将在以下消息中验证 <Sig A> <PK A>:

OP_CHECKSIG

即用于创建签名的消息哈希不包括OP_CHECKSIGVERIFY和OP_CODESEPARATOR的第一个和第二个实例。

如果有人改变了ScriptSig中签名的顺序,签名验证就会失败。

脚本
False Return
脚本
Pushdata操作码
比特币脚本操作码
R-Puzzle脚本
OP_CHECKSIG
流控制脚本(条件语句)
OP_CODESEPARATOR
OP_RETURN