分享

钟馥百:区块链技术在企业的落地与实践|线上分享

 long16 2016-08-25

钟馥百:区块链技术在企业的落地与实践|线上分享小欧有话说:

为了加深EGO会员之间的相互了解,同时也为更多的技术人提供相互学习交流的机会,EGO开展了每周四21:00的线上分享活动。本文根据第23期嘉宾——钟馥百8月18日线上分享内容整理而成。作为新晋会员,看看他关于区块链及应用实践的经验分享吧。

钟馥百:区块链技术在企业的落地与实践|线上分享

钟馥百

同心互助联合创始人兼CTO、EGO会员

同心互助(https://www.)联合创始人兼CTO,海豚浏览器前高级研发总监,曾任趋势科技高级开发工程师,毕业于华中科技大学。区块链技术专家,对高并发服务器架构有丰富的经验。

大家好,我是钟馥百,同心互助联合创始人兼CTO。同心互助是国内首家区块链互助的落地应用。今天由我来给大家分享一些关于区块链及应用实践的经验。

区块链BlockChain,是比特币的核心技术。区块链包含两个重要的技术要点:

  • 1. 分布式帐本

  • 2. 共识算法

1. 分布式帐本

帐本的模型比较简单,其基础模块是Block(区块),Block按顺序挨个相链,组成一个长长的链表;Block中包含其创建信息(创建者-挖矿人)、产生时间、Hash(用于引用和验证),以及Transaction数组(交易数据)。

Transaction中存储的就是“帐本信息”,理论上可以是任意的数据,可以是对CryptoCurrency(加密数字货币)的操作、也可以是单纯的状态信息。

分布式帐本的另一个特点是:Block、Transaction这样的有序链表,是存储在整个区块链网络的每个节点中(当然,基于实际商业的需求,可以让一部分敏感数据不存储在非授权节点中)。只要节点连入区块链网络,它就会自动用P2P的机制下载缺失的Block、Transaction数据,并且验证其数据的正确性(基于Hash、智能合约的执行结果对比),保证每个节点数据的统一性、一致性。

所以,基于这样的结构设计,使得区块链拥有如下的重要特征:

公开、透明: 链上的数据都是公开的,(理论上)每个节点都可以获取并验证;

不可篡改:链是有序的、有时间戳的;同时,攻击者需要控制至少超过50%的节点,才能篡改其中的数据。只要节点足够多,攻击者的成本就越高,其不可篡改的特性就越强;

2. 共识机制

共识机制是另一个关键点。共识机制的核心是在分布式网络中,利用一种规则(算法)来保证全网对于Block的创建是一致的。

比如在比特币中,采用的是POW(Powerof Work)工作量证明,各个节点用本地资源,计算满足同一条件的Hash值,谁先计算出来,这个Block就是谁的。这个Hash值的计算,对每个节点都是一样的、公平的。

另一种现在流行在使用的就是POS(Powerof Stake),采用类似股权证明+投票的机制,选出记帐人,由它来创建Block。

所以从技术角度来看,共识算法实质上解决的是 “拜占庭将军问题 https://zh./zh/拜占庭将军问题 ”。所以,现在大家也都在尝试使用Paxos、Raft、PBFT等算法来代替POW、POS等共识机制。

比如,Ethereum以太坊现在使用的POW,接下来会采用POS代替;BitShares(比特股)采用的是更高效的DPOS;HyperLedger直接采用的是PBFT算法。

从另一个角度来看,共识机制直接影响区块链的TPS(Transaction per Second)。以比特币为例,受限于POW,它的tps只能达到7/s;DPOS的代表BitShares,根据官方数据,最高能达到10w/s的tps。

所以,在区块链的商业落地中,共识机制的选择直接影响实际业务的效果。

同心互助是首个区块链上的落地应用,区块链的第一个价值在于提供信任,因为数据、交易记录都是公开的、透明的。所以,在同心互助中,我们把用户的脱敏信息、互助计划信息、资金流水记录等全部记录在区块链中。

区块链中的数据存储有两种载体,一种是Raw Transaction,另一种是智能合约。两种方式的存储,本质上都是一个Linked List with Key/Value Pair;但是从存取等操作方式上来看,各有优缺点,看实际的使用场景。

在当前的同心互助中,我们优先使用的是Raw Transaction模式:将数据封装成JSON(便于查看和浏览;推荐使用Binary format,比如Protobuf or Thrift,空间的占用少)格式,创建一个新的Transaction,通过RPC的方式提交Transaction到区块链节点,由它来完成Block的创建和Transaction的分发。

这种模式下,数据Schema需要预定义,建议是结构化的;否则后期无法二次处理、状态迁移。

另一种智能合约的方式,在Ethereum的Solidity语言中,就是 key/value pair。由智能合约将 Solidity的 key/value pair转成binary,存储在Transaction中。

同时,为了更好的让用户理解区块链、感受区块链的价值,我们提供了区块链地图(https://www./pc/blockchain/index)、区块浏览器(https://www./explorer),让大家更便捷的查看区块链的状态、节点状态以及链上的数据。

区块链的第二个价值在于效率提升,利用永不宕机、自动执行、强制执行等特性,可以大幅度提高效率,降低人工干预、参与的成本。

在同心互助中,我们还利用区块链的“交易即清算、交易即结算”的特性,来对资金流水进行自动实时对帐。当然,这是单独的另一个私有链了。

在这个场景中,我们记录用户的资金流水,通过智能合约验证帐目一致性(状态),采用数据货币的特性来保证资金变更不出错。其核心的思路如下:

以用户为中心,通过验证的资金记录需要满足如下状态记录

  • 用户帐面的流水变更

  • 第三方支付机构的对应流水记录

  • 系统内(同心互助)的对应流水记录

状态记录不满足,则出现问题,通过另外的方式(自动or人工)解决。

借助于区块链,对帐系统的复杂度得到了极大的简化,同时效率也得到了提升,可以做到准实时~

同心互助区块链的开发实践中,我们遇到了一些比较有意思的问题,一并分享给大家:

1. 用户隐私

正如区块链的价值一样,公开透明是深入技术低层,所以用户的隐私保护是首个问题。

在这块上面,我们借鉴采用了如下几种方法:

  • 链上的公开数据全部进行脱敏处理:比如只公开用户姓、只显示身份证号前4位、后4位,保护用户的信息不被外泄;

  • 利用存在性证明原理:链上不保存用户身份的真实数据,也不加密保存;采用保存身份证+姓名的Hash的方法。只有知道用户真实身份的人,才能通过Hash来确认此人是否在链上;

2. 数据写错了

另想了,数据上了链,就下不来了。即使你控制超过50%的节点,也不能这样干^_^

在这种情况下,我们的选择就是:特定的Transaction,声明前面某一条记录有误,补充一条正确的新记录。

这不仅仅是一个实现问题,还是一个区块链实现的原则:记录的数据需要自带“修改”的语意,需要从逻辑上能推导出“修改”。否则就会存在正确数据被错误数据攻击的风险。

同样的,涉及到交易冻结、撤销,也同样需要这样的机制。

3. 智能合约升级

智能合约,即业务逻辑代码,同样的也是存在区块链上的,也不能修改。那么,如果智能合约代码存在bug、业务逻辑需要变更,怎么办?前段时间,以太坊社区的TheDAO的漏洞事件,闹得沸沸扬扬,就是这个问题。

我们有两个解决方案:

  • 把数据和合约代码分享,即Entity和BizLogic分离。在这种情况下,部署新的合约,停止老的合约,数据仍然保留,可以达到这个目的;

  • 合约层面进行数据迁移,把数据从老的合约迁移到新的合约。这样也可以解决这个问题。但是在这种情况下,数据迁移会导致“数据对于状态的体现”发生了变化,数据和状态的变化不一致,这是一个逻辑风险。

从我们的实际经验来看,需要在低层提供合约代级的功能,即第一个解决方案,用起来会比较合适。

4. 性能!性能!!性能!!!

区块链的优势在于提高效率,但是现有的区块链实现都还不够快,最快的BitShares(DPOS)又不能拿来当区块链技术来使用,还是加密数据货币。

性能的优化,共识机制首当其冲,需要根据实际业务场景的需求,定义一个合适的高效的算法;而非简单的拿来主义(当然,还得看实际的场景)。

解决了共识机制后,其次就是相对大家都很熟悉的性能优化领域了。

关于共识机制的优化,我们也还在研究和探索,希望下次能给大家分享实际的优化案例。

Q:区块链是一种协议也是一种技术,那我想问问区块链如何与征信行业结合呢?

A:对于征信而言,区块链的一个结合点在于“数据永不篡改”。征信报告只是一个瞬时的结果,征信记录才是永恒。区块链可以做到:

  • 无法删除: 不可篡改

  • 无法修改: 不可修改

  • 易于共享: 每个节点都拥有全部数据

这样对于征信数据的提供方和消费方,大家都可以平等的分享整个征信记录。

Q:在区块链技术的运用过程中,遇到了哪些方面的挑战或问题,是如何解决的?

A:主要的一个问题是,了解区块链的开发者太少了,能写区块链实现代码的开发者更少。解决方法就是“读代码、写代码”,慢慢学~

第二个问题是业务与区块链的结合点:区块链不是万能药,它也有它的限制,它也不能解决所有问题。所以一定要搞清楚区块链的优点和缺点,结合实际的业务场景来设计方案。

Q:有人说区块链技术是金融风控的终结者,关于这个观点,您怎么看?

A:从我的经验来看,金融风控是一个非常庞大的话题,并非“区块链”这一个“分布式帐本”技术所能解决的。从金融风控的角度来看,区块链是一个非常好的“信息收集”者,它能保证数据一直在、不会丢失、不会变化;它无法对数据进行分析、挖掘,找到高危风险,这种事情,还得靠数据挖掘、AI等技术。

顺便打个广告,我们公司的英文名叫ABC FinTech,ABC 即 AI + BlockChain + Cloud;你看,光有BlockChain还不行呢~

顺便再打一个广告,最近世界经济论坛发布最新权威区块链报告:区块链技术将构成新金融基础设施的基础http://www3./docs/WEF_The_future_of_financial_infrastructure.pdf 推荐有兴趣的朋友阅读。

Q:区块链实现代码开发者少?那以太坊是用来干嘛的?

A:以太坊是一个区块链的实现。但是它设计的初衷是“加密数据货币”,所以引入了“以太币”、Gas、POW共识机制等。这些机制对于大多数商业应用,其实是用不上的,或者说没有太大必要。

所以,商业实践中,一定需要对以太坊这种实现进行修改和大幅度调整,所以需要区块链的开发者。当然,HyperLedger看起来还不错,对商业应用的支持设计的很到位。

还有一个是区块链应用的开发者,这种人现在也很少,也直接影响区块链应用的开发速度和进展。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多