织梦CMS - 轻松建站从此开始!

火币新闻_火币资讯_火币新闻资讯_火币区块链_火币_专注于区块链新闻资讯

当前位置: 主页 > 火币 >

区块链中的“链上”和“链下”_区块链_

时间:2020-07-31 05:00来源:未知 作者:admin 点击:
广告位API接口通信错误,查看德得广告获取帮助

原标题:一文读懂“链上”和“链下”

什么是“上链”?什么数据和逻辑应该“上链”?文件能不能上链?链上能不能批量查数据?“链下”又是什么?

“链上”、“链下”诸多问题一文说清。

区块“链”的链包含“数据链”和“节点链”。数据链指用链式结构组织区块数据构成数据校验和追溯的链条;“节点链”指多个节点通过网络连接在一起互相共享信息其中的共识节点则联合执行共识算法产生并确认区块。

交易“上链”的简要过程如下:

1、记账者们收录交易按链式数据结构打包成“区块”。

2、共识算法驱动大家验证新区块里的交易确保计算出一致的结果。

3、数据被广播到所有节点稳妥存储下来每个节点都会存储一个完整的数据副本。

交易一旦“上链”则意味着得到完整执行达成了“分布式事务性”。简单地说就像一段话经过集体核准后在公告板上公示于众一字不错不少永久可见且无法涂改。

“上链”意味着“共识”和“存储”两者缺一不可。交易不经过共识则不能保证一致性和正确性无法被链上所有参与者接受;共识后的数据不被多方存储意味着数据有可能丢失或被单方篡改更谈不上冗余可用。

除此之外如果仅仅是调用接口查询一下没有改变任何链上数据也不需要进行共识确认则不算“上链”。

或者某个业务服务本身和区块链并不直接相关或其业务流程无需参与共识所生成的数据也不写入节点存储那么这个业务服务称为“链下服务”无论它是否和区块链节点共同部署在一台服务器甚至和节点进程编译在一起。

当这个业务服务调用区块链的接口发送交易且交易完成“共识”和“存储”后才称为“上链”;如果这个交易没有按预期被打包处理那么可以叫“上链失败”。

事实上几乎所有的区块链系统尤其是和实体经济、现实世界结合的区块链应用都需要链上链下协同用“混合架构“来实现系统本身就包含丰富的技术生态。

*注1:交易(transaction)是区块链里的通用术语泛指发往区块链会改动链上数据和状态的一段指令和数据

*注2:本节描述的是简要的模型在多层链、分片模型里流程会更加复杂事务划分更细但“共识”和“存储”才叫上链的基本原则不变

目前区块链底层平台逐步趋于成熟性能和成本已经不是什么大问题只是以下几个开销是因“分布式多方协作”而先天存在的:

共识开销:主流共识算法里PoW(工作量证明也就是挖矿)消耗电力;PoS(权益证明)要抵押资产获得记账权;PBFT(联盟链常用的拜占庭容错算法)记账者要完成多次往返投票流程步骤繁杂。

计算开销:除了加解密、协议解析等计算之外在支持智能合约的区块链上为了验证合约的执行结果所有节点都会无差别地执行合约代码牵一发而动全身。

网络开销:与节点数呈指数级比例节点越多网络传播次数越多带宽和流量开销越大如果数据包过大就更雪上加霜。

存储开销:和节点数成正比所有的链上数据都会写入所有节点的硬盘在一个有100个节点的链上就变成了100份副本如果有1000个节点那就是1000份。

也许有人会说:“这就是‘信任’的成本值得的!”我同意。只是理想无法脱离现实毕竟硬件资源总是有限的。

想象一下okex如果每个交易都是一个复杂科学计算任务那么每个节点CPU和内存会跑满;如果每个交易都包含一个大大的图片或视频那么全网的带宽以及各节点存储很快被塞爆;如果大家都敞开来滥用“链上”资源“公地悲剧”就不可避免。

调用API发个交易是很容易的而链上的开销就像房间里的大象难以视而不见。作为开发者需要正视“交易之轻和链上之重”积极“上链”的同时减少不必要的开销找到平衡之道。

*注1:常规联盟链节点参考配置:8核/16G内存/10m外网带宽/4T硬盘不考虑“矿机”和其他特种配置。土豪随意俗话说“钱能解决的问题都不是问题问题是...”

