镜像网络(Mirror World Network)是一个结合区块链与分布式存储的文件系统,旨在提供高质量低价格的文件存储服务,构建易用、可用的分布式落地应用。
该系统使用点对点 P2P 网络、DHT 分布式哈希表、数据加密分片、IPFS 网络协议、多链激励机制区块交换等技术,构建了全球化高安全性、高隐私性、高可用性、多链部署的分布式存储生态,其友好、包容性强的特点使得当前的各种公有链、存储网络、个人节点均可进行部署运行。
设计原理
1、节点不可靠假设
指一个松散的但有较强鲁棒性的网络组织结构,允许单点故障和短时间内节点处于不可用状态。
2、所有权和隐私性
数据所有者具有数据的所有权和完全访问权,且数据是加密并具有隐私性的。经过所有者授权后其他角色才能访问和使用数据。
3、可量化的贡献度
参与系统各方的贡献度都应该有相应的量化标准和可被观测的贡献度。比如采用 PoST 和 PoR 作为存储空间和存储时间的量化证明。
4、最终状态一致性
允许数据对象在不同节点处于不同状态,但其状态能快速收敛获得全网一致性。
5、可监测和可恢复
可检测整个网络的可用性和数据对象的全网状态,并根据策略一定程度自主修复。
6、可审计和监管
在数据所有者知悉并同意的前提下,可在某些特定领域或场景进行一定程度的监管和审计。
7、可扩展 API
具有很高扩展性和易用性的 API。
系统架构
· 镜像网络提倡开放、包容、法制。
· 协议由以下部分构成:角色、网络、数据、贡献量化、奖惩、多链。
· PoR(Proof of Replica)和 PoST(Proof of Storage & Time)作为数据备份和存储时长的量化凭证。
· 数据分片、多备份、数据纠删以保证数据的安全性和可用性。
· 内置 IPFS 协议,和现存各种公链和区块链网络形成多链生态,完成数据和价值传输。
· MW-PAIR 和 MW-UTXO 授信框架可满足企业或监管机构的审计和监管需要。
角色定义
镜像网络把存储网络的参与者根据职能进行了角色定义。多个角色可以由同一个实体节点承担。全节点需要根据其信用 PoC【信用证明】来进行评定。
1、数据体(Data Object)
数据体(Data Object)是未分片(Piece)前的数据对象。除开分片外不能被单独拆分,对外部系统具有唯一性。
2、数据所有者(Data-owner)
数据所有者是数据体的拥有者。数据所有者对数据体进行签名并有权随时进行检查,以确保数据真实地进行了安全存储。
数据所有者可以根据数据的重要性对安全存储提出不同等级的要求,镜像网络会根据相应的要求,选择合适的数据安全策略对数据体进行存储。同时选取合适的存储节点,保证满足用户的存储要求。当然面对需求等级越高的数据安全性,数据所有者也需要支付更高昂的数据存储费用。
3、存储者(Storer)
存储者提供磁盘空间存储数据以此获得相应报酬。存储者需要接受数据所有人或者观察者的随机校验以提供存储证明。比如:接受 PoST 的校验,以证明数据在约定时间内一直存储于磁盘内。注:下文称呼的“存储节点”是运行了存储客户端的物理节点。
4、观察者(Watcher)
观察者需要观察和检测整个网络中数据体的状态,检测存储的数据体是否满足安全策略,并修复安全缺陷,因此观察者需要稳定在线。作为全网状态快速收敛的必要角色,观察者则是数据体索引服务的不二人选。
观察者不定期对存储者进行心跳检测,以确保数据的可用性。还可以接受数据所有者的委托,帮助数据所有者发起数据校验,以确保数据是安全和可用的。基于性能考量,这些工作大多数都在链下完成。分散的权利和网络组织结构能进一步确保数据对象的安全性,同时降低网络被恶意攻击的可能,因此我们希望观察者是一个独立的节点,这样就可以和出块节点及数据存储节点形成掣肘关系。
5、出块者(Miner)
即是区块链网络中通称的“矿工”。出块者需要运行客户端(命令行或则 GUI)保存所有的区块信息,并承担处理交易和打包出块的工作。镜像网络网络的稳定性、连通性、吞吐率等性能指标和出块者的内存和计算速度有极大的关系。所以出块者一般由全节点担任,以确保稳定在线、高吞吐和较高的处理效率。只有连入镜像网络的全节点才能争夺出块权,出块共识机制会选用 PoS 或 DPoS。
6、证明者(Prover)
为上链数据提供证明使之具有公信力。证明人所提供的证明数据和原始数据对象会关联在一起并记录到链上,具有可追溯和不可篡改性。
证明人在现实世界多数场景下是具有公信力的组织或政府机构担任。比如数据版权领域,最具权威的证明人是国家版权总局,证明人节点对接国家版权总局作为版权总局的代理节点存在于镜像网络网络中,提供相应的版权证明服务。在数据存证场景中,证明人由公证处和司法机构担任。经过它们进行过公证后的链上数据就具有社会公信力和司法效力。
7、全节点(Full-Node)
全节点是运行了镜像网络客户端,能稳定在线,具有较好的网络带宽和处理性能的物理节点。全节点默认打开了出块者角色,可以根据自身的硬件情况有选择地打开存储者和观察者角色。
网络拓扑
我们需要构建一个拥有数量众多和随时有节点加入和退出的对等网络。因此一个好的路由表维护和查找算法是十分重要的。我们优先选择 Kademlia 协议(以下简称 Kad)[1]作为基础来构建 P2P 对等网络(Chord 算法也是备选项)。Kad以异或算法(XOR)为距离度量基础构建的分布式哈希表(Distributed Hash Table),大大提高了路由查询速度。这对于存在大量存储节点的镜像网络是非常需要的。Kad 网络的实现也会分为两步,首先我们会构建基于简单路由表的 P2P网络,在开放存储节点客户端的同时完成 Kad 网络的开发。
Kad 协议中 K 桶的节点列表维护正好符合我们对节点的在线要求,不过未来可能会根据 PoC 中对节点的信用评级来作为排序和换出的一个权重值,以帮助观察者挑选合适的最近节点进行数据分布的调整。
数据对象操作
1、PRCDO = (Put,Get,Watch)
2、Put(data)→key
客户端执行 Put 协议存储数据,key 是这个数据的唯一标识。
3、Get(key)→data
客户端使用数据唯一标识 key 执行 Get 协议取回数据。
4、Watch
观察者执行 Watch 协议对已存储的数据进行校验,并同步该数据对象的全网状态。并根据不同安全策略对已发现的数据丢失、数据错误、存储者不可用等异常情况进行修复。
数据存储
客户端(Client)发起存储数据请求,请求记录到存储账本(Store-Book)。
客户端(Client)支付存储费用,镜像网络返回匹配的存储节点(Storer)。
客户端(Client)上传文件到存储节点(Storer)。
存储节点接受完数据后更新存储账本(Store-Book)和数据对象(Bean-Book)的全局状态。
根据安全策略,广播数据备份任务(Replica-Task)到网络。
其余存储节点进行数据备份,并检查是否满足安全策略定义的副本数,未达到的话继续广播数据备份任务到网络。
数据取回
客户端(Client)发起取回数据请求,镜像网络从对象账本(Bean-Book)中获取最新的数据对象返回给客户端,并向存储节点同步此数据取回请求。
主动模式下,客户端和存储节点建立连接,并从存储节点获取数据。被动模式下,存储节点会将数据推送给客户端。
存储节点(Storer)在客户端取回数据后,会更新存储账本(Store-Book)中。
存储节点接受完数据后更新存储账本(Store-Book)和数据对象(Bean-Book)的全局状态。
客户端(Client)在取回数据后会更新证明账本(Proof-Book)以证明存储节点确实保存了数据对象。
数据检查
客户端(Client)或观察者(Watcher)根据时间随机生成校验码 C,并把随机验证交易记录到证明账本(Proof-Book)。
镜像网络要求对应的存储节点(Storer)根据校验码 C 生成相应的存储证明M。
存储节点(Storer)在有限时间内将存储证明 M 提供给客户端(Client)或观察者(Watcher)进行验证。
客户端(Client)或观察者(Watcher)验证通过后更新证明账本(Proof-Book)。验证通过后镜像网络会生成奖励交易(Reward-Book)并将部分存储报酬解锁给存储节点(Storer)。
引入 Merkle 树[6]和 ZH-SNARK[7]让存储节点进行存储证明。存储证明的随机检查由数据所有人或观察者发起。详见 PoR【备份证明】和【存储时长证明】。
观察者需要根据安全策略,有规律地对全网的数据对象进行检查。维护数据的全网状态一致性,同时还有义务修复存在的或潜在的安全性和可用性问题(如:① 数据分片丢失或不可用,② 存储者长期不可用并已超过预设的阈值)。
状态收敛
对一份数据的备份耗时,以及观察者对数据进行检查并调整数据分布的时间耗时可以认为是数据对象的收敛性证明问题,以下我们进行概要性证明。
假设网络中有个 N 个节点,存储一份数据的时间为 St,则极端情况下在进行了 N-1 次询问后,网络中的最后一个节点才应答被认为是可用的。则备份一份数据文件的时间复杂度是 O(N)+St,St 在网络稳定的情况下是个常数,所以时间复杂度可以简单认为是 O(N)即在网络中寻找可用节点的时间总开销。这对一个经常有加入和退出节点的网络 O(N)是不可忍受的。不过 Kad 网络中的 k 桶(K-Bucket)的引入可以帮助缩短查询可用节点的开销。假设 t 是目标查询节点,由于每次查询都能从更接近 t 的 k 桶中获取信息,这样的机制保证了每一次递归操作都能够至少获得距离减半的效果,从而保证整个查询过程是可快速收敛的且收敛速度为 O(logN)。
数据安全性
1、数据加密
数据文件在客户端中会默认进行加密(AES-256-CTR)后再存储到存储节点。意味着数据存储者实际上无法查看该文件的内容。对于敏感数据,数据所有者可以自行选择使用硬件加密的方式生成加密文件数据后再存储到镜像网络中。
2、数据体分片
数据体分片(简称“数据分片”)的策略和安全策略紧密相连,如果数据所有人对数据的安全性要求很高,分片能很大程度保证数据的安全性。为了保证数据分片的可用性我们引入了数据纠删。
我们认为存储节点不会为过小的文件作弊,存储节点删除数据文件只保留相应的 R 证明并不能带来显著的经济收益。大多数情况下普通存储节点的性能瓶颈是带宽和磁盘 I/O,意味着普通存储节点的磁盘空间并未存满数据分片文件。但是过多的小文件确实会拖慢数据的读写,这个问题可以依赖镜像网络提供高性能的并行数据处理来进一步解决。
3、多备份
假设镜像网络中有 b 个存储节点,数据被分片成 p 份,每个数据分片的备份数为 n。则能成功取回数据的几率 Rs 公式如下:
4、安全策略
最基本的安全策略就是按照通常数据灾备的方式一份数据至少存在三份拷贝:同节点或则临近节点一份,不同地域的节点存储一份,跨国家的节点存储一份。不过更高的安全策略意味着使用更多的存储空间,更复杂的数据“观察”和“调整”。镜像网络中允许数据所有者根据自身需求定义数据安全策略,目前允许设置的参数有:数据备份数、数据分片数。安全策略会直接影响到观察者如何修复丢失数据,也会影响数据对象在全网的状态收敛速度。
数据可用性
1、数据纠删
纠删码(Erasure Coding ,EC)[2]是一种数据保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。为了确保数据的可用性而又不过度占用存储空间(可以增加存储节点的空间利用率),镜像网络对数据体分片会进行数据纠删处理。
Reed-Solomon(简称 RS)码[3]是较为常用的一种纠删码,它有两个参数 n和 m,记为 RS(n,m)。n 代表原始数据块个数,m 代表校验块个数。以下是全备份和 RS 纠删码的性能比较,具体算法实现请参见[4]和[5],此文不再赘述。
2、分布调整
观察者会不断调整数据的备份和分布,以确保当前的数据文件是安全的并至少有一个可以访问的资源。
共识和出块
我们认为比特币网络中的 PoW 共识出块,虽然向人们展示了一个简单明了的经济激励框架和共识机制,能保证一个无主分布式网络很好地工作。但是随着矿工开始使用昂贵的硬件设备和更进一步地硬件“军备竞赛”,消耗掉大量电力和计算资源仅仅是为了争夺出块权,我们认为这不仅是一种资源浪费还过度消耗了硬件资源增加了大量的电子垃圾。我们希望能在保证区块链网络安全的同时提供低消耗的共识出块算法。
1、共识出块
多链共识出块的方式,由交易包(Tx-Bundle)、镜像网络区块(MW Block)组成。这种方式允许每个镜像网络矿池在内部执行不同的共识算法,一个交易包中包含了所属镜像网络矿池中的交易记录。由全节点生成包含了不同交易包的镜像网络区块并公布到网络中,每个交易包(Tx-Bundle)需要包含镜像网络矿池和节点的身份信息: Node-ID,Pool-ID,Area-ID。
一个全节点只能连入一个镜像网络矿池,连入了镜像网络链(即 0 号镜像网络矿池)的节点可以打包生成镜像网络区块。未来我们会探索让镜像网络矿池单独打包出块,可行的实现思路是在每个镜像网络矿池中部署至少一个连接了镜像网络链的代理节点(MW Agent)。
2、信息上链
不是所有的数据和信息都需要上链,尤其是在镜像网络中大部分的数据和操作结果都不会上链。比如:数据文件就不会保存在链上,链上保存的对象 URI是一个指向了当前可用资源地址的指针。
除开基本的区块信息外,上链的有:账务交易、对象数据、存储交易、证明交易。值得注意的是一个存储交易会对应一个对象数据但是可能会导致一个或多个奖励交易(基于 PoST 的存储报酬发放算法)。
贡献度量化
引入 Merkle 树[6]和 ZH-SNARK[7]构成 PoR(备份证明 Proof-of-Replica)和 PoST(存储时长证明 Proof-of-Storage&Time)作为存储者(Storer)存储数据的量化凭证。信用等级高的存储节点允许采用 PoR 用较短时间就可以提供证明,信用评级较低的会要求使用 PoST 提供存储时长证明。
1、备份证明 Proof-of-Replica
数据所有人可间隔一段时间就向镜像网络请求相应的备份证明:
数据所有人基于时间生成一个校验数 C 发送到镜像网络。
存储者需要根据 C 找到对应的数据分片并生成M(merkle校验树)。
如果校验通过镜像网络会更新存储账本(Store-Book)和奖励账本(Reward-Book),并解锁存储账本(Store-Book)中该笔交易的部分奖励作为存储报酬。
2、存储时长证明 Proof-of-ST(storage and time)
PoR 虽然能保证数据存储者至少会保存数据一次,但是无法避免作恶者进行欺骗,考虑以下场景:
存储者在第一次按要求对数据进行备份后,对所有的数据分片和可能的拆分序列计算其 merkle 检验数,并删除数据分片文件仅保存 merkle 校验树。
存储者收到证明指令后,请求其他保存了数据备份的节点获取数据,并计算出 C 相应的M(merkle校验树)。
以上场景中,作恶者使用极低的计算和存储成本就可以获得存储报酬。因此引入 PoST,以确保只要数据存储者没有存储数据分片文件就无法正确计算出merkle 校验树,也就无法获得存储报酬:
数据分片后生成一个熵值序列 S,然后使用 S 和数据分片再生成哈希值 R。每隔一段时间数据所有者向镜像网络发送 Sx(基于时间的熵值,全局唯一),存储者需要根据 Sx 和对应的数据分片计算出 Rx,并根据 Rx 生成相应的 merkle校验树。
有了前置熵值序列,还可以实现由观察者代理进行数据检查。数据所有者可以提供一部分熵值序列交由观察者,由观察者来完成 PoST 的证明校验。为了更加安全地执行,未来会依靠智能合约来实现代理检查逻辑。
3、信用证明 Proof-of-Cred
在镜像网络中信用证明是和账户绑定的,在海螺链 CPOS 评分体系[8]基础上根据不同角色相应的计算公式侧重点会有所不同:
存储节点:存储总量、存储时长、在线时长、被惩罚量。
全节点:最大交易处理量、出块速度、分叉收敛速度、在线时长。
观察节点:索引服务性能、在线时长。
数据所有者:存储数据量、交易量。
证明人:证明量。
MW 币(MW-token)
MW 币是镜像网络中的内置加密数字 TOKEN。主要用于激励镜像网络构建的存储生态,奖励对镜像网络做出越多贡献的角色,同时使用 MW 币作为经济惩罚的手段,避免恶意节点作恶和智能合约中可能出现的无限循环的逻辑炸弹等。同时 MW 还作为多链(多镜像网络矿池)结构下的锚定原生 TOKEN。同时 MW具有交易燃毁功能,用户支付 MW 作为存储费用的同时,我们会根据流通数量的一定比例燃毁 MW,将部分 MW 转移到黑洞地址,起到通缩的功能。
MW 区块链(MWBC)
节点和网络:MWBC 会使用改良版的 Kad 协议组成点对点对等网络,为了在早期快速形成稳定的网络和足够数量的全节点,镜像网络会发布存储和挖矿一体矿机 MW-BOX。
多链生态
部署了镜像网络的矿池构成了多链生态。
1、交易交换
每个子链/平行链内部的交易包(Tx-Bundle)包含了定义的所有交易类型。最终交易包会被打包成镜像网络区块(MW Block)并广播到网络中。
2、价值交换
每个子链/平行链可以定义内部流通的代币,依靠 MW 币可以在子链/平行链间完成不同代币的交易,进而形成价值交换。未来还会引入信息和价值的跨链互换,基于同态通道的哈希锁和智能合约应该是较好的选择。
授信框架
当前大量的商用场景仍需要一定程度的监管和审计,这种监管和审计应该是在双方知情的情况下进行的。镜像网络提供了一个基础框架帮助完成账户授信和审计。便于个人、企业、监管机构能够在日常的使用中对用户的授信数据进行访问和使用。
1、账户授信
信息的分级和审计需要在数据所有者的知晓和授权下完成。借鉴 BIP39[9]多级分层确定性钱包的思路让数据所有者进行授信。我们会参考 BIP44[10]的路径定义方式和以太坊 EIP85[11]中的讨论,引入账户的概念构成如下路径:m/purpose’/coin_type’/ account’ /change/address_index
2、审计
由于交易双方的匿名性,即使区块和交易信息公开的也无法很好的对信息进行审计。比如交易信息,审计方需要获得交易双方的授权下,才能解锁账户信息和交易信息、账务信息等进行比对。审计方需要重复授信过程获得双方的账户授信后才能完成交易的审计,所有的审计结果也会记录上链。当然为了商用还可进一步设计批量账户授信等模型,尤其是在 C 端用户信任 B 端地场景下可以避免审计者重复申请授信的冗长过程。
3、KYC
镜像网络中不对用户身份进行识别,相应的身份识别可由上层使用者自行决定如何实现。
4、信息分级
信息分级类似于数据读写权限控制,将不同数据对象分级使用不同的衍生密钥(不同的 HD 路径)进行加密,这样获得衍生密钥仅能解读这一部数据。这会导致比较复杂的私钥生成和数据加密逻辑,未来会进一步讨论实现方案。
恶意攻击
1、51%攻击
这是所有区块链系统都会面临的问题,想完全避免这一问题是不可能的。为了降低被攻击的几率,镜像网络采用 PoC 和 DPoS 来出块。
2、Sybil 攻击
镜像网络要求一个交易至少向周围临近的 3 个节点进行校验,除非攻击者能计算出被攻击节点附近的网络拓扑并伪装成与之临近的节点,否则这个方案可以极大几率降低 sybil 攻击。随着越多节点加入,sybil 攻击的概率也会大大降低。在早期官方节点的地址列表会公开于官方和内置在发行的客户端中。只要 3 个检验节点中包含一个官方节点就可以有效避免 sybil 攻击。
3、数据欺诈
如果存储节点在收到随机校验请求后,在极短时间内从附近的数据存储节点获取数据文件并计算出正确的 merkle 验证路径,该节点就能通过校验并获得存储报酬。采用 PoST 可以极大降低这种概率,对于进行数据欺诈的节点还会受到相应惩罚,比如:降低其信用评级,或则永远不被允许接入镜像网络。
4、数据劫持
拒绝提供最后一个数据分片使得无法还原分片前地数据体对象,以此来向数据所有者勒索高昂的费用。在镜像网络中数据进行了分片和多备份,存储节点不一定知晓哪一块数据分片才是最后一块。即使存储节点知道,也可从其他节点取回数据分片地备份。除非所有拥有该分片的存储节点都被恶意攻击者控制,此种情况地概率较低,随着镜像网络更加离散,数据劫持地概率会进一步降低。
5、数据抹除
当存储节点认为当前的数据分片存储的奖励额度过低或则纯粹因不再想存储该数据分片,选择从磁盘删除该数据分片。镜像网络的多备份可以降低此种情况给数据所有者带来的损失,还可以调整 PoST 的奖励策略,将大量地存储报酬在存储时限到达时进行发放。最有效的是对该存储节点进行惩罚,降低其信用评级,减少该节点未来的可能收益。
技术方向及可能性
根据 CAP 理论,我们必须在一致性 (Consistency)、可用性 (Availability)、分区容忍性 (Partition Tolerance)中做出取舍。我们假定一种策略:N = 副本数,W = 一次成功的写操作必须完成的写副本数,R = 一次成功的读操作需要读的副本数。策略即是我们对 NWR 的数值进行设置,得到一种 CAP 的取舍。比如Amazon 选择的是 N3W2R2,意味着当两个数据副本失效时,受影响的这部分数据就变成只读,无法再写。未来会继续研究和参考当前领先的云存储服务商(Amazon、Facebook、Aliyun)进行优化,以确保在更好的性能的基础上拥有更好的数据可用性。
为了降低数据纠删时计算资源和网络 I/O 的开销,在实现了经典的 RS 纠删码后,会根据实际需要考虑是否实现 SIMD 技术加速和 LRC(Locally Repairable Codes)纠删算法,如 FaceBook 和加州大学提出的 XORing Elephants[12]。
我们已经将万维网发明者 Tim Berners-Lee 爵士发明的全新去中心化 WEB应用协议【SOLID】与镜像网络进行了技术对接,并成功进行了测试,以此满足未来世界中个人的私有数据库需求,真正做到将数据所有权还给个人,并解决隐私问题。
应用愿景
建立全球分布式存储基础设施。
镜像网络与大部分去中心化应用思想不同,我们认为这个世界需要联盟和秩序,比如中国近三十年的高速发展就给世界带来了新的秩序,同时推动了各种技术上的竞争进取,随着万物互联、5G 时代的到来,人类生活数字化的成型,对全球存储设施的需求将会爆发式增涨,我们计划在 2020 年-2023 年建成满足 1亿人使用的存储设施节点群,我们希望全球存储类、开源类公有链以及拥有存储资源的企业及个人能够加入镜像网络,为人类提供全球化的、高安全性、高隐私性、高可用性、永久性、低成本的存储服务。
关于更多镜像网络信息:https://mwfs.io/