牛牛项目白皮书 1.0 版 - Niuniucurrency/Niuniu-currency GitHub Wiki

一、什么是牛牛币

牛牛币是基于区块链技术,将实体世界的资产进行数字化,形成数字资产,并通过点对点网络进行登记存管、转让交易、清算交收的去中心化分布式总账协议。牛牛币使用电子合同(electronic contract)来记录数字资产的流转。在牛牛区块链中,电子合同凭证(electronic contract token)作为一种通用的底层数据,可以用于记录股权、债权、证券、金融合约、积分、票据、货币等各种权利和资产,用于股权众筹、股权交易、员工持股计划、P2P借贷、积分、基金、供应链金融等领域。

二、什么是虚拟货币

虚拟比特币(BitCoin)的概念最初由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。

三、虚拟货币的技术核心

我们认为,虚拟货币的核心基于区块链,区块链的技术核心是如何达成分布式共识——即在没有中心或具有多个中心的网络中,各个节点如何对该网络内所发生的所有事务(transactions)达成一致认识。这些一致认识包括了事务的内容、有效性、时间顺序等要素。

1、通过数字签名对事务内容、有效性达成分布式共识

在传统的纸质系统内,事务内容(交易指令)往往和鉴权信息(签字盖章)分别存放。比如银行窗口取款时,用户签字确认的申请单和银行系统的交易记录账本是分开存放的。这样一来,就无法银行以外的人员就难以对这些交易指令的真实性进行验证。区块链系统将事务内容和鉴权信息绑定存放(bundling)。各个节点无需借助中心机构,仅凭数字签名就能自行验证交易指令的完整性(未经篡改)和有效性(签名者有权限),从而实现了对事务内容和有效性的分布式共识。

2、通过共识机制对事务顺序达成分布式共识

由于点对点网络下存在较高的网络延迟,各个节点所观察到的事务先后顺序可能不一致。因此区块链系统需要设计一种机制对在一定时间内发生的事务的先后顺序进行共识。这种对一个时间窗口内的事务的先后顺序达成共识的算法被称为“共识机制”。常见的共识机制包括:

工作量证明:比特币、以太坊(现在)

权益证明:点点币、未来币、以太坊

代理权益证明:比特股、Crypti、Lisk

UNL/Quorum Slice:Ripple、Stellar

拜占庭容错共识:牛牛、Hyperledger Fabric

3、通过散列算法对历史数据达成分布式共识

区块链系统一般会通过引用前一区块的散列值(哈希)的方式,构造一种链式结构,实现类似于“骑缝章”的效果。任何对单笔交易内容进行的篡改都会引发绑定的数字签名的失效;任何对交易顺序进行的篡改,又会引发区块散列值的变化,导致“骑缝章”无法对上。因此,任何节点都可以无需借助于中心机构,自行验证全部的历史交易的有效性,对此达成一致认识。

通过“智能合约”对计算结果达成分布式共识

Nick Szabo在1993年提出了Smart Contract的概念,远早于区块链的出现。比特币的脚本系统是对智能合约概念的第一个基本实现。以太坊在其基础上做了较大的发展,实现了一个更为灵活的图灵完备的智能合约平台。此外,Hyperledger也实现了基于容器技术的智能合约(其称之为chaincode)。我们认为区块链之上的智能合约是在对事务的内容、有效性、顺序、历史数据等达成共识的基础上,以这些数据作为输入,对计算得出的结果所达成的再一次的分布式共识。 除了以上的各种共识的达成,区块链技术还包括了闪电网络、侧链、跨链交易、隐匿地址(Stealth Address)、保密交易(Confidential Transaction)等不仅仅局限于分布式共识的技术模块。

四、设计目标

牛牛币的愿景(mission)是“让区块链技术最大化运用”。牛牛币希望构建一种能够对接世界各种资产的桥梁式的金融系统。比如论坛打赏、商城对接、微商团队对接等,同时与菲律宾某知名娱乐城达成共识,将牛牛币应用于娱乐城消费筹码,合规对接实体世界。

1、无分叉的确定性记账

我们认为区块链现有的共识机制可以被分为两大类:“单人记账”和“联合记账”。

比特币、以太坊、比特股等区块链均使用单人记账模式。单人记账模式下,单个节点符合一定规则(如所持算力、权益、选票)即可完成单个区块的记账工作。其他节点通过在此区块后追加新的区块,表达对该区块的认可。追加区块就像在对历史进行投票。当发生分叉时,哪个历史的票数更多(链更长),这个历史就是大家的共识。

