加载中 ...

区块链研究实验室 | 理解广义Plasma技术结构-part II

2019-04-22 17:55 编辑:btc268.com 来源:区块链资讯

  断言(Predicates )开发实战

状态对象


  现在让我们深入了解这一切在实践中如何运作的细节。我们的Plasma链设计的构建块是“状态对象”。状态对象只是一个具有两个属性的数据:

  predicateAddress:控制对象的on-chain地址。

  parameters:描述对象的一些任意blob数据。

  

  Plasma状态对象架构

  
状态对象实际上是资产-Plasma Cash中不可替代“硬币”概念的概括。就像每个独特的硬币都有CashID一样,每个状态对象都有一个stateID。

  StateID是根据在Plasma链中的存储按顺序分配的,但是没有任何关于参数或predicate(断言)可以是什么的规则。每个Plasma块都是“状态更新”的集合,它在特定的StateID上定义新的StateObjects。

  

  在块0处提交的状态更新:“Alice在块0处拥有ID为0的状态对象”

  因为我们使用的是基于范围的现金变量,所以状态更新实际上是在StateObject ID的范围内指定的:

  stateUpdate = {
   start: uint,
   end: uint,
   plasmaBlockNumber: uint,
   stateObject: stateObject
}

  ETHereum上的Plasma链契约(操作员在其中提交Plasma BlockHash)实现了VerifyUpdate(更新:StateUpdate,更新见证:Bytes[])->Bool,该Bool检查Merkle包含证明(updateWitness)状态更新确实已提交。

   断言(Predicates)接口

断言(Predicates)需要实现标准合同接口。让我们来看看这些功能。

  Plasma合同所做的最重要的事情是确定状态更新的有效性。特别是,我们需要防止操作员(完全控制块)能够“潜入”一个有效的状态更新,该更新具有stateobject.parameters.owner==operator-这将是盗窃!

  为了实现这一点,我们引入了“状态弃用”的概念。我们说给定stateID的有效状态是尚未被“弃用”的最早更新的状态。状态弃用类似于未使用的事务输出变为耗尽UTXO区块链的交易输出。

  这样,即使操作员在以后的更新中偷偷地使用stateobject.parameters.owner==operator,也会优先使用stateobject.parameters.owner==alice进行早期更新,因为只有她才能取消预测状态。

  因此,断言(Predicates)中最重要的函数定义了其状态可能被否决的理由:

verifyDeprecation(stateID: uint, update: stateUpdate, deprecationWitness: bytes)

  VerifyDeprecation根据提交的StateUpdate是否已针对特定StateID弃用而返回TRUE或false。deprecationwitness是断言(Predicates)用来检查StateObject是否已被弃用的任意数据。例如,通过要求deprecationwitness包含update.stateobject.parameters.owner的有效签名,我们保证只有所有者才能批准deprecation。

  记住,这个函数实际上并没有对Plasma的退出游戏、争议等进行任何弃用。相反,Plasma合约在需要知道是否不推荐使用StateObject来评估争议时调用该函数。

  断言(Predicates)接口-中还有三个其他函数,按重要性排序,它们是:

finalizeExit(exit: bytes)

  当退出被赎回时,Plasma合约将与索赔相关联的任何资产发送到断言(Predicates)地址,然后调用此函数。

canInitiateExit(stateUpdate: bytes, initiationWitness: bytes) -> bool

  此函数允许断言(Predicates)限制谁可以在提交状态上启动声明。例如,所有权谓词可能希望将canInitiateExit限制为资产的所有者。

getAdditionalDisputePeriod(stateUpdate: bytes) -> uint

  此函数允许断言(Predicates)增加索赔的争议期。我们只将其用于可能需要较长争议解决过程的复杂断言(Predicates)(例如原子交换)。此函数通常只返回0。

   断言(Predicates)示例:断言(Predicates)所有权

  通过示例,一切都变得更容易,所以让我们来看一个。最简单的断言(Predicates)是所有权断言(Predicates)。此状态允许其当前参数.owner随时退出,或批准任何状态更新。

  创建断言(Predicates)的第一步是设计状态对象。幸运的是,这非常简单,对象参数中唯一的数据是当前所有者的地址。使用所有权断言(Predicates)的状态对象可能如下所示:

  OwnedByAlice = {
  parameters: {
    owner: '0xAliceAddress...',
  },
  predicate: '0xOwnershipPredicateAddress...'
}

  要实现的最重要的函数是verifyDeprecated,它接收一些任意的deprecationWitness。对于所有权断言(Predicates),有效的deprecationWitness包括:

  state.parameters.owner的签名同意新的stateUpdate。

  证明新的stateUpdate是在稍后的Plasma块中提交的。

  verifyDeprecated需要检查这些东西是否有效,这意味着检查签名和Merkle证明。

  

  要求弃用所有权状态的条件。

  综上所述,我们看到所有者如何通过批准新的更新来弃用其所有权状态:

  

  Alice将stateID 0发送给Bob,弃用块0的更新。

  

  其余的功能非常简单。canInitiateExit需要检查申请人是否为所有者,finalizeExit将资产转发给所有者,getAdditionalDisputePeriod可以返回0。

  这就是代码中的实际情况!下面我们包含了简单所有权断言(Predicates)的python实现。我们用Python编写它是为了简单起见,但在solidity或vyper中也很容易做到。

  class OwnershipDeprecationWitness:
    def __init__(sELF, next_state_update, signature, inclusion_witness):
        self.next_state_update = next_state_update
        self.signature = signature
        self.inclusion_witness = inclusion_witness

