大零币白皮书:点对点电子现金系统

概述

一个真正的的点对点的电子现金应该允许从发起方直接在线支付给对方,而不需要通过第三方的金融服务机构。现有的数字签名技术虽然提供了部分解决方案,但如果还需要经过一个可以信任的第三方机构来防止电子现金的“双重支付”,那就丧失了电子现金给人类带来的最大好处。我们针对电子现金会出现的“双重支付”问题,用点对点的网络技术提供了一个解决方案。该网络通过给交易记录打上时间戳,并通过哈希对其加密,然后将其并入一个不断增长的哈希记录所组成的链条文件中,以此形成一个新的交易记录,这个哈希记录链条文件(以下简称链条文件)是由一个需要共识证明的系统网路所提供存储和计算服务的。

在一个中心化的系统中,生产或广播区块是没有成本的,可以直接指定一台计算机每隔几分钟发布区块就可以了。但在一个去中心化的系统中,发布区块的机会应该广泛分散开来。因为制作和广播区块的成本基本为零,仅仅几美分的区块奖励就足以激励这种行为。

去中心化系统所面临的挑战是找到一种方法,来限制每隔几分钟最多有几个节点来广播区块。本文将使用一个名为 PoS(基于权益证明)的解决方案。

这个网络它自身需要最简单的结构,以方便信息包尽最大努力广播给网络上的计算机节点,同时计算机节点只需要接受它们离开时工作量网络的产生的数据链,它也可以随时加入和离开网络。

 

1 介绍

互联网商业的电子支付已经发展到了几乎都需要专有的金融机构来提供第三方信任来处理的阶段。虽然大部分交易,系统都能工作的足够好,但它还是需要面对基于信任的基础模型带来的天生的缺点。 自从金融机构不可避免的开始调解纠纷,完全而不可撤销的交易就不能真正的实现。调解成本增加了交易成本,限制了实际可行交易的最小规模,同时彻底切断了为日常小额交易提供服务的可能性,广义上的成本让系统失去了为不可撤销类型的服务提供不可撤销支付的能力。因为用户有撤销支付的可能性,所以需要某个时间段内连续性的信任,这导致商家必须防备他们的客户,骚扰他们以为了得到更多的他们不再需要的信息。不可避免的,一定比例下的欺诈性交易是可以接受的。虽然使用物理货币可以避免这些成本和支付的不确定性,但是没有商家在不通过可信任的三方的沟通渠道前提下去支付。

这就是为什么需要一个基于加密证明的电子支付系统取代原来的基于信任的基础模型,允许任意两个希望交易的双方不通过基于信任的第三方来直接支付。经过计算的无效交易将自动被撤销,以保护卖家远离欺诈,常规附带条件的契约,将被机械化的执行,将保护买家变得很简单。本文中,我们提供了一个基于 PoS(基于权益证明)的方案,从而解决双重支付问题。

 

2 交易

我们首先定义一个电子货币就是一个包含了一串数字签名的链。每一个币交易者通过用哈希技术对上一个交易信息和下一个拥有者的公共密钥两者进行加密,然后进行数字签名,最后将这些信息添加到这枚电子货币的末尾。下一个收款人通过私有密钥与链里的公有密钥进行签名验证,以确认自己是链也就是这枚电子货币的拥有者。

 

Generated

 

当然这个流程的问题在于,收款人还是不能验证币的某位拥有者是否对这个货币进行了双重花费,通常的解决办法是引入一个值得信任的中心权威,或者造币厂来检查每一笔交易的是否被双重花费。每一笔交易结束后,货币必须由造币厂回收以发行一个新的货币,只有从造币厂直接发行的货币才会被信任为没有被双重花费。实际执行过程中,信任中心启动一个“事务”,先将发送方余额进行回收,后将接收方余额进行增加。这个解决方案的灾难之处是,整个金钱系统依靠某家公司来运营造币厂,就像银行一样,每一笔交易不得不通过它们。