单人记账下的交易确认是一种概率的表达,例如:获得一个确认(交易被包含进一个区块)的交易成为历史共识的可能性是98%,获得两个确认(包含该笔交易的区块后面被追加一个区块)的交易成为历史共识的可能性是99%,而六个确认的则可能是99.999999%。但理论上,即便是一万个确认也仍然存在被推翻的极微小可能。比特币等区块链通过添加人工检查点,写死了较久远的历史,避免此类极端情况。

如果说单人记账模式通过事后投票(追加区块)的方式来进行共识,联合记账模式则通过事先决议的方式来产生确定性的记账节点,从而避免了事后投票,获得了确定性。在公有链中,这种事先决议可以是链上投票选举。选出一批记账节点后。每个新的区块均由这些记账节点共同签名确认。这样就把“事后投票,确认越多概率越高”的模型改变成了“事先投票,确认即最终”的模型,获得了理想的交易最终性(finality)。

单人记账里的事后投票(追加区块)是对区块内容而非对区块生成者的投票,因此适合无身份信息的公有链。但单人记账模式下,交易的最终性较弱,不太适合金融交易。联合记账模式需要引入对记账节点的弱信任,即相信不会有大量(一般指1/3或以上)的记账节点勾结作恶。那么这就需要对这些记账节点的控制人的身份有所了解,一来可以判断其声誉和技术能力,二来如果作恶,可以用密码学证据进行事后举证追责。因此联合记账适合有身份信息的公有链和联盟/私有链。

一般认为单人记账模式有较好的可用性,即在发生网络分区时(如一国与他国的互联网线路完全断开)仍然能够较好的工作。但这种可用性只适用于跟随了较长链的节点。当网络分区恢复时,跟随较短链的节点所看到的历史会被长链所改写。对于跟随较短链的节点而言,这是一种牺牲一致性换得的虚幻的可用性。

可以说单人记账模式选择了匿名性,实现了无需对任何节点的信任,但牺牲了一致性、最终性;联合记账模式选择了一致性、最终性,但需要记账节点提供身份,以获得其他节点对其的弱信任。

2、节点的分工与专业化

中本聪最初对于比特币的设计目标是极为扁平化的。所有的节点都参与:记账(挖矿)、存储完整历史数据、转播交易,没有专业分工。然而在实践中比特币逐渐演化出了专业分工。记账(挖矿)已经从中本聪设想的“one CPU one vote”一路演进出了使用GPU、FPGA(现成可编程逻辑门阵列)和ASIC(专用集成电路)的矿机。目前ASIC矿机以外的计算设备已经不可能经济地进行挖矿。记账节点已经完全专业化。

比特币过去7年的几十GB的历史数据也成为了一种存储负担。许多普通用户不再愿意运行需要存储完整历史数据的全节点,而是转而使用web钱包、off-chain钱包等等。尽管有呼吁运行全节点的各种呼声,然而全节点的数量却在持续下降中。

在牛牛区块链里我们的设计目标是让整个系统有清晰的角色分工。记账节点是牛牛区块链的最核心角色,受牛牛币持有人的委托负责参与共识,制造区块;全节点是牛牛区块链网络的主要组成部分,一般由提供对外服务的服务提供商运行,保存完整的历史数据,侦听并转播交易;而普通用户则运行轻节点或仅仅作为客户端接入。普通用户通过浏览器或移动App接入牛牛生态上的服务提供商,只同步和保存自己有关的数据。由于牛牛区块链使用了基于弱信任的联合记账模式,区块中包含了记账节点的数字签名,普通用户无需下载完整历史数据也能对当前区块进行校验。我们认为这样的模式有利于实现“让区块链技术最大化运用”这一牛牛币的愿景。

需要说明的是,上述弱信任不是对某个记账节点的信任,而是对记账节点这一团体不会勾结作恶的弱信任;不是被动的中心化机构指定的信任,而是以去中心化的方式由用户自主投票选择的弱信任。

五、高扩展性的架构设计

1、低延迟、高吞吐、可插拔

可扩展性是制约区块链技术和传统技术竞争的一大因素。比特币为了实现抗审核和无需信任的设计目标,选择了工作量证明这一共识机制,同时也带来了高延迟、低吞吐的性能问题。牛牛使用了依赖弱信任的共识机制,并专业化了记账节点,做到了低延迟,高吞吐。牛牛的共识机制保证了确定性的小范围的专业性的记账节点名单,从而实现了低延迟和高吞吐。

目前牛牛区块链的出块时间被人工限定为15秒。未来当记账节点之间的网络连延迟足够低时,大部分区块有望在1秒内完成。在100Mbit/s的带宽下,通过外置硬件实现密码学计算,牛牛区块链每秒可以处理数千到万级的交易量。

