从Java角度看区块链实践系列2:数字货币到通证经济与账户模型

在现实世界中,我们每个人对于自己的资产的管理方式,往往是将其存入银行中,银行对每一位账户分配一个账户。账户里面可以存储不同的货币,比如:人民币、美元、英镑、泰铢等等等等,那么在数字货币的世界,又是怎么管理自己的“钱”的呢?

在区块链世界中,目前主要分两种账户模型,UTXO账户模型和Account账户模型,UTXO账户模型于Bitcoin首次出现(没错就是大名鼎鼎的比特币),Account首次出现于被称为区块链2.0的Ethereum(以太坊),之后被广泛应用于多个公链,代表性的有柚子币(EOS)、瑞波币(Ripple)、波场(TRX)等等。

这里还需要提到超零币的Account-UTXO混合账户模型。

在讲解区块链账户模型之前,我们先来了解一下数字货币和虚拟货币。

数字货币和虚拟货币

我们先理解这么几个概念:

货币:本质上是一种所有者与市场关于交换权的契约,根本上是所有者相互之间的约定。

法定货币:是指不代表实质商品或货物,发行者亦没有将货币兑现为实物义务;只依靠政府的法令使其成为合法通货的货币。

 

然后,我们再来区分数字货币和虚拟货币:

数字货币,是以数字形式存在的代替货币,是能够给在真实世界存在的一种货币,不同于虚拟货币,它的价值是被肯定的,可用于真实的商品交易,比如比特币、莱特币、泰达币。数字货币应用了区块链等最新数字网络技术的数字货币,具有分布式记账、独特加密技术、去中心化结算等特点。

数字货币又可以细分为央行数字货币和加密货币。只不过,目前没有任何政府的央行表示过要发行数字货币。加密货币又可以被细分为数字货币和数字资产。

虚拟货币,维基这样定义道,虚拟货币是在虚拟空间中特定社群内可以购买商品和服务的货币。如百度公司的百度币、腾讯公司的Q币,Q点、盛大公司的点券等等都属于虚拟货币,正如其名,这类货只能用于在虚拟世界的交易,不具备法偿性和强制性等货币属性,同时也不具有与货币等同的法律地位,公民投资和交易虚拟货币不受法律保护

 

我想大家一定会有一个疑问,数字货币和支付宝、微信有什么区别么?

加密货币,比如比特币更像是数字化的黄金,具有价值储存、支付、转移的功能,它是由比特币网络发行的,没有第三方机构,不收任何机构国家的监管限制和制约(这也是央行限制任何数字货币直接进行交易的原因之一)。

央行数字货币(DCEP),是一种由央行发布的具有国家信用背书,受央行试试监管的数字货币,它与真实存在的法定货币是1:1锚定的,具备法币的所有功能,同时DCEP也是基于区块链技术实现。DCEP是在初期对微信和支付宝的支付功能具有一定削弱作用,形成三足鼎立,长期发展后,理论上央行的DCEP是有取代微信和支付宝的可能性的。

微信和支付宝:微信和支付宝支付是一种第三方支付产品,是由第三方机构提供的一种支付服务,严格意义上,里面的资产(钱),不是数字化的法币,只是你银行账户里的资产的映射,实际的结算和转移还是发生在银行,仍然受银行的监管。而DCEP不论是转账还是结算,都是直接操作的你的个人账户。

最后,我们了解一下数字资产和数字货币的区别,以及Token的定义。

数字资产:数字资产是指企业拥有或控制的,以电子数据的形式存在的,在日常活动中持有以备出售或处在生产过程中的非货币性资产。数字资产与数字货币的区别在于,数字货币有可能取代有形货币,而数字资产只是经济体的一部分

数字资产所产生的的数字金融我们称为数字金融,国内又称为通证和通证经济,含义上差不多。

数字资产目前已经展现出其强大的生命力,相信最终数字资产会像互联网一样席卷全球。

Token:是数字资产最直接的表现方式,Token的生态结构具有自发和原生性,大致可以分成这几种类型。一种是基础设施生态,一种是金融性生态,还有种是商业纯质应用升天,这三种生态都非常有潜力。

数字资产的宏观分类

基础设施型Token:基础设施一般是指公链的权益代币,这类Token典型的有以太坊的以太币ETH、EOS、NEO等,能过支持发行Token的公链都是具有较高潜在价值的公链。另外,基础设施型Token本省也具备数字货币的功能。

