• 什么是区块链Layer 2扩容


    第二层协议差了一个维度,它通过利用第一层协议(如以太坊)进行操作,并允许用户在客观上没有第一层安全的环境中进行交易,但其安全性由第一层解决方案支持。例如,如果状态通道中存在欺诈,则用户可以提交由第一层网络验证的欺诈证明。同样在 Truebit 中,如果对解算器(solver)提出的链下计算解决方案存在分歧,那么质疑者可以通过在以太坊上玩验证游戏将解算器带到法庭上 在乐观的情况下,我们使用可以被整体信任的网络子集来计算信息,即便悲观的情况下,我们已经恢复到第一层共识的安全性,最终仍然能得到一个正确的答案。

    n 层解决方案是我们创建的这些想法的延伸,例如,从以太坊分支的 Plasma 链,我们可以创建更多的 Plasma 链,将第一个 Plasma 链作为基链。如果 n Plasma 链被驱逐,它可以恢复到其根链的安全性,如果根链也受到攻击,它  可以恢复到 其基链 的安全性,如此一直回溯到以太坊主链。

    第一层和第 n 层解决方案之间的区别在于提供的不同安全属性。最佳解决方案是第一层,因为它可以保证(在矿工看来)所有状态转移的安全性,而不会有任何妥协。也就是说,你的所有内容都将在此安全环境中计算,因此你的状态转换会相对区块确定性的失败或成功(因为你的状态转换是共识机制的一部分)。

    而对于第二层解决方案来说,由于状态转移不是第一层区块链的共识机制的核心,因此第二层方案依赖于其它的安全保证。例如,第二层 Plasma 链可以在权益证明或权威证明下运行,在此环境中以牺牲部分安全性为代价允许更高的交易吞吐量。

    第二层解决方案的主要优势在于,一旦我们确定可以回退到较低层级的安全环境,攻击就会变得不合逻辑,我们将看到唯一的攻击类型是来自具有恶意,但不理性的攻击

    第二层解决方案的主要缺点是,当发生攻击或欺诈时,恢复到主链安全性的过程代价非常高,并且通常用户体验非常差。例如,在 Truebit 中,因为要花 O(log(n)) 步来定位解算器的错误,因此就要在 O(log(n)) 个以太坊区块之后才能揭晓。每步 15 秒,意味着在最坏情况下可能需要花费 数小时和数千美元 来挑战解算器。通常来说,攻击第 n 层解决方案代价非常高,但恶意用户可能会愿意支付该成本以破坏网络。同样,许多第二层解决方案依赖于经济上的安全性,这种安全性基于花钱来攻击系统不划算的想法,但如果其中的经济要素没有得到完美模拟,这肯定会是一个缺点。

    侧链

    侧链(Sidechain)协议允许资产在比特币区块链和其他区块链之间互转。这一项目也来自比特币社区,最早是在 2013 12 月提出,2014 4 月立项,由 Blockstream 公司(由比特币核心开发者 Adam BackMatt Corallo 等共同发起成立)主导研发。侧链协议于 2014 10 月在白皮书《Enabling Blockchain Innovations with Pegged Sidechains》中公开。

    侧链诞生前,众多山寨币的出现正在碎片化整个数字货币市场,再加上以太坊等项目的竞争,一些比特币开发者希望能借助侧链的形式扩展比特币的底层协议。

    简单来讲,以比特币区块链作为主链(Parent chain),其他区块链作为侧链,二者通过双向挂钩(Two-way peg),可实现比特币从主链转移到侧链进行流通。

    侧链可以是一个独立的区块链,有自己按需定制的账本、共识机制、交易类型、脚本和合约的支持等。侧链不能发行比特币,但可以通过支持与比特币区块链挂钩来引入和流通一定数量的比特币。当比特币在侧链流通时,主链上对应的比特币会被锁定,直到比特币从侧链回到主链。可以看到,侧链机制可将一些定制化或高频的交易放到比特币主链之外进行,实现了比特币区块链的扩展。侧链的核心原理在于能够冻结一条链上的资产,然后在另一条链上产生,可以通过多种方式来实现。这里讲解 Blockstream 提出的基于简单支付验证(Simplified Payment VerificationSPV)证明的方法。

    SPV 证明

    如前面章节所述,在比特币系统中验证交易时,涉及到交易合法性检查、双重花费检查、脚本检查等。由于验证过程需要完整的 UTXO 记录,通常要由运行着完整功能节点的矿工来完成。

    而很多时候,用户只关心与自己相关的那些交易,比如当用户收到其他人号称发来的比特币时,只希望能够知道交易是否合法、是否已在区块链中存在了足够的时间(即获得足够的确认),而不需要自己成为完整节点做出完整验证。

    中本聪设计的简单支付验证(Simplified Payment VerificationSPV)可以实现这一点。SPV 能够以较小的代价判断某个支付交易是否已经被验证过(存在于区块链中),以及得到了多少算力保护(定位包含该交易的区块在区块链中的位置)。SPV 客户端只需要下载所有区块的区块头(Block Header),并进行简单的定位和计算工作就可以给出验证结论。

    侧链协议中,用 SPV 来证明一个交易确实已经在区块链中发生过,称为 SPV 证明(SPV Proof)。一个 SPV 证明包括两部分内容:一组区块头的列表,表示工作量证明;一个特定输出(output)确实存在于某个区块中的密码学证明。

    双向挂钩

    侧链协议的设计难点在于如何让资产在主链和侧链之间安全流转。简而言之,接受资产的链必须确保发送资产的链上的币被可靠锁定。

    具体,协议采用双向挂钩机制实现比特币向侧链转移和返回。主链和侧链需要对对方的特定交易做 SPV 验证。完整过程如下:

    • 当用户要向侧链转移比特币时,首先在主链创建交易,待转移的比特币被发往一个特殊的输出。这些比特币在主链上被锁定。
    • 等待一段确认期,使得上述交易获得足够的工作量确认。
    • 用户在侧链创建交易提取比特币,需要在这笔交易的输入指明上述主链被锁定的输出,并提供足够的 SPV 证明。
    • 等待一段竞争期,防止双重花费攻击。
    • 比特币在侧链上自由流通。
    • 当用户想让比特币返回主链时,采取类似的反向操作。首先在侧链创建交易,待返回的比特币被发往一个特殊的输出。先等待一段确认期后,在主链用足够的对侧链输出的 SPV 证明来解锁最早被锁定的输出。竞争期过后,主链比特币恢复流通。

    子链

    说到子链就会谈到以太坊的PlasmaPlasma是一种扩容解决方案,它使用子链向根链(即以太坊)报告的方式来增加交易吞吐量。

    它本质上是存在于区块链上的区块链,由一系列智能合约组成。比如Alice的以太坊账户资产存储在Plasma中的一个子链上,但她的交易信息会存储在以太坊根链上。不可想像的大量的交易可以提交到Plasma链上,只有非常少的数据落地到主链上。如下图:

    这相当于一个等级参差的法院体系,大家可以把以太坊主链视为最高法院,所有下级法院从这里得到权力。主链的法律允许所有下级法院获得司法权,这将允许管辖地的扩展,当且仅当下层法院的状态被质疑或暂停了,那么向高一级的法院申请更具代表性的管辖权。当这种情况出现时,任何人都可以指出错误,出错区块将会被踢出,其创建者也会受到惩罚。

    主链虽是全局计算的强制检查者,但也只计算和惩罚那些存在欺诈的行为,因为Plasma中的子链没有向主链公开自身链的全部内容,只是子链区块的头哈希最终会打包到主链。

    约瑟夫潘解释这一概念时说,基本上这就相当于你想做一些数学运算,但这个运算相当复杂,需要很长时间才能做好,所以你请别人(子链)为你做这件事。并且,世界上任何人都可以见证这个过程,并指出错误。若有人提供证据证明最初方案错了,其他人就可以计算并认定此错误。另外,当用户认为有谬误伪证,就可以选择将这个计算重新打回主区块,这样一来就能完全解决争议。

    状态通道

    1什么是状态通道?

    首先,先看一下什么是状态机。状态机是一个很简单的概念,维持着世上很多软件的各种表现形式,可以总结为:f(state, action) => state’,也就是说,这个函数采用当前的状态和一次操作(即更改状态的方法),并返回执行完该操作之后的状态。

    以太坊是一个全球化的基于交易的状态机,在链上的每一步操作都会产生最新的状态。不同的是,状态通道是在链外进行状态维护。

    状态通道听起来就像是支付通道的延伸,这也是这项技术一直被低估和忽视的原因,一个隐私、效率、信任最小化、安全性和模块化的广义通道是我们要建设的重要基础设施之一。

    状态通道本质上是通过在不同用户之间或用户和服务之间建立一个双向通道,为不同实体之间提供状态维护服务。它允许把区块链上的许多操作在链外进行管理,等完成链外操作后多方签名确认后,才将最终结果上链。其实可以把状态通道理解成一个执行特殊操作的智能合约,一个专门建立双向通道,在一定条件下进行状态保持的智能合约。

    可以将状态通道中的执行过程作为原子操作,在执行完成这个原子操作后,将最终结果上链。

    我们用银行和余额宝的例子来讲解一下状态通道,虽然可能不太准确,但多多少少可以说明一些问题。

    首先我们把银行比作区块链,我们把部分的钱从银行存到余额宝中,用余额宝进行平时的小额交易,当我们想提现时,直接从余额宝提现至银行卡即可。状态通道对应余额宝,当有一方要关闭状态通道时,相当于提现操作,余额宝中保存了当前账户的状态,关闭状态通道时将状态更新至链上,相当于更新银行账户状态。

    2.状态通道的生命周期

    • 打开通道:首先由两个或多个参与者就初始状态达成一致,区块链中的某些状态将发生变化(在支付通道中意味着放入一些代币进行托管)则状态通道开启。通道预言机被用来报告通道中的状态,并根据规则进行判断是否关闭通道。
    • 关闭通道:当状态通道oracle从其中一个通道参与者接收到有效的状态更新时,它将进入挑战期,在此期间另一个通道参与者可以提交更高序列号的状态更新。在挑战周期结束之后,具有最高序列号的有效状态更新被接受为最终状态。
    • 结算:当参与方的任何一方想要关闭交易通道,则更新到最近的状态后,将数据上链进行结算,并关闭通道。

    状态通道预言机对于状态是否有效的判断依据如下:

    • 状态更新必须由至少两个通道参与者签署。
    • 每个连续的状态更新必须高于sequence最后一个。
    • 预言机在通道关闭后只能提交关闭前的最近状态更新。

    3. 为什么要使用状态通道?

    为什么要把信息(信息的哈希)保存在链下?有两个重要的原因,交易费和效率。

    状态通道为Dapp的可用性提供了基础,减少Dapp的延迟以及将网络响应时间控制在用户的可容忍范围。Dapp的参与者将消息与事务相互发送,以更新状态,但不会将消息发布到链中。如果其中一位参与者离开或试图欺骗另一位参与者,可以随时向区块链发布最新交易以完成状态。这其中的奖罚措施足以让参与者保持诚实。

    状态通道是两方之间的互动,可以适用于任何智能合约。状态通道管理商业进程或者交易状态。它可以在保证指定人群之间交互性能和隐私性的同时,降低交易成本。

    使用分片技术可以一定程度上实现可扩展性,但是对于依赖大量原子操作(如流式支付、物联网设备、游戏等)的应用程序来说,分片技术无法有效降低成本,而对于大量细碎交易来讲,通过状态通道,可以很大程度上缩小开支。

    4.状态通道应用场景

    比特币的闪电网络是状态通道在支付领域的一个很好的应用

    下面我们来举例描述状态通道在其他方面的应用:

    1)举一个象棋游戏的例子

    两个人开始一局游戏(创建一个新的评判程序),并为其提供初始投注。他们的实际举动不是作为交易提交给区块链,而是对每一步的操作进行签名并直接发送给对手方。当对手方接受移动时,由程序检查当前操作是否有效,并在游戏状态的更新版本上签名,再将其返回给对手方。如果此举无效,他们会向法官提交最近达成一致的状态,由该方签名操作,以便法官可以使用规则来确定适当的处罚。每一个新动作都会增加序列号,所以其他玩家将无法向法官提交旧版本的状态。如果他们这样做,另一位玩家将在等待期间回复最近的版本。同样,如果其他玩家拒绝返回更新状态的签名副本,法官也可以被要求裁决。但只要对方遵守规则,就不需要诉诸法官。当程序根据规则判定一方胜出时,结束游戏,将最新的状态提交到链上。因为验证和签署新举动的时间要比区块链确认交易所需的时间小得多,所以这个过程无明显延时。除非一个玩家行为异常,否则这些操作对其他区块链用户是透明的。

    游戏结束后,玩家可以签署一个更新,根据游戏的结局简单地分配投注,甚至不需要裁判的复杂逻辑,从而再次降低成本。事实上,通过进一步优化,使判定的逻辑和比赛规则本身也可以放入签名的状态中,各方之间进行交换。只需建立一个简单的合约,以存储通道参与方的资产,遵守由各方同意的规则。

    5. 状态通道展望

    • 我们希望看到明确设计的通用目的渠道不会减少,实际上在很多情况下会大大增加隐私。
    • 尽可能的把不必要上链的操作在状态通道中进行处理。
    • 状态通道可以很容易地融入到新的应用程序中,降低开发难度,使研发人员可以尽可能的参与进来。
    • 保证隐私,使得状态通道的运行看起来与其他常见的链上活动无异。
    • 在单个通道中对于并行操作的支持,并且这些操作不会相互干扰。
    • 状态通道做到组件化,用户在进行dapp开发时,无需再进行重复的工作,可以直接使用通用的状态通道。
    • 平滑升级状态通道,尽可能的不影响用户端。
    • 做到标准化,让用户可以轻松的链接其他通道。
  • 相关阅读:
    如何搜索 git 提交记录
    使用Mongo进行分页
    mongodb 数据自动备份
    linux 添加环境变量
    centos7安装bbr
    centos7安装node
    [shell]输出内容到剪切板
    centos 7 已经开启 22 端口但无法连接
    一些有趣的 js 包
    机房选择
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313641.html
Copyright © 2020-2023  润新知