CatVM 到底是什么?插图

TaProot wizards 昨天发布了一部 CatVM 漫画。 我不会其称为白皮书,那些成人的真正学术文件。 漫画中,散布在荒谬幼稚的叙述中的是一些关于比特生态系统中不同扩容建议的有价值的技术见解。 当然,在真正的卡通时尚中,隐藏在疯狂的夸张装饰之间。

该漫画的最终目标是提出一种新的机制,用于移入和移出构建在比特币之上的扩展层。 为了将实际的提案卡通片区分开来,我们必须分解所涉及的两部分。

构建模块

Rijndael 的一个 OP_CAT 实验是构建一个金库,该方案允许用户建中间“暂存”交易以从金库中提取资金。 这会启动一个时间锁,在此期间,他们可以随时将资金发送回金库或安全的冷存储包,并且在时间锁之后,用户可以由地将资金提取他们在开始提款过程时选择的目的地。 这些是 仅有的 发送到金库脚本的比特币有两种使用方式。

解释如何实现这一的完整机制本质上本身是一篇文章,所以我将做一些我通常不做的事情,并将其视为“魔法”。 (Andrew Poelstra 在此进行了解释)这种“魔法”允许您通过创建非标准 Schnorr 签名并在 OP_CAT 的帮助下,在脚本堆栈上构建签名检查所的交易。 这可以让您强制交易的某些部分完全按照提定义。 它还允许您在构建支出交易的过程中将先前交易的输出放在堆栈上,这意味着您可以将支出交易的输出与先前交易的输出进行比较。 这使您可以通过比较它们来保证前一笔交易输出的某些部分与新输出的某些部分相匹配。 即脚本或金额。 此,您可以将旧输出的部分“结转”到新输出中,并强制执行。

您可以使用 OP_CAT 做的其他事情是验证默克尔树分支,这不需要 Rijndael 进行修改和实验来证明。 因为你可以通过 CAT 将项目堆叠在一起,并且比特币已经支持在堆叠上对数进行哈希处理,所以你可以从叶节点和内部节点慢慢构建 Merkle 树根。 将两个部分散列在一起以获得一个散列,然后将其与散列对进行散列,依此类推。 最终你会得到堆栈上的根哈希值。 然后,您可以将其与 OP_EQUAL 与锁定脚本中预定义的根哈希进行比较。

单方面退出

这两个构建块足以促进从群组共享 UTXO 中单方面撤回机制。 可以使用 OP_RETURN 或为每个用户提交叶节点的其他机制将默克尔根嵌入到事务中。 UTXO 脚本可以构造为任何有余额的用户都可以尝试提取它。 为此,他们将提供承诺其有权获得的金额的默克尔分支、用于检查签名的公钥授权证明,并在堆栈上构建交易以验证是否满足适当的条件。

与 Rijndael 的 OP_CAT 金库类似,此提款交易将充当一个中转点。 用户资金将受到时间锁的限制,在时间锁到期之前他们无法完成提现。 在时间锁到期之前的任何时间,任何其他用户都可以创建欺诈证明来停止提款并将资金推回到组 UTXO 脚本中。 他们可以做到这一点是因为 OP_CAT 能够验证默克尔树。 如果有人之前使用过特定的 Merkle 分支从 UTXO 中提取资金,那么它就会被包含在某个区块中。 通过在实际区块中构建包含该交易的 SPV 证明的交易,可以使用 OP_LESSTHANOREQUAL 来验证区块头满足某些最难度,他们可以证明 在堆栈上 之前使用过merkle分支。 这可以防止重复提款。

除此之外,由于您可以使用“堆栈上的 CAT”技巧来确保前一笔交易的特定部分必须包含在下一笔交易中,因此您可以保证在成功后当前的 Merkle 根将被结转到下一笔交易中退出。 您还可以保证撤回的更改返回到组共享脚本中。 这保证了在一个用户提取资金后,更改的 UTXO 会被一个允许任何剩余用户提取的脚本锁定,依此类推。 任何用户都可以随时以任何顺序单方面提取资金,并保证其他用户仍然可以使用剩余资金。

虚拟机部分

读者应该熟悉 BitVM 的基本思想。 您可以进行任意计算,并将其分解为每个组成部分,并将它们嵌入到大型主根树中,从而将该计算转变为来回的挑战/响应游戏。 这允许您使用比比特币脚本本身直接支持的更复杂的条件来锁定比特币。 唯一真正的缺点是需要制作大量的预签名交易来促进这一点。

使用预签名交易的要求是,在挑战/响应动态中,您可以保证硬币被花回编码它的大主根树中,除非以一种或另一种方式达到退出条件。 OP_CAT 和“承”先前交易数据的能力使您无需预先签署交易即可保证这一点。

因此,该方案不仅允许任何用户自行单方面退出,还允许在提款过程中实际执行比特币脚本不支持的第二层支持的锁定条件。 也就是说,如果一些代币受到基础层不理解的智能合约的阻碍,然后从第二层撤回,那么当代币被撤回时,那些更复杂的条件仍然可以在基础层上正确解决。

缺失的部分

OP_CAT 无法启用的一件事是更新代表用户链外余额可验证的默克尔树根。 它可以使已经提交的状态能够促进单方面提款,但这是因为树的整个部分实际上都放在链上并进行了验证。 根据定义,在链外更新根意味着您不会将数据放在链上。 这代表了一个问题。 仅使用 CAT 无法有效验证对 Merkle 树的所有更改是否均已得到相关用户的正确授权。

必须有人信任,并且根据事物的本质,能够以任何方式、无论何时何地使用 UTXO,以有效地用新的状态根替换旧的状态根,以代表所有链下余额的变化。 除了 OP_CAT 之外,还需要一个新的操作码(例如 OP_ZKVERIFY)才能以不信任的方式执行此操作。

不过,如果没有 OP_ZKVERIFY,这不会是世界末。 更新链下传输的默克尔根的实体可以是 n-of-n 重签名,需要 100% 的参与者签署任何根更改。 这归结为与基于 BitVM 的挂钩相同的信任模型,只要存在一个诚实的参与者,任何人的资金都不会被盗。 然而,在提现过程方面,它比现有的 BitVM 设计有了明显的改进。

在 BitVM 挂钩中,用户没有单方面的提现机制。 锚定运营商必须值得信赖,能够完成用户提款,因为他们知他们可以从 BitVM 锚定中相对不可信地收回他们在这样做时花费的资金。 虽然这样做的激励措施非常可靠,但它仍然需要用户基本上获得其他人的许可才能退出系统,他们无法自行退出。 通过 CatVM,用户可以单方面收回资金,运营商无需使用自己的流动性来处理提款。

包起来

总体而言,设计在施工方面并不完整。 我认为这本身并不是第 2 层。 它是其中的心,即资金如何锁定到第 2 层的机制和结构,以及用户如何提取资金的流程。 它确实具有很大的灵活性和实用性。

在最坏的情况下,用户不需要任何人的许可就可以安全地在链上取回资金。 它还允许更灵活的资金可编程性,同时在最坏情况下单方面退出的情况下仍然将这些条件执行到基础层。 如果有一天我们最终得到像 OP_ZKVERIFY 这样的东西,链下状态进程可能会成为一个实际上不信任的过程。

我预计在不久的将来不会有任何具体的演示,但在我看来这绝对是一个好主意,并且值得考虑。 它还表明奇才队所做的不仅仅是输出愚蠢的 JPEG

#CatVM #到底是什么