HOME/Articles/

layer 2

Article Outline

layer 2

中午好, 这里是 ljzn.

今天天气还是一如既往的好, 不知道是不是因为大家都没法出门的原因, 天空格外得蓝. 蓝到想要乘着火箭飞上天空. 说到火箭, 最近在微博上看到国内的火箭发射接连失败了几次, 据说是准备进行航天产业改革. 这些事情也没个准, 就不多说了. 但有一点是可以肯定的, 特斯拉在可回收火箭上的成功对于全世界的航天从业者都是一个很大的震动.

既然聊到特斯拉了, 不得不说它的创始人马斯克. 前段时间看了一个马斯克在公开场合的访谈, 主持人问他关于比特币有什么看法. 马斯克说, 他一直有一个奇怪的想法, 就是把各种异构的数据库结合成一个数据库, 数字货币本质上也是数据库里的一种特殊格式. 主持人大概是个外行, 没有接着往下聊这个话题. 实际上比特币的设计和马斯克的想法不谋而合, 比特币的脚本系统是很强大的, 这里暂且不深聊. 就说操作符 OP_RETURN 吧, 实际上它的原意和其它编程语言里面的 return 差不多.

  1 OP_RETURN "hello"

比特币脚本是类似 Forth 语言的逆波兰语法, 翻译成类 C 的语言是这样:

  {
    return 1;
    "hello";
  }

也就是OP_RETURN右边的数据是不参与脚本执行的. 利用这个机制, 可以在比特币交易里面附加任意数据. 比特币上的 USDT 就是在使用了这个机制实现的 Omni 协议上发行的. 再顺便吐槽一下 BTC 的高额手续费和拥堵, 大量的 USDT 交易已经转移到了 ETH 等其它链上了, 目前在 ETH 上 USDT 的发行量是 BTC 的 3 倍左右(刚看的 Tether 官网数据).

吐槽完毕. 既然说到 Omni 了, 就聊聊它的转账机制吧. Omni 其实设计了一套挺复杂的 token 操作机制, 不过大家一般只是用最基础的简单转账. 在 Omni 的世界里, 账户是和地址绑定的, 花费一笔钱的时候不需要像比特币那样找到具体的 UTXO(换句话说, 找到 UTXO 的出处), 只要能证明对地址的所有权(说得更严谨些, 能解开这个地址对应的锁定脚本)就行了. 然后像转账的 token 的种类, 金额, 这些比特币上原本没有的信息, 就使用 OP_RETURN 来承载.

一笔 Omni 转账至少要具有这些结构:

  输入:  地址 A
  输出:  地址 B, OP_RETURN "omni" propertyID amount

propertyID 就是 token 的编号, 比如 USDT 是 31. 整个 omni 输出用 Variable Length String 编码后长度是 23. 比如这一笔交易.

比特币本身对于 omni 这样的资产是无感的. OP_RETURN 后面的数据对于矿工来说就是一串无意义的字节而已. 所以这种一般就被称为是二层网络, 区别于比特本本身的脚本网络.

二层网络需要特殊的节点去解析那些 OP_RETURN 里面的数据, 再结合一层网络的数据, 组合实现 其功能. 二层网络的优点是简单灵活, 想定义什么样的数据结构都可以, 毕竟是自己写的外部节点. 缺点也很明显, 需要另外跑特制的节点, 麻烦; 规则被修改的难度大大低于一层网络, 可能开发者们改一下特制节点, 你之前发的 token 就不能用了.

目前看来, 利用二层网络可以构建出不错的 token 发行方案. 期待这方面有更多的项目出现.