学校里有 1000 名学生,每名学生每天签发 1 条消息,每条消息的平均燃料费是 0.1 美元,则学校每月的开销是: 1000 名学生 x 1 条消息 / 每天 / 学生 x 0.1 美元燃料费 / 消息 x 30 天 / 月 = 3000 美元 燃料费 / 月。 心疼。 解决方案 v2 囊中羞涩的学校无法负担每月 3000 美元的开销。 这时候就需要 Optimistic Rollups (ORU)前来救场了。Jamal 说,通过 ORU,学校可以使燃料费降低 99%左右,方法如下: 当学生点击「签名并发送」时,签名后的消息还会像以前一样发送到 Jamal 家里的服务器上。但随后,他会把所有这些签名添加到一大串数据中。我们把这些数据叫做 WiSWho (即「谁在和谁约会」): WiSWho=「【alice 的 ID,alice 的消息 msg,alice 的签名】、【bob 的 id,bob 的消息,bob 的签名】…… 当然有其他更有效的方法来封装这些 WiSWho 数据,不过先忽略这一点。 然后,Jamal 广播了一个用他的私钥签名的交易。交易消息显示: 「本人,Jamal,证明本交易附带的数据(WiSWho)代表了 XX 学生在 X 日 /X 月 /X 年的关系状态,并且我拉钩发誓,这里面包含了全部的事实且只有事实」。 用行话来说,Jamal 是第二层的「操作员」。 如果你曾经在以太坊上进行过交易,那么你会知道这些附加数据的去向,即 Etherscan 资源管理器中的「输入数据」字段。如下图所示,在进行简单的以太坊转账时,多数情况下不会填写这个字段。当调用一个函数时,例如 Uniswap 的交换函数,会附加上函数名称及函数输入。而且,WiSWho 就是在这里被附加到了 Jamal 的交易中。Jamal 的交易是对第一层 ORU 合约中一个函数的调用。 左:无数据附加到简单的 Ether 转账交易。右:附加 Uniswap 的函数名称及输入(例如:min_tokens 是需要接收的金额)作为数据。 只有 Jamal 的签名能校验以太坊上的这一份 ORU 合约。就第一层而言,WiSWho 中的学生签名只是一块又一块「冰冷的」二进制数据。 这便是可扩展性取得进展的缘由:第一层上的全节点不会校验 WiSWho 内部的签名,而是仅校验 ORU 操作者的签名,并将附加的数据保存起来。 接下来,我们看看为什么这些数据必须永远只能由全节点保存。 悬念 你可能已经在上面 Jamal 的签名消息中,注意到了两个被强调的词语: 全部的事实 只有事实 缺点(1)——审查。即在 Bob 的收买下,Jamal 恶意地审查了 Alice 的消息。Bob 和 Alice 吵架了,于是想要破坏 Alice 的浪漫生活。 缺点(2)——欺诈。即 Jamal 加入了一条或多条无效的消息。例如,Jamal 在 Alice 的消息中加入信息,说:「我正在同时和 10 个男孩和 10 个女孩约会」,而实际上,Alice 根本没有签署过这样的消息。在 WiSWho 中,Jamal 加入的 Alice 签名是无效的,是伪造的签名。他这么做的原因可能是 Bob 收买了他,想要伤害 Alice,或者是 Jamal 本人憎恨 Alice,想让她尴尬。正向我们所说的那样,ORU 智能合约不会检查 WiSWho 内部内容的有效性,因为这么做会违背 ORU 的初衷:增加燃料费(签名校验可不便宜),并且在本质上变成了上述不可持续的解决方案 v1。 (责任编辑:admin1) |