本文首发于知乎专栏
今天我们谈一谈metanet,这个被各大bsver所追捧的新一代网络架构究竟为何方神圣。
从去年11月分叉的时候,csw博士正式提出了这个被称为”元网“的宏大愿景,到近期多伦多大会正式确立了Metanet的技术实现和规范定义,我们对这个来自未来的颠覆式的网络技术也算可以管中窥豹,可见一斑。
Bsver对Metanet的评价可谓是史无前例的高,这种评价甚至会让不懂的小白认为是在吹逼,仿佛那些号称百万千万tps的公链项目,什么颠覆业界形态,制霸智能金融的IXO所打出的旗号一样,是不是又是一个准备圈钱跑路的山寨项目?很多新人对BSV的第一印象就是看不懂,搞出那么多新概念,新名词,一个个都那么晦涩难懂,颇具币圈特色啊。大家把元网这个概念和什么币圈的”跨链共振“,”交易挖矿“,”分片“等等概念放在一起,很容易令人产生这种传销洗脑一般的不适感。
我们首先来看看Metanet广为流传的版本是什么。首先最有名的定义就是博士给出的,要把Internet(现代互联网)作为Metanet的侧链。很多人听到这个理论,立刻回面红耳赤地前来争论,明明比特币是运行在互联网之上的,为什么又说互联网可以运行在比特币之上,可以作为metanet的侧链或者子网。这个问题无非就是你如何定义网络,如何定义链接,这里先按下不表,后文会说明。另一个很重要的理念就是,比特币只是副产品,只是为了实现metanet而被发明出来的一个工具,而最终的愿景就是Metanet,这个元网将承载庞大的人类数据,极大降低信息成本,提高商业效率,是一个颠覆现有商业模式,改变商业游戏规则的伟大创新。
扯了那么多,大家可以发现还是没有解释为什么Metanet如此伟大,比特币如何改变世界,没错,这就是新概念的意义。打个比方,谈起移动互联网,大家都亲切地称之为新一代互联网革命,史无前例地改造了现代人们的生活方式,彻底颠覆了我们的认知。但是我们拨开这些高大上的外衣,从本质上看一下什么是移动互联网,无非就是起源于两个简单地不能再简单的进步,都谈不上什么技术创新,其一就是计算机便携化,也就是将电脑微型化,手机化,可以随身携带。其二就是无线网络带宽逐步增加,从GPRS到3G 4G 5G等数据传输的速度和容量都极大增加。但是仅仅看这两个简单的进步,你很难想象它们带来了多大的变革,甚至向回推个几年,站在当时的人的角度,能想象到今天连小商小贩都接入到移动互联网支付的场景吗。这就是概念的价值,概念帮助我们通过现有的技术发展,来展望未来,来引导现在的资本,资源去流向这些领域,并脚踏实地的创造出我们所理想的世界。
但是新概念也是两面性的,币圈有着大量包裹着新概念外壳的骗局,加上主流媒体的推波助澜,以及万众创业带来的各种不靠谱的商业模式,让人们对币圈以及对互联网创新天生就带上有色眼镜,第一反应就是骗局,就是为了套投资人的钱,然后套现跑路。但是如果拒绝某些新概念,就可能错过一个风口,错过一个时代。因此一味地听信新概念和一味地拒绝新概念都是不可取的。我们能做的,就是拨开重重迷雾,看清新概念的本质,找到新概念的理论基石,用自己的知识储备和理性思考去判断新概念究竟是否可行,如何实现,有哪些阻碍,应该如何克服。
上文提到,所有高大上的新概念,都可以被剥离成一个或多个看起来非常小或者简单的技术进步,这些进步要么是创造性的,要么是规模性的,创造性的就比如比特币引入POW本身,而规模性的主要是其他方面的基础设施得到完备,为这种新概念的生长提供了土壤。
而解释Metanet之前,先解释其他几个方面的发展。首先是比特币(BSV),一个基于稳定的共识体系运行了十余年的POW分布式账本,一个坚如磐石的去信任工具,一个提供点对点价值流通的网络。其次是存储成本在降低,现在随便一个手机就能达到上百G甚至上T的容量,大型的数据中心存储数据容量少说都是按PB为单位来计算的。再次就是网络传输的速率也在飞速提升,移动互联网已经开始商用5G,而有线互联网也全面普及光纤,各大洲之间的骨干网络也在拓宽。这些基础设施的发展,奠定了Metanet的基石,使Metanet的发展成为可能。
什么是Metanet,我这里用比较白话的方式来解读。
上面几点就是根据我的理解,对metanet的特点进行的说明,当然,我的理解一定是片面的,未来一定有我还没有想到的特性被发掘出来。就像没人能够想到,手机网速快了点,怎么就催生了短视频这么大的产业一样。
刚才那些描述,其实没有提到比特币,因为比特币只是metanet所使用的一个基础层,或者一个工具,如果对比特币的特性没有概念或从未有过认知,那么看我刚才的描述,简直就是天方夜谭,这与现在我们日常接触和使用的因特网有巨大的差异,上面的功能没有一个是现代的互联网自带的属性,都需要借助互联网上层的应用来实现,正是这种各自为营的实现,才让现在的互联网实质在退化成一个个的信息孤岛,各大互联网厂家已经把资源和标准划分的差不多了,而各个大厂生态之间也很难进行互通。就以一个支付为例,互联网没有元网的支付属性,所以在互联网上发展出来的支付一定是五花八门,各自掌管着自己的生态,生态之间阻碍极高。典型的如国内的微信支付宝,美国的paypal,日本的line和paypay,各自占据自己领先的市场,而支付市场是一个具有马太效应,强者恒强最后一统天下的市场,只有在元网这样的原生支付网络中才可能实现市场的统一。
结合前面的分析,这里用四个字来概括元网的本质,数据上链。
数据上链有什么用,很多人开始摸不着头脑,创新的特点就是这样,表现出来的本质或者实质及其简单,但是内部的信息量极大,从中衍生出来的可能和场景具有更大的信息量。首先上链,上什么链,成本怎样,性能怎样,安全性怎样,如何具备可拓展性,如何索引并找到数据,如何避免垃圾信息和DDOS,数据之间如何交互,如何面对法制和监管等等等等一系列的信息,每一个都值得专门写一篇文章来论述。我这里直接抛结论,使用BSV作为链上存储媒介,可以有效解决上面的所有问题,至于为什么,可以参考我之前的文章,或者通过群里分享的大量而全面的资料来学习。
根据前面的分析,我们得出Metanet的本质就是数据上链。抛开所有高大上的概念,就是简单的数据上链。但是自分叉之后,各种数据上链工具层出不穷,典型的如Planaria,B协议,C协议,memo协议,tokenized协议等等。这些协议以及它们储存的数据与metanet有怎样的联系呢?为什么Metanet又如此特殊呢,其实在这次多伦多会议之前,我的理解是上面的各种协议都属于metanet,Metanet只是个宏观的概念,而微观的实现就是上述各种协议。在这次白皮书发布之后,我仔细研读了白皮书,并配合会议视频以及ppt,发现我之前的理解有一些偏差,这里就解读一下Metanet的白皮书。
学习Metanet之前,我对Unwriter大神的各种上链工具以及查询工具,包括bit协议这种通用范式进行了学习和研究。在实际使用的过程中,我们渐渐会发现一些问题,就是使用变形虫框架以及B协议C协议下的链上存储,数据之间的关联性很难建立起来。打个比方,我的文章都会在bitpaste上进行上链,然后付款构造交易后,bitpaste会返回给我一个交易hash,我凭借这个交易hash来找到这个文章并进行分享。而我在下次分享的时候,就会建立一个新的交易,一个新的毫不相关的交易Hash来存储文章。那么我就必须维护一个映射表,文章标题与链上Hash之间的关系,一旦这个映射表丢失,我自己可能再也找不回来我自己所发的文章了,或者找回来很麻烦(比如有些朋友会提醒使用moneyButton的交易历史来找到对应的交易,这样虽然可行,但是从实现逻辑上来讲,不友好,不优雅,也不够直接,强烈依赖于moneyButton,同时也依赖于bitpaste不要变更协议)。同样,付费阅读我文章的朋友,可能需要维护一个已购文章列表,不然弄丢了hash,哪怕付费过的文章可能想看也没办法在数据的汪洋大海中找到。
之前我们介绍过bit协议,是Unwriter推出的一个通用性的协议,不可否认,这个协议的设计非常灵活和普适。通过bit协议,就可以定制出刚才说的数据关联格式,但是有个问题,就是耦合度。由于bit协议太过灵活,所以数据之间的关联在不同的bit协议下是不相同的,也就是说如何关联数据和bit协议怎么定义是强烈耦合的,不同的团队和产品设计的bit协议可能大相径庭,因此在跨团队或跨产品共享数据的时候就有很大的问题。为什么不从根本上设计一个关联协议,大家都遵守这个协议,在此之上,再各自发挥想象力去定义数据呢。比如说,互联网就带域名url这样的层级结构,可以对数据进行关联和分组。那能不能在比特币的交易结构基础上设计一个这样的协议呢,将一个个数据点连接成图状结构。这就是metanet白皮书的重点内容,数据关联。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QdBkFwsz-1592207195154)(https://s2.ax1x.com/2019/06/23/ZPnb7Q.png)]
使用链上储存时,存储的媒介是一笔交易,因此在解释metanet的时候,我们将一个交易称为一个节点(原文翻译是节点,这个节点和我们的挖矿全节点或spv节点是无关的,这里的节点只是为了描述拓扑结构而命名的一个node,所以为了不带来混淆,有的翻译也将将节点换做顶点)。而表示两个交易之间关系的数据结构被称为”边“。由”顶点“和”边“可以组成一副图。比如三角形,就是3个顶点三条边组成的一个图形。而在metanet中,一个metanet的交易自己是一个顶点,同时也规定的自己的边。
每个顶点拥有一个自己的比特币公钥(或比特币地址),这个公钥是用来标记一个特定的元网的数据资源。有朋友这里会问,不是一笔交易代表一个数据资源吗,没错,一笔交易代表的是”某个版本“的一个资源,而公钥代表的是这个资源本身。换句话说,在元网上,代表一个资源,一张图的是公钥(或地址),而交易则代表这个资源的版本。这个公钥虽然可以随意指定,但是要注意,这个公钥还代表了这个资源所拥有的权限,后文会讲到。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mYhVtwct-1592207195158)(https://s2.ax1x.com/2019/06/23/ZPZ1SK.png)]
然后来看交易格式:metanet交易是一个OP_RETURN交易,在OP_RETURN中的第一个数据是一个四字节的固定字符”meta“,用来标记这是一笔metanet交易。第二个数据是代表这个数据资源的公钥(图中的Pnode),用来代表这个资源本身,公钥的作用是用来控制权限。然后就是其父顶点的TXhash(图中的TXIDparent),用来标识父子关系,如果此字段为空,则该点就是根节点。之后就是可以自由定义的数据体,这个数据体可以以bit协议的自定义地址开头,让这个数据变成bit协议下的数据,也就是说,通过这种方式,给Unwriter大神的bit协议套上一个外壳,使数据带有metanet的层级关系和权限关系,内部可以继续实现bit协议。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3JSVmef-1592207195161)(https://s2.ax1x.com/2019/06/23/ZPmwM8.png)]
刚才提到,OP_RETURN的第三个数据是其父节点的TXhash,也就是通过这个数据可以找到由谁产生的这个数据。虽然这个数据是写在子节点的,但是不能乱写,如果没有父节点的权限,产生的子节点是非法的,那如何确定子节点是否真的由合法的父节点产生的呢,这就要用到比特币本身的公钥系统。子节点标注了父节点的hash,通过hash可以找到父节点的metanet交易,父节点交易中必然带有父节点用来证明身份的公钥(Pparent),而metanet要求,只有子节点的输入input中带有父节点的公钥以及签名,那么子节点才被认为是父节点产生的。换句话说,只有父节点才有权产生子节点,这个权限由比特币的签名系统来保证。这也就是上图中input里的。
总结一下metanet的交易格式。一个Metanet交易代表一个数据体节点,同时记录了该节点的父节点,并用交易input签名来证明父节点和子节点的亲子关系是合法的。因此metanet交易有几个必要的要素,input中的,OP_RETURN中的”meta“标志,Pnode以及TXIDparent这5个要素构成了metanet交易。
这个交易的格式可以说非常简单,但这就是Metanet强大的地方,大道至简,简单而优雅地结合了OPRETURN存储数据的灵活性和比特币自身的权限校验功能,充分结合了这两种机制的优越性,并使用比特币网络来作为安全和信用背书。我之前有想过只用bit协议来管理权限,但是都没有metanet想的这么优雅和简单。
在这种交易格式下,我们可以抽象出以下的特点:
现在我们了解了metanet在链上的数据结构和形态,以及基本的特点,之后我们讨论一下传统互联网所具备的域名,url,搜索等功能是如何在Metanet上实现的。如果没有这些功能,我们使用互联网也很难找到网上的数据,因为ip地址对人类而言是不可读的,因此才产生了域名系统,也就让不同含义的域名产生了价格。现实中互联网分配域名的权利是掌管在ICANN以及其下的各种域名商手中。
Metanet要进入日常的使用,一定也要设计出这种人类友好的域名系统。但是与互联网不同的是,Metanet没有Ip地址的概念,元网是跨平台的,只有地址和交易的概念。这里说个题外话,就是开头所提到的问题,元网并不是运行在互联网之上的,元网与互联网从概念上就是两种不同的组成形态,元网是点对点的,只有地址的概念没有ip(其实ip也是地址的一种,只不过因为数量太有限或因为由电信供应商所控制,而ip不是独占的是复用的,从这个角度讲,ip是地址的一个子集)的概念。因此Metanet的域名就只能从地址本身入手,因为不会存在一个中心化的单点的域名分配机构来分配域名(可能有一些自发实现的bit协议来试图分配域名映射,但是想达到垄断和通用很难)。
比如一个网站,按照Metanet的树状结构,应该有一个节点作为根节点,这个根节点需要一个公钥或地址作为自己的标志。如果我们将根节点的地址作为网站的入口,那就需要在浏览器中输入根节点的地址作为域名。但是地址本身不可阅读,引入域名系统又带来单点问题。Metanet对此给出的对策就是荣耀地址(vanity address),俗称靓号地址。对于大家都想要的资源,最简单高效的分配方式就是POW,工作量证明。去穷举私钥,找到一个靓号地址,通过自身花费的工作量,来自然获得域名,是最公平也是最终极的解决方法。比如我穷举出来一个地址1GoogleComXXXXXXXXXXXXXXX,通过前缀1GoogleCom来作为域名定位网站是最简单的。这里有朋友会问,如果两个人都穷举出一样的地址前缀呢,这个没关系,还可以通过后缀来识别网站,比如大家都知道真谷歌地址的后缀是XXXXXXXXXXXXXXX,如果有人穷举出一个1GoogleComYYYYYYYYYYYYYYY的地址,虽然这两个地址都可以通过域名1GoogleCom来搜索到,但是大家都信任后缀是XXXXXXXXXXXXXXX的谷歌地址。
这样来自己挖掘域名的方法很符合比特币的免许可的特点。自己付出工作量,通过穷举来获得靓号,不需要一个中心注册机构来发放和管理域名。同时比特币地址域名本身自带证书,不需要https这样麻烦的证书交换过程(网站上的内容绝对可信,因为没有根节点私钥是没办法修改网站的)。
域名搞定了,就是URL,如何定位一个链上网站的某个页面下的某个图片?传统互联网使用被称为统一资源定位符的URL来定位资源。URL也是树状层级结构的,比如我的知乎主页:https://www.zhihu.com/people/hqm-84/activities,可以看做一个个文件夹结构下的资源。https是协议,zhihu.com是域名,然后根目录下有people文件夹用于表示用户,其下有hqm-84目录代表我这个用户,然后是activities文件夹表示我的动态。
通过我们刚才的分析,其实大家已经发现了,Metanet最开始的设计就是层级结构,也就是一个个节点之间自然而然地构成了一个资源定位的功能。只要给每个节点加一个别名,那自然就可以构造出一模一样的资源定位架构。这就被称为Metanet URL ,即MURL。它也有个前缀,类似http,只不过称为mnp(MetaNet Protocol),mnp://domainname/path/file。
这里还要提一点,与传统url不同的是,传统互联网的父子路径之间的管理是完全交由网站进行自定义的,而Metanet父子节点之间自带权限控制关系,并且这个权限可以进行拆分。那刚才我的知乎主页这个例子,zhihu.com和people两个节点可以是知乎的网站所属的节点,而hqm-84这个节点完全可以指定成我自己控制的地址,只有我可以修改下面的路径,知乎无权修改我这个节点下属的全部资源,可以做到让用户真正地拥有自己的数据。
Metanet说复杂可以很复杂,说简单也可以很简单,就是定义了如何在链上存数据,以让数据之间相互关联。
结合上面的Metanet介绍和现在数据上链的痛点,我们可以想象一下如何用metanet架构改造bitpaste,让它对作者和读者都更好用。首先,弄一个域名1bitpasteXXXXXXXXX来作为根节点,然后建立一个user的子节点,然后再其下建立多个用户的账户节点,这些节点的地址是每个用户自己的地址(可以通过xpub导出一个地址),然后只有用户自己(拥有私钥)才可以修改这个账户节点下属的资源。那么在一个特定的账户节点下有两个文件夹,一个称为purchase,一个称为artifact,用来存储购买记录和创作记录,然后在用户每次付费购买新文章后,purchase下创建一个新子节点,用于付费及存储购买记录,而用户每次发布新文章之后,在artifact目录下创建一个新子节点,用于存放用户的文章,只有拥有账户节点(私钥)的用户可以合法创建文章。用户也可以修改自己的文章,或者删除文章。
经过上述改造后的bitpaste就很好用了,用户用助记词进行本地登录之后,可以访问到purchase目录下自己的所有购买记录,也可以访问artifact目录下,自己的全部创作历史,通过Metanet的强关联性解决了前文提到的离散数据的痛点。同时带来了权限管理和用户自己掌控数据的优势。
最后,解读一下为什么博士会说,让Internet作为Metanet的侧链,因为Internet能做的Metanet都能做,而Metanet能做的Internet很多做不了,从逻辑上来讲,Internet就是Metanet的子集,既然是子网,叫个侧链不过分吧。