关于OP_RETURN

一些简单的背景知识

在比特币的每一笔交易信息中,包含input和output两个部分。output里的脚本又称验证脚本,input里的脚本又称调用脚本。要想花掉交易A的ouput中的比特币,就需要构造一个交易B,能够使B的调用脚本满足A的验证脚本。

利用比特币网络存储数据

区块链可以看作是一个不可变的数据结构,所以人们试图利用这一特性开发其它应用。这就需要在交易记录中存储其它的数据。在普通的P2PH(pay to pubKey hash)交易中,可以将output里的验证脚本换成其它数据。这么做,会导致这笔交易里的比特币不能再被花费,因为很难再找到满足条件的调用脚本(需要反求哈希)。这种方法还有一个严重的缺点,即在比特币节点上,通常出于速度考虑,未被花费的交易(UTXO)都会被存储在内存中,因此这种交易就会占用许多内存空间,影响比特币网络的效率。

所以,我们可以使用比特币的 OP_RETURN 指令。包含这一指令的交易也是不可花费的,但节点可以将其安全地移出UTXO集合,这笔交易可以在 OP_RETURN 中存储一定数量的字节。

广阔的应用

利用区块链上的这一存储空间,发挥你的想象力,可以做很多事情。比如,编写一套自己的脚本协议,利用比特币网络发行TOKEN。事实上,很早就有人这么做了,而且以太坊协议原本是要建立在比特币网络上的。

限制

然而,由于比特币核心开发者认为 OP_RETURN 会导致用户在比特币网络上存储过多的非交易信息,可能影响比特币的正常使用,所以对其大小做了限制(最早是40字节,扩大到80字节,之后又缩小到40字节)。这使得一些二层协议的项目转投其它主链。

事实上,比特币的交易费是与交易的体积相关的,使用者都会趋向于在实现功能的前提下尽量少地占用空间,过小的强制限制并没有必要。而且 OP_RETURN 交易的总体积只占了整个区块体积的 0.3%。(2017)

未来

在2018年5月份的升级中,比特币现金计划将OP_RETURN的空间提升到223字节。或许这能为比特币的二层协议开发带来新的生机。

本文内容参考 An analysis of Bitcoin OP_RETURN metadata

相关推荐