从一开始,我就认为NULS不属于这个时代,而不属于当今时代的事物会有两种方式:选择被时代遗忘,追求复古经典,或者已经站在下一个时代的站台,期待未来。显然,想要推动区块链商业应用进程的NULS,就应该属于后者!
也许是受到区块链技术热潮猛击和互联网时代流量世界的侵染,纵观现在的区块链行业,大部分人都在忙着打造自己的区块链,抢占先头市场,期望将来能在某个行业一统江湖。的确,也许大部分企业都需要一条运行自己业务的链,甚至从其他角度来说,许多去中心化的应用本身也应该是一条独立的链——比如,加密猫应该是一条链,fomo3d也应该是一条链,而不是公链上的应用。
NULS团队创造了许多模块,让开发者可以像组装模型那样轻松开发自己的链,这是足以令人兴奋的一次尝试。最终,当许多“小而美”、“专业化”、“针对性特别强”的链,像无数江河流海涌现出来时,NULS会通过跨链协议和NULS生态系统,为这些不同的链提供互相连接的能力。NULS的目标是让这些江河流海汇聚成区块链的大海洋。所以才提及到,NULS从设计模块化架构到构建跨链生态,不属于这个时代,而是跨时代的产物。
NULS的由来
回到技术发展早期,人们对如何开发一个去中心化的公共账本并不会有太多的认识和思考。比特币和以太坊的设计就像一块单片电路板,上面所有的元件都集成在一起,其中的逻辑错综复杂,没有任何分层的技术栈可言。如果你写过代码的话就会知道,解耦是设计复杂系统的第一要义。只有把各个功能分开,把一个系统拆解成干净的层级、模块和接口,代码才能复用,以及更好的做修改,为未来留下灵活的扩展空间。
比特币和以太坊就像一台整体焊死的电脑,你很难对他进行改动,里面的零件也没法拔出来做升级。当人们对公链有各种各样完全不同的想法之后,人们发现把所有东西都做在一条链上是不对的,于是很多人开始想开发自己的链。这个时候你会发现,即使比特币和以太坊开源了,你也很难进行代码的复用。除了把比特币代码拷过来,改个参数,换个名称,弄出一个山寨Token之外,做不了太多事情。
在这样的背景下,我们就想,能不能做一个工具,让大家使用这个工具能更好更快的开发自己的链呢?就好像组装电脑一样,键盘、鼠标、显示器、内存条,这些东西都是现成的、可独立拆卸的,一个不懂计算机原理的人也能像拼积木一样,制造各种各样不同性能的电脑。
因此,NULS项目遵循一切皆为模块的原则,设计了模块化架构,由微内核和功能模块组成,通过将事件和服务剥离,进而实现高度模块化的底层架构。
模块&模块仓库
既然我们想要让开发者像组装模型那样轻松的开发自己的区块链,就需要打造好一个一个的模型零件——模块。从技术上来说,区块链的搭建是很复杂的,每搭建一条链都需要包括网络、账本、账户、消息总线、交易管理、共识等这样的基础需求,和跨链、智能合约、协议升级、浏览器等不同的其他需求。大部分想要开发自己的链进行商业应用的企业,其实都不太关心技术层面,他们更关心应用层面,因为这层负责业务逻辑。然而问题是,这些企业不太关心的东西却要耗费掉他们大量的时间和成本。
所以,要解决掉这一问题就需要消除区块链的底层技术障碍,NULS认为最好的办法就是采用模块化来设计底层架构。这是一个非常酷的设计,把所有的应用需求和基础功能都被视为一个一个的模块。然而,模块化设计只是解决技术层面的问题,为了满足多元化的业务和应用,功能模块的需求是巨大的,因此NULS将提供一个涵盖大部分区块链领域技术的通用的模块仓库,来为区块链、多链、跨链提供标准部件。
NULS模块化架构由微内核,功能及应用模块,模块管理器组成。NULS将所有功能和应用模块化设计,NULS 模块提供了标准定义“NULSModule”,所有 NULS 的模块都遵循NULSModule 模块定义。吸纳了 Linux 内核设计的模块化思想,开发NULS微内核。NULS 设计遵循“一切皆为模块”的原则,用模块化支持技术更新和应用适配。
这样设计的好处体现在两个方面:
1.企业不需要再花时间和成本去钻研同样技术的基础底层技术,直接从模块仓库里选取所需模块,通过简单的配置,就可以搭链。即使模块仓库中没有所需模块,企业可以自行开发单独的业务应用,这样也将节省很多不必要的开发时间。
2.由于NULS的开源属性,开发者可以看到模块中应用与功能的底层技术,并且能对模块进行独立的升级、扩展和定制,以满足自己的搭链需求。
链工厂
看到这里,我们对NULS的模块化设计架构有了一定理解,这是NULS打造生态系统的基础,但这和NULS想要的多元化生态系统还是有一定距离。选取模块可以很方便的搭一条链,然而一条链并不能成为一个生态系统,我们需要用不同的模块搭建各种业务的链。作为NULS核心产品的链工厂,就是NULS生态的载体,从一只猫堵死一条链的以太坊得到经验,NULS通过弱化主链的全新思维模式,让各子链独立运行。这样的多链并行的方式可以解放主链的运行压力,提高子链的运行速度和能力。
同时,NULS链工厂的“四部搭链”也极大的提高了开发者搭链的速度。
1.从模块仓库中选取所需模块
2.配置系统参数
3.下载系统完整的运行包
4.云服务器一键部署系统
跨链
对于想拥有丰富业务类型的NULS生态,各子链的独立运行是非常必要的需求,但是,如今的全球化商业发展方式决定了,各业务不可能完全独立的存在。因此,NULS也给出了跨链解决方案。这也是NULS未来最重要的想象空间。
当我们没有很多条链的时候,跨链这个问题其实是不存在的。但随着现在公链越来越多,跨链就成了需要解决的问题。两条链需要彼此进行对话,比特币和以太坊彼此要进行交易、传送价值、交换各自的代币,这个东西怎么解决呢?
有这么一个思路:
假设A链的账户a1要转移其持有的资产a到b链的账户b1中,则处理流程如下:先在A链上发起跨链交易,由A链先行确认;当达到一定数量的区块确认后,交易被跨链模块推送到卫星链的节点中;卫星链接收到交易后进行确认,确认的方式分为两步:
1、通过询问A链上的节点,确认该交易是否已被确认,并且以跨链协议发送到卫星链中的交易是正确、真实的;
2、在卫星链中以拜占庭容错算法对交易进行确认,若不能获得大部分节点的认同,则该交易视为无效。
交易打包到卫星链的区块中;
节点将该跨链交易推送到B链中;
B链节点通过连接的所有卫星链的节点,对该交易进行确认,若确认不通过则丢弃该交易;
若通过确认,则创建对应的资产到目标地址中;
在B链共识中确认该交易。
完成,该资产可以在B链使用。
有了NULS跨链模块,如何构造一个互联互通的区块链网络?
一种最直接的做法是,让网络中的每一条公链都和其他不同的公链之间建立IBC通信协议。这种做法简单有效,但它有一个大问题:不具备扩展性。假设网络中有100条不同的链,他们两两互联就需要建立4590个链接。一旦链的数量增加,建立链接的数量也会迅速增加。
那可不可以不要彼此互联,直接把所有链全部串联起来呢?
这样如果有100条链,他们总共只需要建立99条链接。但采用这种方式会面临另一个问题:信任成本增高,一笔跨链交易出现双花的风险也将大大增加。为什么呢?如果A链发给B链的token是在A链上产生的,那么B链只需要信任A链的验证节点,但如果这个token是在C链上产生的,从C传到A再传到B,那么B链就需要同时信任A和C的验证节点,最终这种跨链交易的验证会非常麻烦
为了避免上面这两种类型的问题,NULS跨链方案中有一个卫星链(Satellite Chain)。所有区块链都只和卫星链通信,交易的验证由卫星链负责,各平行链信任卫星链的验证结果。基于NULS链工厂生成的各个不同区块链(如上图中所示意的链A、链B和链C),可以通过添加跨链模块,实现跟卫星链的互通。除了基于NULS链工厂搭建的区块链,其他如比特币、以太坊、EOS等异构的公链,也可以通过协议转换层的机制,将公链协议和NULS跨链协议进行适配,实现最终的链间通信。
在NULS的架构中,卫星链是Hub,所有的区块链都只跟卫星链通信,交易的验证也由卫星链来完成。每个不同区块链(链A、链B、链C...)的节点都运行跨链模块,每个节点都连接卫星链上的部分节点。为了保证网络安全,通过随机算法来决定选取哪些节点,这样可以确保节点连接的分散。
卫星链使用POC共识机制,结合拜占庭容错机制实现跨链交易的确认和打包,做到去中心化与性能、安全性的兼顾。卫星链上的协议是统一定义的NULS跨链协议,每个节点都会连接多个区块链的多个节点。
卫星链上的链管理用来管理接入到卫星链上的所有区块链,在卫星链上登记和管理链的信息,包括资产信息、跨链抵押金等。
接入卫星链的不同区块链上的token,以资产的方式在其他链上存储,一旦一条区块链收到其他链的资产,则需要在本链产生对应的资产。卫星链对在不同区块链上转移的资产明细进行记录和存储。在资产转出区块链时,会进行验证,不允许非法的资产从该区块链中产生,同时对于恶意区块链,会进行处理:暂停跨链、中止跨链或没收保证金等。
卫星链是模块化的架构,每个模块都是微服务,独立运行。微服务之间通过http协议通信。卫星链提供的微内核模块负责服务管理、配置管理和数据贡献。跨链模块也在NULS模块仓库中,可以通过链工厂选配。
总之,通过卫星链的跨链模式,解决了NULS生态内不同区块链的孤岛问题,实现了跨链的高效互通。同时模块化的架构,让跨链的实现变得更简单。
讲到这里,我们可以只关心应用层的业务逻辑,不去管底层的网络与共识层,快速地开发自己的链。除此之外,我们跨链模块,可以让这些基于NULS平台搭建的许多条不同的链互相连接在一起,拥有互操作性。除此之外,NULS的跨链方案中还包括对外协议层,也就是说除了NULS项目的链间互通,这些链还可以通过协议层与NULS生态外部的链(例如比特币和以太坊)进行价值交互。
建立标准化,化繁为简
总结来说,NULS让开发者以一种模块化、标准化、热插拔的方式(这种方式其实也是现代软件开发积累下来的大量成熟的开发技术经验),快速降低一条链的开发成本。让每个人都可以轻松拥有自己的链之后,再通过链工厂的多链并行和跨链方案所组成的生态系统,为这些不同的链提供互相连接的能力,最终组成一个大生态。
NULS认为,现在大多数开发者倾向于在以太坊上开发智能合约,而不愿意开发自己的链,主要是因为开发一条链的难度太高了。但随着模块化设计架构的普及,开发一条链的成本会变的像开发一个智能合约一样简单。这是一个很长远的构想,单凭现在的技术很难建立如此有效的标准化、个性化搭链及应用。无论是从区块链技术角度还是商业应用角度,双方都要经过一个从试探到磨合,再到熟悉的过程。但是,NULS的模块化架构是一个很有优势的构想,或许这样化繁为简的做法,会为下一个区块链技术普及的时代起到不可估量的作用。