1989年伯纳斯提出万维网的概念,于今已有三十多年。万维网发展至今,已形成一个中心化平台主导的互联网。我们可以称万维网时代的web 1.0 ,互联网时代的web 2.0,和回归“网络时代"的web 3.0。我们以web 3最具跨时代意义的一个项目为切入点,研究其全生命周期,探讨web 3项目的社会意义、背后的思想,思考造成一个项目失败的不仅仅限于技术的各种原因。
web 3.0这新生的发展中的事物并没有一个完备的定义。它可以是资本裹挟的下一代互联网,也可以是理想主义者中的去中心化乌托邦。
- web 1.0:网络-人(单向信息,只读,eg个人网站,大英百科全书)
- web 2.0:人-人(以网络为沟通渠道进行人与人沟通,eg维基、博客)
- web 3.0:人-网络-人(人工智能、关联数据和语义网络构建,形成人和网络以及网络与人的沟通,同时在SEO支持下,提高人与人沟通的便利性)
我对三者的区别在于三个时期中网络的角色——web 1.0网络是信息提供者,单向性的提供和单一性理解;web 2.0网络是平台,用户提供信息,通过网络,其他用户获取信息;web 3.0网络成为用户需求理解者和提供者,网络对用户了如指掌,知道用户有什么、要什么以及行为习惯,进行资源筛选、智能匹配,直接给用户答案。
上述引用大约是互联网上大多数人的认知,仅站在现在的时间点上看待这个问题,一个发展的问题。
我尝试把时间退回到web 2.0兴起的时代,降维打击的看在当时的简体中文世界中对web 2.0泼的冷水。
看似声势浩大的“Web2.0泡沫论”风潮,其实只是围绕着十几个人的观点、几家媒体记者展开的报道和三大门户网站(新浪、网易、搜狐)“特别策划”的产物。为数不多的几篇文章经过网络媒体的辗转转载,形成铺天盖地的舆论态势。虽然外表千差万别,但内在逻辑惊人地相似,都是围绕三条理由来展开
当然在2022年的我们可以傲慢地看这些“web 2.0泡沫论”,不过在此之后,应当了解这只是“行业成功人士”切实的维护利益的“言”而已,但身体总是诚实的。如今的新浪主要的收入来源是微博的营收,网易靠它的线上游戏也过得很好,而唯一主要靠门户网站的搜狐在其视频业务突围失败后,留给人的印象貌似只剩下了CEO张朝阳的“年轻人不要太努力。工作太辛苦会受伤,这个世界是不公平的”。
我们可以看到,Web2.0是从去年三四月份开始在整个互联网界热起来,在这个过程当中到现在大概一年多的时间,我们可以看到在Web2.0一年多的发展过程当中其实是经历这样几个阶段,第一个阶段,是人们对这个事情很新鲜,不知道它是什么,对它这个模式充满了一种好奇和一种不确定性因素的一种想象力。我觉得Web2.0其实给我们带来的是一种在互联网经营和互联网认识上一种非常大的变革和提升是什么呢,它把互联网的精髓、互联网操作的套路,淋漓尽致的彰显出来。为什么这样讲?因为Web2.0提倡的是个性化服务和共性服务的相融合,这个方面通过博客、IS等等这样的要素,使得把真正互联网操作的社会化、聚合化、个性化这样的一种套路全面的彰显出来,真正脱离了作为单独媒体特性的提升。
我个人不太赞同Web2.0进入到冬季的这个说法,我个人认为Web2.0在中国仅仅刚是一年多的时间,它真正来讲是它刚刚经历了第一阶段的兴起和大家对它关注的热潮,而它还是处于婴儿期的发展阶段,它还没有迎来它春天怎么到了冬天。而且一年多的发展,到现在更确切的是到了Web2.0发展的理性阶段。这个理性阶段人们更重要的看到什么是网络Web2.0的商业价值,更冷静的看待它。是不是一些博客圈子这种累积的要素形成的Web2.0就是商业的模式?是不是单一的博客就有它的价值?可能实践的证明不是这样。
此段引用自时任赛迪网总裁的徐英东女士接受新浪科技在2006年的一段采访。此时此刻,恰如彼时彼刻。web 1.0与web 2.0时代交接之际,憧憬它的、诋毁它的;数不清的猜测、臆想。现如今我们站在通往web 3.0的道路,与过去走的道路有何不同吗?可能并没有什么不同:当Internet的创立者利克·李德在1963年提出“超银河网络”(Internet的前身)时,他想的是如何让计算机和网络帮助人们沟通和思考,如何让网络“去中心化(Decentralization)”。但在上世纪90年代初雅虎等超级门户网站出现之后,互联网的发展却一度远离利克·李德的初衷。
I’ve seen things you people wouldn’t believe.Attack ships on fire off the shoulder of Orion.I’ve watched c-beams glitter in the dark near the Tannhauser Gate.All those … moments will be lost in time, like tears…in rain.Time to die.
我见过你们人类绝对无法置信的事物,我目睹了战船在猎户星座的端沿起火燃烧,我看着C射线在唐怀瑟之门附近的黑暗中闪耀,所有这些时刻,终将随时间消逝,一如眼泪消失在雨中。
——《银翼杀手》
人也好,仿生人也好,星舰也好,c射线也好,没什么差别,最终都会消逝;重要的是,在你还“存在”的时候,你是如何存在的。赛博朋克的世界中,科技高度发达,却并没有给人类带来乌托邦式的大同幸福,相反,由于技术掌握在少数人或大公司手中,这种鸿沟反而加剧了人类的相互压迫和分化。我们在对人工智能和技术的讨论里,有它们挑战人类社会的伦理和边界的担忧。我们仍处于数字化的革命进程中,web 3.0是谁也不想错过的一班船,尽管不知船终究会驶向何方。
由一个普通的密码学邮件列表开始,逐渐演化成为一股文化力量和符号。密码朋克挑战着主流文化,他们也运用了大量的经济学、博弈论、哲学等思想去构建web 3.0的基石,使用密码学来保证私有财产,使用去中心化技术瓦解“利维坦”——从“政权”的形式变成“代码”的形式。代码通过开源实现透明的规则,通过共识保障多数人的利益。历史上不同的民主形式都是在讨论和尝试使用何种方式组建和限制”利维坦“,因为不透明的利维坦在绝对权力之下拥有很大的寻租空间。
他们的愿景是:
赛博朋克和密码朋克,一个关注自身能突破到何种程度,一个关注社会、思考社会中的行动者应该以何种方式组织在一起。
我们不应该只沉迷探索技术的可能性和对自身能力的扩展,应该从社会各个领域吸收知识,从近几十年的经济学、社会学、哲学等思想资源里吸收经验,并把思想借助技术实现出来。这些技术和想法虽然还在萌芽之中,但是他们已经出现并且正在发展。
人类一贯选择次优方案解决群体协调问题的倾向是人类几千年来一直在努力克服的东西,如果我们想确保我们物种的长期生存,就必须打败它。
智猪问题:
假设猪圈里有一头大猪、一头小猪。猪圈的一头有猪食槽,另一头安装着控制猪食供应的按钮,按一下按钮会有10个单位的猪食进槽,但是谁按按钮就会首先付出2个单位的成本。按钮和猪食槽在相反位置,按按钮的猪要付出2个单位的成本,并且丧失了先到槽边进食的机会。
若小猪先到槽边进食,因为缺乏竞争,进食的速度一般,最终大小猪吃到食物的比率是6∶4;若同时到槽边进食,大猪进食速度加快,最终大小猪收益比是7∶3;若大猪先到槽边进食,大猪会霸占剩余所有猪食,最终大小猪收益比9∶1。
那么,在两头猪都有智慧的前提下,最终结果是:小猪选择等待,大猪去按按钮。
用博弈论中的报酬矩阵可以更清晰的刻画出小猪的选择:
小猪 | 小猪 | ||
---|---|---|---|
行动(按控制按钮) | 等待(先进食) | ||
大猪 | 行动(按控制按钮) | 5,1 | 4,4 |
大猪 | 等待(先进食) | 9,-1 | 0,0 |
web 3.0实践——追踪Smart Money
多人的囚徒困境:
由于社会中的博弈往往并不只有两个参与者,此时的博弈同样会出现囚徒困境。
1956年2月14日,苏共第二十次代表大会在莫斯科召开。24日,大会闭幕。这天深夜,赫鲁晓夫突然向大会代表们作了《关于个人崇拜及其后果》的报告(即所谓《秘密报告》),系统揭露和批评斯大林的重大错误,要求肃清个人崇拜在各个领域的流毒。报告一出,顿时在国内外引起了强烈反响。由于赫鲁晓夫曾是斯大林非常信任的人,很多人心里都有个疑问:你既然知道他的错误,为什么在斯大林生前和掌权的时候,你不提出意见,而要在今天提出来。
后来,在党的代表会上,当赫鲁晓夫又就这个话题侃侃而谈时,有人从听众席里传来一张纸条,上面写着:当时你在哪里?
这真实反映了个人理性与团队理性的巨大冲突。
上文提到The DAO,The DAO颠覆性地创造了一种新型的自治组织,把组织的运作交由去中心化的区块链网络来执行,不受任何外部的政府、个人、机构和国界的影响。The DAO作为投资基金,还将孵化催生这个领域更多的创新项目,带来更多的惊喜。因此,业界不乏众多铁杆粉视其为下一轮信息技术革命的王道。当然,The DAO游离于各国法律法规的监管之外,也引起了不少人的批评和担忧,对DAO的运作模式也有很多反对的声音,毕竟几亿多美刀都投入到了一个无法律保障的虚拟实体里面,还是会引起很多人的不安。已有反对派学者认为其运行模式必将迅速走向灭亡,聊以为人所悼。
这个生在聚光灯下的宠儿,仿佛已经注定了未来是呼风唤雨的江湖老大。然而,DAO高一尺,魔高一丈!虚拟世界里卧虎藏龙,怕的就是你不够高调!本次剧情,起始于The DAO的智能合同上有个漏洞被黑客利用,竟然盗取了360多万个以太币(ETH)的资金(约值5千万美元),占到The DAO众筹额的30%以上,而且理论上资金可被全部偷走。这次的漏洞由The DAO智能合同的代码中一个bug引起的,黑客利用精心设计了智能合约,通过间接递归调用,可无限制地把资金转到自己控制的子DAO账号中。The DAO的团队已经在数天前获悉有这样的bug,也更改了代码,但可惜的是,代码还没更新到以太坊的中,攻击就发生了。即使发现了代码中的bug,大家也知道资金被转移到了哪个账号,却无法制止这种行为,所有人都只能眼睁睁地看着钱被偷走而无能为力。
难道The DAO就这样坐以待毙了吗?象所有的剧情一样,在低维度看似无解的问题,或许在更高的维度却是柳暗花明,如同在初等法院打不赢的官司,可到高等法院去申诉一样。The DAO是以太坊平台的应用,由于问题影响巨大,到了”大而不倒”的程度,终于惊动了以太坊这个“高等法院”。包括创始人Vitalik在内以太坊核心团队和社区一起迅速行动,全力阻止黑客的攻击。目前的方案分两步:
1.采用软分叉(soft fork)技术,把The DAO及其子DAO的账号锁定,不允许发生任何交易,相当于冻结了黑客的以太币,使其无法出售获利。软分叉实际上是在以太坊软件中增加临时性的规则(例如不允许某账号转账等),修复一些严重的问题。好处是不影响任何以太坊上已发生的交易,无需回滚区块链的数据,这是任何区块链平台都不可动摇的宪法基石。
2.在软分叉的基础上,实施硬分叉(hard fork),把黑客账号的以太币重新转回到The DAO手中。这种改动需要永久性修改以太坊的代码,使得所有用户都不承认黑客手上的以太币是有效的,并且相关的以太币要重新记账到The DAO名下。这个方案相当于修改The DAO和黑客的账户,有违区块链不可变更的原则,因此社区争议较大。
上述两步的实施都需要时间在社区里充分讨论和争取多数成员的共识,特别是矿机节点的认同。幸运地是,The DAO设计中有缓冲期,黑客控制的以太币要在27天后才可拿走。正是这宝贵的27天,为分叉方案的论证、代码编制调试等留下了足够的时间。
至此,正当人们以为危机已经基本化解的时候,上述方案却引起了社区激烈的争论,参与者包括程序员、研究员、分析师、投资人、律师等各方人士,辩论的焦点回到了老子《道德经》中的经典六字悖论:“道可道,非常道”,也就是求证天地万物最崇高的道应该如何描述。方案支持者认为,通过更新以太坊代码,使得黑客的阴谋没有得逞,伸张了正义,维护了平台的公平性,也维护了“道”。尽管这次问题没出在以太坊平台本身,但The DAO若失败,对以太坊也是个很难抹去的污点。支持者绝大多数是The DAO或以太币的持有者。反对者则无法接受以太坊团队为单个应用(The DAO)买单而修改平台规则,这样违反了区块链不可篡改数据、去中心化的根本原则,将大大损害以太坊的公信力和公正性,恰恰是失道之举,完全可以说得不偿失。两派争论的焦点是到底是保护The DAO用户的利益重要,还是维护以太坊的去中心化的公正性更重要?国内最大的以太坊爱好者论坛开了个议题收集各方意见,反馈给以太坊官方,收集于:http://ethfans.org/topics/361。
从社区的反馈来看,大部分人还是支持分叉方案的。不过,春江水暖鸭先知,我们不得不承认,当人类道德无法超越利己和自大时,即使是颠覆性的区块链和以太坊技术,某些情况下,仍然有可能会出现多数群众暴力倾轧少数人的局面。
一波未平,一波又起,网上竟出现了自称黑客发出的“公开信”,又掀起了另一场的大辩论。公开信宣称,他(黑客)是合理合法地执行了The DAO的合约代码,因此任何人没有任何理由可以剥夺他拥有的以太币,他保留起诉的权利。尽管这封信的数字签名无法确定是否来自黑客本人,但是其冠冕堂皇表达的道理却令很多网友惊讶得“竟无言以对”,网上也获得了不少人的赞同。
===== BEGIN SIGNED MESSAGE =====
To the DAO and the Ethereum community,
I have carefully examined the code of The DAO and decided to participate after finding the feature where splitting is rewarded with additional ether. I have made use of this feature and have rightfully claimed 3,641,694 ether, and would like to thank the DAO for this reward. It is my understanding that the DAO code contains this feature to promote decentralization and encourage the creation of "child DAOs".
I am disappointed by those who are characterizing the use of this intentional feature as "theft". I am making use of this explicitly coded feature as per the smart contract terms and my law firm has advised me that my action is fully compliant with United States criminal and tort law. For reference please review the terms of the DAO:
"The terms of The DAO Creation are set forth in the smart contract code existing on the Ethereum blockchain at 0xbb9bc244d798123fde783fcc1c72d3bb8c189413. Nothing in this explanation of terms or in any other document or communication may modify or add any additional obligations or guarantees beyond those set forth in The DAO’s code. Any and all explanatory terms or descriptions are merely offered for educational purposes and do not supercede or modify the express terms of The DAO’s code set forth on the blockchain; to the extent you believe there to be any conflict or discrepancy between the descriptions offered here and the functionality of The DAO’s code at 0xbb9bc244d798123fde783fcc1c72d3bb8c189413, The DAO’s code controls and sets forth all terms of The DAO Creation."
A soft or hard fork would amount to seizure of my legitimate and rightful ether, claimed legally through the terms of a smart contract. Such fork would permanently and irrevocably ruin all confidence in not only Ethereum but also the in the field of smart contracts and blockchain technology. Many large Ethereum holders will dump their ether, and developers, researchers, and companies will leave Ethereum. Make no mistake: any fork, soft or hard, will further damage Ethereum and destroy its reputation and appeal.
I reserve all rights to take any and all legal action against any accomplices of illegitimate theft, freezing, or seizure of my legitimate ether, and am actively working with my law firm. Those accomplices will be receiving Cease and Desist notices in the mail shortly.
I hope this event becomes an valuable learning experience for the Ethereum community and wish you all the best of luck.
Yours truly,
"The Attacker"
===== END SIGNED MESSAGE =====
Message Hash (Keccak): 0xaf9e302a664122389d17ee0fa4394d0c24c33236143c1f26faed97ebbd017d0e
Signature: 0x5f91152a2382b4acfdbfe8ad3c6c8cde45f73f6147d39b072c81637fe81006061603908f692dc15a1b6ead217785cf5e07fb496708d129645f3370a28922136a32
这个问题有点像从银行柜员机取钱,柜员机出错多吐了钱,那么取钱的人到底有没有过错,是否可以合法地保留取到的钱?去中心化的智能合约是个新生事物,按照设想是完全由代码控制运作的。那么合约出错造成的损失,应该由谁负责呢?现行法律都没有关于智能合约的条款,如果控告The DAO的众筹股东,他们分散在世界各国,打这场官司都不知道按照哪个国家的哪条法律来判决好呢?如果控告的主体是以太坊基金会,也似乎不合理,因为最终决定是否执行分叉决议的是矿工节点,他们也分布在全球。这个问题没有简单的答案,也是社区要好好反思的地方,至少在智能合约执行前要约定好纠纷的解决方式,将来或许要出现数字法庭了。
为了解决The DAO大量资金被盗的问题,尽管争议颇多,以太坊官方还是推出了针对The DAO的软分叉(soft fork)版本Geth v1.4.8,该版本增加了一些规则以锁定黑客控制的以太币,以便有更多时间留给社区去解决The DAO的问题。在六月底的数据显示,绝大多数矿工都升级了这个版本的软件,眼看着软分叉就要大功告成了。
也许The DAO就是命运多舛,不知是否因为时间仓促,众多大牛编写出来的软分叉版本居然又有漏洞!这个漏洞比较明显,简单地说,每个以太坊上的交易,验证节点(矿工)都会检查是否与The DAO智能合约及其子DAO的地址相关。如果是则拒绝这个交易,从而锁定The DAO(包括黑客在内)的所有资金。这个逻辑实现本身并没有问题,但是却没有收取执行交易的燃料费(gas),导致了非常严重的后果:以太坊网络成为了DoS (Denial of Service)的攻击目标,攻击者可以零成本地发起大量攻击,使得整个网络彻底瘫痪。因为这个漏洞,各个节点回滚了软件版本,软分叉方案失败!
https://blog.ethereum.org/2016/06/28/security-alert-dos-vulnerability-in-the-soft-fork/
形势陡然严峻起来,欲追回黑客盗走的资金,既然软的不管用,只有走硬分叉(hard fork)这条华山路了。还有两周多的时间,黑客就可以转移走控制的资金,因此要在这之前完成硬分叉版本的开和发测试,任务充满风险和挑战。
这边开发硬分叉版本暂且不表,另一边社区关于硬分叉和去中心化的争论仍在继续,众说纷纭,莫衷一是。为了公平起见,以太坊就硬分叉草案发起了非正式的投票,采用了独特的区块链投票模式,笔者带大家领略一下。以太币持有人投赞成票的可把以太币发往一个地址,投反对票的可以发向另一个地址,无论发向哪个地址,上面的智能合约会自动把以太币如数返还(扣除极少执行费用)。投票的截止时间是第1894000区块(区块链特有的计时方式),投票结束后,从区块链账本中分别统计发往两个地址的以太币数,即可得到投票结果。值得一提的是,这个投票程序完全由中国以太坊社区的工程师开发,显示了国内以太坊的技术力量影响力越来越大。对技术感兴趣的,可以从这里查看源代码:
从carbonvote网站的投票结果显示,共有450万左右的以太币参与了投票,其中87%的票数支持硬分叉方案,由此看来,社区多数人还是赞成采用硬分叉来解决The DAO的问题,这个艰难的决定终于有了个合理的说法。
话说这边投票结果水落石出,那边硬分叉的程序也瓜熟蒂落了,万事具备,只待硬分叉生效了。根据事前的调查,大约90%的矿工会支持这个硬分叉升级。程序中预设的切换时间是第1920000个区块,大概是北京时间7月20日晚9点20分左右。当晚,区块一个一个悄无声息地生成,以太坊社区都在屏住呼吸紧张地等待着历史时刻来临。终于,1920000区块如期到来,硬分叉切换成功了!在这个用代码定制的区块里面,The DAO合约里的所有资金,包括被黑客控制的资金,约1200万以太币,全部都“嗖”地一下转移到了一个新的智能合约中(https://etherscan.io/address/0xBf4eD7b27F1d666546E30D74d50d173d20bca754),
/**
*Submitted for verification at Etherscan.io on 2016-07-14
*/
contract DAO {
function balanceOf(address addr) returns (uint);
function transferFrom(address from, address to, uint balance) returns (bool);
uint public totalSupply;
}
contract WithdrawDAO {
DAO constant public mainDAO = DAO(0xbb9bc244d798123fde783fcc1c72d3bb8c189413);
address public trustee = 0xda4a4626d3e16e094de3225a751aab7128e96526;
function withdraw(){
uint balance = mainDAO.balanceOf(msg.sender);
if (!mainDAO.transferFrom(msg.sender, this, balance) || !msg.sender.send(balance))
throw;
}
function trusteeWithdraw() {
trustee.send((this.balance + mainDAO.balanceOf(this)) - mainDAO.totalSupply());
}
}
该合约只有一个功能:退回The DAO众筹参与人的以太币。众筹人只要调用**withDraw()**方法,就可用DAO币换回以太币。附完整提币指南。
至此,史上最大众筹项目The DAO “完美”谢幕,所有筹集的资金将退还给众筹人,The DAO也就此解散。从万众瞩目的众筹开始,到受到攻击资金泄漏,再到争论中软硬分叉,最后解散退回以太币,整个事件发生在短短3个月的时间里,如同流星一样划过,留下众多的思考和启示。
The DAO是人类尝试完全自治组织的一次艰难试验,因在技术上存在缺陷,理念上和现行的政治、经济、道德、法律等体系不能完全匹配,以致失败告终。The DAO也给了我们很多可借鉴的经验,例如智能合约漏洞的处理,代码自治和人类监管之间的平衡等等。作为人类追求公平和公正的理想,DAO(去中心化自治组织)的精神并没有终结,The DAO项目今天的失败或许是明天DAO成功之母。对众多区块链的技术爱好者来说,事件的每一步演变,都蕴含了无数的技术看点,从中也一定收获良多。更多的技术细节,留待日后再和大家分享。
The DAO事件本应就此落幕了,然而,The DAO的“后遗症”却仍然萦绕在以太坊中,情节也更加跌宕起伏。且说硬分叉过之后,The DAO资金追回,以太坊也该浴火重生了。不料,本应自然消失的以太坊旧链却垂而不死,而且居然活了过来,以太坊的网络一分为二,出现了具有相同历史账本的新旧两条链,如同宇宙瞬间分裂成两个一模一样的平行世界,事件在两个世界里重复地发生着。例如,一块钱突然变成了两块钱来用,在两个世界里很多奇妙的事情出现了。
在区块链的硬分叉中,由于更改了系统规则,按照新规则产生的区块只被新节点认可,旧节点则不认为新区块合法。因此,旧节点一直用旧规则来组织自己的链,所以,无论新旧节点数目的比例如何,一定会产生两条链。若大多数节点都升级到新版本,旧链能否成活要看有多少算力的支持。
之前在比特币等区块链上也出现过硬分叉的情况,当时绝大多数矿工都切换到新链上,旧链也就自动消亡了。可这次以太坊硬分叉却不同,由于社区存在分歧,部分矿工还继续维持着旧链,因此旧链并未即刻消失,还在顽强地活着。从经济效益上看,矿工在旧链上挖出的“旧版”以太币几乎没有任何价值,不仅在交易所里无法交易,而且因为旧链生死未卜,没有人愿意担风险买入旧版币。矿工没有了经济来源,旧链消失也只是时间问题了。
就在旧链风雨飘摇之际,大救星出现了。全球最大的以太坊交易平台Poloniex(P网)率先地宣布开始交易旧版以太币。为和新版以太币ETH 区别,旧币代号为ETC (Ethereum Classic,经典以太坊)。ETC由此具有了流通价值,因为价格极低,有愿意冒险的投资(机)人买入,矿工们的生计得以为继。旧链上的算力比新链要小很多,挖矿难度和成本也要比新链低,部分摇摆的矿工(池)见有利可图,纷纷加入旧链中挖矿,整网算力迅速增强,和新链的算力比从1:20猛增到1:4。除了P网外,其他原本反对ETC的交易平台、在线钱包等服务看到需求旺盛,也改变初衷,开始支持ETC,甚至Github上在分叉前几天也出现了Ethereum Classic的项目。旧链起死回生!既在意料之外,又在情理之中!
以太坊同时存在新旧两条链(ETH和ETC),代码相同(除了涉及The DAO的部分),历史账本一样(分叉前),地址的私钥也一样,交易广播到两个网上都是合法的,许多不可思议的事情发生了。例如, 分叉前持有以太币(ETH)的用户,在分叉后同时拥有了等量的 ETH币和ETC币。就是说原来你如果有1个ETH币,分叉后忽然凭空多出了1个ETC币,并且可以在旧链上卖掉换钱花,就象天上掉下钱来一样。
除了钱变多的“美妙”之外,也带来了重放攻击(Replay Attack)的烦恼。譬如,在新链上发送货币的交易,同样会广播到旧链上,并且交易还能成功(后面会讲到例外),可被利用来作为攻击手段。
假设分叉前地址A有100个ETH,地址B拥有500个ETH。分叉后,在ETH链上从地址A转100个ETH到地址B上,再把100个ETH从B转回A,地址A最终还是拥有100个ETH(扣除少量gas损耗),地址B的余额不变。上述交易在ETC链上也广播一次(重放),同样也会执行从A转100个ETC到B,再从B转100个ETC到A,一切都还正常。但是,如果攻击者设法使得A在ETH链上的余额为100个ETH,在ETC链上余额为0,上述交易在ETC链上重放时,从A转B因余额不足失败;而因B的余额足够,从B转A成功,结果就是A从B取走了100个ETC。
这种重放攻击最典型目标的就是以太币交易所,攻击者从自己的地址A向交易所地址B存币然后发起提币请求,交易所在ETH链上确认交易并把币转到A,殊不知这个交易在ETC链上同样执行,交易所的ETC就被人提走了。为什么目标是交易所呢?因为交易所的地址B一般存放多个客户的ETC币,余额较大,这样攻击容易得手。部分交易所都因防备不足而中招,有的还不得不赔付给客户ETC。
重放攻击还有一个前提,就是需要有个地址A在两条链中的余额不同,这是怎么做到的呢?最容易想到的就是The DAO的众筹人,他们在硬分叉后在ETH链上可取回自己投资The DAO的ETH币,可是这些ETH在对应的ETC链中是依然存放在The DAO的合约中,因为分叉时,ETC和ETH的差别就是在The DAO合约的余额上,如下图。The DAO众筹人取回自己的ETH后,就拥有了这样一个地址:在新旧链中余额不同。
ETH和ETC同源的两条区块链并存,交易互相交错,一时之间带来使用上的混乱,在任何一条链上做交易,都要考虑在另一条链上是否有重放影响。最好的办法还是把在ETH和ETC存放在不同的地址上,从而互不影响。以太坊官方推荐了第三方的智能合约,可以把原来同地址的ETH和ETC发向不同的新地址,即本来在双链上都存放在地址X的以太币,分别转到ETH的地址Y和ETC的地址Z。下面是安全分拆合约代码,
这个智能合约要在硬分叉后的第1920000区块和第1921200区块之间调用一个update()方法,该方法会 检查The DAO黑客的地址余额(darkDAO.balance)。这个调用会同时被新旧两链执行,如果是在新链的节点上执行,此时地址余额已经清零;如果在旧链 上执行,黑客地址余额必定大于3600000。这样,该合约把自己处于哪条链的状态区分出来,并记录在变量forked中,forked作为智能合约的状 态持久化到区块链上。需要注意的是,在新旧链中,forked的值是不同的,这样埋伏在区块链中的Oracle也就可作为其他合约判断新旧链的依据。
有了Oracle合约,我们就可编制一个错开账号的智能合约ReplaySafeSplit,把原来相同地址的ETH 和ETC发向不同的新地址。split()方法输入参数有新旧链中两个地址,利用Oracle提供的信息,判断合约运行在哪条链上,然后把ETH/ETC 分别转到不同的目标地址上。这个代码有点像操作系统进程fork调用之后,判断代码到底在子进程还是父进程运行。通过这个防重放攻击的智能合约,在不同链上可以使 用不同的地址,从而避免了被重放的风险。代码如下:
contract ReplaySafeSplit {
// 调用fork状态的oracle智能合约地址
AmIOnTheFork amIOnTheFork = AmIOnTheFork(0x2bd2326c993dfaef84f69652606
4ff22eba5b362);
// 根据处于哪条区块链,判断以太币发向哪个账号
function split(address targetFork, address targetNoFork) returns(bool) {
if (amIOnTheFork.forked() && targetFork.send(msg.value)) {
return true;
} else if (!amIOnTheFork.forked() && targetNoFork.send(msg.value)) {
return true;
}
throw;
}
// Reject value transfers.
function() {
throw;
}
}
在split()方法中判断合约运行在哪条链上,然后把ETH/ETC转到不同的目标地址上。这个代码有点象操作系统进程fork调用之后,判断代码到底在子进程还是父进程运行。代码中用到了另一个称为oracle(预言家)的合约AmIOnTheFork,
/**
*Submitted for verification at Etherscan.io on 2016-07-17
*/
contract AmIOnTheFork {
bool public forked = false;
address constant darkDAO = 0x304a554a310c7e546dfe434669c62820b7d83490;
// Check the fork condition during creation of the contract.
// This function should be called between block 1920000 and 1921200.
// Approximately between 2016-07-20 12:00:00 UTC and 2016-07-20 17:00:00 UTC.
// After that the status will be locked in.
function update() {
if (block.number >= 1920000 && block.number <= 1921200) {
forked = darkDAO.balance < 3600000 ether;
}
}
function() {
throw;
}
}
地址是0x2bd2326c993dfaef84f696526064ff22eba5b362。这个合约在硬分叉前发布到区块链上,并且在硬分叉后,根据The DAO黑客合约的余额,立刻记录下合约到底是处于新链还是旧链,从而给其他合约提供了判断依据。
尽管长期趋势不明朗,至少ETC短期已经存活下来。ETC的币值也从2元涨到最高18元(人民币),并伴随着巨大的换手量,甚至有人还估计ETC将来价格会比ETH更高。那么谁是ETC的幕后推手呢?一种猜测是比特币的圈里人。比特币在加密货币里是当之无愧的老大,当然不希望有个小弟变得越来越强大,以致最终成为自己的对手。现在以太坊这个小弟的快速成长,已经有超越比特币的苗头,比特币怎能坐视不理?比特币社区对以太坊的硬分叉基本都是谴责的,现在又出现了ETC这个难得的机会,比特币的大佬们忍不住狂吃廉价ETC筹码(大量的ETC被用BTC买走),用很少的成本,就能够控制一条和ETH对抗的链,这是绝佳的上车机会。
另一方面,比特币社区里一直就有大区块和小区块两派之争,大区块可解决比特币网络吞吐量低的问题,但是要靠硬分叉来实现,这点遭到小区块派的强烈反对。此次以太坊硬分叉的成败,对比特币以至整个区块链社区都有极重要的参考意义,小区块派当然希望ETC能够活下来,从而证明硬分叉具有很大风险,小区块派应该是ETC最忠实的支持者。各大交易所基本都是从事比特币起家,深受各种比特币势力的影响,支持ETC的交易也不足为奇了。
ETC的出现,使得以太坊社区的争论焦点从The DAO转移到了ETC和ETH将来的发展上。一种观点认为,ETC和ETH相比,是更纯粹的去中心化系统,因此最终会胜出。另一种观点则认为,ETH得到多数人拥护,以及核心开发者Vitalik等的支持,ETH才是代表着未来。那么,到底谁才是主宰公共区块链系统生死的判官呢?
把The DAO看作一场社会实验,它的全生命周期里,昭示了未来的公链之争、各种吸血鬼攻击。透明的开源代码让复制一个项目几乎无成本,这会导致公地悲剧,但是重另一个方面,也会让项目向价值流向用户的方向发展。The DAO失败了,还会有马洛克DAO,OpenSea之后还有LoosRare。
- DeFiance Capital 的创始人 Arthur Cheong 认为:“想象一下,它是最大、最成功的 NFT 市场,但却选择进行 IPO 而不是发行Token,它不会成功”。
- NFT 收藏家 Punk_2070 认为:“听到 OpenSea 出售股票并进行 IPO 真是太糟糕了。他们的风投没有让他们走到今天,而我们作为用户却做到了。”
- Rarible 的首席执行官 Alexei Falin 在接受采访时表示:“我们会做的与 OpenSea 不同,我们正在努力成为一家 Web3.0 公司——尽可能去中心化。”
- DAO 开发人员 Cooper Turley 在推特上表示:“加密公司上市对我来说永远没有意义。Token 可以让你拥有社区所有权,所以 Token 每次都会跑赢股权。”
纵观The DAO从诞生到落幕,我的评价是太“自由”。这个”自由“是个中性词,哈耶克所说的”自由“,如果用精密科学的研究方式去研究web 3的项目总是不太合适,我们需要方法论。因此研究web 3的项目,不能撇开哲学、政治、经济、伦理,仅靠技术。个人认为目前基于IPFS 的FileCoin项目是各方面都很纯粹的,建议从这个相当具有前景的web 3项目学习如何探索web 3领域。
web 3的体系纷繁复杂:包括基础设施(公链、扩展)、去中心化金融(DeFi)、非同质化代币(NFT)、区块链游戏、DAO-从层级到网络、元宇宙等。
让我们以一家公司内部运营的层级划分做类比,去定义layer。公司的每个职级决策的权限与处理的信息不太一样,同理layer也将有多层。
layer-o:一家公司的成立除了需要钱,还需要调动能够支撑起公司基础业务运营的资源。layer-o能够帮助去中心化网络中各节点的高效通信,让相关的信息及资源顺利的流动起来。我们称其为网络层,解决关键运行部件的沟通问题。
layer-1:不同类型的公司需要不同的利益分配规则(POS、POW等),保险公司主要以销售业绩为指标,互联网公司主要按程序员的工作时长为指标。不同公司的账本结构也不会一样。
两家公司需要沟通协作时,就需要“跨链互操作性协议”。 例如cosmos,polkadot。
还有poly chain这样专门的跨链兑换池。
layer-2:一个规模较小的公司,可以在一个微信群可以满足互相沟通的需要;公司规模成长起来之后,所有的沟通都在一个微信群,会使得沟通效率及其低下。如同公司需要部门群,团队群来扩容;加密世界layer-2(扩容层)也是必须的。
rollup顾名思义,就是把一堆交易卷(rollup)起来变成一个rollup交易,所有节点接收到这个rollup交易之后,不去执行被卷起来的逻辑,而只去接受这些逻辑的执行结果。因此这个rollup交易所需要的gas会远小于执行这些交易的gas。
上图摘自BUILD BLOCKCHAIN TECH第99期;详细阐述了不同方案的发展。
layer-3:解决了公司的沟通方式、协作效率、分利规则、成本问题,就需要思考如何让更多的场景使用到公司提供的服务。此时便引申出加密世界的lay-3——中间件层。lay-3涵盖了API、SDK、节点服务运营商等,解决了在不同区块链协议在实际运行场景中扩展性的问题。
layer-4:前面4层都是技术人员解决的底层性问题;真正面向用户的则是MetaMask钱包、UniSwap交易所、Compound借贷、流动性挖矿的YFI、Axie Infinity链游代表的应用层。
即使我们纵向的把web 3拆分成多个layer,也应当指出不同layer之间并非简单的以谁为基的问题,它遵循螺旋上升发展的规律,一个模块的发展会哺育或者倒逼多个layer的创新。
还需要指出其价值分布的问题,Fat Protocols是一篇描述协议层与应用层价值分布转变的经典。
互联网发展30多年以来,已经从根本上改变了世界,无论从社交、经济、政治,互联网编织出的信息网络已经彻底渗透并改变了我们的信息沟通、商业形态、金融市场、政治选举、生活方式等等方面。互联网早期本质上开源且强调探索性的,随着时间的流逝,“免费”的互联网却被掌控着海量数据的中心化企业喂养成了能够反向操纵用户的恶龙。互联网的标志性特征本应该是信息的自主化,但今天的信息却越来越不可靠,在某些情况下甚至是完全有害的;再接下来的几十年里,全世界的信息流通大部分都在线上完成,这为全世界带来了全新的挑战,如何处理来自手机各个App的行为数据以便当用户在获得便捷服务的同时,个人信息不会被滥用。在网络效应导致的互联网巨头基本上能控制所有的服务和数据的世界中,我们如何去设立保护用户权益的法规和设计能够推动创新型的服务方式。随着世界的运行越来越依赖数据和算力,我们如何去防止单点故障造成的系统性瘫痪。当资产的交易和流通都全面数字化时,我们如何去确保个人资产的所属权。更重要的是,我们作为数字公民该如何参与创造并分享到数字经济。
web 3.0正是去解决上述问题的方案,web 3.0是更人性化的互联网,web 3.0能够通过激励机制和市场机制来确保信息的可信度和可验证性,所以它会是我们在数字世界沟通的信任基石。web 3.0以开源协议和加密网络为基础,企业只会充当便捷访问和附加功能的接口,数据仍将用于去推动决策的制定,但不会用于对抗消费者,他会保障我们的数据权益而不是为平台谋取利益。web 3.0世界将优先考虑到个人主权,而不是世界上富有的精英和寻租者。协议和系统的全新架构将侧重于民主和权力分散。
web 3.0 也许web N.0都是让人逐渐找回技术的真正含义:平等、交互,去中心化,重新把大家拉到同一起跑线,以获取数据的能力和效率为竞争力,谁能高效地获取数据,谁能批量化更快地形成网络效应,谁可能就更有主导权,谁的价值链条、价值谱会更大一些。