另外,牛牛区块链采用可插拔模块化设计。用户可以自换共识机制,ECC/散列算法,P2P网络协议等模块。同时,只要把牛牛币视为联盟/企业的投票权,牛牛区块链就可以很容易的改造为联盟/私有链。商业机构可以在牛牛公有链上进行概念验证,如有需要则可以快速迁移到联盟/私有链模式;反之,商业机构先运营牛牛区块链派生的联盟/私有链,如有需要则可以快速迁移到牛牛公有链,而无需对周边系统大动干戈。

2、分层设计和超导交易

为了在支持多种资产,多类型交易的同时达到良好的扩展性,分层设计是必不可少的。Ripple、比特股、NXT等带有去中心化交易所功能的区块链没有采用分层设计,由区块链本身实现订单簿和交易撮合功能。在这类区块链上,挂单、撤单、撮合等操作均记录在区块链上,这种设计具有多重弊端: 挂单、撤单需要等待区块确认,延迟高体验差

挂单、撤单需要支付交易手续费,还增加了存储和带宽消耗

由于存在买卖交易,交易的顺序变得极为重要。将订单簿和交易撮合在区块链层实现,就赋予了记账节点更大的特权,记账节点能够按照其意愿对交易进行排序、取舍,拥有了抢先交易(front-running)的能力。

尽管支持链上的资产互换交易,但是牛牛区块链本身并不提供订单簿(order book)和撮合(order marching)功能。牛牛区块链只负责交易的执行和结算。我们的分层设计中把订单簿和撮合功能放在第二层,通过一种叫做“超导交易”的机制来实现完整的交易功能。

超导交易下交易双方不需要把财物托管给一个中介(传统交易所)。用户仅仅需要把用私钥签名过的订单发送给交易所,交易所完成买方和卖方的订单撮合后,在牛牛区块链上广播交易,完成结算。自始至终财物不离开用户的控制,杜绝了传统交易所的道德风险。超导交易机制下的交易所仅仅起到信息撮合的作用。

在超导交易机制下,由于用户拥有绝对的控制权,因此用户可以通过主动双花导致订单无法被结算。这一问题可以通过交易所将该用户列入黑名单予以惩罚和震慑来解决。

六、系统资产

1、牛牛区块链中内置了一种系统资产:牛牛币。牛牛币代表牛牛区块链的所有权。

牛牛币,英文Niuniu currency,缩写为NNC。

牛牛币共1亿份,代表了牛牛区块链的所有权。

1亿份牛牛币在创世块中一次性被创设出来,并按一定的分配方案进行分配。

牛牛币的总量恒定为1亿,不可增加。牛牛币的最小单位为0.1牛牛币,不可再分割。

2、牛牛币的分配机制

1亿总量的牛牛币在创世块中被一次性创设。在创世块运行前为保证牛牛币不被贬值,牛牛团队将预挖100%牛牛币,按照一定的规则对牛牛币进行分配。 约总量10%的牛牛币在2017年2月被分配给了牛牛的早期支持者,获得了100万元的种子资金。其中67万元由若干个人按830万整体估值出资,33万元由风险投资机构镭厉资本按1666万元整体估值出资。个人出资者同时还无偿地全职或兼职地提供了各种支持。

约总量40%的牛牛币将在启动的ICO项目上分配给参与者。ICO一期认购总量10%牛牛币,价格为1元预计2017年7月开始;ICO二期认购总量15%牛牛币,价格为2元预计2017年8月开始;ICO三期认购总量15%牛牛币,价格为4元预计2017年9月开始。ICO设计了可退回机制,具体见认购细则,认购机构由官网公告发出。

约总量10%的牛牛币暂时冻结,用于上线交易所及市场的宣传与推广(具体内容与时间另行发布)。

剩余总量50%的牛牛币由牛牛团队持有,将在牛牛主网上线后利用牛牛智能合约锁定20年。自2017年开始,2031年结束,每年释放总量2.5%牛牛币,这部分牛牛币将用于维护牛牛币的长期发展运营。

早期支持者、认购参与者所分配到的牛牛币都将在牛牛区块链主网运行后立即获得。牛牛币区块链主网预计2017年7月开始运行。

七、项目进展

1、2016年4月组建团队;

2、2016年7月决定区块链命名及区块链应用;

3、2016年8月与技术团队达成战略合作开发牛牛区块链及牛牛币;

4、2017年2月牛牛区块链及牛牛钱包开发完成,约总量10%的牛牛币分配给了牛牛的早期支持者;

5、2017年7月开始ICO一期认购总量10%牛牛币,价格为1元,并完成配发工作;

6、2017年8月开始ICO二期认购总量15%牛牛币,价格为2元,并完成配发工作,同时上线交易所(具体交易所官网另行发布);