*注2:本节暂未讨论“局部/分片共识”也不探讨“平行扩容”的情况默认假定全网参与共识和存储

开销只是成本问题而本质上应该让区块链干自己最该干的事情。链上聚焦多方协作okex尽快达成共识营造或传递信任将好钢用到刀刃上;那些非全局性的、无需多方共识的、数据量大的、计算繁杂的...通通放到链下实现一个好汉三个帮。

如何进行切割?在业务层面识别多方协作事务和数据共享中“最大公约数”抓住要点痛点四两拨千斤;在技术上合理设计多层架构扬长避短、因地制宜地运用多种技术避免拿着锤子看什么都是钉子、一招打天下的思维。

为避免过于抽象下面给出几个例子。

*注:每个例子其实都有大量的细节考虑篇幅这里做概要介绍聚焦链上链下的区别和有机结合

这是个非常高频的问题经常被问到。这里的文件一般指图像、视频、PDF等也可以泛指大体量的数据集上链可信分享的目的是使接受者可以验证文件的完整性、正确性。

常见的场景里文件共享一般是局部的、点对点的而不是广播给所有人让区块链无差别地保存海量数据会不堪重负。所以合理的做法是计算文件的数字指纹(MD5或HASH)并与其他一些可选信息一起上链如作者、持有人签名、访问地址等单个上链信息并不多。

文件本身则保存在私有的文件服务器、云文件存储、或者IPFS系统里这些专业方案更适合维护海量文件和大尺寸文件容量更高、成本更低。注意free bitcoin如果文件的安全级别到了“一个字节都不能泄露给无关人等”的程度那么应慎用IPFS这种分布式存储的方案优选私有存储方式。

需要分享文件给指定的朋友时可以走专用传输通道点对点的发送文件或者授权朋友到指定的URL下载可以和区块链的P2P网络隔离不占用区块链带宽。朋友获得文件后计算文件的MD5、HASH和链上对应的信息进行比对验证数字签名确保收到了正确且完整的文件。

这种方案文件在链上“确权”、“锚定”和“寻址”明文在链下传输并与链上互验无论是成本、效率、还是隐私安全都取得了平衡。

对区块链上的数据进行分析是自然的需求比如“某个账户参与哪些业务流程、完成了多少笔交易、成功率如何”“某个记账节点在一段时间内参与了多少次区块记账、是否及时、有否作弊”这些逻辑会牵涉到时间范围、区块高度、交易收发双方、合约地址、事件日志、状态数据等维度。

目前区块链底层平台一般是采用“Key-Value”的存储结构其优势是读写效率极高但难以支持复杂查询。

其次复杂查询逻辑一般是在区块生成后进行时效性略低且并不需要进行多方共识有一定的“离线”性。

最后数据一旦“上链”就不会改变且只增不减数据本身有明显特征(如区块高度、互相关联的HASH值、数字签名等)可以检验数据的完整性和正确性在链上还是链下处理并无区别任何拥有完整数据的节点都能支持独立的复杂查询。

于是我们可以将数据完整地从链上导出包括从创世块开始到最新的所有区块、所有交易流水和回执、所有交易产生的事件、状态数据等通通写入链外的关系型数据库(如MySQL)或大数据平台构建链上数据的“镜像”然后可以采用这些引擎强大的索引模型、关联分析、建模训练、并行任务能力灵活全面地对数据进行查询分析。

区块链浏览器、运营管理平台、监控平台、监管审计等系统都会采用这种策略链上出块链下及时ETL入库进行本地化地分析处理后如需要和链上进行交互再通过接口发送交易上链即可。

和复杂查询略有不同复杂逻辑指交易流程中关系复杂、流程繁杂的部分。

如上所述链上的智能合约会在所有节点上运行如果智能合约写得过于复杂或者包含其实不需要全网共识的多余逻辑全网就会承担不必要的开销。极端的例子是合约里写了个超级大的数据遍历逻辑(甚至是死循环)那么全网所有节点都会陷入这个遍历中吭哧吭哧跑半天甚至被拖死。

除了用类似GAS机制来控制逻辑的长度外在允许的GAS范围内我们推荐智能合约的设计尽量精简单个合约接口里包含的代码在百行以上就算是比较复杂的了可以考虑是否将一部分拆解出去。

