DoraSpeaker回顾篇|史上最全FISCOBCOS金融区块链开发干货分享

原创
1822 天前
21106


久违的DoraSpeaker活动又和大家见面了!

周三晚上7点,我们与报名前来参加的150余位开发者朋友,包括自发前来学习的,来自北京、西安、南京等地的往期hacker小伙伴们一起收听了火讯财经主编赵一丹对微众银行区块链高级架构师莫楠针对FISCO BCOS技术开发和应用案例的独家专访。

如果你错过了这次群分享,以下就是这次群分享的全部内容。如果关于这次分享你有更多的问题想要请教莫楠老师,欢迎留言或者和脑洞猫联系,我们将逐个为大家解答!



Q:目前区块链要商用落地,在技术方面还是存在重重阻碍和挑战,尤其是易用性、隐私性和可扩展性问题。FISCO BCOS在区块链底层技术和业务架构的整体设计思路是怎样的?在扫清阻挠技术商用的障碍上,做了哪些尝试?

A:支持“分布式商业”模式的新一代公众联盟链,对于区块链底层技术提出了新的要求,除了标准的区块链特性之外,还有几个方面仍需要重点加强:

首先,由于公众联盟链并不是单一链条,所以需要具备支持多链并行以及跨链通信的技术,同时需能够支撑来自互联网海量交易请求的能力。

其次,需要具备快速、低成本地组建联盟和建链的能力,便于各个需求方能够高效建立联盟链网络,让企业间建链合作变得像现在建立“聊天群”一样高效便捷。

最后,需要开源和开放,实现联盟成员之间的充分信任。公众联盟链不仅有利于降低企业快速试错的成本,有效提升商业上的容错性,也促进商业社会朝着可信化、透明化的方向深化发展,全面降低合作的操作风险、道德风险、信用风险、信息保护风险。

为此,FISCO BCOS 2.0在扩展性、易用性、隐私隔离等方面开辟了不少新思路,提出了“一体两翼多引擎”架构。

一体指群组架构。允许网络中存在多个不同的账本,每个账本是一个独立的小组,节点可以选择加入某些小组,参与到该组账本的共识和存储,随着小组数量的增加,系统的吞吐能力能够横向扩展。

在群组架构中,各群组独立执行共识流程,这样的设计考虑了性能、隐私性和扩展性。按群组的粒度划分,由群组内参与者决定如何进行共识,一个群组内的共识不受其他群组影响,群组内维护自己的交易事务和数据,使得各群组之间解除耦合,独立运作,也便于进行横向扩展。

并行计算模型,包括了一系列的并行化机制,包括交易的验签、执行、编解码、存储等等,重点是执行部分,我们引用了DAG技术,通过自定义交易冲突key,系统能够自动识别交易依赖关系,构建一个依赖拓扑DAG图,然后多线程基于交易的DAG拓扑关系最大化并行执行交易。通过这种方式,我们测试环境得到的数据是整个系统的吞吐量上了一个量级。

分布式存储解决了海量数据存储的问题。目前的区块链底层平台,大多都是采用level DB本机存储数据的模式,存储受限于单机容量限制,当业务量大了,数据膨胀之后,系统将面临致命问题。而分布式存储是将数据存储在远端数据层,实现数据和计算的分离,让数据管理交给“专业”的模块去做。可以说,并行处理模型让联盟链飞得更高,分布式存储让联盟链飞得更远。

“多引擎”是众多功能组件的融合,例如控制台,提供友好的交互式访问终端,通过控制台,可以实现区块链读写,查看数据,发送交易,非常适合刚入门的用户。预编译合约,支持采用C++编写合约,突破EVM的性能瓶颈,还有更多如平台组件、增强虚拟机、MPC套件等等。


Q:多链、分层架构被认为是当前联盟链的主流架构方案。前些日子,FISCO BCOS 2.0中提出了一个全新的思路——群组架构,群组架构相对多链、分层,设计上有什么区别,它的突破性体现在哪些地方?

A:单链架构是最“古典”的区块链架构,全部节点在同一个网络,全网广播,全网共识。这个架构最大的问题是无法扩展,无法支持海量的交易请求。无论单节点的性能如何提升,系统都存在“木桶效应”,计算能力、存储能力、网络能力都不具备良好的扩展性。


