当前位置:首页 > 区块链新闻 > 正文

SERO | 智能合约教程——匿名Token发行原理

来源: 互联网时间:2019-03-07 11:06:42

SERO是全球首个支持图灵完备智能合约的隐私区块链系统,既然是支持智能合约,当然不可能是简单的智能合约+匿名币。SERO深度整合了两者的优点:智能合约的开放性、隐私系统的封闭性。在这两种特性的支持下,SERO的智能合约具有非常令人兴奋的特性,可以做到一些神奇的事情。

本文主要讲解SERO提供的 匿名 Token API 在智能合约的应用,并在开篇简要的介绍一下匿名Token的生成原理。需要编译安装SERO的可以参考SERO轻松入门,加入我们SERO开发者社区,在社区中可以问任何与SERO开发相关的问题。

作为基础,本文认为读者对区块链系统与原理有一个大致的了解。

一、UTXO和ACCOUNT

了解区块链构成的读者应该都知道,区块链是一个分布式账本,每个账本包含多笔交易Tx,而每笔交易又包含有多个记录。账本最小的单位是记录,每一笔帐记录一个账户资产的流入或者流出。但从实际的实现方式看,根据资产流出记录方式的不同,区块链系统演化出两种不同的记账实现,我们分别称之为UTXO模式和ACCOUNT模式。这两种模式分别对应比特币和以太坊的模式。而SERO则采用更为复杂的混合模式。

基于UTXO的交易

如上图,UTXO模式的记录有两种,对交易发起者来说就是Input和Output,这个Output在交易接受方看来就是未花费输出(UTXO),直到交易接受者再发起一个交易,指定一个Input将这个UTXO作废掉。交易中的记录始终在链接各种输入和输出。在这种模式下,ACCOUNT作为一种状态摘要,不是必须的。

例如在上图中,Alice之前收到过一个交易Tx 0,这笔交易有一个输出UTXO 0,UTXO 0中有V个SERO币,她的账户上可以记录 [+V SERO,BALANCE=V]。而之后她将这V个SERO币转给Bob,那么她生成一个交易Tx 1,这个交易有一个Input将UTXO 0作废掉,那么Alice的ACCOUNT就应该记录[-V SERO,BALANCE=0]。而对于Bob,他就增加了一个价值为V个SERO的UTXO 1,如果他的ACCOUNT之前的BALANCE是0,它账户上就可以记录[+V SERO,BALANCE=V]。

这种模式有两个优点:

· UTXO模式每笔交易是相互独立的,这意味着只要能处理好双花的问题,一个账户下的交易都可以并行处理,能充分应用多核CPU的能力。

· UTXO本质上来说就是基于历史的记录形式,既是过程,也是结果,因此在一些需要生成见证证明的应用场合下,具有非常大的优势。这也是为什么具有隐私特性的区块链系统基本都是UTXO模式的。

基于ACCOUNT的交易

之前UTXO模式说到了每个账户可以生成一个临时的ACCOUNT作为状态摘要,在UTXO模式中,这个账户是临时的,不是必须的。而ACCOUNT模式中,交易中的每个资产流入流出记录都引用ACCOUNT而不是UTXO,记录Input表示增加这个ACCOUNT的资产,而记录Output表示减少一个账户的资产。在这种模式下,ACCOUNT实体是必须的,没有这个ACCOUNT,所有的记录都没有了意义。

跟上面一样,例如,Alice之前收到过一个交易Tx 0,这个交易有一个资产值为V个SERO的输出Output 0,她的ACCOUNT将增加V个SERO。这时她要给Bob转出V个SERO币,那么她发起一笔交易,交易的Input指向她的ACCOUNT,价值为V SERO币,Output 1指向Bob的ACCOUNT,价值也是V SERO币,那么这笔交易被系统处理的时候,将直接加减双方的ACCOUNT中的资产。在这种模式下,Alice并不能区分这个Input究竟是使用的Output 0输入的SERO币还是之前就已经存放在ACCOUNT的SERO币。

ACCOUNT模式也有两个优势

· ACCOUNT模式直接增减一个独立账户中的资产,只需一个记录就可以增减一个账户的任意数量的资产。因此,生成的记录大小比同样情况下UTXO生成的记录要小很多。

· ACCOUNT模式本质上是基于状态的,Input和Output是过程,ACCOUNT是结果,因此它天然就容易将图灵机引进来,这也是为什么支持图灵完备智能合约的区块链系统多采用ACCOUNT模式的原因。

SERO的混合模式

SERO将UTXO和ACCOUNT模式混合应用,在需要支持隐私保护的地方采用UTXO模式,在需要运行智能合约的地方采用ACCOUNT模式。SERO通过交易、共识、以及Pedersen Commitment算法,将这两种模式无缝的整合到一起,使智能合约能发挥令人惊讶的能力。

本文所提到的智能合约,在SERO的白皮书中,对应 链上运行智能合约 这个概念

二、匿名交易结构

