- 图片来自 Alex Radelich -
原文链接:
https://gourmetcrypto.substack.com/p/optimistic-rollups-from-the-bottom
作者: Ali Atiia
翻译&校对: IAN LIU &阿剑
本文将通过简单的例子,自下而上地阐述 Optimistic Roll-Up (ORU) 的运作方式;为了让我们能 “看得见摸得着” ORU 链所有的意涵,本文举的示例也会比较特殊。
ORU 是以太坊 layer 2 扩展方案中的佼佼者,既能把可扩展性的蛋糕做大,也能让你吃到 —— 至少是吃到一部分吧。大家之所以对 ORU 如此兴奋,是因为它及它的表亲—— ZK-Rollup,克服了侧链、 plasma、状态通道等方案都没有解决的 layer 2 难题。
ORU 要解决什么问题?
某所高中正面临这样的问题:每隔几天,就会出现小情侣的争吵事件,通常是因为其中一方劈腿。
典型的场景如下:
Alice 看到男朋友 Bob 亲吻 Cathy,她感到非常生气。但 Bob 可能会辩解 “我发誓我没这么做!” 或 “我俩早就分手了!”......但 Alice 根本听不进去,抓起椅子就朝 Bob 扔去;这种在走廊上演的小剧场,正破坏着整个校园的环境。
解决方法 v1
校园里的超级书呆子 Jamal 提出了一种解决方案:
每天晚上,要求所有学生选择以下信息之一,并签署自己的密码学签名——“我单身,勿扰”“我单身,待配对”“我正在与 X 约会(只和 X)”“我正在和多个人约会(还没安定)”。这里的签名和用于密码学货币转账的签名类型是一样的。
学校会在布告栏张贴 “学生与其对应公钥” 的公告,所以任何人都能用签名验证的方法来确实谁签了什么消息。
为了方便同学们使用,Jamal 开发了一款 app ,每个同学只要在 app 上选择四条内容之一,然后点击 “签名 & 发送” 按钮就行,之后签名消息会从后端向以太坊 P2P 网络广播 —— 事实上,这些消息会先发到 Jamal 家里的服务器,由他代表同学们向以太坊发送消息,这样同学就不需要操心以太坊 Gas 的设置。Jamal 通过一些智能合约高级技巧(CREATE2 操作码),就可以自己先替同学们支付 Gas ,然后再按月度向学校报销 Gas 费用。
学校里有 1000 位同学,每人每天都要签署发送 1 条消息,平均每条消息要花费 $ 0.1 的 Gas;所以每个月学校用在 Gas 上的费用为:
(1000 学生) x (1 信息/天/学生) x( $.1 gas/信息) x (30 天/月)= $3000 gas/月.
肉疼!
解决方法 v2
对于财政吃紧的学校来说,每个月 $ 3k 的支出显然是不合适的。
这时候 ORU 就派上用场了。Jamal 告诉校方,使用 ORU 可以降低约 99% 的 gas 费用 ,以下是改进的方案:
和 v1 方法一样,当每位学生点击 “签名 & 发送” 之后,信息会先发送至 Jamal 家的服务器。然后 Jamal 将所有的签名叠加成一串字符串数据WiSWho (也就是 “谁在和谁约会”)的信息 。WiSWho 的信息格式是 [ Alice 的 ID、Alice 的消息、Alice 的签名 ]、 [ Bob 的 ID、Bob 的消息、Bob 的签名 ] ……
接着,Jamal 用自己的私钥签署这一笔交易,并广播之。交易信息为:
“我,Jamal,检查过这笔交易附带的 WiSWho 数据,WiSWho 代表截至 dd/mm/yyyy 所有学生的交往关系,我对天发誓这些数据包含了完整的事实,无任何人工添加。”
用行话来说,Jamal 充当了 layer 2 “执行者” 的角色。
如果你曾经用以太坊进行交易,你可能注意过附加数据 —— 也就是以太坊浏览器中 “Input date” 那一栏。如下图所示,简单交易中大多数人会将附加数据留空;如果交易中调用了如 Uniswap 的 swap 函数,则调用的函数名和传入的参数就会附加上作为交易的 Input Data ;Jamal 的交易会调用 layer 1 的 ORU 合约, 就是 Jamal 广播的交易的 Input Data 。
左图:简单交易,没有附加数据。右图:Uniswap 函数和入参(例如min_tokens是收到的以太坊数量 )作为附加数据。
以太坊(layer 1)的 ORU 合约只会验证 Jamal 的签名,而附加数据 中的其他同学的签名,只会被视为区块的二进制“ 冷数据”(注:不会被访问或检索的数据)。
这就是扩展性的体现,因为这样一来 layer 1 的全节点只要验证 ORU 执行者的签名并存储附加数据,而不需要验证里的所有签名。
悬念
你可能已经注意到 Jamal 签署的信息,强调了两句话:
包含了完整的事实,且仅包含事实。
违反规则 1 的情况称为恶意审查(censorship),意思是 Jamal 在恶意地过滤信息,比如 Bob 和 Alice 有过节,所以 Bob 贿赂 Jamal ,让他审查 Alice 的信息以破坏 Alice 的美好生活。
违反规则 2 的情况称为诈欺(fraud),意味着 Jamal 将一条或多条不存在的信息加到 。比如,数据中包含一条 Alice 的声明 —— “我正在和 10 位男孩及 10 位女孩约会”,而事实上 Alice 根本没有签署这样的信息,所以 Jamal 在中放入的 Alice 签名是非法的(可能是 Bob 贿赂 Jamal ,以此造谣中伤 Alice ;又或是 Jamal 对 Alice 不满,想让她尴尬......)。
因为 ORU 合约不会检查
内容的正确性,所以诈欺行为会严重影响使用 ORU 的初衷,还会让 gas 费用上升(验证签名并不便宜),因为存在诈欺行为会迫使大家退而使用 v1 解决方法。
虽然我们相信,Jamal 是个正直的人,他承诺绝对不会搞审查或诈欺,但从安全性的角度考虑,我们最好还是将希望寄托在 Jamal “无法作恶” 而非 “不会作恶”。
保留对 Jamal 的检查权
校方决定对 Jamal 采行胡萝卜加大棒(软硬兼施)的管理方式:
胡萝卜:Jamal 提供服务换取可观的报酬,每天 Jamal 发送 交易之后,智能合约就会从授权 Jamal 向校方提领 $ 5 的权利。但 Jamal 不能立刻拿到这 $ 5 ,他只能在月末提领。Jamal 看着可提领额度每天蹭蹭往上涨,他肯定会愿意继续提供服务。
避免恶意审查的柔性手段:如果 Jamal 故意无视 Alice 提交的信息,当晚她可以自行向智能合约提交签署信息(当然,要自己负担 gas 费用)。隔天一早, Alice 可以去找校长告状,同时其他同学也会有所警惕,Jamal 的声誉会因为作恶行为而下降。
对于校方来说,很容易就能找到能替代 Jamal 角色的人选:智能合约已经在 layer 1 上部署运行, Jamal 的替代者只要运行 AWS lambda 服务,每天持续监听同学们发来的信息、打包签名、向 ORU 合约广播单笔交易即可。
实际上,任何愿意在合约上锁定保证金的人都可以成为执行者(差别只是他们要重新向学生宣传自己而已)。
避免诈欺行为的强硬手段:任何人都能发现 Jamal 存在诈欺行为(如果有),并通过简单举证向 layer 1 的 ORU 合约证明存在诈欺。除此之外, Jamal 必须事先向智能合约锁定一笔保证金(想成为执行者的人都需要锁定,作恶就会被罚款),保证金增加 Jamal 进行诈欺的成本。
简单举证包含如下内容 —— “嘿 ORU,这个签名是 Jamal 检查过的数据之一,由 Alice 签署;但我,作为举报者,我宣布这是个无效的签名!”
智能合约会从先前发布的数据中抽取出 Alice 的签名,并通过 Alice 的公钥(在 ORU 合约设置之初就存好了)执行签名验证。如果这个签名的确是无效的,则:清零 Jamal 的待提领奖励,将 Jamal 的保证金一半奖励给举报者,另一半销毁。
更进一步剖析强硬手段
强硬手段是 ORU 合约中最有趣、最具决定性的内容;事实上,它就是 ORU 成为 layer 2 解决方案的核心因素。
这个手段的特别之处在于:不只是校方或学生,任何人都能举起这监督的大棒。只要数据上链,举报者们就能拿到证明 Jamal 是否作恶所需要的所有材料。人人都能向 ORU 合约发出对 Jamal 交易的质疑,并有机会获得举报成功的奖励。
强硬手段的设计及运作,是不同 ORU 实现之间最重要的区别。
来自教育部的电话
“何时能得到大规模接受?”这是我们圈子里最常见的问题。假设大家都开始采用区块链技术,ORU 也能用于解决网络拥堵 —— 但现在却出现另一个问题。
假设教育部希望 Jamal 处理全国范围内,所有学校的签名,这时候我们的问题就会从 “能处理多少学生?” 转为 “你能处理多少学校?”。
你可能会说,“既然可以将整个学校的所有签名整合为一笔交易,那同理将全国的签名整合为一笔交易不就好了?”
这就牵扯到 ORU 扩展性的上限:区块的 Gas 上限。虽然 Jamal 广播交易的 Gas 消耗量很低,但并不是不存在。如果想要在一笔交易中包含全国范围内的所有学生数据,很有可能会超过区块的 Gas 限制,换言之, Jamal 需要将数据进行拆分,分批广播。
所以说,通过 ORU 能获得的扩展性是有上限的,如果你需要无限扩展,可以考虑侧链或 plasma 等......但这样资金安全就没那么有保障。
重温一下 ORU 的好处
在乐观情况下, layer 1 的全节点无需执行 ORU 操作者发起的交易的附加数据,这样一来:
layer 1 全节点层面的执行成本更低;因为存储数据要比在其内部运行任何逻辑便宜得多。每笔交易的 Gas 成本更低;因为与执行交易相比,存储数据的 Gas 成本更低。
ORU 与侧链/Plasma/状态通道有什么区别?
与侧链不同:侧链的理念发端于 2014 年,但从未产生很大的吸引力;而 ORU 链的安全性是直接由 Layer-1 来保护的。
假设你在 ORU 链上玩扑克或交易代币,则你的资产转移就等同在 layer 1(例如以太坊主网)上转移一样安全。虽然当发生欺诈情况时,可能会遇到一些不便 —— 例如你需要等待一两个星期才能释放资金,但是 layer 1仍然可以保证资金的安全。
另一方面,如果你在侧链进行交易,侧链上的矿工(PoW)或验证者(PoS)可以窃取你的资金;因为只要他们想要,就能单方面向 layer 1 讲述对他们有利的故事,而 layer 1 无从考证。
与 plasma 和状态通道不同:ORU 的诈欺证明机制非常简单,任何人 都能提交挑战。举报者有 layer 1 上可用的所有数据,能够检测并向 ORU 合约提交诈欺行为证明,以此获得奖励。如果采用 plasma 或状态通道,用户必须承担其资金的部分或全部的安全性责任,并且必须时刻 “监视” layer 1 合约的情况,以防执行者或其他用户搞欺诈。
总结
所谓的 optimistic rollup (ORU),其实就是 ①智能合约 —— 部署在某 layer 1 (如,以太坊主网) 上,以及 ② 区块生产者 —— 会监听特定 p2p 网络的交易的,并将其汇总成一个大字符串数据,附上验证签名后上链。
因为合约能够直接接收用户的交易,即使执行者掉线或是作恶,都能保证用户能够安全地将资金从 ORU 退出。更重要的是,合约能够核实执行者是否存在诈欺行为,如有有,合约还能罚没执行者的保证金。
举报者进行诈欺检测及举证所需的所有数据,都能从 ORU 交易的附加数据取得;Layer 1 的全节点不会执行附加数据的内容(除非有人举报存在诈欺),这就是 layer 1 能够扩展的根本因素。对于 Layer 1 来说,这些附加数据只是个二进制数据包,并会被永久存储,仅此而已。