我们需要用一个方法来让收款人知道货币的上一个拥有者没有在更早的任何一个交易里签名授权以导致双重花费。我们的目的是,去计算以前的交易,我们不需要关心之后的交易是否对其进行双重花费。唯一的方法是知道之前所有的交易,才会确认交易不存在。基于造币厂的模型,造币厂知道所有的交易,同时决定哪一个交易请求第一时间到达。在没有可信任的三方下完成这个目的,交易必须公开发布,我们需要一个系统的每个参与者,都同意一个它们已经接受到的单一的订单历史。收款人需要通过主要节点认同它们已经第一时间收到了这笔交易来证明每一笔交易。

3 时间戳服务器

我们的解决方案从一个时间戳服务器开始,一个时间戳服务器对一组已经被时间戳标示过的数据块进行哈希加密,然后广泛公开发布这个哈希,就像新闻或者以前的论坛发帖一样。明显的,为了进入哈希里,时间戳证明了数据在这个时间是必须必定存在的,每个时间戳包含了上一个交易的时间戳在它的哈希里,以后每次交易的时间戳都对上一个进行了加强,以此形成了一个链。

 

Generated

 

4 基于权益证明(PoS)

我们将需要使用基于权益证明系统,在点对点的基础之上构建一个名为 PoS 的激励机制,该机制从比特币衍生而来,比特币需要矿工维护网络的运行和去中心化,那么激励矿工参与网络是需要的,受利益驱使,人们会追逐矿工出块所带来的利润,比特币将铸币分发做成一种激励机制,使用固定总量,分发稀缺性来吸引大量矿工涌入,成为比特币网络维护的一员。

PoS 共识网络也一样需要维护,但是 PoS 的激励和比特币的激励不一样,PoS 是新增铸币(PoS 的存量已经在初始分发时分发出去了,相当于一些PoW项目里面的预挖),比特币是存量铸币,所以 PoS 的通胀设计和比特币的存量分发设计有些许不同,造就了两种激励本质上的不一样。

PoS 共识中,激励分为两个重要阶段

启动

去中心化

PoS 网络启动之初的通胀设计, 是 PoS 网络重中之重,为了防止初始 Stake 的不足,导致的攻击成本过低问题,初始的激励要足够大,吸引人们将代币进行 Staking ,否则,短程攻击可能会发生,交易激励可能会被篡改。一般情况下,启动主网时,开发团队会利用初始分发中留给自己的代币(一般是 20%)先行 Staking 维护网络,同时禁止其他节点进入,在保证整个网络运行一段时间后(一般是小一个月),再开放给所有持币人。

而在网络顺利启动之后,去中心化又成为了一个重要的激励方向,为了防止大户更大的情况出现,很多项目会在奖励激励上做文章,比如单一节点的总量超过整体总量的 1% 时,超出部分将会的线性较少的奖励,或者不会获得奖励。比如有一个大户持币量 1.2%,那么 0.2% 的量是获得不了奖励的。这样可以有效的控制 PoS 中的大户恒大的问题。

其次,PoS 会致力于将节点出块,验证程序做得足够简单,依赖的设备随手可得,让持币人能简单的参与到项目 Staking 中来,也会使得项目更进一步的去中心化,而不会因为无技能,无设备而导致无法参与网络运行。

PoS 中的激励是通胀型的,通胀的比例作为参数被写到了创世区块中,作为可变参数,通胀率会在一个范围内(2%~20%)浮动,初始值在 5%~7%,或有线性减少或是线性增加的趋势,来保证合理性。

5 网络

运行这个网络的步骤如下:

1 新的交易数据库被广播给所有节点

2 一个选举算法能确定特定的多个验证人

3 特定的多个验证人完成记账和签名,并广播这个签名数据块给所有的节点

4 节点接受这个数据块,只有数据块中所有的信息都是验证过的,节点才会接受这个数据块

