在第一期智能合约库有奖征码流动中,我基于共享经济场景开发了通用化性能合约模板,并奉献到区块链利用开发组件 WeBankBlockchain-SmartDev 中。
依据这次开发,我总结了一些集体心得,与社区开发者分享,心愿对行业从业者,以及刚刚接触区块链技术并迫切想要理解如何将区块链跟理论生产环境对接,设计一些场景化交互的小伙伴带来启发与借鉴。
本次分享我将从三个维度来进行:第一,共享经济场景跟区块链联合的需要解析;第二,重点介绍通用化智能合约的布局与设计;第三,通用化合约的要点演绎与总结。
共享经济场景与区块链联合的需要解析
共享经济场景随处可见。共享单车、共享充电宝、共享打印机,这些产品早已融入人们生存之中。从不同的利用场景中,咱们能够看出共享经济的共性:数据多方流转、身份鉴权、存证、溯源以及自主化操作。
这些场景也折射出共享经济目前所存在的痛点:
- 因为短少人为的监管把控,场景容易呈现业务上的破绽;
- 在一些商业化利用场景中可能会有数据伪造、身份造假的危险;
- 存在预先追溯成果差的弊病。
基于以上痛点,共享经济产品十分须要信赖背书,而区块链本身具备不可篡改、分布式记账的个性,刚好满足信赖背书的需要。
区块链也能够通过用户签名、设施自动化上链、区块链鉴权存证,从而达到存证的不可篡改、分布式存储、全流程可追溯的目标。
相比原来的产品,区块链技术作为一种技术加持,修补了许多破绽,增强数据安全。
以共享充电为例,假如我是厂商,与平台经营方、合作方组成单干的业务个人,独特做共享充电的商业化运作。通过引入区块链,实现多方合作过程中数据的透明化,乃至后续数据可追溯化。
用户端、物联网设施、业务平台这三大主体是常见的物联网跟人进行交互中的三角点。用户应用手机 APP 对共享充电的物联网设施进行扫码后,设施端与平台进行数据交互,设施端会失去以后扫码用户的相干信息,并进入后续的业务流程。
业务平台是高度集权的,在多方参加的过程中,平台方是有权对数据进行批改调整的,这就意味着业务数据存在篡改的危险。
咱们对数据的根底诉求是:业务数据从开始到完结的整个生命周期,都应该是不可篡改,保证数据的实在完整性是构建业态信赖的基石;所以咱们引入了区块链来实现诉求。
比方:用户扫码应用物联网设施,物联网设施不通过业务平台间接自动化打包数据构建交易进行上链,在区块链网络中针对上链操作的交易并非全盘接管,而是要对上链数据进行多方确权。
目前,区块链的一些技术瓶颈和定位,不适宜做简单计算和大量存储,比拟适宜账本类型的记账工作,记录后果摘要等数据。
随着将来应用场景减少,区块链延伸的性能也会越来越多样。但回归到实质,最后咱们想要联合区块链是出于增强信赖的志愿。
首先,像这一类型的需要通常随同各方用户参加、权限管控、身份鉴权等;
其次,业务数据的存证也是不可短少的环节;
最初,配套衍生性能,如积分产生、交易、核销以及各个场景额定的需要性能。
智能合约的布局与设计
在共享经济场景中,咱们对场景中的共性功能进行提炼,写出通用化合约。设计通用合约的目标好比开发开源框架,将共性功能提炼并实现,缩小开发工作量、进步复用率,以便咱们依据具体业务进行灵便拓展。
从不同维度对通用合约进行布局与设计。咱们能够先从业务体系角度做布局,将用户体系拆分成不同主体:
超级管理员是最后区块链部署时的用户。
受权管理者在业务中次要进行经营管控,如:对局部业务体系中的物联网设施进行受权、对积分核销、禁用用户等。
注册用户是通过业务平台注册认证通过的用户在区块链体系中的映射。
上图是最为外围的存证设计。我能够依据 5W 法令来参考,构思存证体系中的因素,将它们映射到咱们理论的区块链业务产品中。
比方:who 是业务主体;when 是工夫戳,第三方凭证机构所颁发的工夫凭证;what 是业务体系的数据摘要;where 是设施信息;why 为何能够上链,咱们须要身份鉴权。
在共享经济场景中,明确要求必须是物联网设施或者通过受权对象才能够上链交易操作。另外,在共享经济产品中有局部衍生化的性能,比方签名验证、沿用官网合约 + 业务革新、预留拓展性能以及工具类。
再从技术维度去考量,其中考量能够分为不同档次。
第一是规范化 。咱们通常不会把所有的业务代码都纳入到一个合约中,而是会做拆分,即分层设计,使得代码解耦和构造更清晰。
第二是业务性能 。从业务复杂度、性能和平安风控这三个角度来抉择对应的编程模式。如果业务不是特地简单,能够采纳单合约 + 库进行组合;如果业务复杂度比拟高,则能够拆成多个合约,每个合约在理论环境中进行部署,而后对合约进行管控。
这种简单模式的经营老本会比拟高,须要咱们把控好每个合约的管制权限。
第三是前瞻性的考量 。更多的是将来合约拓展。比方我写了 1.0 的版本,之后又写了 2.0 版本,这便是合约的迭代。
如果我想对业务代码进行革新,一开始部署并没有预留多余参数,那么就需从新批改代码,重新部署,两头可能存在原有数据与新数据不共容的问题。
在这种状况下,咱们有多种解决形式:
第一种是将业务逻辑和数据分层;
第二种是用原生合约的形式去批改合约地址,从而使得数据和新革新的合约进行无缝连接。同时,能够采纳 FISCO BCOS 自身提供的预编译合约 –table,解决数据的可持续性问题。
通过业务到技术的维度考量后,咱们能够对合约进行设计。首先,采纳分层仓储化的模式进行拆分;其次,应用原生合约,采纳单合约部署加多个合约类库的模型。目前,并没有将逻辑层和数据层拆分,因为在理论过程中能够预留给理论场景选择性地进行拆分。
在这一套合约的形成中,主合约次要有存证、身份鉴权、积分生成、流转等性能,辅助合约类库:包含了两个仓储合约库和三个工具合约库。
业务操作残缺流程如下:
流程一
当实现合约编写后,咱们会编译主合约并由区块链管理员将其部署到链上,受权多位管理者,再由这些管理者来受权对应的物联网设施。
流程二
在业务平台端,假如张三这个用户应用 APP 或者小程序在平台进行注册,完后业务平台端的实名认证,平台会生成对应区块链上的身份地址和公私钥给到张三。
流程三
张三首先应用 APP 对共享充电的机器设备进行扫码应用;
设施端在接管到扫码信息后与业务平台进行交互,从而失去用户信息。
用户进行充电服务,待服务实现后进行订单付款,此时 APP 会在用户付款时,提醒用户受权 APP 对本次订单进行受权签名。
用户订单签名能够是由手机蓝牙间接发送给物联网设施,也能够是用户 APP 跟业务平台交互后,再推送给物联网设施端。
设施端对数据进行有效性校验,通过校验后,设施端把对应的用户订单签名、以及本身产生的充电记录、订单信息一起打包构建交易发送到区块链。
区块链针对交易上发的操作者进行身份鉴权,业务数据中的用户也须要进行身份鉴权,保障其为平台注册认证的许可用户,最初进行其余业务相关性验证,无误后,进行数据存证。
在理论业务场景中,咱们还能够通过预言机等中间件将区块链信息无效地反馈到业务平台中。
通用化合约的要点演绎与总结
从业务体系来说,用户角色、权限管控、存证性能是根底,是必须要满足的。其次,通用合约的定制性能是依据理论需要和将来预留,个别会采纳模块化合约库的模式去做不同业务体系拆分,其余内容能够依据业务需要,在理论中去考量。
目前,面向宽广开源贡献者发展的智能合约库有奖征集代码流动仍在持续,心愿大家集思广益,为后续的开发者提供平安又牢靠的合约。
在开发过程中,应用开源软件可能缩小开发投入,将注意力聚焦在咱们更须要投入工夫钻研的内容上。
https://www.qq.com/video/q326…
《超话区块链》
《超话区块链》是由 FISCO BCOS 开源社区推出的直播流动,每周四晚 8 点,社区邀请一位技术极客或利用先锋,做客直播间分享开发实际或利用心得。作为社区固定栏目,《超话区块链》已举办近百场,从技术研究到产业利用均有触达,欢送大家自荐或举荐敌人到直播间分享。加【小助手】入群观看直播。