多链架构利用了传统分布式架构的思路去解决扩展性问题,可以较好地应付业务量增长的问题。但多链架构又暴露出易用性方面的问题,区块链部署和维护的复杂性是该架构的缺陷,企业间维护如此众多条链需要投入较大的运维成本。


分层架构将区块链典型的计算和存储分开,计算环节完成合约验证以及共识排序,存储环节进行区块链记账。这个架构提高了一些易用性,有望做到部署后较好地维护,但是这个架构也存在一些问题,比如计算环节的参与机构如何分配,怎样保证公平性以及保护隐私。另外,计算环节也会随着业务量上升成为瓶颈,也同样面临扩展性方面的压力。


群组架构是FISCO BCOS 2.0众多新特性中的主线,创造灵感来源于人人都熟悉的群聊模式——群的建立非常灵活,几个人就可以快速拉个主题群进行交流。同一个人可以参与到自己感兴趣的多个群里,并行地收发信息。现有的群也可以继续增加成员。

采用群组架构的网络中,根据业务场景的不同,可存在多个不同的账本,区块链节点可以根据业务关系选择群组加入,参与到对应账本的数据共享和共识过程中。

群组架构中的各群组独立执行共识流程,由群组内参与者决定如何进行共识,一个群组内的共识不受其他群组影响,各群组拥有独立的账本,维护自己的交易事务和数据,使得各群组之间解除耦合独立运作,可以达成更好的隐私隔离;

机构的区块链节点只需部署一次,通过群组设置即可参与到不同的多方协作业务中,或将一个业务按用户、时间等维度分到各群组,群组架构可快速地平行扩展,在扩大了业务规模同时,极大简化了运维复杂度,降低管理成本。


群组是一个轻量级的链,它有着独立的存储、共识和交易流程,多群组与多链的关系可视为类似多线程与多进程的关系。多群组相比多链,复用了网络和RPC模块,减少了部署和配置的开销,降低了资源消耗。

HyperLedger Fabric有类似群组的Channel概念,与Channel相比,群组最大的差异在于每个群组均有独立的共识流程。在Fabric中,一条链的多个Channel共用一个中心的Orderer,Orderer会接触到所有Channel的数据,这样会影响数据的隐私性;而群组架构中,每个群组均有独立的共识流程,群组间的交易、共识和数据是完全分离的,每个群组的地位对等,没有中心,在隐私保护上做得更好。


群组的架构设计


Q:5G大数据时代下,存储技术需迫切提高,FISCO BCOS在存储技术上有什么解决方案?

A:在FISCO BCOS 1.0中,节点采用MPT数据结构,通过LevelDB将数据存储于本地,这种模式受限于本地磁盘大小,当业务量增大时数据会急剧膨胀,要进行数据迁移也非常复杂,给数据存储带来较大的成本和维护难度。

FISCO BCOS 2.0新增了对分布式数据存储的支持,节点选择将数据存储在本地,或将数据存储到远端分布式系统中,克服了本地化数据存储的诸多限制。该方案有以下优点:

1. 支持多种存储引擎,选用高可用的分布式存储系统,可以支持数据简便快速地扩容;

2. 将计算和数据隔离,节点故障不会导致数据异常;

3. 数据在远端存储,数据可以在更安全的隔离区存储,这在很多场景中非常有意义;

4. 分布式存储不仅支持Key-Value形式,还支持SQL方式,使得业务开发更为简便;

5. 世界状态的存储从原来的MPT存储结构转为分布式存储,避免了世界状态急剧膨胀导致性能下降的问题;

6. 优化了数据存储的结构,更节约存储空间。

引入了分布式存储后,数据读写请求不经过MPT,直接访问存储,结合缓存机制,存储性能相比基于MPT的存储有大幅提升。

分布式存储实现了类SQL的抽象存储接口,支持多种后端数据库,包括KV数据库和关系型数据库。


分布式存储架构

Executuor层

包含EVM和Precompiled,用于执行智能合约,是分布式存储的主调方。

State层(State)

抽象了智能合约的存储访问接口,由EVM调用。

