
介绍
6月6日,我们发布了 Nimiq 测试网络 以获取早期的社区反馈并收集真实世界的数据。说得通俗易懂一点,Nimiq 就是:
一个万维网上无摩擦的点对点(P2P)支付协议。它融合了比特币(Bitcoin)和以太坊(Ethereum)的元素,并为 Web 平台做了精简,是下一代的区块链协议。毫无疑问,它是开源和完全去中心化的。
浏览器是 Nimiq 分布式网络里的一等公民。它能够和网路建立共识,也能够在内部进行真正的点对点(P2P)支付,而不需要依靠受信任的第三方。和传统的加密货币比起来,这种浏览器优先的方案可以大大降低开发者、顾客和商家的使用门槛。
概览
基于 Web 的区块链的主要挑战是将核心区块链组件转到 Web 平台,包括:
网络组件 用于建立 P2P 连接。
存储组件 用于存储密钥和区块链数据。
加密组件 用于散列、签名和校验。
另外,因为 Web 的限制,协议必须精简:
数据压缩 以便几秒钟内完成区块链同步,而不是几个小时。
即时且可扩展的交易 这样才能实现在柜台支付。
简易 意味着我们只做“支付”这一件事,并把它做得比别人更好。
区块链参数 为了我们浏览器优先的策略而精简。
将区块链基元转到 Web 平台
网络组件
Nimiq 的 P2P 网络使用 WebRTC 和 WebSocket 连接。
在 Nimiq 网络里面,主要有两种节点:中枢节点(Backbone Nodes )和浏览器节点(Browser Nodes)。它们使用相同的可以在两种环境同时运行的 JavaScript 代码库。
中枢节点基于 NodeJS,运行在服务器上。它们通过 WebSockets 互相通讯,同时作为浏览器节点的入口点和信令服务器,供其建立浏览器到浏览器的 WebRTC 连接。
浏览器节点构建在浏览器引擎之上,因此它们完全不需要安装。为了连接网络,它们至少要和一个中枢节点建立一个 WebSocket 连接。一旦它们建立了第一个连接,它们就开始使用中枢节点作为信令服务器,建立浏览器到浏览器的连接。浏览器节点也可以作为后续浏览器到浏览器连接的信令服务器。
从长远来看,浏览器节点主要是轻客户端,不一定要作为矿工参与。其主要用途是迅速建立共识,以证明其账户收支并将交易发送到网络中。重型矿工出于性能和便利的原因,可能更喜欢运行中枢节点,尽管我们想要把中枢节点的收益降低,以便使激励向着我们浏览器优先的策略平衡。此外,即使是运行轻客户端的浏览器也会为网络贡献资源:它们与其他浏览器共享(压缩过的)区块链数据,以减少中枢节点上的网络负载。
这种实现方案有一些缺憾:
-
根据用户的 NAT 配置,可能无法建立直连的 P2P 连接。它们需要一台 TURN 服务器才能连接到其他浏览器。在这种情况下,通过 WebSockets 仅连接中枢节点变得更有意义,因为没必要增加 TURN 服务器上的网络负载。
-
强大的浏览器 APIs 仅限于安全源。所以中枢节点需要通过 SSL 提供一个加密连接给浏览器。这样它就需要域和 SSL 证书。为了方便和廉价地访问域,我们将在中枢节点安装程序中提供动态 DNS 和 Letsencrypt。
-
根据用户防火墙的配置,可能无法建立与非标准端口的连接。在这种情况下,至少有一些节点需要在标准443端口上运行。为了避免节点以 root 身份运行,最好使用 Nginx 作一个反向代理。
存储组件
浏览器节点使用 IndexedDB API 将区块链数据和密钥存储在用户的磁盘上。由于浏览器不能存储千兆字节的数据,因此我们使用迷你区块链(Mini-Blockchain)方案压缩区块链(见压缩)。在测试网络中,私钥未经加密存储,且一旦用户清除浏览器历史记录,会跟着被删除。
在主网络中,我们将使用更高的安全标准:
使用 Chrome 的持久化存储 API,即使你清除浏览器数据,区块链数据依然存在。私钥将始终加密存储。此外,我们将为用户提供一个简单的应用程序,用于将密钥打印备份到纸质钱包中。我们还计划通过 Web USB 或 Web 蓝牙支持冷钱包。
加密组件
由于性能与安全性相关,我们需要高性能加密基元。用 JavaScript 实现无法满足性能要求。
测试网络(Betanet)加密
前期测试网络中的加密是基于 WebCrypto APIs,以达到近乎原生性能。但是,WebCrypto API 功能并不是很丰富,导致太多的次优设计决策。因此,我们不会将它用于主网络。
工作量证明(PoW)算法 使用 SHA-256,因为它是 WebCrypto 唯一支持的散列函数,对于我们的第一个公开测试网络来说,它足够了。
数字签名算法 使用 NIST 曲线 P-256,因为它是 WebCrypto 唯一支持的曲线。
主网络(Mainnet)加密(初步方案)
主网络中的加密基元将基于 WebAssembly,以达到近乎原生性能,并且我们在加密算法的选择上具有最大的灵活性。
工作量证明(PoW)算法 我们将在主网络中使用更复杂的 PoW,因为 SHA-256 将导致集中式挖矿。主网络 PoW 应该是内存费力(memory-hard)和低能耗的,使用常规硬件实现真正的分散式挖矿。至于用哪种具体算法还没有最终决定。我们正在调查多个候选方案,比如 Argon2 (虽然太慢) 或 ETHash,社区也可以提出建议,我们非常开放。
权益证明(PoS)算法 从长远来看,我们强烈希望切换到一种权益证明(PoS)算法,以实现更节能的区块链系统。我们正在跟踪其他项目的研究如以太坊,也在调查多个候选方案如 Ouroboros。同样,社区也可以提出建议。
数字签名算法 我们使用 Ed25519,因为出于性能它选用“完全透明的(与NIST算法相反)参数设计”,更值得信赖,而且它正在成为一个行业标准。
更基础的浏览器 API
ES6 类 用于清晰简单的面向对象设计。
Promises 和深受欢迎的 async/await 用于从回调地狱中逃脱。
ArrayBuffer 将区块链数据序列化为字节级,用于加密操作,网络传输和存储。
受 Web 平台限制精简协议
数据压缩
让 Web 用户下载千兆字节的区块链数据来建立共识是荒谬的。特别是在网络连接薄弱的情况下,就更加不可能了。因此,我们需要压缩数据,使得轻客户端可以在几秒钟内完成同步。
这里就是迷你区块链方案(Mini-Blockchain Scheme)发挥作用的地方:它引入了账户树(Accounts Tree,一种 Merkle Patricia Tree),这种设计跟比特币的比起来具有多重优势:
-
它简化了交易。终端用户不需要理解未花费输出的概念。它只包含一个帐户和一个结余。
-
用户可以只下载区块链的头部数据加上其帐户结余的简单加密证明,其分解为下载几百千字节,而不会失去可信度和安全性。
-
旧的块可以被丢弃,因为在帐户树中存储了完整的状态。
-
纳米客户端(Nano clients)可以运用签名的检测点来使头部链保持固定大小。此外,取决于每个检测点的完整区块链将被提供下载,以便对这些检测点进行公开验证。我们将按照每个发展计划持续实现迷你区块链方案。
-
很容易监听收支变化。
即时交易
基于“比特币闪电网络:可扩展的链下即时支付”(The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments),Nimiq 实施哈希时间锁定合约(Hashed Timelock Contracts),以支持支付通道和可伸缩的即时链下交易。这解决了微支付之上的可扩展性问题。此外,它们能够进行原子交换(atomic swaps)用以跨链互操作。还有一些方法可以在闪电网络之上启用洋葱路由(onion routing),以一种类似于 Tor 浏览器的方式提供匿名性。
简易:没有脚本语言
简易性是构建安全系统的最佳的切入点。因此,Nimiq 的唯一特征就是——从用户 A 到用户 B 可进行快速和安全的支付。 Nimiq 有意不包含脚本语言,因为以太坊已经比我们更好的解决了智能合约问题。我们不会试图在这个领域里竞争。我们希望与以太坊兼容,这样,如果 Nimiq 用户想使用以太坊的智能合约功能,就可以很容易。
“没有智能合约”方案有一个例外:对于闪电网络,将会有一个硬编码到协议中的哈希时间锁定合约。
区块链参数(初步方案)
- 区块时间:1分钟(受到“工作量证明的区块链之安全与性能”(On the Security and Performance of Proof of Work Blockchains)启发)
- 区块奖励:一开始5 Nimiq(NIM);每~20160区块减半。这个方案模仿比特币。(在测试网络中它是固定不变)
- 最大块大小:1 MB
- 难度调整:每10个区块
- 总供应量:21 Mio 币除于10⁸(就像比特币)
总结
Nimiq 推出了万维网(World Wide Web)原生的区块链技术。与传统的加密货币相比,这种方案大大降低了门槛,并将培育加密货币的大众化采用。
敬请关注
本文档还在进行中,并将定期更新。敬请关注:
关注我们的 Github 代码仓库
加入我们的 Slack 频道
加入我们的 Telegram 频道
关注我们的 Twitter
订阅我们的 Youtube
参考:https://medium.com/nimiq-network/nimiq-a-peer-to-peer-payment-protocol-native-to-the-web-ffd324bb084
网友评论