868 large

双层智能合约的讨论

askye · 于 发布 · 最后由 jan回复 · 680 次阅读

VITALIK 为 R3 写的以太坊论文里面这样说:

具体来说,我们可以认为协同性是以太坊和所谓的“双层”区块链智能合约
系统(如现在已经停止了的Codius 项目)的主要差别,后者将区块链当成是一
个纯粹用于追踪资产所有权的层(甚至是更“傻瓜化”的纯数据层),并要求每
一个应用程序通过多重签名“公证人”或让用户独自处理区块链并“解读”其结
果的方式单独去处理智能合约;协同性的设计目标是让应用程序就智能合约执行
结果正确性的来源达成共识(每一个人都同意这个来源是安全的),因此在协议
的层面引入这种机制将鼓励其作为共识算法的一部分从而实现公共利益,是有经
济意义的。

这一段有些含糊,我的理解是 VITALIK 认为在对输入达成共识的同时,对APP的内部状态也达成共识是 SYNERGY 的关键/必要 特性, 而FACTOM 等的设计方式不利于这一点。

目前的微服务架构下, 服务和服务之间通过消息传递状态, 服务内部状态对外部用户不可见,只能体现在消息返回值上。 SO,个人觉得单层的区块链也可以实现 SYNERGY, 而且封装性更好,是不是可以这样说?

  • 1 large
    jan

    看原文可能会清晰一点:

    In particular, note that synergy is arguably one of the key distinguishing factors between Ethereum and so-
    called "two-layer" attempts at blockchain-based smart contracts (eg. the now-discontinued Codius), that try
    to treat the blockchain as purely a layer for keeping track of asset ownership (or even an even "dumber" pure
    data layer) and ask each individual application to separately process smart contracts either through multi-
    signature "notaries" or through users individually processing the blockchain and "interpreting" the result; a
    design goal of synergy requires applications to agree on a common source of correctness for the result of
    smart contracts that everyone agrees is secure, and so it simply makes economic sense to introduce such a
    mechanism at protocol level and incentivize it as part of the consensus algorithm as a public good.

    synergy要求contract之间相互认可计算结果,如果在协议里面把执行这块做了,能更好的利用已经存在于共识里面的激励设计。

    但这样做仅仅是"makes economic sense", 不一定是最优的做法。就好像DAO和共识是两层分别有自己的激励设计一样,执行和共识自然也可以,对于不同的场景需要不同的考虑,需要设计者来权衡。

    个人觉得单层的区块链也可以实现 SYNERGY, 而且封装性更好,是不是可以这样说?

    没看懂这里的单层指的是?相对于codius来说ethereum算不算单层的?

  • 868 large
    askye

    @jan 相互认可计算结果的方法有两种:一个是把每个应用的STATE 直接由区块链来维护,并且通过STATE ROOT来标识, 另一种是把应用的 STATE 由外部APP来维护,不同 APP 彼此通过接口来通信, 区块链上只保存 APP 之间的通信消息。 应用的REPLY 因为会出现在BLOCKCHAIN上, 通过 REPLY 的共识来间接地 确保 APP STATE 的一致性, 是否也可以一方面确保 SYNERGY 一方面不要求 区块链直接跑 SMART CONTRACT

    双层: BC 只保存这些通信消息 不保持应用内部状态 单层:通信+INTERNAL STATE 都在 BC 上

  • 1 large
    jan

    只对message进行共识应该就是vitalik所说的“双层”结构。消息和执行是两个事物,只对消息进行共识保证不了app state的一致性,因为同一条消息的执行结果,不同的app可以有不同的意见。

    我觉得synergy存在于很多地方,包括微服务里面,但是blockchain上的synergy有自己的特点:产生synergy的各方之间无需信任。对比微服务,都是自家做的,信任是天然的。

    ps. GEB一书对此有深刻的分析:“意义”是数据和解释器共同作用的结果,仅仅“数据”是没有意义的。自然语言也仅仅在人脑中有意义,在不同的人脑中有不同的意义。

  • 868 large
    askye

    @jan 我想过外部表达和内部状态可能的不一致。但如果从接口的角度看问题,对这个APP 的用法,包括查询,都是体现在接口上的。你只要查询都是通过MSG, 这种情况下只要你得到了大家公认的 REPLY, REPLY 里面的东西在各节点内部是咋出来的,你为何还需要关心呢? 关键是 你应继续原来的方向:通过接口获取知识 而 不是通过查看内部状态变量获取知识。 类似陪审团, 每个人作出的决策的原因我们不关心,只要大部分人判决 有罪 或者 无罪, 就OK了

  • 1 large
    jan

    我相信某些场景下这么做是可以的,实际上是一种折衷:

    (independent message, independent interpreter) -> (agreed message, independent interpreter) -> (agreed message, agreed interpreter)

    自然就会有这样的问题:有两个app,功能完全相同,由不同的两组人维护。现在你做了第三个app, 要选一个使用,怎么选呢?做一些调查,最后选择“相信”某一组人。如果这一组人作恶,再切换到另外一个app。

    这样的synergy成本自然要比对执行也进行共识的成本高。对于公有链来说,我还是倾向于agree on both.

    这种情况下只要你得到了大家公认的 REPLY, REPLY 里面的东西在各节点内部是咋出来的,你为何还需要关心呢?

    reply里面的东西不是大家公认的。大家公认的只是这个reply*格式正确,内容*没有共识。

    类似陪审团, 每个人作出的决策的原因我们不关心,只要大部分人判决 有罪 或者 无罪, 就OK了

    区别:陪审团是通过大家认可的机制选出来的,app的运行者不是。一个app的执行结果不是大家公认的。如果app的运行者也通过共识产生,其实就变成DAO了。而DAO也需要一个基础,这个基础应该是(agreed message, agreed interpreter).

  • 868 large
    askye

    公认的不仅仅是格式正确,整个二进制的表述,不同节点吐出的MSG 的BYTE BY BYTE 的数据是一样的。

    不过刚才想到一个问题确实是, APP NODES 的数量是小于小于 数据共识区块链的节点的, 有的节点不是特定 APP的节点,数据共识会有些难做

  • 1 large
    jan

    对于非App node来说,只能做到保证整个消息格式正确,如果它还关心内容正确,只有执行一遍才行。