一、前言

金融服务应用,如果想要导入区块链机制,要如何搭建一个实用的区块链平台在过去半年多来,每次演讲都会被问到这样的问题;虽然有些想法,但始终不敢贸然回答这类的问题。一直到最近,手边三个概念验证 (Proof of Concept , POC) 的桉子已进行到后期,稍有初步的成果,才有机会整理出一些经验与想法,野人献曝地在此与大家分享。

接下来,我们将依据过去半年在导入区块链机制于 POC 应用所累积的经验,尝试回答以下问题,与大家一同探讨,如何才能搭建一个实用的区块链平台:

( 一 ) 导入区块链机制是要去中心化吗

( 二 ) 金融服务应用有其特性与生态,要如何调整原生型区块链的机制,才能适用于国内的金融服务应用

( 三 ) 在导入区块链的应用实作上,如何规划整个区块链平台的系统连结及分布架构

二、中心化 vs. 去中心化

谈到区块链,去中心化(Decentralization) 总是第一个被联想到的名词。大家都以为,区块链的机制是为了去中心化而设计的。其实恰好相反!区块链可说是一个最大的中心化(Centralization) 机制!这话怎麽说呢如果我们回头探究起源于比特币(Bitcoin) 这类原生型区块链的运作机制,就会明白其中的道理。平常你我在银行开设的帐户,大都是以银行做归类,这些帐户的管理权限,都分属于各个银行。所以,所有客户的帐户,是以分散式的模式归属于各个银行的名下,而并不是以一种中心化的方式在服务客户 。这也就是(Ledger),其实就是一个登载记录全生态系流水帐的大帐簿。基于不同理念所发展出来的系统,当然就会产生不同的运作逻辑。比如说,在现今的银行体制下,如果要从 A 银行的某个帐户,透过 ATM 机制,转一笔钱到B银行的某个帐户,整个作业流程至少需要:A 银行、B 银行、以及 ATM 作业处理中心三个单位的配合,才能成事;三者分别都要在自己的帐务系统中记录这笔交易后,整个交易才算完成。但是,Bitcoin 机制根本不是以这样的概念在运作,整个机制的运作逻辑,基本上就是个记录流水帐的概念。你可以想像一下,如果有一个全世界的人都能够即时看得到的超大电视墙,墙上永远都显示着一本大帐簿,而每一笔Bitcoin交易,都会透过系统、即时的记录并且显示在这个电视墙上;请问,我们还需要 ATM 转帐作业中心吗其实,如果我们将Bitcoin 机制视为一间超级银行,帐号与帐号间的交易,就会简化成是一种自行交易。简而言之,整个作业也不过就是在自家的电脑上,记录一笔流水帐罢了!如果我们从Bitcoin就是一间超级银行的概念出发,去看一些平常报章杂志的报导、或专家学者的专栏论述,就很容易了解他们在说些什么、或是说他们到底有没有弄懂自己在说些什么比如说:大家常谈到,区块链在跨境支付的作业上,可以如何又如何的有效率!我的回答是:那当然,大家都在同一本帐簿上记帐,那还不容易!还会没效率!所以,对一个以提供中心化服务的营运单位而言,与其将区块链机制的导入,想像成会导致去中心化的结果,倒不如尝试着反向思考;想想看,如何藉由区块链技术的导入,创造出一种进化版的中心化机制,将所有参与者带入一个新的合作架构中,由新的科技机制诱发人性协同合作的善良面,共同创建一个共利的生态系。

三、乌托邦 vs. 真实世界

在 Bitcoin 这类原生型区块链生态系中,参与者大致上可以分为两个族群:一种是终端使用者(End-user),例如:持有Bitcoin 钱包的使用者;另一种是提供服务的节点(Node),负责製作区块、传递区块、以及维护区块链等工作。原生型区块链生态系在设计上有一个基本假设,就是-参与者彼此之间的相互信赖度很低。任何想站出来服务大众的人,其实不需要获得任何人的允许,都可以自己准备一台伺服器、下载软体安装、经过适当的设定,成为一个节点。这些节点彼此间并没有任何的关连性或是信赖关系,只要大家能遵守既定的协定,虽然这些伺服器是分散在各地,也可以合力组成一个中心化的服务机制。任何一个终端使用者,( 在理想上 ) 都可以透过网络,连结到任何一个节点,获得(或是请求 ) 服务。这种型态的区块链生态系,其优点就是「各尽所能、各取所需」,大家相信,所有参与者都能借由区块链的机制,彼此制约,建立一个具公信力的生态系,建立一个乌托邦的世界。但是,大家其实都知道,人有善、恶两个面向,为了防范人的恶会盖过善( 如不遵守公约、擅改或是伪造各项交易纪录、或是不依照协定维护区块链等 );因此,区块链机制的发明者与信徒们,就企图利用各式各样的科技,设计一些复杂的机制 ( 如哈希函数运算、公私钥的加解密演算法等 ),期待能「借由科技」来「解决法律、政治、管理上所产生的议题」。这些科技包含三种核心技术,分别是:

