你真的懂OP_RETURN吗?

1,879 阅读6分钟

一提起OP_RETURN,很多人都会说这个东西太强大了。BCH社区中很多去中心化的应用都是建立在它的基础上。例如去中心化的应用Memo.cash、Blockpress、Matter等,这些应用中的所有数据都是存储在OP_RETURN上。而且BCH社区中很多智能合约的方案也都是建立在它的基础之上的。举个例子,虫洞协议,就是将交易的元数据信息存储在OP_RETURN上。

OP_RETURN到底是什么呢?

从本质上讲,OP_RETURN是一个脚本操作码,是专门被设计出来承载额外的交易信息的。它的作用就像我们在日常转账过程中的备注信息。通过它发送的数据会和我们进行的BCH交易一样保存在BCH的区块中。

在它诞生之前,在比特币交易中添加额外的信息主要有两个方案:UTXO方案和Multisig方案。

所谓UTXO即Unspent Transaction Output,未花费交易输出。用它来承载额外信息,其实质是使用一个虚拟(或者说形式上错误而不可能存在的)公钥地址来包含这些信息。即在普通的P2PH(pay to pubKey hash)交易中,将output里的验证脚本换成其它数据。这么做,会导致这笔交易里的比特币不能再被花费,因为很难再找到满足条件的调用脚本(需要反求哈希),从而将我们所要刻录的信息保存在区块链上。这种方法有一个严重的缺点,即在比特币节点上,通常出于速度考虑,未被花费的交易(UTXO)都会被存储在内存中,使得比特币区块链不得不包含大量冗余信息,影响比特币网络的效率。

所谓multisig即multi-signature protocol(多重签名协议),由于multisig包含多个公钥,则利用multisig交易来承载MSC业务的实质是将该交易的多个公钥用作两个用途,其一是包含发送者自身的公钥,以表达该交易由谁发出,其余公钥则可以用来表达MSC的交易业务信息。它的好处是不会像UTXO一样产生大量无法去除的冗余信息。但相比直接被设计用于承载信息的OP_RETURN则仍不够简洁高效。

OP_RETURN的优点

通过OP_RETURN,我们可以在BCH区块链上存储任意信息而不会被篡改和删除。因为OP_Return数据是受BCH区块链保护的,伴随着我们所发送的交易。OP_Return一旦写入了区块链,就相当于有了一个时间戳,哪怕是同一区块里的交易,都因排序不一样,而有不同的时间戳。

其次,协议规定OP_RETURN不是UTXO,包含OP_RETURN的交易输出是不可花费(Unspendable)的,节点可以安全地将其移出UTXO集,从而不会影响UTXO集合的总体积,造成全网UTXO的膨胀。

目前按照BCH的协议规定,每个TX只能携带一个OP_RETURN输出,每个OP_RETURN最多携带220字节的数据。

写入OP_RETURN的方法

写入OP_RETURN可以使用createrawtransaction命令行接口或者JSON-RPC接口调用。当然通过一些类似于Memo.cash的去中心化的应用,你发布的信息都是被直接写入OP_RETURN的。

OP_RETURN对BCH的影响

OP_RETURN为BCH带来了无限种可能,我们可以使用BCH的OP_RETURN做很多事情。目前我们看到的去中心化应用程序以及使用OP_RETURN存储数据的智能合约方案都还是BCH应用OP_RETURN的冰山一角。还有很多好玩有用的东西正在来的路上。

也正是因为BCH上有OP_RETURN才让BCH上的一些智能合约方案拥有以太坊所不具备的优势。例如虫洞协议,它是BCH的第二层应用,交易的元数据信息被写在OP_RETURN上。识别OP_RETURN里的数据能够完成Token的发行,转移和燃烧。BCH系统本身是不会去识别这个OP_Return里的数据的,所有的BCH节点都会直接忽略掉这个数据。这也就不会影响BCH主链的交易处理速度。

OP_RETURN对BCH链来说,唯一不好的就是随着OP_RETURN数据的增加,BCH节点将会增加一些存储压力。

总而言之,OP_Return可以提供非常非常多的想法,好好利用OP_Return,BCH将大有作为。

可以直接通过区块浏览器查看OP_RETURN的数据,一般可以在输出脚本部分找到。如果一笔交易中携带的有OP_RETURN数据,在该交易的输出脚本部分将会显示OP_RETURN信息,并包含解码后的信息。举个例子,下图中的这笔交易所包含的OP_RETURN信息就是“ I wish my dad would OP_RETURN”。

OP_RETURN对BCH的影响

OP_RETURN为BCH带来了无限种可能,我们可以使用BCH的OP_RETURN做很多事情。目前我们看到的去中心化应用程序以及使用OP_RETURN存储数据的智能合约方案都还是BCH应用OP_RETURN的冰山一角。还有很多好玩有用的东西正在来的路上。 也正是因为BCH上有OP_RETURN才让BCH上的一些智能合约方案拥有以太坊所不具备的优势。例如虫洞协议,它是BCH的第二层应用,交易的元数据信息被写在OP_RETURN上。识别OP_RETURN里的数据能够完成Token的发行,转移和燃烧。BCH系统本身是不会去识别这个OP_Return里的数据的,所有的BCH节点都会直接忽略掉这个数据。这也就不会影响BCH主链的交易处理速度。

OP_RETURN对BCH链来说,唯一不好的就是随着OP_RETURN数据的增加,BCH节点将会增加一些存储压力。

总而言之,OP_Return可以提供非常非常多的想法,好好利用OP_Return,BCH将大有作为。

OP_RETURN为BCH带来了无限种可能,我们可以使用BCH的OP_RETURN做很多事情。目前我们看到的去中心化应用程序以及使用OP_RETURN存储数据的智能合约方案都还是BCH应用OP_RETURN的冰山一角。还有很多好玩有用的东西正在来的路上。

也正是因为BCH上有OP_RETURN才让BCH上的一些智能合约方案拥有以太坊所不具备的优势。例如虫洞协议,它是BCH的第二层应用,交易的元数据信息被写在OP_RETURN上。识别OP_RETURN里的数据能够完成Token的发行,转移和燃烧。BCH系统本身是不会去识别这个OP_Return里的数据的,所有的BCH节点都会直接忽略掉这个数据。这也就不会影响BCH主链的交易处理速度。

OP_RETURN对BCH链来说,唯一不好的就是随着OP_RETURN数据的增加,BCH节点将会增加一些存储压力。

总而言之,OP_Return可以提供非常非常多的想法,好好利用OP_Return,BCH将大有作为。