区块链研究尝试室|以太坊上状况通道的利用案例

来源:互联网 浏览:- 2020-03-28 08:10:48

频繁进行生意以推动以太坊假造机是不需求的高贵缓和慢。明天算夜多数利用以太坊的利用法度都经由过程更新链上合约的存储变量来事情,用户为此付出生意用度并花长时候等候区块确认。

为了利用利用法度,我们逼迫用户手动将数据库更新提交给世界上最宁静,分离和无信赖的环境。

经由过程将一些服从转移到客户端代码上,而不是伶仃依托以太坊为我们做所有事情,我们可以编写完整宁静的利用法度。凡是我们将这些称为“layer2”技术。

年夜多数“以太坊利用都不成伸缩!”的论述其实不是因为底层的区块链不适合。更精确地说,这是因为开辟职员很难利用状况通道等Layer2层技术。我们需求在以太坊之上具有更好的开辟职员东西,这将使以高效体例编写利用法度变得更加容易。

Counterfactual是一个开源项目,正努力于处理这个问题。我们的目标是使开辟职员易于利用以太坊上的状况通道来构建利用法度。

为甚么现在很难利用状况通道?

明天,如果开辟职员希望利用以太坊编写漫衍式利用法度,他们可能要实现以下每项:

1. 大众API-合约上的public或extenal函数

2. 受权逻辑(Authorization logic)-凡是经由过程查抄msg.sender

3. 处理逻辑(Resolution logic)-决定若何分派资金

在年夜多数环境下,这是开辟职员在设想漫衍式利用法度时要考虑的一个很好的笼统层次。 客岁,我们已看到不计其数的开辟职员利用这类形式利用以太坊构建利用法度,所以最好不要完整改变它。

从这类角度考虑状况通道会给利用法度开辟职员产生更多共鸣。在年夜多数环境下,测验测验设想状况通道利用法度时,您会碰到各种停滞,比方:

  1. 不清楚应当若何编写大众API,因为您不再签订Ethereum事件,而是签订通用状况工具
  2. 受权逻辑(Authorization logic)请求状况通道的每个用户为每个更新签订一个工具,并利用ecrecover考证这些署名。
  3. 因为每次提交新状况时都有一个内置的“应战”或“争议”阶段,是以现在的处理逻辑(Resolution logic)更加复杂。

最糟的是,对全部状况通道和谈,没有任何既定的标准,这使得框架或大众库很难呈现。

我们可以做些甚么来简化它?

使状况通道利用法度更容易于推理的最首要的第一步是标准化通用状况通道服从,使状况通道剖析逻辑与利用法度逻辑完整分离以与状况通道兼容的格局编写利用法度应当尽可能简朴,抱负环境下,应当感受像是在编写通例的智能合约代码。

实现此目标的一种体例是将利用法度建模为状况机。强迫挪动游戏框架就是此中的一个示例,凡是EVM已基于状况机的根基思惟构建,状况机基于事件履行来更新每个区块的状况。

那么,浅显智能合约和兼容状况通道的智能合约有甚么辨别?本质上可以归结为以下究竟:不管大众API的实现若何,我们都需求一种标准体例来与利用法度的状况转换进行交互。简而言之,我们需求一个入口点函数来计较状况转换。

一个例子-井字游戏

假定我们要编写一个井字游戏利用法度。我们可能会编写一个智能合约,该合约具有带有placeX和placeO函数的大众API,并查抄msg.sender以考证是不是有精确的参与者外行动。

用Solidity编写的井字游戏智能合约示例。

将这个游戏建模为一个状况机,我们可以看到在它们之间有5种状况和2种有效的转换范例。


井字游戏利用法度的状况机示例。 如果是X的回合,X可以采纳行动博得比赛,以平局结束比赛,或只是放下棋子并将其通报给O进行回合。

回到用于更新利用法度状况的标准接口的设法,我们想建立一个函数,该函数接管状况机的某些先前状况(比方X_TURN)和可以采纳的操纵以到达新状况 (比方PLACE_X)。 风趣的是,这与当今存在的某些常见Web框架(比方Redux)完整不异。 他们偏向于将这类服从称为“reducer”。 是以,让我们测验测验以这类体例编写井字游戏利用法度:

一个井字游戏利用法度,它具有一个用于措置PLACE_X和PLACE_O行动的reduce函数而不是多个名为placeX和placeO的函数。reducer服从将行动“分拨”到helper函数。

