拨开重重迷雾挖掘新公链
随着行业发展,新公链逐渐进入大家的视野里,新公链的市场竞争也越发激烈,但仍然有很多人不了解新公链的真面目。技术的进步,使互联网产业也进入高速增长期,越来越接近互联网的极限,并逐渐开始互联网底层架构的短板,而伴随着互联网产生的就是信息安全危机,要想解决这类问题就需要说到新公链,新公链可以免许可无主导占据的拥有属于自己的网站、域名,自带密码安全业界顶级的安全属性,实现完全隔断个人信息泄露等问题。
新公链将承载庞大的人类数据,极大降低信息成本,提高商业效率,是一个颠覆现有商业模式,改变商业游戏规则的伟大创新。谈起移动互联网,大家都亲切地称之为新一代互联网革命,史无前例地改造了现代人们的生活方式,彻底颠覆了我们的认知。但是我们拨开这些高大上的外衣,从本质上看一下什么是移动互联网,无非就是起源于两个简单地不能再简单的进步,都谈不上什么技术创新,其一就是计算机便携化,也就是将电脑微型化,手机化,可以随身携带。其二就是无线网络带宽逐步增加,从 GPRS 到 3G 4G 5G 等数据传输的速度和容量都极大增加。但是仅仅看这两个简单的进步,你很难想象它们带来了多大的变革,甚至向回推个几年,站在当时的人的角度,能想象到今天连小商小贩都接入到移动互联网支付的场景吗。这就是概念的价值,概念帮助我们通过现有的技术发展,来展望未来,来引导现在的资本,资源去流向这些领域,并脚踏实地的创造出我们所理想的世界。
但是新概念也是两面性的,币圈有着大量包裹着新概念外壳的骗局,加上主流媒体的推波助澜,以及万众创业带来的各种不靠谱的商业模式,让人们对币圈以及对互联网创新天生就带上有色眼镜,第一反应就是骗局,就是为了套投资人的钱,然后套现跑路。但是如果拒绝某些新概念,就可能错过一个风口,错过一个时代。因此一味地听信新概念和一味地拒绝新概念都是不可取的。我们能做的,就是拨开重重迷雾,看清新概念的本质,找到新概念的理论基石,用自己的知识储备和理性思考去判断新概念究竟是否可行,如何实现,有哪些阻碍,应该如何克服。
未来新公链的特性
上文提到,所有高大上的新概念,都可以被剥离成一个或多个看起来非常小或者简单的技术进步,这些进步要么是创造性的,要么是规模性的,在创造性上,新公链可以重拾最早的比特币技术路线并加以全面改进,在规模性上,主要在其他方面的基础设施得到完备,为这种新概念的生长提供了土壤。
而奠定新公链的基石,使新公链的发展成为的前提,我们需要先解释其他几个方面的发展。首先是比特币,一个基于稳定的共识体系运行了十余年的 POW 分布式账本,一个坚如磐石的去信任工具,一个提供点对点价值流通的网络。其次是存储成本在降低,现在随便一个手机就能达到上百 G 甚至上 T 的容量,大型的数据中心存储数据容量少说都是按 PB 为单位来计算的。再次就是网络传输的速率也在飞速提升,移动互联网已经开始商用 5G,而有线互联网也全面普及光纤,各大洲之间的骨干网络也在拓宽。这些基础设施的发展,可以使新公链更上一层楼。
我用白话的方式来解读我的理解——未来的新公链的特性
-
全网免许可,没有人可以主导整个网络,没有人有权利占据和分配域名,ip这些资源,每个人都可以拥有自己的网站,拥有自己的域名,不需要任何人许可。
-
网络上的内容和使用记录都是永久保存的,整个网络的所有历史都被备份了下来,不存在某个商家或某个公司倒闭而丢失数据的情形,而在这个网络上,作恶的记录也会永久地保存。
-
该网络跨洲跨界跨平台,无论你用的是怎样的终端设备,无论用的怎样的网络协议(ipv4 还是 ipv6 亦或是自定义协议),无论你用的是哪家公司的应用 app,无论你是哪个商家的用户,大家都在同一个生态环境下运行。各个大商业体要实现数据共享,跨平台合作也非常容易。
-
该网络自带密码安全业界顶级的安全属性,网络原生就支持身份认证,权限管理,无需单独实现安全通讯协议。
-
该网络原生支持价值传递。你可以不受约束地将价值(钱或者等值的资产 token)通过网络直接传输给网络中的任意一个个体,没有中介,也不需要单独打造一套支付系统。这种价值传递的摩擦非常小,以至于极端微型的价值传递都是可能的,你可以做到向 100 万人提供服务,却每人只收取1分钱。
-
该网络是一个开放全球云操作系统,每个人都可以在这个操作系统上进行登录和操作,甚至执行代码,每个人都可以自由地以各种方式来与网络中的其他人交互。每个操作都是公开,可信且带有永久的日志备份的。
上面几点就是根据我的理解,对未来公链应有的特点进行的说明,当然,我的理解一定是片面的,未来一定有我还没有想到的特性被发掘出来。就像没人能够想到,手机网速快了点,怎么就催生了短视频这么大的产业一样。
刚才那些描述,其实没有提到比特币,因为比特币只是新公链鉴权协议所使用的一个基础层,或者一个工具,如果对比特币的特性没有概念或从未有过认知,那么看我刚才的描述,简直就是天方夜谭,这与现在我们日常接触和使用的因特网有巨大的差异,上面的功能没有一个是现代的互联网自带的属性,都需要借助互联网上层的应用来实现,正是这种各自为营的实现,才让现在的互联网实质在退化成一个个的信息孤岛,各大互联网厂家已经把资源和标准划分的差不多了,而各个大厂生态之间也很难进行互通。就以一个支付为例,互联网没有公链的支付属性,所以在互联网上发展出来的支付一定是五花八门,各自掌管着自己的生态,生态之间阻碍极高。典型的如国内的微信支付宝,美国的 paypal,日本的 line 和 paypay,各自占据自己领先的市场,而支付市场是一个具有马太效应,强者恒强最后一统天下的市场,只有在原生支付公链中才可能实现市场的统一。
结合前面的分析,这里用四个字来概括新公链的竞争核心之一:数据上链。
大家可能会好奇数据上链有什么用,而创新的特点就是这样,表现出来的本质或者实质及其简单,但是内部的信息量极大,从中衍生出来的可能和场景具有更大的信息量。像上链,上什么链,成本怎样,性能怎样,安全性怎样,如何具备可拓展性,如何索引并找到数据,如何避免垃圾信息和 DDOS,数据之间如何交互,如何面对法制和监管等等这一系列的信息,每一个都值得专门写一篇文章来论述。但我认为,如需使用新公链作为链上存储媒介,就应该提出一个能有效解决上面的所有问题的方案。
MVC 将开启数据上链的新公链革命
使用链上储存时,存储的媒介是一笔交易,因此在解释 MVC 鉴权协议的时候,我们将一个交易称为一个节点(原文翻译是节点,这个节点和我们的挖矿全节点或 spv 节点是无关的,这里的节点只是为了描述拓扑结构而命名的一个 node,所以为了不带来混淆,有的翻译也将节点换做顶点)。而表示两个交易之间关系的数据结构被称为”边“。由”顶点“和”边“可以组成一副图。比如三角形,就是3个顶点三条边组成的一个图形。而在 MVC 中,一个交易自己是一个顶点,同时也规定的自己的边。
每个顶点拥有一个自己的 MVC 鉴权协议公钥(或 MVC 鉴权协议地址),这个公钥是用来标记一个特定的 MVC 公链的数据资源。有朋友这里会问,不是一笔交易代表一个数据资源吗,没错,一笔交易代表的是”某个版本“的一个资源,而公钥代表的是这个资源本身。换句话说,在 MVC 上,代表一个资源,一张图的是公钥(或地址),而交易则代表这个资源的版本。这个公钥虽然可以随意指定,但是要注意,这个公钥还代表了这个资源所拥有的权限,后文会讲到。
然后来看交易格式:MVC 鉴权协议交易是一个 OP_RETURN 交易,在 OP_RETURN 中的第一个数据是一个四字节的固定字符”mvc“,用来标记这是一笔 MVC 交易。第二个数据是代表这个数据资源的公钥(图中的 Pnode),用来代表这个资源本身,公钥的作用是用来控制权限。然后就是其父顶点的 TXhash(图中的 TXIDparent),用来标识父子关系,如果此字段为空,则该点就是根节点。之后就是可以自由定义的数据体,这个数据体可以以 bit 协议的自定义地址开头,让这个数据变成 bit 协议下的数据,也就是说,通过这种方式,给 Unwriter 大神的 bit 协议套上一个外壳,使数据带有 MVC 鉴权协议的层级关系和权限关系,内部可以继续实现 bit 协议。
刚才提到,OP_RETURN 的第三个数据是其父节点的 TXhash,也就是通过这个数据可以找到由谁产生的这个数据。虽然这个数据是写在子节点的,但是不能乱写,如果没有父节点的权限,产生的子节点是非法的,那如何确定子节点是否真的由合法的父节点产生的呢,这就要用到比特币本身的公钥系统。子节点标注了父节点的 hash,通过 hash可以找到父节点的 MVC 鉴权协议交易,父节点交易中必然带有父节点用来证明身份的公钥(Pparent),而MVC要求,只有子节点的输入 input 中带有父节点的公钥以及签名,那么子节点才被认为是父节点产生的。换句话说,只有父节点才有权产生子节点,这个权限由比特币的签名系统来保证。这也就是上图中 input 里的。
总结一下 MVC 鉴权协议的交易格式。一个交易代表一个数据体节点,同时记录了该节点的父节点,并用交易 input 签名来证明父节点和子节点的亲子关系是合法的。因此 MVC 鉴权协议交易有几个必要的要素,input 中的,OP_RETURN 中的 ”meta“ 标志,Pnode 以及 TXIDparent 这5个要素构成了 MVC 鉴权协议交易。
这个交易的格式可以说非常简单,但这就是 MVC 强大的地方,大道至简,简单而优雅地结合了 OPRETURN 存储数据的灵活性和比特币自身的权限校验功能,充分结合了这两种机制的优越性,并使用比特币网络来作为安全和信用背书。我之前有想过只用bit协议来管理权限,但是都没有 MVC 想的这么优雅和简单。
在这种交易格式下,我们可以抽象出以下的特点:
- 一个子节点只能有最多一个父节点(如果有多个父节点则拓扑结构会变成环形,复杂度增加)
- 一个父节点可以产生无数多个子节点,而且只有拥有父节点 Pnode 的私钥,可以正确生成子节点
- Pnode 公钥代表一个链上资源,而交易 hash(TXID)则代表它的版本,通过 Pnode 加上 TXID 可以唯一的确定一个资源
- 如果两个交易的 Pnode 相同,说明这两个交易是同一个资源的不同的版本,以最新版本为准。最新版本的定义是工作量最大(简单理解就是高度越高)或者同一个区块(内存池)中的拓扑排序(TTOR,BCH 搞不了这个)
- 权限控制是通过父节点来指定子节点的特性,而子节点也可以指定孙节点的特性,证明权限的方法就是 input 中的签名
- 构造链式权限结构的时候不要求使用特定的 UTXO,只要 input 带有父节点的签名即可。比如可以增加其他输入来付款,付款地址不一定是父节点的 UTXO,二者没有关系,付款用的 input 只用来付款,而父节点的地址用来鉴权
现在我们了解了 MVC 链上的数据结构和形态,以及基本的特点,之后我们讨论一下传统互联网所具备的域名,url,搜索等功能是如何在 MVC 上实现的。如果没有这些功能,我们使用互联网也很难找到网上的数据,因为 ip 地址对人类而言是不可读的,因此才产生了域名系统,也就让不同含义的域名产生了价格。现实中互联网分配域名的权利是掌管在 ICANN 以及其下的各种域名商手中。
MVC 鉴权协议要进入日常的使用,一定也要设计出这种人类友好的域名系统。但是与互联网不同的是,MVC 鉴权协议没有 Ip 地址的概念,MVC 鉴权协议是跨平台的,只有地址和交易的概念。这里说个题外话,就是开头所提到的问题,MVC 并不是运行在互联网之上的,MVC 与互联网从概念上就是两种不同的组成形态,MVC 鉴权协议是点对点的,只有地址的概念没有 ip(其实 ip 也是地址的一种,只不过因为数量太有限或因为由电信供应商所控制,而 ip 不是独占的是复用的,从这个角度讲,ip 是地址的一个子集)的概念。因此 MVC 的域名就只能从地址本身入手,因为不会存在一个中心化的单点的域名分配机构来分配域名(可能有一些自发实现的 bit 协议来试图分配域名映射,但是想达到垄断和通用很难)。
比如一个网站,按照 MVC 鉴权协议的树状结构,应该有一个节点作为根节点,这个根节点需要一个公钥或地址作为自己的标志。如果我们将根节点的地址作为网站的入口,那就需要在浏览器中输入根节点的地址作为域名。但是地址本身不可阅读,引入域名系统又带来单点问题。MVC 对此给出的对策就是荣耀地址(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 文件夹表示我的动态。
通过我们刚才的分析,其实大家已经发现了,MVC 鉴权协议最开始的设计就是层级结构,也就是一个个节点之间自然而然地构成了一个资源定位的功能。只要给每个节点加一个别名,那自然就可以构造出一模一样的资源定位架构。这就被称为 MVC URL。它也有个前缀,类似http,只不过称为mnp(MVC Protocol),mnp://domainname/path/file。
这里还要提一点,与传统 url 不同的是,传统互联网的父子路径之间的管理是完全交由网站进行自定义的,而 MVC 鉴权协议父子节点之间自带权限控制关系,并且这个权限可以进行拆分。拿刚才我的知乎主页这个例子,zhihu.com 和 people 两个节点可以是知乎的网站所属的节点,而 hqm-84 这个节点完全可以指定成我自己控制的地址,只有我可以修改下面的路径,知乎无权修改我这个节点下属的全部资源,可以做到让用户真正地拥有自己的数据。
总结
MVC 鉴权协议说复杂可以很复杂,说简单也可以很简单,就是定义了如何在链上存数据,以及让数据之间相互关联。
结合上面的 MVC 鉴权协议介绍和现在数据上链的痛点,我们可以想象一下如何用 MVC 鉴权协议架构改造bitpaste,让它对作者和读者都更好用。首先,弄一个域名 1bitpasteXXXXXXXXX来作为根节点,然后建立一个 user 的子节点,然后再其下建立多个用户的账户节点,这些节点的地址是每个用户自己的地址(可以通过 xpub 导出一个地址),然后只有用户自己(拥有私钥)才可以修改这个账户节点下属的资源。那么在一个特定的账户节点下有两个文件夹,一个称为 purchase,一个称为 artifact,用来存储购买记录和创作记录,然后在用户每次付费购买新文章后,purchase下创建一个新子节点,用于付费及存储购买记录,而用户每次发布新文章之后,在 artifact 目录下创建一个新子节点,用于存放用户的文章,只有拥有账户节点(私钥)的用户可以合法创建文章。用户也可以修改自己的文章,或者删除文章。
经过上述改造后的 bitpaste 就很好用了,用户用助记词进行本地登录之后,可以访问到purchase 目录下自己的所有购买记录,也可以访问 artifact 目录下,自己的全部创作历史,通过 MVC 鉴权协议的强关联性解决了前文提到的离散数据的痛点。同时带来了权限管理和用户自己掌控数据的优势。