上期《众说区块链》讨论的主题是“中美贸易谈判后双方共同声明对智能合约应用的影响”,围绕这个主题Sasha和大家一起分享了一些看法和见解。
本期《众说区块链》讨论的主题是“区块链中的侧链技术”,围绕这个主题,杨镇老师带领大家展开讨论,为各位有关侧链的问题进行了一一解答。
主题:区块链中的侧链技术
时间:6月30日(周六)晚9点-10点
主持人:佩瑶
特约嘉宾:杨镇
参考资料:https://www.jianshu.com/p/d049845a8ac9
讨论实录
@颜颜:大家好,本周六,HiBlock区块链社区特别栏目《众说区块链》准时和大家见面啦,我是主持人佩瑶,非常感谢大家对社区的支持。
《众说区块链》由HiBlock区块链社区发起,每周六晚9点,在社群内组织一个区块链相关主题的讨论,在讨论过程中加深社区成员对区块链的理解。
【众说区块链】栏目开展至今已经60天了,本着“输出即学习”的理念,此次众说以问答形式为主,本期特约嘉宾杨镇老师将针对大家提的问题进行详解,当然,如果您时间上有冲突,您可以提前把问题发给我,到时我会在群里以“@+您的微信名+问题”的方式提出来,您可以在群里直接看到反馈,或者关注我们的微信公众号,群里讨论的内容我们会以文字的形式输出发布。
本期《众说区块链》的主题是“区块链中的侧链技术”。
接下来欢迎本期特约嘉宾 杨镇老师,带领大家一起聊聊侧链技术~~~
@杨镇: 大家好,很高兴又来跟大家聊天了……作为开场,我想先问大家一个问题:如何评估区块链的“性能”?或者是大家认为比较成熟的公链,比如比特币和以太坊在技术上面临的最大的问题是什么?大家可以随意聊,我们这个活动的目的就是活跃气氛,增加沟通,互相学习
@胡建:确认交易慢
@杨镇:是的,还其他的吗
@James: 我个人觉得最大的问题是如何吸引更多的开发者,更多的开发者就会有更多的应用,更多的应用会吸引更多的用户意味着更多的资源会汇聚过来,然后就可以解决所谓的性能问题。
@杨镇:哈哈,我问的还是希望能从技术的角度聊聊,毕竟是个技术话题
@James:技术哈,工作量证明就是个最大的问题
@杨镇:这个其实我不敢苟同,这个问题比较复杂
@海阳之新:成本高
@杨镇:具体指什么?交易费么?
@海阳之新:是的
@杨镇:嗯嗯,其他朋友还没有没有别的看法?
@王刚:我觉得是节点的性能,一般的节点很难支撑有实际价值的应用落地
@普罗米修斯:觉得是最终通过共识后真正写上链的数据量吧
@王刚:是的,数据量大的应用都难以支撑
@龚涛:区块链最主要的作用就是记账,所以性能的评价我认为就是一笔交易从开始到最终确认所需要的时间
@海阳之新:区块数据越来越大,同步起来难
@Ray:Tps
@冉谨华:Tps是一个指标
@龚涛:在一个就是刚才普罗米修斯提到的,写上去的数据量,我理解的就是每笔交易可以写入的数据量
@杨镇:对的,这个专业,哈哈哈
@杨镇:我个人认为,对于目前基于区块链架构的公链平台的所谓“性能”的评估,应该考虑两个方面。
@杨镇:被讨论最多的就是所谓的 TPS(Transactions Per Second),这个维度衡量的是区块链在单位时间内所能处理的交易数量;我们近几年最常提到的所谓“扩容”指的就是这个维度。
@杨镇:如果把以太坊比做“世界计算机”,那么目前,它只能用单核(单线程)来进行计算(同一时间只能有一个矿工来记账,或者说只有一个矿工记的账会被接受);而所谓“扩容”可以想象为把这个“世界计算机”扩展为多核(多线程),使它在单位时间内可以同时运行多个任务(同时有多个矿工在记账,他们记的账都可以被接受),最终反映为 TPS 的提高。这也就是所谓的 Layer1 扩容。在以太坊里,指的就是现在已经合二为一的 Casper + Sharding
@杨镇:但是在实际应用中还有一个衡量性能的维度是不能忽视的,那就是“平均处理时间”。基于刚刚的比喻,在以太坊中,这个维度就相当于这台“世界计算机”的单核(单线程)处理能力。
@杨镇:大家对我说的第二个维度有什么认识么?或者有没有听说个这个提法?
@龚涛:平均处理时间是指记账到确认的平均处理时间?
@角落:出块速度
@海阳之新:Casper这个技术已经应用起来了么,在以太坊中
@杨镇:V神说明年上线
@海阳之新:嗯嗯,希望快一点,现在希望以太坊要盖过eos,eos很变态
@杨镇:哈哈哈,那我继续说了
@杨镇:我们假设某个基于以太坊智能合约的业务流程需要 5 个步骤(交易)才能完成,也就是说,我大概有个智能合约,这个合约会有 6 个状态:初始状态,状态1,...,状态4,最终状态。那么要完成整个流程,就至少需要 5 个区块时间(从初始状态变为状态 1,需要交易 1 来完成,以次类推,则至少需要 5 个交易才能把状态变为最终状态)。
@杨镇:很显然,在这个例子里,区块链性能的瓶颈就变成了“区块时间”。(这是因为智能合约本质上就是一个可定制的状态机,如果它有 6 个单向变化的状态,那么必须经过 5 次变化才能达到最终状态,所以 5 个交易是必须的。)而区块时间是由公链协议所规定的,比如在比特币里是 10 分钟,在以太坊里现在大概是 16 秒,这是无法简单缩减的;整个流程的 5 个区块时间是最乐观的估计,也就是性能上限。那么我们如何缩短这个流程的执行时间、降低“平均处理时间”呢?
@杨镇:这就是所谓的区块链 Layer2 扩展要解决的问题。而答案就是—— off-chain(这个词的译法大概还没有共识,我这里姑且译为“脱链”,也就是不在主链上处理的意思)。
@龚涛:只是按照出块速度,我觉得有局限
@海阳之新:有点支付通道的意思
@杨镇:嗯,这个具体的维度也许并不确切,我只是为了引出后边的介绍,哈哈,看看对这个例子大家有没有什么想法?
@角落:EOS 0.5秒出块
@杨镇:嗯,EOS这个咱先不讨论,我们以比特币或者以太坊为例,EOS的算法是不一样的,而且实际上也未必能达到他们吹的这个性能
@冉谨华:还请老师讲解如何缩短这个时间
@SoWhat:区块大小,参与共识的节点数量都有影响吧
@杨镇:其实这个例子的问题,就是区块链的所谓 Layer2 扩展要解决的问题。而答案就是—— off-chain(这个词的译法大概还没有共识,我这里姑且译为“脱链”,也就是不在主链上处理的意思)。EOS的事我们最后有时间再讨论哈
@王刚:其实比起记账,我更关心,作为革命性的技术,区块链想替代中心化的应用,它在性能上的问题。如果不解决这个问题,区块链的实际价值很难体现,最终只能用来炒币。比如我们要实现一个基于区块链的视频分享网站,如何让节点能够支撑相应服务?
@杨镇:这种 off-chain 解决方案的思路是:我们可以把计算、交易等业务处理拿到主链之外来执行,只在主链上反映最终的结果,中间过程不在主链做记录。
@杨镇:@王刚 区块链并不适合解决你说的这个问题,区块链并不是是个通吃业务场景的技术
@杨镇:这样,在上边例子里,我们要在主链上保存的状态就是初始状态和最终状态,中间过程的 4 个状态变动我们可以不关心,那对应的 4 个交易就可以拿到“链外”去执行;因为 off-chain 方案通常处理性能会非常高(后文中我会具体解释技术方案的原理),很有可能在主链的一个区块时间内就处理完这 4 个交易,并将结果发送回主链(即达到最终状态);于是从结果来看,整个处理过程只经过了一个区块时间(也就是最终状态的确认交易)就完成了。
@杨镇:很明显,如果采用这样的方案,越复杂的流程得到的性能提升越大;比如一些有高交互性能需求的应用——游戏。另外对于支付的场景,因为相对高昂的交易手续费,那些高频的小额交易从经济上讲也显然成本过高。所以无论是支付还是合约的应用场景中,都有对 Layer2 扩展的强烈需求。
@杨镇:大家对这些内容有没有什么问题?
@海阳之新:这个观点跟现在币乎的模式有点像
@杨镇:币乎的什么模式?
@海阳之新:中心化数据库+区块链数据库
@杨镇:哦哦,我这里说的还是公链的情况,不存在中心化数据库的问题
@海阳之新:一些频繁交易在中心化数据库操作,把最终结果同步到区块链上
@杨镇:嗯嗯,有些相似,这里边的区别我们最后会提到
@Sasha:闪电网络就是这么干的,计算、交易等业务处理拿到主链之外来执行,只在主链上反映最终的结果,中间过程不在主链做记录。
@角落:增加性能就是降低出块时间,增加tps,使用pos共识
@杨镇:是的,我下面就会介绍具体的方案
@冉谨华:侧链和跨链有什么区别呢
@杨镇:前边这些只是为了引出后边的内容,@冉谨华 跨链是单独的topic,今天我们不涉及,侧链,待会儿会说到
@杨镇:Off-chain 方案的总体思路是类似的:首先需要把主链上的部分“状态”拿到链外来,可以本地存储(基于某种客户端)或者临时存储;然后在链外做具体的操作,比如转账或者其他会影响“状态”的处理;当处理完成或者到达需要同步“状态”的时间点时,再把最终状态传回主链保存。
@杨镇:目前已经成体系的 off-chain 技术方案大概可以分为两大类:状态通道(State Channel):以比特币的 Lightning Network [1] 和以太坊的 Raiden Network [2] 为代表,侧链(Side-Chain):以以太坊的 Plasma [3] 协议为代表
@杨镇:有没有朋友了解状态通道?
@海阳之新:状态通道就是支付通道吧
@杨镇:是的,类似的概念,状态通道是一个临时的点对点(交易的两个参与者间)价值转移通道:在开启时,通常会在主链上分别锁定一定的余额,并设定一个有效时间,并可以由任意参与方主动关闭,也就是参与方之间会基于特定的技术协议进行数据交互、价值转移(数字资产转移);然后当可以接入网络、到达某个约定的时间点或者某方主动向主链同步数据时,会将最终结果提交到主链。
@杨镇:状态通道主要解决的是前边提到的高频、小额支付这样的场景中手续费过高的问题,但它的局限也很明显:
首先,它是一个临时的通路,数据并不是永久存储的,而是由参与双方自己本地保存;如果某个参与者使用的设备出现故障,损失基本上无法避免(虽然绝对的经济损失大概并不会太高)。
其次,一个状态通道仅能支持两个用户之间的价值转移;当系统中同时存在大量用户间的状态通道时,实际上就构成一个通道网络:网络中的两个用户有交易需求的时候,并不是简单地在他们两点间创建新的通道,而是通过特定的路由(routing)算法来查找是否有可用路径,而后再决定如何创建他们之间的数据通道;但这本身也增加了实现的难度和相应的技术风险。大家读一下,看看有没有什么问题
@张后富:为什么不在两个之间新建通道而要路由呢
@杨镇:主要是资源问题,状态通道一般可以理解为很轻的客户端,比如手机,如果你要在一个时间段里和很多人交易,那么全建立通道的话,资源消耗就很高,相当于浪费了贷款和数据连接,带宽
@张后富:明白了
@海阳之新:了解,之前看过这个概念
@杨镇:关于这里边提到的路由,我稍微解释一下
@杨镇:上图是一个状态通道网络示意图。我们可以看到,如果 A 要向 C 进行转账,可以通过 A -> B -> C 的路径完成的(通过 A -> B -> E -> D -> C 的路径也可以完成,但这通常会需要更多的网络传输,所以并不是首选);而如果 D 要向 F 转账,则可以通过 D -> E -> B -> A -> F 或 D -> C -> B -> A -> F 的路径完成。所以理论上说,如果某个节点与状态通道网络中的任意一个节点之间有通道,那么就不需要再创建新的通道,而可以通过路由算法找到对应的路径完成价值转移。
@杨镇:这里可以看到,并不是所有节点间都有相互的直接通道,当然,状态通道本身就是用来处理小额支付场景的,所以这些局限是可以接受的;即使出现不可恢复的故障,实际经济损失也不会过大。但这种技术本身显然限制了扩展的通用性和数据容量。所以,可以进行永久存储、可以容纳更多交易、可以拥有独立的地址空间的所谓“侧链(side-chain)”方案就应运而生了。
@海阳之新:嗯嗯
@杨镇:侧链可以认为是主链的分支,是可以独立记账、独立增长的子区块链,所以其中同样会有记账人(矿工)、有永久存储机制和共识算法(因为参与侧链记账的通常会是实现了侧链协议的多个节点)。
@海阳之新:请问这个要gas吗
@杨镇:这跟gas没关系,这是协议级的扩展,gas是智能合约执行的消耗
@海阳之新:但是还是要记账吧
@杨镇:侧链就是一个子区块链,你可以认为和主链差不多,其实就是一个独立的链,挂在了主链上
@海阳之新:可以理解成企业私链+公链吗,就是企业开一个私链,小数据就在私链上跑,最终结果同步到公链上去,这个私链也可以是联盟链,我瞎想的
@杨镇:不是这样的,今天聊的都是公链的技术,企业级区块链是另一个topic
@龚涛:感觉增加了交易复杂度,部署点对点的直接交易,不是点对点的直接交易
@杨镇:嗯,上边只是个示意图,实际的算法会有优化,如果路径过长,也可能直接创建通道
@张后富:这个相当于做了一个0确认的交易可以秒到账
@杨镇:是的,就是这个意思
@SaSha: 1.闪电网络中对如果某方设备出现故障,只要密钥没丢,损失是可以避免的。
@杨镇:嗯,前提是存储也没坏,我说的是可能性, 哈哈
@SaSha: 假如存储坏了,密钥自己写在纸上也可以避免损失吧?
@杨镇:据我所知不行,因为你的本地数据只有你和交易对方有,其他地方没有备份,用私钥是找不回来的, 不过客观讲我没有仔细研究过状态通道的客户端,智能说不确定了,哈哈, 那我继续说侧链了
@杨镇:下面我将基于以太坊的 Plasma 协议的思路来简单介绍侧链的实现方案。
对于侧链来讲,我们可以把它与主链的交互抽象为若干的“状态迁移(State Transition)”:在侧链产生时,需要把若干“状态”转移到侧链的“创世区块”中,作为侧链的“初始状态”;在侧链自己演进的过程中,需要定期把侧链的状态变动在主链进行记录,以便在发生争议或者有用户想“退出”侧链时可以恢复相应的状态。
@杨镇:从应用角度看,侧链要解决的主要技术问题就是用户如何“进入”侧链以及如何“退出”侧链。
由于侧链本身就是个区块链,所以侧链也可以拥有自己的地址空间;当主链用户“进入”侧链时就可以通过简单的“地址映射”,将主链用户的“状态”——比如账户余额或者持有的数字资产(ERC20 或者 ERC721 Token)——全部或者部分转移到侧链地址上。
@杨镇:复杂的,当然是“退出”机制。
当一个用户 A 想从侧链“退出”的时候,他应该要提出一个申请,将自己在侧链中的“状态”变动映射回主链。但因为用户在侧链中的状态变动必然是因为与其他用户进行了交互(交易)才会发生的,所以这也将会影响其他用户的“状态”。因而,这需要一个争议期,在这个期间内,如果侧链的其他用户对用户 A 的退出状态有异议,他们可以发起一个“争议(dispute)“,提交他们自己所留存的“状态”数据,并提交“技术证明”(或者请求侧链上的无利益冲突的第三方证明人提供“技术证明”,比如某个矿工或全节点提供的数据状态证明);主链上的所谓“仲裁合约”就可以根据“技术证明”来自动化地判断谁的状态变动才是“合法”的,从而进行最终在主链上的状态更改。
这块稍微有些难度,大家读一读看看有没有什么问题,大家没有什么问题哈?
@海阳之心 :仲裁完全由合约来执行么
@杨镇:仲裁过程就是自动的,整个是由合约完成的,否则就不是协议了,哈哈
@杨镇:这里边有很多技术点,时间关系没法展开了
@胡建:其他用户怎么判断有冲突?
@杨镇:其他用户看自己的状态就知道对方是不是作弊了,如果对方提交的结果和我这里看到的一致,那就不会有dispute了,这种仲裁机制就是要解决双方对最终状态有异议的情况
@杨镇:那我继续了哈,因为侧链本身是一个有永久性存储的子区块链,里边同样需要矿工来记账,所以与普通公链类似的经济激励机制、共识算法以及数据存储结构设计就都是必然要考虑的东西。在侧链中,通常为了达到更高的处理性能,会采用 PoS、DPoS 或者其他改进算法,而不会采用 PoW 算法。同时还会在侧链自己的经济模型中考虑对有欺诈行为的矿工的惩罚机制。
通常在侧链开启的时候,会要求侧链中的矿工质押一些资金,就好像casper合约里的那种质押以太币的方式,以便执行后续的惩罚机制
@杨镇:此外,因为侧链本身也是一个区块链,所以在侧链之上再创建侧链,理论上也是可行的。这就相当于提供了一种多层的、几乎无限的扩展方案。
看起来这是种“完美”的方案;但事实上并没有“完美”的方案,Plasma 中也还有很多需要解决的问题。但时间关系,就不细说了,最后一个问题,大家觉得侧链上可以做智能合约么?
@rico:应该可以
@杨镇:嗯嗯,是的,那侧链上实现智能合约的难点在哪里?
@rico:协议兼容
@Ray:Rootstock
@杨镇:概念上是这个意思,哈哈
@Ray:和btc合并挖矿的
@杨镇:这个项目我还真没看过,暂不评论,那我继续了
@杨镇:在 Plasma 中,为了简化“状态转换”的验证,侧链的数据模型使用了 UTXO 模型,而对账户余额变动的验证则很自然地采用了所谓的“Merklized Proof”。但这样的设计也对侧链上的智能合约执行框架提出了挑战。
我们知道,智能合约本质上是一个“状态机”,所以,必须有永久性的存储来保存其状态数据,也就是类似于以太坊中的“存储树(Storage Trie)”这样的设计。所以如果在侧链上运行智能合约,也就同样需要某种用来保存合约状态的机制。
以太坊当初选择账户模型而不是 UTXO 模型的主要原因就是实现状态机的难度问题;显然,基于账户模型的状态机更容易实现,范式也更清晰。所以如何在基于 UTXO 模型的侧链上实现智能合约运行环境就有了很多可以研究和讨论的东西。我们可以基于 UTXO 模型构建状态验证机制,问题是这个账户状态(余额)变动如果不是通过交易直接产生的,而是通过合约代码产生的,那么如何证明这个改动是“合法”的就成了侧链在与主链间进行状态转移时的验证机制的关键。
@杨镇:这里我只抛出问题哈,具体的解答还有待研究,目前也没有真正成熟的项目能做到,好了,以上就是对今天这个话题我想给大家分享的内容。看看大家还有没有什么问题?
@Ray:Omisgo不是做支付的吗?为什么没有用第一种,而是用了plasma
@杨镇:你说的这个项目我没有研究过,不好回答。但Plasma其实是个通用的 off-chain 方案
@Ray:Rootstock应该也算side chain的一个典型代表了
@杨镇:我会抽时间研究下,谢谢
@Ray:老师说的l2层方案,感觉有点像permissioned blockchain
@杨镇:我说的只是概念,具体的细节需要去看plasma的协议文档,很多项目的high-level思路都是类似的,RSK貌似是基于Bitcoin的扩展,我一直在研究以太坊的相关生态Bitcoin本身的脚本机制功能性还不太强
@Ray:Rsk是兼容evm的,号称是btc的安全加ethereum的合约
@杨镇:我看下白皮书
@杨镇:我为了今天的分享写了篇博客,已经发出来了,大家有兴趣也可以再看下。
https://www.jianshu.com/p/d049845a8ac9
RSK的白皮书里貌似没有提EVM的事,可能因为它的白皮书比较早了
@颜颜:非常感谢杨镇老师分享和各位的参加
众说一路走来,离不开大家的支持,大家对我们的活动有什么建议或者想分享一些干货给群里的各位,欢迎您私聊我,希望众说在我们共同的努力下办的越来越好,各位有所收益/笔芯/笔芯/笔芯
下周六晚9点,《众说区块链》不见不散~~~
(注:《众说区块链》是一个群讨论的栏目,每期围绕一个现象或技术进行讨论,不做投资建议。)
本文内容来源于:HiBlock区块链社区微信群讨论
【众说区块链】是HiBlock区块链社区组织的微信群讨论活动,每周六晚9点准时开始,围绕一个主题进行讨论,有兴趣的小伙伴加小助手:baobaotalk_com入群吧~
以下是我们的社区介绍,欢迎各种合作、交流、学习:)
image
网友评论