在一种点对点的电子现金系统中,提出了现有存在的一些问题。也即交易几乎都需要借助金融机构作为可资信赖的第三方来处理电子支付信息,这类系统内生性的受限于“基于信用的模式”(trust based model)的弱点。人们无法实现完全不可逆的交易,因为金融机构总是不可避免的会出面协调争端。因此提出了一种不需要第三方中介的参与,使得任何达成一致的双方能够直接进行支付,不可逆的、杜绝回滚(reverse)的、点对点的电子支付系统,也就是Bitcoin。
然后有了区块链,区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、全程留痕、可以追溯、集体维护、公开透明等特点。区块链的本质是基于去中心化,去信任的集体维护可靠性的一个分布式账本,也就是没有专门的机构(第三方)来记账。
然后出现了公有链、联盟链和私有链的区别,本质在于参与记账人(共识过程)的权限不同,联盟链和私有链需要许可才能够参与,并且实际上联盟链和私有链在读取权限上也基本都需要许可才能够获得。如果我们把一个机构的信用等级用10000来表示,单个人的信用等级用1来表示。私有链的信用等级与上述第三方机构“基于信用的模式”的等级对于外部的其他人来说并没有得到显著提升,但对于机构内部来说能够降低成本达到较高的数据安全性。联盟链因为有多个机构的参与,比如有100个,但实际信用等级并不能够达到100×10000,因为联盟之间通常是具有共同的利益参与者,上述金融机构总是不可避免的会出面协调争端的情况,联盟之间也是可能会有发生的,因为联盟之间可能会有共谋。
公有链的参与者虽然信任等级并不高,但通常都是互不认识的,甚至会有竞争的存在(挖矿),所以矿工之间发生共谋的情况,会随着矿工数据量的增加而迅速减少,当矿工数量达到一定量级后,发生大多数联合共谋的情况几乎不存在。并且因为公有链具有的公开透明、全程留痕的特点,以及除矿工外所有的全节点也能起到监督的作用(比如一些矿工要增加奖励的数额,必定会和某些全节点产生分叉。全节点虽然不挖矿,但能够验证数据和存储,并对其它节点提供正确数据,所以也是参与网络的节点。轻节点由于无法对数据进行验证,且不能给其它节点提供正确数据,所以不考虑)。全节点不能左右矿工,但如果和矿工之间没有共识,则不会参与全节点,所以如果一个公有链只有矿工而没有除矿工外的全节点,可信程度也会大受影响。所以当公有链的参与者达到一定数量后,包括矿工、全节点等,就能够获得极大的信任,可以看作是所有参与者形成的一个大中心。
再分析公有链产生账本的过程,账本本身是由信任等级并不高的节点产生的,或者说公有链并不使用产生账本的节点作为背书,而是每个记账人(包括全节点)都会对数据进行验证,数据验证通过后则记录账本,然后选出累计权重最大的链(Bitcoin为最长链)最为主链,通过该共识过程达成全网一致。但是该共识过程只是对公共的账本数据达成一致,并没有对账本里的数据有任何限制(当然前提是能够被所有节点验证),所以矿工一般会优先打包手续费较高的交易数据。所以本质上只需要该数据能够被所有的节点验证,而与共识过程并无关系。
在公有链的定义中,公有链是指任何人都可以读取、发送交易且交易能获得有效确认,也可以参与其中共识过程的区块链。所以公有链会有可能被用于非法交易。并且公有链形成的大中心,只有数据是可信的,其它比如token,并没有任何背书,虽然具有稀缺性的价值,但价格波动难以成为支付工具。
能否使中心化机构产生的数据也能够像公有链形成的大中心一样可信呢?根据公有链产生账本的过程分析,账本里的交易数据只需要能够被所有的节点验证,而对该数据的提供者并无依赖。所以可以修改公有链的定义为,除只能有一个S对象发送交易数据外,其余都与公有链定义一致的区块链,本文称为类公有链。而该S对象,可以是私有链或联盟链,只需要其产生的数据能够被所有的节点验证。
如果分析公有链的矿工以及全节点具有的角色,包括生产者、验证者和记录者三种角色,生产者实际具有交易数据打包和生成公共账本数据两种职能,生产者需要进行某种证明才能获得,比如工作量证明(挖矿)。矿工和全节点都具有验证者和记录者两种角色,并且还有存储和提供数据这种职能。而类公有链中,交易数据打包的职能则是S对象具有,S对象没有生成公共账本数据这种职能,生成公共账本数据的职能由类公有链的矿工具有,同时也是记录者角色。但这里会有一个问题,如果S对象产生的数据是错误的,记录者和生成公共账本数据怎么处理,这是与公有链不一样的地方,因为公有链的某个节点打包的账本数据如果不正确,是不会被其它节点接受的,更不会被选为主链,所以不会成为生产者。而类公有链既然固定了S对象是数据的打包者,也就是生产者,则只能由该对象打包数据,即使是错误的。所以类公有链的矿工不会也不能有验证者角色,而只是记录者角色和生成公共账本数据这一种职能,目的就是完整记录S对象所产生的数据,无论是对是错(当然需要验证是否是由S对象产生的,只是不验证所打包的交易数据是否正确),然后形成无法被篡改的账本数据,同时具有全程留痕、可以追溯等特点。而记录者只记录数据,不验证数据的特点,也能够较容易的处理大量数据,降低参与的门槛,使任何人能够参与成为可能。
但上述只是解决不可篡改的问题,交易数据并没有经过验证,所以并不是可信的。当生成的数据经过几个确认后,可以认为与公有链是同样不可篡改的状态,这时再对数据进行验证。所以类公有链上的数据也需要是公开透明的(至少对于所有节点都需要验证的数据,比如token是否正确),能够被所有的节点进行验证,经过验证后的数据,也就能够达到公有链账本数据的可信状态。但与之不同的是,公有链的生产者是不固定的、任何人都可以参与,具有一定的公平性(因为不同大小的证明会对结果产生影响,可以通过增加证明来获得更有利的结果);类公有链的生产者是固定的,所以并不具有公平性,但这与类公有链经过几个确认和验证后的数据是可信状态并无关联。
上述只是说明类公有链的数据是可信的,而数据与某个对象的资产状态不一定是关联的。如果采用账户余额模型,获取某个对象在某个时间段类公有链上的状态,只是余额的形式,比如需要获取Bob在一个月内的收支状况,如果是需要获取前一个月的余额与这个月余额的差,是比较容易获取的;但如果需要根据每笔交易的类型,产生不同的结果(比如纳税),则需要对每个时间片段进行分析,得到该用户所有的数据,或者由谁给出所有的数据,这些数据能够在类公有链上获得有效验证。采用UTXO模型,可以把相关数据连接起来,由用户或第三方自行独立检索。并且比如纳税时,只需要知道这个月内的收入交易,并不需要知道余额。并且UTXO模型中交易数据的验证不会涉及用户状态,可以方便每个节点获取数据并进行验证。
通过客户端提供对账本数据的验证、存储和检索则是系统的关键结构,因为所有的节点根据区块头的一致性可认为是全局状态一致的,每个客户端提供的数据都是能够被Merkle树验证,并且提供了任何客户端可以随机选择交易数据进行验证的方式,这也是能被认为可信的重要原因之一,DHT的客户端提供了验证者以及存储和提供数据的职能,可以认为组成了一个全节点。所以整个类公有链的系统架构组成了S对象、类公有链的矿工、DHT的客户端所组成的一个大中心的结构。
所以也就使S对象产生的数据能够像大中心一样是可信的,其它比如token,则需要S对象进行背书,所以可以具有稳定的价格。该系统的目的是在类资产的场景中具有中心化的S对象(生成者)和海量的用户端(验证者以及存储和提供数据)情况下,以及任何人都可以参与类公有链的共识过程(记录者),共同形成了一个大中心,使S对象所产生的数据是能够可信任的。