什么是分布式账本?分布式账本的设计、规划及典型应用场景又是怎样的呢?基于社区近期开发者遇到的此类问题,我将分享一些个人对分布式账本OpenLedger的经验,希望可以给大家一些借鉴与参考。
什么是分布式账本,它与区块链有何关系?
账本,是用来记录权益变化的一种技术。账本的应用十分广泛,它可用于个人、家庭、企业以及银行记录客户借贷。下面我将通过生活实例介绍不同类型账本的特点。
第一,是个人的账本,它是最简单的一种记账方式,主要用于记录个人的收入开支。
第二,是家庭的账本,相比于个人账本,在多人共同记账时,我们需要关注每一笔账的收入与支出对象是哪位家庭成员。另外,家庭账本还需要关注多个家庭成员同时收入和支出的情况,避免出现记账错乱的问题。
第三,是企业账本,相比家庭账本,企业的账本更为复杂,需要增加账期和科目的属性。账期可以帮助企业统计一段时间内账户权益的变化,例如财年。
第四,是银行的账本,银行账本需增加权益主体,即交易发起人。银行账本不是记录自己的收支,而是用于记录用户存款、贷款、转账交易记录,因此银行记账的主体是用户。个人用户可以自己发起交易,银行负责记账,企业用户的多个会计、出纳等可以发起同一个账户的交易。
以上的四种类型被称为中心化的记账方式,记账主体是单一的。那什么是分布式账本呢?
- 首先,区别于中心化记账,分布式记账的参与主体很多,参与主体之间的利益不一定是一致的,可能有共同的利益诉求,也可能存在不同利益之间的博弈;
- 其次,分布式记账具有多中心的特点,参与的组织具有明确的分工;
- 最后,分布式记账的组织关系和账本体系具有层次化结构,记账主体比较多,这与传统区块链中点对点、多中心化的关系具有明显的不同。
以信贷资产证券化为例,银行给购房者做抵押贷款的业务,将钱借给购房者,此时银行与购房者会形成借贷关系。
由于住房贷款的还款期限较长,贷款利息又比较低。如果银行将同样的贷款与企业合作,或是通过信用卡的形式借贷,这种合作方式收益回报率更高。
因此,贷款银行更希望能够把贷款快速收回且获得高回报率。通过资产证券化业务,贷款银行原本30年才能回收的贷款本息,现在一个月内即可收回。
贷款银行首先需要将贷款打包,通过信托公司把它包装成证券,再通过证券公司将它卖给不同的投资人或投资机构。
待上述流程完成,贷款银行基本可把款项收回,同时,贷款银行也需支付一定的费用,此时借款人会持续按照贷款合同还款。
还款的本金和利息需回报给证券投资人,借款人在后续30年持续还本金和利息给贷款银行,贷款银行将收到的款转给托管银行,托管银行再按照一定的计算方式支付给托管机构,托管机构将证券本息计算以后再支付给证券投资人。
这就是其中的业务关系,每个机构都有自己的IT系统,业务之间无法互通会导致效率低,可能需要几天时间才能完成资金和信息的流转。
然而,采用OpenLedger分布式账本技术,可以将资金和证券相关的账本进行统一记录,可以做到实时地传递信息,提高流转的速度,提高业务的效率。
除此之外,采用分布式账本技术也能实现金融的穿透式监管,能很好地识别中间流程所存在的潜在风险。
分布式账本对技术提出了以下要求:
- 首先是多中心,它有多个组织共同参与,不同于传统的中心化模型,这是以自治为主的治理模型。原来的中心化,我们只能信赖记账方的数据,而分布式账本,由于有不同机构共同参与,我们就需要新的治理模型来符合场景的需要;
- 其次是共识机制,我们要实现数据多方都能认可,即达到数据共识;
- 最后是账户模型,由于组织机构账户是需要特定岗位的人去执行操作,故我们不能仅仅依靠点对点的账户模型,更需要立体化的账户体系、层次化的结构。这些结构特性与区块链技术是高度相关的,这也是我们选用FISCO BCOS作为底层平台实现分布式账本的重要原因。
OpenLedger背景及特性介绍
我们将账本所涉及到的对象进行抽象分离,可以分为以下5类:
- 个人,个人直接在分布式账本里通过开户拥有自己的账户;
- 组织,组织中的员工并没有自己的账户,但他来自某个组织,代表组织参与业务,那么这个账户则是属于他所在的组织;
- 账户,用来记录所有人的权益;
- 权益,目前我们支持两种权益类型,分别是基于账户余额数量变化的权益和基于所有权变化的权益,后者本身类似于一种实体资产;
- 账本,每一种权益都会对应一个账本,这与我们所说的记录权益变化的账本或台账很类似。
基于对上述概念的了解,我们得以更好地理解OpenLedger的设计思路。首先,我们的底层选用FISCO BCOS区块链平台,并使用不同的开源项目作为技术支撑。
中间的OpenLedger主要构成有账本、账户、权益、组织等核心组件以及这种分布式账本的治理体系,比如合约治理、权限管理等。我们可以通过账本来支撑不同的业务。
OpenLedger设计与规划
职责分离
个人和组织之间有职责的划分,用户如果需要使用分布式账本,可通过分布式账本中的某个组织进行开户,开户的条件是开户的组织与个人之间需存在业务关系,这样的组织简称为KYC。
开户过后,我们在分布式账本上就会有账号,账号的所有人可能是组织,也可能是自然人,负责帮助他开户的组织是该账户的KYC组织。KYC组织会记录账户所有人的基本信息,这些信息是不共享的。目前,我们的设计是不允许其他企业去访问和修改用户资料。
双重签名
联盟链不向终端用户直接提供区块链服务,通常采用私钥托管的方式,即将私钥托管给向其提供业务的企业。这种设计方式相当于将私钥委托给某一个业务方去管理和使用,私钥所发生的的签名也是由业务方发起的。
组织可能会不经允许用你的私钥私自发起业务,用户权益无法在账本上得到体现。因此我们设计了双重签名机制,用户始终能保管个人的私钥,并且能直接用私钥发起交易,签名后提交给某个业务方,业务方用它接入区块链时在私钥上进行二次签名,把交易提交给区块链。
区块链会验证业务方的签名,检查其是否是联盟中所允许的参与组织,通过后再把用户签名后的交易提交给智能合约,根据用户签名进行检验,看最开始的签名是否为我们所认可的用户。
只有通过这样两次签名和两次验签的操作,才会执行相应的智能合约。借助双重签名机制,能够保证用户账户不会被第三方不经授权就使用,保护用户链上的权益。
台账
记账之后经常需要查账,查账的条件是非常复杂的,区块链的数据结构一般采用的是默克尔树结构,账户中的数据可能分散在多个区块链的区块中。如果需要查询数据,可能需要调用很多次查询交易或者是区块数据的方式,才能最终获得想要的数据。整个流程非常繁琐,效率偏低。
我们借助FISCO BCOS的CRUD预编译合约,将整个账户变化的历史以二维表的方式进行记录。当我们查询的时候,数据库C类查询条件就能方便地获得查询结果,并且可以基于账户计算。
OpenLedger典型应用场景
信贷资产证券化
权益有两种,一种就是资金权益,一种是证券权益。
借款人需要将钱先给借款银行,借款银行划拨给托管银行,托管银行收到钱后,计算相关税费、本息等,并本息支付到托管机构,托管机构再支付给投资人,由此完成资金的流转。
后者则是证券的流转过程,贷款银行将贷款打包出售给信托公司,信托公司将贷款设计成证券,证券公司负责把它销售给投资人。这样会产生证券的流转。
如果应用OpenLedger技术来处理,只需设计资金和证券两类权益。分别由这两个组织来担任权益账本的托管人,进行账本的维护。
其他机构只需开设一个账户,权益如果是个人,直接由个人来发起转账交易,权益如果是机构,则由机构的业务员来操作机构的账户,发起权益的流转。
对职责分离强需求的业务场景
正如上述所提到的,个人可以是账户的所有人,直接维护自己的账户,用私钥发起签名来进行权益的流转;也可以是某个组织,代表组织进行转账业务。它可能是资金托管或者贷款银行,主要负责把收到的钱及时从托管账户转到资金保管银行的账户。
投资人开户直接与证券公司发生业务,因此需要通过证券公司来代理,证券公司会维护投资人的个人信息,个人信息在OpenLedger中是无法被其他组织所访问的,只能通过账户来发生业务。
一旦投资人的资料丢失,在传统区块链中这个账户就无法继续使用,但是在OpenLedger分布式账本中,它可以通过账户体系的设置,进行私钥重置,用户仍然可以使用原来的账户,而权益也不会丢失。
了解更多干货内容,请关注FISCO BCOS开源社区公众号,访问FISCO BCOS代码仓库可下载项目所有源代码:https://github.com/FISCO-BCOS/FISCO-BCOS,欢迎点击页面右上角star收藏,获取最新版本。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。