7、2017年9月开始ICO三期认购总量15%牛牛币,价格为4元,并完成配发工作;

8、2017年10月牛牛币与菲律宾娱乐城对接并逐步对接全国各大论坛、商城及微商团队等各个领域的市场应用。

八、用户安全

1、私钥、公钥

私钥:一个256位的随机数,由用户生成并保管且不对外公开。私钥是用户账户使用权以及账户内资产所有权的证明。

公钥:通过一定算法,每一个私钥都有一个与之相匹配的公钥。牛牛区块链中的公钥由私钥通过ECC(椭圆曲线密码学)曲线算法生成。牛牛区块链将支持的ECC类的算法为secp256r1和 SM2(中国商用密码算法)。

2、脚本、地址

脚本:牛牛区块链使用了类似于比特币的OP_CODE脚本系统。牛牛区块链中的OP_CODE是一套类似于脚本语言的图灵完备的指令集。 牛牛区块链支持的哈希算法是SHA256和SM3(中国商业密码算法)

地址:地址是脚本的哈希值。

3、账户和账户地址

账户是指一定数量(1-16个)的公钥的组合。最基本的账户由一个公钥组成,其账户地址就是其1-of-1多重签名地址。

更高级的设计中,账户可以由两个公钥组成,这两个公钥所生成的2-of-2多重签名的地址为账户地址。两个公钥中,数值较小的那个为支付公钥;较大的为查询公钥。持有查询公钥对应的私钥(即查询私钥)可以读取该账户所能控制的资产的余额和历史交易信息,持有查询私钥和支付私钥可以支配该账户所能控制的资产。结合牛牛区块链的隐私地址方案,用户可以对外提供一个固定的账户地址作为收款信息,而不会牺牲隐私。

在钱包客户端设计中查询私钥和支付私钥可以用密码加密。

4、身份认证

用户(个人或机构)可以向CA证书颁发机构申请身份认证,以便于在交易中向其他交易参与方提供真实身份信息。申请认证时,用户向CA提供本人所控制的公钥和身份证明材料,并以对应私钥签名。核实无误后,CA向用户颁发一份数字证书,该证书由CA机构签名,证书内包含了用户的公钥和身份信息。该数字证书证明了该公钥和用户身份间的一一对应关系。

用户在使用牛牛区块链时,以此公钥对应的私钥对交易进行签名。该签名符合中国《电子签名法》中“可靠电子签名”的定义,具备法律效力。

5、隐私保护

区块链对于数据公开的要求和隐私保护具有一定矛盾,然而通过一些密码学技术可以解决隐私保护问题。

牛牛区块链的隐私保护方案结合了多重签名隐匿地址、加法同态加密等前沿密码学技术。使用牛牛区块链的隐私保护方案后,除了该笔交易的直接参与者,其他第三方都可以验证交易的有效性,但无法知晓该笔交易的参与者身份和交易金额。

多重签名隐匿地址下的交易数据仍然是全部公开的,但每笔交易间不存在可分析的联系性。即使是同一人向你发送了多笔交易,这些交易也会分散在多个毫无联系的地址中,除了你本人没有人能发现或证明这若干个地址属于你。牛牛区块链在BIP63基础上进行了扩展,加入了多重签名和查询私钥的特性,形成了多重签名隐匿地址方案,具体将另文详细详述。

多重签名隐匿地址可以包括用户身份但不能保护交易金额。牛牛区块链使用加法同态加密手段来隐藏交易金额,但又能让网络中的节点验证交易的有效性。牛牛区块链中的其他节点可以验证某笔资产的交易完成后,全网内该资产的余额不变,从而验证该笔交易的金额有效性,而又无需知道具体的交易金额。

6、区块链

牛牛区块链使用类似比特币的区块链来记录数据。

区块链可以被想象成一本账本,每个区块就是这个账本里的一页账目。每页账目里包含了一个预设时间段里的所有交易。牛牛区块链的区块链约每15秒生成一个区块。新区块附加于前一个区块之后,形成一个链的结构。每个区块内包含了15秒内所发生的交易信息,以及其他必要的检索和校验信息。

免责声明详见:https://github.com/Niuniucurrency/Niuniu-currency/wiki/%E5%85%8D%E8%B4%A3%E5%A3%B0%E6%98%8E%E5%8F%8A%E9%A3%8E%E9%99%A9%E5%A3%B0%E6%98%8E

注:该白皮书为牛牛白皮书的 1.0 版本,后面根据牛牛的发展需要和战略调整,将推出牛牛白皮书的 2.0 版本

⚠️ **GitHub.com Fallback** ⚠️