(一) 以 公、 私钥对 (Public & PrivateKey-pair) 为基础的加解密、签名(Encryption /Decryption、Sign/Validating)技术。

(二) 哈希函数(Hashing Function)运算。

(三) 以共识算法 (ConsensusAlgorithm)为基础的数据同步机制。

第 ( 一 ) 项技术的设计,是为了建立一个可验证的匿名制,以支持动用帐户资产

(一) 节点的设置标准

任何想替大家服务的人,不需要获得任何人的允许,都可以自己准备一台伺服器、下载软件安装、经过适当的设定,成为一个节点。这是一种理想,但是在实际运作上却很难做到。因此,非认许制(non-permissioned)的区块链生态系,在金融服务应用的领域中,几乎是无法被接受的。相对地,任何一项金融的确认机制,意即以私钥签署交易、以公钥验证签署交易的合法性。采用第 ( 二 ) 项技术的用意,则是为了确保每项交易资料,一旦被包覆进入区块链,都将无法 ( 或是非常困难 ) 被更改。

至于导入第 ( 三 ) 项技术的目的,则是希望借由共识算法,将系统所产生的区块,即时布建于每一个参与节点的区块链中,以达资讯即时同步的目的。因为国内金融服务应用的场景、特性、生态,与当时原生型区块链创立时的假设有所不同,所以,上述三项技术的使用方式,必须进行适当的调整,方能符合需求 ,以下分别就节点的设置标准、公私钥签名机制及共识算法,概要说明。

服务的应用,在导入区块链机制时,都必须审慎考虑采取许可制(permissioned) 的必要性;尽可能事先理清各个节点所需负担的责任,订定意外事故发生时的作业准则,以便将损失降到最低。

(二) 公私钥签名机制

在原生区块链生态系中, 帐 号 ( 公钥 ) 与个人资讯 ( 如个人姓名或是个人 IDNumber) 之间,并没有建立任何直接关连,因此,针对每笔动用资产的行为,借由区块链系统,只能追溯到连结于该帐户的公私钥,而无法追查到公私钥背后使用者的相关资讯。所以,这种身分识别机制,通称为可验证 ( 公私钥 ) 的匿名制。为什么原生区块链会采取这样的机制呢道理其实很简单,就是为了简单与方便使用;试想,连提供整个生态系服务的节点都是采用自愿制,至于终端使用者的帐号,还需要有什么特殊机制的管

理吗既然是「乌托邦」,完全的「自治与自制」就应该是建置这类原生区块链生态系的最高指导原则。

但是,基 于反洗钱 (Anti-moneyLaundering , AML) 的基本要求,金融机构大都无法接受这种可验证的匿名制。然而,可验证的实名制,其实就是金融界使用多年的电子凭证机制;所以,依POC 的实作经验,以区块链平台介接目前所使用的电子凭证机制,提供服务,较为可行。

(三) 共识算法

共识算法的种类繁多,各有其应用的属性。例如: Hyperledger 平台一开始是使用「拜占庭演算法」,Bitcoin则是采用工作量证明(Proof of Work , POW) 算法;也有其他生态系是用验证其他重要的因子的算法,作为资讯同步的机制。当然,每一种算法都有其被採用的理由与依据,例如:Bitcoin 之所以采用POW,是因为整个生态系是建立在一个节点与节点之间毫无信任关系的假设上;当初的设计者希望借由POW演算法所製造的相互竞争机制,创造出优胜劣败的生存与奖赏法则 ( 最终获胜而得以建立区块的节点,可得到特定数额的 Bitcoin),让所谓「自愿担任节点」的人,愿意卖命替大家建立区块、维护区块链资料的一致性,促使整个生态系的运作得以生生不息。但是,当应用范畴设定在现今的金融服务领域时,「毫无信任关係」的假设并不存在,所有参与生态系的成员 ( 或是节点 ),应该都是以「许可制」的方式加入这个生态系;也因

此,这个生态系中并没有必须采用POW竞争法则,作为产生区块以及数据同步的理由。相对地,我们可以采用一个比较简单,但是适合于「许可制区块链生态系」的算法(文献上称之为Paxos算法 ),其步骤如下:

步骤一:选出应该製作区块的节点节点之间,以每人一票的投票方式,选出制作区块的节点。获得超过 1/2 选票支持的节点,就被大家委任为製作区块的节点。

步骤二:制作区块选出节点后,所有的节点,都将手边的交易,传递给这个节点。这个节点在收到足够的交易后,就开始制作区块。

步骤三:传递区块于各节点区块製作完成后,被委任制作区块的节点,即开始传递这个新产生的区块给所有其他的节点,进行区块链的资讯同步作业。为什么不考虑采用Bitcoin、Ethereum或是其他区块链平台所使用的POW算法呢