class OwnershipPredicate:

    def __init__(self, parent_plasma_cONTract):
        self.parent = parent_plasma_contract

    def can_initiate_exit(self, state_update, initiation_witness):
        # Only the owner can submit a claim
        assert state_update.state.owner == initiation_witness
        return True

    def verify_deprecation(self, state_id, state_update, deprecation_witness):
        # Check the state_id is in the deprecation_witness state update
        assert deprecation_witness.next_state_update.start <= state_id \ 
            and deprecation_witness.next_state_update.end > state_id
        # Check inclusion proof for more recent state update
        assert self.parent.commitment_chain.verify_inclusion \
            (deprecation_witness.next_state_update,
                self.parent.address,
                deprecation_witness.inclusion_witness)
        # Check that the previous owner signed off on the change
        assert state_update.state.owner == deprecation_witness.signature
        return True

    def finalize_exit(self, exit):
        # Transfer funds to the owner
        self.parent.erc20_contract.transferFrom \
            (self, exit.state_update.state.owner, \
                exit.state_update.end - exit.state_update.start)

    def get_additional_lockup(self, state):
        return 0

  如您所见,我们已实现上述整个界面。

  我们有了它!表示资产可转让所有权的断言(Predicates)。这里的大部分逻辑都与Plasma合同中已经做过的相同。我们甚至在Ethdenver的过程中尝试了改变的原型。这主要是围绕我们已经编写的代码移动的问题。

  这种结构是我们理解Plasma的重要一步。它类似于从支付渠道跳到通用状态渠道——我们能够在不升级Plasma协议本身的情况下,在Plasma架构中适应新的特性和功能。

状态通道

各种类型的DEX谓词

碎片整理断言(Predicates)

嵌套Plasma(断言(Predicates)本身就是Plasma合约)

  P2P选项和CDP合同

  然而,重要的是要记住,断言(Predicates)不是万能的——它们仍然被限制在Plasma设计空间内。可能还没有发现更多的泛化。然而,断言(Predicates)非常强大,似乎对几乎所有的Plasma实现都很有用,包括那些不基于Plasma Cash的实现。

  我们认为这是整个Plasma生态系统标准化的一个机会。任何共享这种状态拒绝架构的Plasma实现都可以共享断言(Predicates)并以新的方式进行互操作。

  第2层扩展解决方案都是关于使用链外数据来保证未来的链上状态。无论旧的状态是通过签名(状态通道)、承诺(Plasma)还是其他什么方式被否决,这些工具最终都会完成相同的事情。我们希望这一进步是朝着一种包含所有第2层解决方案的统一、共享语言迈出的一步。我们设想未来,钱包可以通过使用标准接口连接到任何第2层解决方案,而不是每次都编写自定义集成。一切为了互操作性,一切为了互操作性!

  相关文章阅读:

  区块链研究实验室 | 理解广义Plasma技术结构-part I

  重磅信息:海纳学院招新

  海纳学院:旨在打造区块链综合技术人才社群,目前社群汇聚了投资界总监,技术大咖和运营总监等。

  点击下文报名加入社群

  海纳学院招新 | 区块链综合人才社群,期待你的加入!

  扫描下放二维码添加我,拉您进入技术交流群

  

  

关键词:比特币新闻 币牛牛

转载自比特币新闻网(www.btc268.com),提供比特币行情走势分析与数字货币投资炒币最新消息。

原文标题:区块链研究实验室 | 理解广义Plasma技术结构-part II

原文地址:http://www.btc268.com/qkl/zs/10398.html

本文来源:区块链资讯编辑:btc268.com

本文仅代表作者个人观点,与本网站立场无关。

本网站转载信息目的在于传递更多信息。请读者仅作参考,投资有风险,入市须谨慎!

'); })();