在BetaNet网络中,SERO的普通交易是强制匿名的。因为如果可以允许任意非匿名交易,那么想要使用匿名功能的用户的隐私安全在关联交易中将得不到保证。另外,如果想要公示自己的资产等信息,建议使用智能合约,有限度的公开部分信息。

在MainNet发布时,SERO通过选择隐私级别来获得隐私性和生成速度的平衡。

交易 Tx

SERO的匿名交易Tx拥有一个匿名的输入集合Z ins,一个匿名输出集合Z outs,一个普通输出集合O outs,和一个名为From的暂存地址。Z ins完全是匿名的,让第三方观察者无法得知来源和内容,Z outs是完全匿名的UTXO,只有接收者能查看和使用它的内容,O outs携带的内容是非隐藏的,它指向的接受者有两种情况:一种是指向智能合约地址,一种是指向一个暂存地址。From代表着交易发送者,同样也是一个暂存地址。因此整个Tx无法让人确定真实的用户是谁,其中携带的资产等信息也最大程度被隐藏起来。

输入 Z ins

在SERO交易的输入集合Z ins中,每个输入都是匿名的,包括来源UTXO的Id以及携带的资产信息。每个输入都通过采用零知识证明ZKP生成的Proof,指向一个被隐藏在巨大的UTXO序列中特定的某个UTXO,这个序列是SERO历史的一部分,所有的细节信息被Proof隐藏起来。验证者在不知道细节信息的情况下,通过Proof能确认这个输入是否合法。这种方式跟环签很像,不过我们的Proof自身的大小要比环签小很多,而且在零知识证明下,用来隐匿UTXO的集合的范围比环签也要大得多。

两种不同的输出 outs

SERO交易中包含的输出分为两种形式,零知识输出Z out和普通输出O out。

Z out

Z out指向的是暂存地址PKr,暂存地址只有接受者能解密出身份。由于每个暂存地址都不一样,所以,没有第三方能够识别Z out的指向。Z out还携带了资产的加密信息Encrypt Info,只有持有接受者私钥的人才能解密这些信息。而OutCM是输出承诺,只有交易的双方才能够复现OutCM的计算过程。OutCM在证明 “Z out被ins引用” 这一过程起到至关重要的作用。

O out

O out指向的PKr有两种形式,一种是由智能合约发起的,指向普通账户的暂存地址。另一种是由普通账户发起的,指向智能合约的地址。由于暂存地址的随机性,第三方无法得知接受者的身份,O out携带的资产信息是公开的。

输入和输出的平衡 Balance

Tx将ins、Z outs、O outs打包到一起,如何防止恶意攻击者篡改里面的数据并确保资产安全呢,我们通过引入perdesen commitment,它的同态加密特性使验证者在不知道信息细节的情况下,可以确认Balance一定是平衡的,即输入等于输出。

另外,为了防止恶意攻击者对O outs的篡改,我们利用perdesen commitment的随机特性,以Balance的随机部分对Tx Hash进行签名。如此以来,各个输入输出都可以独立进行计算,然后通过B-Sign打包到一起。

交易发送者 From

当交易的输出是指向智能合约时,智能合约有时根据编写的规则,需要将资源给输出到给定的账户。这时暂存地址From就是承接输出资源的地方。From在交易生成的时候就被确定,并且只使用一次,除了交易发送者外,其他人无法定位发送者的身份。

三、发行匿名Token的原理

Token资产

Token又称之为“同质化通证”,是SERO系统内部承认的一种资产形式。相同种类的Token可以任意的分割和混合,具体来说就是所谓的“币”。SERO币作为SERO系统的第一个币种,本质上也是一种Token。对于Token资产,除了手续费规定只能以SERO币缴纳外,在SERO系统的内部是同一对待的,由共识确保其隐私和安全性。

与以太坊中的Token概念不同,以太坊中的Token只是智能合约内部记录的一个符号,而ETH才是以太坊内部真正运行的Token资产。

币名

每种Token都有一个币名,SERO系统初始化后,默认只有一个被注册的币名SERO。在智能合约发行匿名Token的时候,必须向SERO系统注册一个全局唯一的字符串作为该Token的币名。币名可以极大的提高你发行资产的可读性。

匿名Token资产

SERO的智能合约有一个非常强大的功能,那就是可以任意发行匿名Token。当然,前提是你需要一个从未注册过的币名。一旦匿名Token发行成功,智能合约可以将Token以普通交易的形式发送到某个普通账户的暂存地址PKr,这时这些被发送的Token将以UTXO的形式脱离智能合约账户,并且与SERO币一样,进入用户的个人账户中,从而被SERO的隐私机制所保护。

SERO币的发行是由矿工实现的,过程与智能合约发行匿名Token的机制类似,是SERO内建的Token发行功能。

四、最后

我们已经初步了解SERO智能合约对匿名资产发行和处理的原理,如果想要了解匿名资产发行的技术细节,请阅读《SERO官方WIKI》中的教程《发行匿名Token实战》

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。