金融Token:有点接近整卷,只能在流动性高的地方产生,如数字货币交易所,承兑平台。这类Token典型的有Tether、bitCNY等锚定型数字货币,以及平台币,如火币HT、OK的OKB、币安BNB。这类Token的典型特点是在为原生数字资产创造流动性,是数字金融发展的必然结果。

商业垂直生态型Token

这类Token探索的人不多,例如游戏链、明星类,往往是某个商业生态形成的一类Token,而不是单指某个Token。但由于单干一个链太过于垂直,会面临被以太坊收割的风险,所以在前面两个类型的Token成熟之前,这类Token并不会大规模流行。

三种Token的依赖关系是,金融型和商业垂直生态型都依赖于基础设施型Token;流动性方面,基础设施型 > 金融型 > 商业垂直生态型;种类数量分布方面,商业垂直生态型 > 金融型 > 基础设施型。

数字资产根据属性分类,可以分为普通Token、价值型Token,篇幅有限,有兴趣的小伙伴可以去了解一下哦~

Account账户模型

相较于UTXO模型,Account更加符合我们的认知。Account普通账户模型类似于银行,假设在两个不同银行支付系统中分别有张三、李四两个账户,张三账户有100 ETH,现在要装给李四10 ETH,由于是两个系统,操作过程是这样的:

1、检查张三账户余额是否大于100 ETH;

2、从张三账户扣除10 ETH,然后再发送一笔转账消息给李四账户;

3、李四账户收到转账消息,余额加10 ETH。

可以看出,无论是张三还是李四账户,对于转账这个操作而言,都只是余额状态的变更,并且其中余额与账户是一一绑定的,这种设计我们就把它叫做Account账户模型。

通常,Account账户模型都是基于分布式状态机的设计。

如果把以太坊看成是一个状态机,状态变更的过程是共识的过程,交易(转账)则是发生状态迁移的原因,也就是说,交易总是以修改状态为目的的。以太坊中包含了非常多的状态,账户余额就是其中的一个:

从Java角度看区块链实践系列2:数字货币到通证经济与账户模型_第1张图片 张三与李四账户余额状态机的变更

 

由于共识机制,节点(服务器)提交的交易不会立刻生效,所以张三给李四转账这笔交易也不会立即生效,着这里则体现为需要可信任的中心化第三方(银行)来确认这笔交易的正确性,关于共识机制我们再后续会进行详细介绍。

同时,交易只是事件的本身,不会包含结果,交易的公式和状态的共识本质上也是可以隔离的。

Account模型优点

1、存储空间,与UTXO模型相比空间消耗较低,因为它值记录最终状态;

2、易用性,与UTXO模型比较,账户模型更容易理解,可编程性好。例如:UTXO交易前需要配合高效的算法组装合适的交易UTXO,以降低手续费;

3、可编程性/智能合约适配性,我们可以发现,大多数支持合约的公链,都是Account账户。这是因为UTXO模型在状态保存以及可编程性缺陷造成的,而Account模型状态机的概念,可以比较容易的实现图灵完备的智能合约。

Account模型缺点

1、重放攻击问题,由于Account模型交易之间没有依赖性,需要解决重放攻击问题;

2、扩展性较差,对于实现闪电网络/雷电网络、等离子网络,则需要更加复杂的Proof证明机制,子链向主链进行状态迁移需要更加复杂的协议(闪电网络、等离子网络我们后续拓展章节详细介绍)。

nonce解决重放攻击问题以及交易所怎么维护nonce

以太坊要求每笔交易必须有一个nonce数值。每个账户从同一节点发送交易是,nonce值从0开始递增,每发送一笔交易nonce+1。只有当前面的nonce处理完成后后面的才会处理后面的nonce。若nonce过小,就交易则会被解决,若nonce过大则会一直处于等待状态。

为了避免eth_getTransactionCount的网络消耗,交易所在处理ETH交易时,常常需要在本地为每一账户维护一个nonce,并且需要保证对nonce的操作是原子的,若同一个nonce值出现两次,则会导致交易失败。

UTXO账户模型

UTXO全称“Unspent Transaction Outputs”,未花费的交易输出的意思。在UTXO模型中,账户的余额由一组“UTXO”组成,这样,每个UTXO都有一个所有者和一个值,每一个交易都将花费一个或多个UTXO(我们将这些花费称作“交易输入”),并创建一个或多个新的UTXO(我们将这些UTXO称作“交易输出”,输出包括接收账户和找零两部分),输入UTXO需遵循以下规则:

1、每个交易所引用的输入(input)UTXO必须有效且尚未花费掉;

2、交易必须机油与每个输入的所有者匹配的签名;

3、输入UTXO的总值必须等于或超过输出(output)的总值。