有了这个,我们现在有了一种计较状况更新的体例,可以经由过程一个大众接口——reduce接口对利用法度进行更新。在考虑必须庇护状况通道的抨击打击范例时,这非常有效。

但是状况通道合约中需求做甚么呢?

当然,状况通道工具应当利用利用法度逻辑来肯定转换是不是有效。核心状况通道服从可以存在于通用和谈中,该和谈措置可能的各种抨击打击景象,但会为其状况机的特定转换法则委派给利用法度。


状况通道可利用App逻辑作为肯定有效转换的手段,但是按照App逻辑供应给它的信息来措置受权和剖析逻辑本身。

有两种首要环境需求措置。如果我们利用Alice和Bob相互互换动静的常见教例,则可以将它们机关为:

1、如果Bob提交过期的状况呢?

合约必须可以或许实现一个超期间,以便Alice偶然候提交比Bob提交的状况更新的状况。如果Bob提交的状况可以证明是超时的,那么Bob应当遭到奖惩。

2、如果Bob停止呼应怎样办?

合约必须使Alice可以或许提交她从Bob那边收到的最新署名状况,以便将她的钱取出(在超时刻日畴昔以后)。在某些环境下,Alice可能会“采纳行动”以改良利用法度的状况机,是以在这类环境下,她必须可以或许利用利用法度的reducer。

为此,合约需求公开一个根基的API。请重视,这实际上是措置争议案件的API。状况通道的用户可利用一组函数调用来确保他们正在署名的链下状况更新具有首要意义。

这个API年夜致包含:

  • 建立争议案件。

一方提交状况的最新署名正本,并可选地对利用法度履行操纵,该操纵将在逻辑大将状况晋升到下一个状况。

  • 进行争议。

一方经由过程对已提交的状况采纳行动来回应另外一方的争议。

  • 打消争议。

两边同意打消争议并规复一般。

资金存放在那里?

这就是本文中描述的很多特性变得有效的处所。我们将这些资金放在一个通用的多署名钱包中,并将其用作按照状况通道的成果作出分派资金承诺的首要智能合约。


一个简朴的利用法度利用状况通道而不利用反究竟实例化,而只是利用通例的智能合约援引。

这给了我们很多无益的好处。最好的体例之一是操纵反究竟实例化技术的才气,本文也对此进行了详细介绍。当我们将其增加到组合中时,我们可使状况通道合约和利用法度逻辑合约保持链下状况。


与上述不异的设置,但是此次状况通道合约和利用法度逻辑条约是反究竟的-仅在产生胶葛时才需求在链上进行摆设。

设置以后,我们获得了另外一个非常强年夜的特性:用于装置和卸载利用法度的零链上事件。

当我们利用反事及时,增加和删除利用法度是免费且立即的。

实际上,因为我们可以从多署名钱包进行无穷次数的有前提转账,是以这些commitments可以用于任何数量的利用法度。

下一步

在今后的帖子,讲座和会商中,我们将概述对将用于合约层之上的软件的愿景。要在生产环境中利用的状况通道,将需求全部生态体系的年夜量调和。我们目前正在一些详细范畴利用,并希望与其他范畴进一步合作:

1. 标准化研究术语,分享观点,并在状况通道和第2层缩放中跟进其他风趣的研究问题。

2. 将狭义状况信道形式集成到现有的状况信道体系和基于非链式范式的利用法度。

3. 与web3框架合作,使链外存眷点在开辟职员api的将来开辟中广为人知。

4. 与钱包供应者一路事情,帮忙供应清楚的和谈标准和标准,申明状况通道可以在其域中若何存在。

保举浏览:佛山都会网

<l id='Cfiw'><kbd></kbd></l>
    <code id='ILrBEWX'><q></q></code><base id='cD'><del></del></base>
      <em id='Aq'><pre></pre></em>
        <dfn id='xjoh'><dfn></dfn></dfn><var id='PcYa'><samp></samp></var><ins id='FZ'><center></center></ins>
        <sub id='kC'><kbd></kbd></sub><span id='TfuMqTQA'><nobr></nobr></span>
        <var></var><abbr id='BdDnT'><abbr></abbr></abbr>
          <xmp id='MHprGq'><kbd></kbd></xmp><label id='uLjOpyUU'><center></center></label>
              <small id='HVHatnAB'><u></u></small>