5 节点通过创建下一个数据块在数据链上,同时把发送节点数据块的哈希作为创建数据块的上一个哈希,表示它们接受了这个数据块

Generated

节点始终认为最长的数据链是正确的,会一直在上面延展。如果两个节点一起广播不同版本的数据块,一些节点先接收到一个或者另一个。在这个例子里,它们会先在第一个接收的数据块上开始工作,但是储存另一个作为下一个分支,防止它变的更长。当工作量证明网络发现其中一个分支变的更长,在短链上工作的节点会切换到更长的链上,其所属关系也会被打断,

新的交易广播不需要到达所有节点,它们只需要尽可能到达多的节点,它们将被整合进数据块中。数据块广播也容忍丢弃信息。如果一个节点没有收到一个数据块,它将持续请求它,直到它接受到下一个数据块,并相信它是丢失的那个。

6 伪随机数源

随机数分为真随机数和伪随机数,真随机数是真是发生在现实中的随机事件产生的结果,比如扔硬币,扔骰子等等,伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列,其实伪随机数并不是真正意义上的随机数。因为产生伪随机数是用确定的算法,那么只要是输入是一样的,那么输出肯定是一样的,也就意味着,输入源一旦被确定,那么输出是肯定会被知道的。

PoS 出块人不能被提前被人预测出来,如果顺序能被知道,那么出块人提前勾结形成卡特尔组织,对系统是有一定危害的。所以,PoS 中的随机算法输入源显得非常非常重要。

在该系统中,要求在下一个选举周期之前,该周期所有出块人必须披露一个Nonce,所有的Nonce会被收集到一个列表,通过Scrypt密钥衍生函数得出种子,该种子用于下个选择周期的随机种子输入源。

7 选举算法

聪,是比特币电子货币形式里,最小的计数单位,每个已被铸造出来的聪都对应一个 UTXO(未经花费的输出),而每个 UTXO 都可以对应到一个私钥,而每一个私钥都可以对应到一个持有人。如果用持币权重(Voting Power)代替算力权重的话,PoS 共识中的持币人其权重,其实就是多个聪的集合,所以选择出块人,即从这些聪的集合当中选择就可以了,哪个持有人中拥有最多被选中的聪,那他就是这个高度的出块人。

PoS 中的持币人 Staking 后,可以被最小单位 s 划分成很多份,每次出块过程中,会有一个随机数输入源 p,充当最开始的随机起始点,然后随机选出这个出块人。每个持币人都有多份 s,那么单个块的出块人就是当前包含最多 p 的持币人。

8 激励

根据规则,在成为被选举的验证人后,执行记账的义务,即可获得“利息”奖励,该奖励由币龄和当前通胀率来确定,获得“利息”后,币龄将会清零。这就保证了只要一直保持在线,预期收益是按照稳定的“利率”获取的。为了限制错过某次记账也不影响“利息”的情况,会对被选举为验证人后却处于离线的节点进行对应的惩罚,扣除一定的 Stake。

激励也可以通过交易费用获得。如果交易的一个输出值小于输入址,差值就是交易费,它作为激励被被添加进包含这个交易的数据块。

激励也可以有助于节点保持诚实。如果一个贪婪的攻击者有能力集合很多 Stake 超过诚实的节点,他要么选择从自己的交易里欺诈他人,要么使用它生成新的货币。他应该发现遵守规则获利更多,这样的规则有利于他联合其他人赚取新货币,超过了他削弱这个系统和损害自身的财富健康的有效性。

9 回收磁盘空间

一个货币里最后的交易已经被足够多的数据块覆盖,那么这个支付交易之前的数据可以不再被使用以节省磁盘空间。为了在不打断数据块的哈希前提下促进它。交易被哈希进默克尔树(Merkle Tree),这样只这个数据块哈希的根需要被包含进来,老的数据块可以被压缩进树的接下的分支而拔除。内部的哈希不需要被存储。

 

Generated

 