分布式存储层(AMDB)

抽象了分布式存储的类SQL数据读写接口,由State层和Precompiled调用。分布式存储层抽象了存储的增删改查接口,把区块链的核心数据分类存储到不同的表中。

驱动层(Storage)

实现具体的数据库访问逻辑,包括LevelDB和MySQL。

分布式存储支持后端的存储以分库分表的形式扩展,理论上容量是无限的。

分布式存储将区块链的数据分别保存在多个数据表内,它们分别是:


如果选择将分布式存储配置成使用MySQL,那么业务就无需经过区块链,可以直接从MySQL读取区块链数据,大大方便了业务的开发。

为了更直观地展现分布式存储,以下是分布式存储的几个主要接口,可供智能合约直接调用:

createTable //创建表

select(string, Condition) //查询数据

insert(string, Entry) //插入数据

update(string, Entry, Condition) //更新数据

remove(string, Condition) //删除数据

单链架构是最“古典”的区块链架构,全部节点在同一个网络,全网广播,全网共识。这个架构最大的问题是无法扩展,无法支持海量的交易请求。无论单节点的性能如何提升,系统都存在“木桶效应”,计算能力、存储能力、网络能力都不具备良好的扩展性。

以常见的增删改查为例,以下是几个例子:

查询数据

TableFactory tf = TableFactory(0x1001);

Table table = tf.openTable("t_test");

// 条件为空表示不筛选 也可以根据需要使用条件筛选

Condition condition = table.newCondition();

Entries entries = table.select(name, condition);


插入数据

TableFactory tf = TableFactory(0x1001);

Table table = tf.openTable("t_test");

Entry entry = table.newEntry();

entry.set("name", name);

entry.set("item_id", item_id);

entry.set("item_name", item_name);

int count = table.insert(name, entry);


更新数据

TableFactory tf = TableFactory(0x1001);

Table table = tf.openTable("t_test");

Entry entry = table.newEntry();

entry.set("item_name", item_name);

Condition condition = table.newCondition();

condition.EQ("name", name);

condition.EQ("item_id", item_id);

int count = table.update(name, entry, condition);


删除数据

TableFactory tf = TableFactory(0x1001);

Table table = tf.openTable("t_test");

Condition condition = table.newCondition();

condition.EQ("name", name);

condition.EQ("item_id", item_id);

int count = table.remove(name, condition);


使用分布式存储接口写入的数据,会参与区块链的共识,保存到区块链状态中,成为区块链不可篡改的一部分。

存储架构的优化是个基础工程,也是个大工程。实现的转变,其实是架构世界观的一种进化,影响会比看到的功能点更深远。刚才所讲述的,仅是分布式存储的冰山一角。更多原理和使用案例,请参考:https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/manual/smart_contract.html


Q:区块链技术在现阶段看来,依然是一项门槛稍高的技术。对于普通开发者,甚至是零基础小白来说,FISCO BCOS如何在保证技术优势的前提下,做到零门槛搭链?请您给新手开发者一些实操建议。

A:FISCO BCOS 2.0在易用性上做了很多努力,无论是搭建区块链,还是使用区块链。

在搭建区块链方面,FISCO BCOS 2.0提供了稳定的二进制静态程序和搭链脚本,可以做到“一键安装”,省去了很多编译以及手动安装依赖的工作。

在使用区块链方面,FISCO BCOS 2.0提供了命令行控制台工具,命令行控制台工具不仅可以管理区块链,还可以完成智能合约的部署和调用,实现一站式的管理、开发和调试。

FISCO-BCOS只需两步,就可以快速搭建区块链

1.使用build_chain.sh一键搭建区块链

2.使用console,开始体验区块链

如果有Linux环境的话,可以试着用下面的命令体验:

# 下载build_chain.sh脚本

curl -LO https://raw.githubusercontent.com/FISCO-BCOS/FISCO-BCOS/master/tools/build_chain.sh && chmod u+x build_chain.sh

#使用build_chain.sh,搭建4节点的区块链

./build_chain.sh -l “127.0.0.1:4” -p 30300,20200,8545

#启动所有区块链节点

cd nodes/127.0.0.1

./start_all.sh