拆解的边界因不同业务而异颇为考验对业务的熟悉程度。开发者要对业务进行庖丁解牛式地分层分模块解耦仅将业务流程中牵涉多方协作、需要共识、共享和公示的部分放到链上buy litecoin使得合约只包含“必须”“铁定”要在链上运行的逻辑合约逻辑“小而美”。

一般来说多方见证的线上协同、公共账本管理、一定要分享给全体的关键数据(或数据的HASH)都是可以放到链上的但相关的一些前置或后续的检验、核算、对账等逻辑可以适当拆解到链下。

一些和密集计算有关的逻辑宜尽量将其在链下实现如复杂的加解密算法可以设计成链下生成证明链上快速验证的逻辑;如果业务流程中牵涉对各种数据的遍历、排序和统计则在链下建立索引链上仅进行Key-Value的精准读写。

其实现在但凡看到合约里有用到mapping或array我都会强迫症地想想能不能把这部分放链下服务去个人比较欣赏“胖链下”和“瘦链上”的设计取向。

强调一下精简链上合约逻辑并不全是因为合约引擎的效率问题合约引擎已经越来越快了。核心原因还是在发挥区块链最大功效的同时避免“公地悲剧”。开发者拿出计算和存储成本最小的合约有着“如无必要勿增实体”的奥卡姆剃刀式美感更是对链上所有参与者表达尊重和负责任的态度。

受队列调度、共识算法、网络广播等因素约束“上链”的过程多少都会有一点延时。采用工作量证明共识的链时延在十几秒到10分钟采用DPOS、PBFT的共识时延可缩短到秒级此外如果遇到网络波动、交易拥挤等特殊情况时延表现会有抖动。

总的来说对照毫秒或百毫秒级响应的瞬时交互“上链”会显得些许“迟钝”。比如去超市买瓶水支付后肯定不能站在那里等十几秒到十分钟链出块确认后才走吧(略尴尬)。

对类似场景宜结合链上预存和链外支付在链下的点对点通道实现高频、快速、低延时的交易链下确保收妥和响应最后将双方的账户余额、交易凭据汇总到链上在链上完成妥善记账。着名的“闪电网络”就类似这种模式。

另外有些商业场景会先进行多轮的订单撮合、竞价拍卖或讨价还价。一般来说这些操作是发生在局部的交易对手方之间未必需要全网共识所以也可以通过链下通道完成最后将双方的订单(包含双方磋商结果、数字签名等信息)发送到链上完成交易事务即可。

举个下快棋的例子棋手的每一步棋并不需要实时上链双方只管啪啪地下裁判和观众只管围观在棋局结束时比如总共下了一百手那么将这一百手的记录汇总起来连同输赢结果上链以便记录战绩分配奖金。如果要复盘棋局详情(如视频)可以参考上文提及的链下文件存储模式用专用的服务器或分布式存储实现。

针对类似需求在FISCO BCOS底层平台中提供了AMOP(链上信使协议)利用已经搭建起来的区块链网络在全网范围实现点对点、实时、安全的通信。基于AMOP可以支持即时消息、快速协商、事件通知、交换秘密、构建私有交易等推荐。

*注:【AMOP】详情可参考:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/manual/amop_protocol.html

先看一个典型问题:“智能合约运行中要使用链外信息怎么办?”

比如链上有个世界杯决赛竞猜游戏但世界杯不可能在链上踢吧;或者需要参考今天的天气天气显然不是链上原生信息应该从气象局获取;在跨境业务中可能用到法定汇率而汇率一定是来自权威机构的不能在链上凭空生成。

这时候就要用到“预言机(Oracle)”由一个或多个链下可信机构将球赛、天气、汇率等信息写到链上的公共合约其他合约统一使用这份经过共识确认的可信信息不会出现歧义。考虑到安全和效率预言机(Oracle)会有多种具体做法实现起来相当有趣。

更进一步的灵魂拷问是:“如何保证上链的数据是真实的?”坦率地说区块链并不能从根本上保证链下数据的可信性只能保证信息一旦上链就是全网一致且难以篡改的。而区块链跟实体经济结合时势必要面对“如何可信上链”这个问题。