因为 POW算法在先天上有其缺陷。简单归纳,POW算法的做法,就是挖掘区块不设限。事先放任所有节点都可以挖掘区块、制造区块,到时候如果发现有两个区块同时出现,则由比较两个区块被挖掘时的困难度」,决定区块的去留;困难度高的留下,困难度低的捨弃。当然,也因此,某

些之前被包覆在区块中的交易,就有可能被释放出来 ( 意即原先被认为「确认」的交易,现在有可能被还原成「未被确认」的状态 );须等待下一回合,看看是否有机会,被其他节点包覆在新产生的区块中。这样的做法,将会导致「交易清算的不确定性」(Uncertaintyof Settlement Finality) 的现象,亦即「某笔交易的清算,需要多少时间或是收到多少节点的确认,才可以被确定」这在乌托邦式的Bitcoin 生态系中,可能可以被接受;但是在事事讲求「确定性」的金融服务应用中,应该无法被容忍。相对地,经由 POC 的经验累积,让我们选用了Paxos算法,节点间协议的

方式 ( 投票 )、制作区块、传递区块、达成节点间资料同步的目的;这种做法,不会产生POW演算法所造成的最终清算(SettlementFinality) 问题,扩展性 (Scalability) 的限制也相对地降低许多。因此,建议往后在选用区块

链平台时,采用的共识决算法是否适用于该项应用会不会产生上述两项副作用都必须列为审慎考量的课题。

四、区块链平台架构概述

区块链平台的系统架构为何使用者如何使用又该如何与既有的系统介接依据我们在导入区块链机制的POC经验,整个平台架构的系统连结及分布,大致如图3所示,由区块链系统(Blockchain System)、区块链应用系统(Blockchain AP System)」以及应用系统连结闸道(AP Gateway) 三个主要部分相互支援组成。

(一) 区块链系统(Blockchain System)

区块链系统为区块链机制运作的主系统,负责区块 (Block)的组建、递送、以及链结等工作。该系统采用共识算法(Consensus Algorithm),将制作好的区块,透过 VPN 或是 Internet,递送到所有参加单位的区块链系统中,以确保资讯即时同步。这一套区块链系统,在区块链平台中,应该是属于中性的系统,无论导入哪一项应用,其功能应该都大同小异,并不会依应用之不同而有所改变;从实用的角度看,只要没有效能或是安控上的特别需求,不同的应用都可以架构在同一套的区块链系统之上。

(二) 区块链应用系统(Blockchain AP System)

区块链应用系统( 以下称应用系统 )在区块链平台架构中係负责处理与业务逻辑、作业流程相关的事务。因应不同的应用,在导入区块链机制时,会设计建置不同的应用系统;但是,理论上,一个区块链的应用生态系中,所有参加单位 ( 或称之为节点、端点 )的应用系统,应该都相同。例如:如果我们将区块链机制导入未上市股权交易的应用时,此处所指的应用系统就是未上市股权交易系统,所有参加未上市股权交易的单位,

除了必须安装一套区块链系统外,都会配置一套与其他节点同样的应用系统,亦即未上市股权交易系统。

同样地,如果是将区块链机制应用于金融同业拆款作业,那这裡所指的区块链应用系统就是金融同业拆款作业系统,每个参加同业拆款作业的单位,都应该配备一套同样的金融同业拆款作业系统;至于如何将这套应用系统介接于单位内部的其他系统,则属于客制化的部分,不包括于此共通的应用系统范围之内。

(三) 应用系统连结闸道(AP Gateway)

区块链应用系统与区块链系统的连结,则是透过区块链系统所提供的API,将各项讯息递送至各节点 ( 即各参加单位)。例如:将交易的内容或智能合约传送至制作区块的节点这类的工作,就是透过这个管道递送出去。除此之外,内部使用者 ( 例如该项业务的负责人员 ) 或是系统管理者,则以登入系统的方式,上线使用;如需要开放外部的使用者使用,为了安控作业的考量,建议必须透过「应用系统连结闸道」,才能连结使用「区块链应用系统」;至于「其他应用系统」,则透过「区块链应用系统」所提供的 API,与其连结使用。

五、结语

经过 POC 的经验累积与验证,我们发现,原生区块链所采用的一些技术或机制,必须经过适当的调整,才有可能导入国内金融服务应用的市场;也因此,藉由 POC 所累积的经验,我们自行开发了一套区块链系统,以方便进行各项的调整。过去半年多,我们在这套区块链系统上,同时进行了三个不同型态的 POC,其中有与支付相关的应用,也有智能合约的应用,更有大型生态系的应用。接下来,我们将持续与有意愿导入区块链应用的单位合作,一起寻求更多的POC验证,藉由经验的累积,寻找真正适合导入区块链机制的应用,创造更大的市场价值。