从Java角度看区块链实践系列2:数字货币到通证经济与账户模型_第2张图片

举个栗子,张三在UTXO模型的比特币钱包,有一个50 BTC的UTXO、一个60 BTC的UTXO,共110BTC余额,他先后向李四转账15 BTC和10 BTC,之后李四又向王五转账20 BTC,我们以TX表示交易,input表示输入(也称之为“已花费的UTXO”),output表示输出(也称之为“未花费的UTXO”),转账过程如下:

从Java角度看区块链实践系列2:数字货币到通证经济与账户模型_第3张图片

从以上流程中可以开出,UTXO账户模型中是不存在余额概念的,只有UTXO概念,也就是说如果你想要知道张三的余额,你就需要追溯其所有有关交易,统计所有未花费的UTXO。

例如上诉例子例子中:

张三的余额 = 35BCT(output 3)+ 50BTC(output 5)= 85 BTC

李四的余额 = 5 BTC(output 6),由于output 2、output 4在之后交易被花费掉,故不算在内。

王五的余额 = 20 BTC(output 7)

实际应用中,钱包会在本地维护一个数据库——UTXO集。为了维护这个数据库,钱包必须监视区块链网络,添加新创建的UTXO,并在交易未确认之前,将交易中已花费的UTXO移除。这是一个复杂的过程,钱包不但要试试的跟踪交易在网络上的传播,同时还需要保持与区块网络的公式,确保是与正确的公链连接的。

所以,你在区块浏览器上看到的仅仅是账户余额,但它为此却做了非常复杂耗时的统计工作。

从Java角度看区块链实践系列2:数字货币到通证经济与账户模型_第4张图片 比特币区块浏览器上某个地址的余额信息

UTXO模型优点

1、优秀的并发能力,交易如果没有体积限制,一笔交易可以包含任意笔输入输出,同时没有次序要求。BTC按体积收取手续费,并且为了防止粉尘攻击,对单笔UTXO的数量也有做限制(最小0.00000546);

2、私密性强,通过交易记录追溯交易的账户,是比较困难的;

3、天然防重放攻击,并且对匿名交易有良好的支持。大多数支持匿名交易的公链项目都采取UTXO账户模型,比如达世币(Dash)的混币机制、Dfinity币(DFN)的群签名技术、门罗币(XMR)的环签名技术等(此部分内容我们将在匿名性研究部分详细论述)。

UTXO模型缺点

1、在状态保存以及可编程性缺陷方面的缺陷导致,应用UTXO模型的公链将难以实现图灵完备的智能合约;

2、存储问题,UTXO模型只能在交易中保存状态,而Account模型状态保存在节点中(MPT存储技术);

3、获取账户余额复杂,不过钱包节点隐藏了底层实现细节,通过API可以比较容易的获取到账户余额,但是当节点同步数据过慢是,仍有不准确可能。

Account-UTXO混合账户模型(超零币)

混合账户模型由超零币首次提出并应用。“超零币是全球首个支持图灵完备智能合约的匿名性区块链系统”,从它的自我介绍中我们就可以得知其野心,既要智能合约,同时不抛弃匿名交易。

我们知道,Account支持智能合约,UTXO支持匿名性交易,那如何将两者何在一起呢?

我想已经有部分读者想到了,没错就是你想的这样。

超零币提供了这两种账户模型资产的转换机制,在除智能合约以外的模块,应用UTXO账户模型,对于合约资产则使用Account模型。通过交易、共识、以及Pedersen Commitment算法,将这两种模式无缝的整合到一起,使智能合约能发挥令人惊讶的能力。

从Java角度看区块链实践系列2:数字货币到通证经济与账户模型_第5张图片

由于涉及相关知识比较多,我们再这里只对混合账户模型做简单的介绍。我们在介绍完匿名交易以及Token通证资产的原理后,再回过头叙说一下超零币混合账户模型的原理。

总结

总结一下今天的内容,首先我们论述了不同的几种货币之间的区别,以及区块链部分经济学知识。对于账户模型,大致分为三类,Account模型、UTXO模型以及混合账户模型,每一种模型的提出都意味着一个成功的公链项目的诞生。区块链是加密数学的近十几年研究的成果,涉及经济学、金融管理、加密数学等等,涉及的知识十分广泛。

在此,将我所了解的所有知识,先给所有和我一样对区块链抱有极大期望的人士!

参考文献:

UTXO和Account模型对比

UTXO和普通账户模型

以太坊设计原理

零知识证明的混合账户模型——超零币

你可能感兴趣的:(从Java角度看区块链)