一个不含交易信息的数据块头部大概80字节。如果我们支持每十分钟生成一个数据块。80字节*6*24*365=4.2M/每年。2021年,每个通用的计算机都有8G内存。根据摩尔定律预测,每年增长4.8GB,数据头都被存储进内存也不是问题。

10 简化的支付验证

不需要运行一个完整的网路节点也可以认证支付,一个用户仅仅需要保存工作量网络的最长数据链的数据块头部的复本,他可通过在网络节点上排队等待直到他相信他自己已经得到了最长的链,并且包含交易的数据块已经被默克尔分支连接上。他不能检查他自己的交易,但是通过连接到链的某个位置,他能看到网络节点已经接受了这个数据,并且其后增加的数据块也证明网络节点已经接受了它。

 

Generated

 

例如,这个支付验证依靠尽可能诚实的节点控制网络,但是如果网络被一个拥有大量算力的攻击者控制,它是会容易受到攻击的。当网络节点可以确认它们自身的交易,这个简单的方法可以被一个攻击者的编造的交易来欺骗,只要攻击者拥有超过网络的算力。当网络节点侦测到一个无效的数据块,一个策略会保护反对者,他们将会从网络节点接收到警告,促使软件的用户去下载整个数据块,以确认被警告交易的一致性。支付频繁的商家还可以去运行它们自己的节点,以获得更独立的安全和更快的确认。

11 合并和拆分数据

尽管它可以控制单个货币的交易,但针对交易的每一分钱分开处理是很笨的方法。交易包含的多个输入和输出,应该允许数值的拆分和合并。通常要么就是从上一个更大的交易里单一输入,要么就是把多个输入合并成更小的数字,同时最多只有两个输出,一个负责支付,一个负责找零,如果有,则返回给发送者。

 

Generated

 

这里需要注意的是输出端。一个交易从几个交易而来,同时这些交易从更多交易而来,这不是问题。这里永远不需要去展开一个交易的历史完整复本。

12 隐私

 

传统银行的模式是给合作伙伴有限的访问权限,同时通过一个被信任的第三方来调用,以来查看一定级别的隐私。除了这个方法,维护隐私还需要通过打断信息流的一些地方,通过匿名的公共密钥,以公开需要的所有的交易。公众可以看到某人发送给其他人的数字,但是没有交易人的信息,这个很像股票交易所的信息发布级别,公众记录了单比的交易的时间和规模,但是不知道谁交易的。

 

Generated

 

作为一个额外的防火墙,同一个拥有者的每一比新交易可以连接一对新的配对密钥。一些连接还是不可避免的包含多个交易的输入,这必须暴露同一个拥有者过去的其他输入,这个风险是如果拥有者的密钥被暴露了,连接将暴露属于同一拥有者的其他交易。

13 结论

我们已经提出了一个不需要基于第三方信任的电子交易系统。我们从常用的包含数字签名的货币框架开始,虽然它提供了强大的控制力,但是在防止双重支付方面做的不完整。为了解决这个问题,我们提出了一个依靠基于权益证明的点对点网络,用其记录一个公共的交易历史,如果诚实的节点控制了主要的 Staking,那么经过计算,攻击者希望修改记录的努力将变的不切实际。这个网络简单且具备鲁棒性。所有网络上的节点仅需要一点点的协调。它们不需要被认证,信息不需要路由到任何特别的地方,仅仅需要尽最佳效果传播。只需要接受它们离开时工作量网络的产生的数据链,计算节点可以随时加入和离开网络。它们用 Stacking 投票,通过在数据块上扩展新的数据,以表示对数据块有效性的赞同,拒绝在数据块上扩展以拒绝无效数据块。任何需要的规则和奖励已经被整合进这个一致的机制且强制执行。

 


人生有無數種可能,人生有無限的精彩,人生沒有盡頭。一個人只要足夠的愛自己,尊重自己內心的聲音,就算是真正的活著。