如资产相关应用除了进行人员管理之外还要“四流合一”即“信息流、商流、物流、资金流”互相匹配和交叉印证会使业务流程更加可信。这些“流”常常发生在链下现实世界要把控它们可能会用到物联网(传感器、摄像头等)、人工智能(模式识别、联邦学**数据分析、可信机构背书等多种技术和方式这已经远远超出了区块链的范围。

所以本节的命题其实是:区块链如何和数字世界里的技术广泛结合更好地发挥自身多方协作、营造信任的作用。

随着数字世界的发展、尤其“新基建”的强力推动我们相信广泛的数字化能在保护隐私的前提下降低信息采集和校验的成本采集的数据会越来越丰富。

如在使用、转移、回收实体物资时及时采集监测甚至是多方、多路、多维度立体化的采集监控并上链进行共识、公示、锚定链上链下交叉验证这样就可以逐渐逼近“物理世界可信上链”的效果逻辑会更严密更具有公信力数据和价值流通会更可靠协作的摩擦更低。

“治理”即制定行业联盟和业务运作规则确保规则的执行处理异常事件奖励和惩戒参与者等。

以理想化的标准似乎应该实现链上治理通过代码决策、制定和执行规则出错时系统具有“自修复”的“超能力"。实际上完备的链上治理过于复杂实现起来很有挑战性尤其在需要达成现实世界法律法规的执行力时纯链上的治理往往力不从心。

再多想一步:如完全依赖代码万一代码本身有BUG、或者要“改需求”呢?链下的决策者、开发者如何发现和介入?

所以“Code is Law”还是个理想化的目标链下治理不可或缺。

联盟链参与者们组成管理委员会在现实世界里进行民主集中制的讨论和决策共同制定规则采用多签、工作流的方式一起发起治理动作调用区块链接口上链。

在链上包括区块链底层平台和智能合约在内都会内置一系列的决策和控制点如支持多方投票决策具备从业务层穿透到底层的准入和权限控制能力可修改业务和节点的参数能应对异常情况的重置账户对错账进行冲正调账等等。

治理动作和结果经过共识确认在链上全网生效公开透明接受广泛监督彰显其合理性和公正性。必要时还可以引入监管方和司法仲裁。

反过来联盟链上的数据具备身份可知、难以篡改、无法否认且可全程追溯等特点可为链下治理决策提供完备的数据基础也便于为链下实际执行提供可信的凭据。所以链上和链下有机结合有助于设计完备、可控、可持续的治理机制。

或许有人会说:“这链上链下什么的太复杂了我就想用区块链!”

我认为这个说法很对。说到底用户就想要一条趁手的“链”。作为开发者我们要打造灵活的、插件化的系统架构实现各种能力什么数据导出、文件存储和传输、密集计算、数据采集和异步上链、治理监管、一键部署......按需取舍后打包起来开箱即用实际上提供了“基于区块链的一系列能力”。

最终呈现的“链”除了节点之外还有区块链浏览器、管理台、监控和审计系统、业务模板、APP/小程序等一系列交互入口用户只需动动鼠标点点页面调调接口一站式体验到一个完整的区块链应用。用户会觉得:“这就是区块链”无需再分“链上”和“链下”浑然一体。

说到这里推荐一个我认为非常棒的设计:分布式身份标识(DID)。

DID是一套涵盖了分布式身份管理、可信数据交换的规范。权威机构为用户完成KYC颁发凭据。用户将身份标识的摘要公布到链上而将自己隐私数据存在链下(这一点非常重要)。

使用时用户采用“明确授权”和“选择性披露”的策略仅需出示少量的信息或加密证明与链上数据进行对照校验即可证明用户凭据和数据可信性达成了“数据多跑路用户少跑腿”、保护了用户隐私的可喜效果。

这种设计很好地将链上链下结合起来逻辑闭环自洽并不因为数据存在链下就削弱了链上的功效反而使得链的授信模型更为重要。

DID规范定义了语义清晰、层次分明的数据结构以及通用的交互协议。开源项目WeIdentity完整地实现了DID协议并提供丰富的周边支撑工具和服务值得参考。

*注:【WeIdentity】详情可见:https://fintech.webank.com/weidentity

链漫漫其修远兮吾将“上下”而求索。在未来“可信的”区块链将越来越多地和人们日常生活、实体经济联动步入寻常百姓家。作为从业者保持开放的心态积极而创新地将区块链与更多技术结合无论运作于链上还是链下只要能解决问题、创造价值就是一条好链。

文章材料摘自币世界如有侵权联系删除

如何购买比特币 (责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
广告位API接口通信错误,查看德得广告获取帮助