配置及使用控制台

bash <(curl -s https://raw.githubusercontent.com/FISCO-BCOS/console/master/tools/download_console.sh)

cp nodes/127.0.0.1/sdk/* console/conf/

接下来执行执行控制台目录下的start.sh,就可以启动控制台了,控制台启动成功后,可以在屏幕上看到FISCO BCOS的字样,表示启动成功。

可以试着在控制台输入getNodeVersion、getPeers等命令,来查看区块链节点的状态,更多的使用方法,请参考https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/installation.html#fisco-bcos

FISCO BCOS有9万+字的使用文档,涵盖各种功能特性,访问https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/index.html

目前在我们线下的高校行活动中,曾经一个学生仅用约1分钟就完成一条链的搭建,以及借助控制台部署合约和查看数据。对于新版本的友好度我们还是很有信心的,欢迎大家体验,对比一下差异性。


Q:多链、分层架构被认为是当前联盟链的主流架构方案。前些日子,FISCO BCOS 2.0中提出了一个全新的思路——群组架构,群组架构相对多链、分层,设计上有什么区别,它的突破性体现在哪些地方?

A:FISCO BCOS有非常多落地的应用案例,这里简单介绍两个案例,区块链机构间对账和区块链仲裁。

2016年8月,微众银行联合合作行,基于BCOS早期版本推出了微粒贷机构间对账平台,这也是国内首个在生产环境中运行的银行业联盟链应用场景。


金融业务合作不同于一般合作,需要频繁地进行数据交换及对账等繁杂工作,因此“对账”是金融机构之间最普遍的需求之一,对账目的时效性和准确度要求尤为苛刻。传统的对账方式是“批量文件对账”:即机构之间会约定好某一个时间点对前一个交易日的所有数据进行汇总,按照约定格式输出成文件,并以某一种技术手段交付给其他机构进行对账。

在这种“批量文件对账”方式下,存在着一些痛点,如:

1. 合作行无法实时了解到引发账户变动的贷款借还交易明细信息

2. 合作行无法及时了解到账务是否不平

3. 合作行需要自己开发对账系统

4. 缺乏统一全面的信息视图

区块链技术是一种不可篡改的分布式账本技术,区块链技术最大的特征是“分布式账本”,即链上的各个参与机构共同拥有一个账本。区块链上所有的交易信息都会被记录,并且无法篡改,可确保数据的真实透明可追溯,非常适用于金融行业的交易数据同步和对账等场景。传统“批量文件对账”模式长久以来未能解决的问题,正是区块链技术的用武之地。

设计原则:

不影响现有业务,通过旁路上链的方式,将业务数据脱敏后发送到区块链上;

开发一个web系统,方便合作行查询区块链上的对账结果;

业务数据传输、存储均采用加密方式,确保数据安全性。


微众银行基于此特征,设计了区块链对账方案,利用区块链技术将交易信息旁路上链,解决微粒贷业务系统与合作行的对账问题,降低了合作行的人力和时间成本,提升了对账的时效性与准确度。

简单的说,就是各家银行,将自身的账务数据,脱敏上链,在链上进行数据的比对,这样可以在不暴露具体数据的前提下,完成数据的比对,并且利用了区块链去中心化、不可篡改的特性,提升了业务的准确度。

将对账业务上链只是区块链在金融行业实践的第一步,如果金融的业务逻辑可以直接发生在链上,各家银行使用区块链进行去中心化的共识,理论上就不再需要对账了。

具体而言,基于区块链技术实现的微粒贷机构间对账平台具有以下优势:

1. 使用简单 :通过内网访问web系统,输入管理员账号密码即可登录;

2. 数据实时触达:实时监测当日账户余额、当日放款总金额、当日还款总金额、当日其它划入款项总金额、当日其它划出款项总金额和当日流水数据;

3. 数据安全性高:数据的通信和存储都经过加密处理;

4. 数据可用性高:区块链节点之间相互同步数据,提升数据的可用性;

5. 合作行可控性强:合作行可以自由选择自己的节点数为1到多个,节点可以选择部署在合作行内或公有云上,不同合作行之间的数据是物理隔离,保护隐私。

第二个案例,2017年10月,微众银行联合广州仲裁委(即下文“仲裁机构”)、杭州亦笔科技(即下文“存证机构”)三方基于区块链技术搭建了“仲裁链”。“仲裁链”基于区块链多中心化、防篡改、可信任特征,利用分布式数据存储、加密算法等技术对交易数据共识签名后上链,实时保全的数据通过智能合约形成证据链,满足证据真实性、合法性、关联性的要求,实现证据及审判的标准化。


2018年2月,广州仲裁委基于“仲裁链”出具了业内首个裁决书。截止目前,“仲裁链”已经稳定运行1年。


Q:FISCO BCOS作为国内区块链底层平台的领头羊,开源社区伙伴众多,成绩喜人,您和您的团队是如何建设开源社区的?各角色伙伴如何真正参与进来,比如B端机构,C端开发者。

A:FISCO-BCOS 开源社区是目前国内较为活跃的区块链开源社区之一,技术项目涵盖底层平台、客户端、管理台、浏览器、密钥安全、国密支持、隐私保护、业务案例等完备的软件架构体系,是经过广泛应用验证、稳定可用、 且完全开源、免费使用的社区。目前社区活跃着数千名开发者和关注者,来自全国甚至全世界的几百家企业,社区上也陆续涌现出现许多不错的应用案例。

在金链盟开源工作组的协调下,活跃在社区的贡献者群体内,不但有开源项目的核心开发者,还有个人开发者、各行业的研发及业务团队、大学和研究所等科研机构,共同面向社区提供形式多样的支持,包括在线社群、线下活动、教学培训、项目技术支持、开发者大赛以及产业孵化等,社区目前的活跃度相当高,软件版本迭代速度也很快。

作为开源工作组的成员,微众银行的技术团队深度投入到社区建设中,我个人也是社群里的活跃“客服”之一,和团队成员一起每天与开发者进行频繁的交流,解决各种问题和探讨优化方案。

相关的技术内容和经验目前已经整理成多达 9 万字的文档,并已经发布在 GitHub(http://www.github.com/fisco-bcos)和 readdocs(https://fisco-bcos-documentation.readthedocs.io/)上。

今年全年举行FISCO BCOS 巡回 Meetup,基本每周一期。为分布在全国各地的FISCO BCOS社区成员提供一个面对面交流的空间。作为开源开放的社区,欢迎全国各地的朋友参加,最近一期的Meetup在清华举行 。

目前我们开源社区有“体验官”系列计划和代码贡献者工作流程(https://github.com/FISCO-BCOS/FISCO-BCOS/blob/master/docs/CONTRIBUTING_CN.md),欢迎各方参与,共建社区。社区联系方式的动态参见(https://fisco-bcos-documentation.readthedocs.io/zh_CN/release-2.0/docs/community.html)。

本次体验官活动奖品非常给力,前100报名每人都有奖,提交报告还能参与最终5000元等大奖。


Hacker提问

Q:请教老师,对无币区块链的看法是什么?

A:这是个很好的问题,在金融行业采用区块链技术是为了服务实体经济,提升业务规模,运营效率,降低成本和风险,而且要合法合规,金融业的多方协作可以通过业务运营达成共赢,并不依赖原生币的发行和炒卖,大家都看到基于币的运作有一些不规范的行为。所以联盟链可以使得开发者更专注于底层技术、基础设施的建设以及创新业务的开展。

“无币区块链”是监管的智慧,是目前给创业者的忠告。这样让技术变得更纯粹,更有利于技术的发展。远离发币,实际上是在当前金融调控的大背景下,对创业者的保护。

创业者不要僵化地因为风险而放弃尝试的机会,严格遵守各国的法律并不代表要以一国的法律推进全球。在中国监管的指导下,专注于底层技术、基础设施的建设。而在某些对虚拟货币持开放态度的国家,创业者也可以在这些国家做尝试。但是在中国,现阶段一定要谨慎。


Q:做公众联盟链遇到的问题和挑战,哪些问题是必须解决的?

A:公众联盟链为分布式商业而生,新型的“分布式商业”模式,按微众银行整理给出的定义,是一种由多个具有对等地位的商业利益共同体所建立的新型生产关系,是通过预设的透明规则进行组织管理、职能分工、价值交换、共同提供商品与服务并分享收益的新型经济活动行为。在主要表现特征上,分布式商业显现出多方参与、共享资源、智能协同、价值整合、模式透明、跨越国界等特点。一个成熟的分布式商业场景具备生产资料由多方持有、产品和服务能力由多方共同构建、商业过程中的相互关系对等,产品和利益分配规则透明等要求。

分布式商业与此前流行的连锁加盟型商业模式及共享商业模式的最大不同之处在于,起到中间链接桥梁作用的不是人或产品、不是信息平台、而只是客观的技术本身。诚然,如果技术不开源,确实也可能演变成新的垄断。因此,发展分布式商业必须始终保持技术开源的态度,各个参与方通过开源社区进行分工合作,就将不再存在话语权集中和垄断的可能性,弱肉强食的“丛林法则”在此就不复存在。这有助于中小微企业真正成为商业价值链的主角,从而激发经济增长动力、广泛提升就业、鼓励创业和创新,实现“反垄断”的人类商业终极理想。

公众联盟链,对于区块链底层技术提出了新的要求,除了标准的区块链特性之外,还有几个方面仍需要重点加强:首先,由于公众联盟链并不是单一链条,所以需要具备支持多链并行以及跨链通信的技术,同时需能够支撑来自互联网海量交易请求的能力。其次,需要具备快速、低成本地组建联盟和建链的能力,便于各个需求方能够高效建立联盟链网络,让企业间建链合作变得像现在建立“聊天群”一样高效便捷。最后,需要开源和开放,实现联盟成员之间的充分信任。公众联盟链不仅有利于降低企业快速试错的成本,有效提升商业上的容错性,也促进商业社会朝着可信化、透明化的方向深化发展,全面降低合作的操作风险、道德风险、信用风险、信息保护风险等。


Q:联盟链涉及到的利益体比较多,没有token怎样权衡利益,维护费谁来买单,怎样实现激励?

A:联盟链上的多方参与是一种协作关系,大家首先对业务模型已经有了一定的共识,并通过智能合约来制定公开、透明、高效率的运作规则,大家基于这些规则来进行交易,可以减少互相之间的磨擦,消除信息不对称,更容易取得业务的成功,在追求业务成功的目标前提下,大家会有很强的意愿共同维护网络,共享数据,其实联盟链的维护成本不太高,不需要执行“挖矿”这种高消耗的共识。

联盟链上的参与者,无论是金融业还是其它行业,只要能建立一个高效、安全和去中心的信息交互方式,其产生的效益远大于虚无缥缈的“token”。

以供应链区块链为例,供应链区块链上透明、真实的信息可以解决银行遇到的信息不透明,真实情况难以考据的问题,极大地帮助银行做出正确的贷款决策,银行缺的不是钱和“token”,真实可靠的信息对他们决策的帮助更为重要。


Q:请教老师,数据个隔离存储后,节点如何请求并验证数据的正确性?

A:如果指的是群组的隔离,每个群组都有独立的共识流程,群组内的节点间验证数据的正确性。

如果指的是分布式存储的隔离,分布式存储的数据一样会被节点和智能合约读取,参与链上的共识,验证正确性。


Q:目前DAG模式的区块链系统被提及的越来越多,您如何评价DAG模式安全性和稳定性,FISCO BCOS又是如何应对的呢?

A:dag这个概念相当广泛,可以指代很多概念,FISCO BCOS的dag和其它公链的dag不是同一个概念,FISCO BCOS的dag用于并行执行交易,本质上还是基于区块和交易架构的,而不是公链中dag所指的移除了块结构,由交易组成的dag,因此在安全性和稳定性方面,仍是区块链的标准。



关于DoraHacks

DoraHacks成立于2014年,是全球大的极客组织之一,也是全球最活跃的Hackathon组织者。成立5年来,DoraHacks联合600多家合作伙伴在8个国家,15个城市举办了百余场黑客马拉松,累积产出3000余项目,辐射30万名开发者。DoraHacks致力于连接全球极客,解决重要而迫切的问题,创造未来行业问题的最新解决方式。