一年一度的以太坊全球开发者大会 Devcon4 今年在捷克首都布拉格举行,门票提前几个月发售,但每次都很快被抢光,几个月前买好了票,并且申请 builder ticket 折扣票得到了 approve。这次也在十一月初来到布拉格参加会议。
Devcon 前后有一些社区和企业组织的相关活动,难得这么多开发者,公司和基金会聚在一起,围绕整个大会的周边社区活动组成了布拉格区块链周。我在 Devcon 前一天参加了 Swarm Summit,Swarm 是以太坊 Web3 蓝图中的去中心存储系统,与 IPFS 对应,提供了基于 Content Address 的 blob storage。Swarm 的地位一直比较尴尬,没有 IPFS 那么知名,开发资源也相对较少,也没有自己的独立代币,而是(计划)使用以太作为购买存储和带宽的付费媒介,跟以太坊的关系更加紧密,设计也更简单,应用场景更清晰,兼容以太坊的密码学算法和账户地址。这次 Swarm Summit 中有一个项目开发了基于 Swarm 的去中心数据库,数据结构基于 Sparse Merkle Tree,通过把 Merkle Root 提交到智能合约,可以由区块链的合约对 off chain 的数据存储进行验证,数据的付费使用 Plasma 机制绑定到以太坊主链,底层的 chunk 通过 Swarm 来分发,这个应用场景和架构跟我做的项目部分思路很接近。
Swarm 的数据存储是 blob 模型,也就是静态的文件块哈希,但是对于动态数据无能为力,失去很多应用场景,这次他们设计了 Swarm Feed,构建一个 append-only feed 的数据结构来提供可更新的数据状态,这次看到有即时聊天和社交网络的应用集成了 Swarm 并且基于这个 Feed 的结构,譬如聊天应用 Mainframe。Feed 通过 bzz 协议更新和广播,这个是 Swarm 原生的消息广播系统。Swarm 新增的功能包括数据的加密和读写权限管理,虽然文件在去中心网络中分发,但对于私有的数据可以用加密密钥保护起来,同时通过精细的权限管理机制授权哪些人能看到,只有持有密钥才能解密数据,用的是 Access Control Tree 这个数据结构。Swarm 的传输协议基于以太坊的 Devp2p,后面 Devp2p 的开发者 Felix Lange 也来了,他错过了上午自己的分享,后面在闪电分享中讲了将 Devp2p 桥接到浏览器支持的协议,最终要赋予浏览器轻客户端访问 p2p 网络的能力,但目前没有简单可行的方案。最后值得一提的是,Status 钱包也向 Swarm 投入了研发资源,并且在开发内置于移动端的 Swarm 轻客户端,为了用户可以直接访问去中心网络的内容,但移动客户端不负责存储大量数据和向外分发,只是一个数据的消费者,另外也有一些实现的挑战。
正式的 Devcon 大会在布拉格会议中心,地理位置非常好,在地势比较高的地方,可以一览整座城市的风光,午饭的自助餐也很丰盛, 几乎无可挑剔,美中不足的只是不容易找到勺子。大会第一天(Day0)内容主要是以太坊官方项目的进展,包括 Swarm, Whisper,Devp2p。Whisper 项目是以太坊的去中心消息通讯协议,为高度匿名性设计,这次讲的跟去年差不多(去年的进展延续到今年的进展),提到的一个问题是 whisper 使用 PoW 机制来增加消息发送的成本,阻止对网络的滥用,但是对移动端会消耗过多计算资源,导致手机发热,如果通过燃烧代币(Proof Of Burn),可以通过附带经济成本达到这个目的,但这样会暴露用户付费的地址,削弱通讯的匿名性,这个 trade-off 目前还比较难解决。
另一个重要的是 Devp2p 的进展,作为以太坊专门原生的网络传输协议,基于 udp 进行传输,影响到区块的广播,节点同步,轻客户端的数据发现,也与以太坊网络的稳定性和安全性息息相关。Felix 这一年主要解决了 Devp2p 网络的 Eclipse Attack 问题,但没有多说,以及实现了几个 EIP,让节点连接后可以协商自己的协议版本和服务能力,因为 sharding 之后一个节点可能只有部分的数据而不是所有的区块链,以及让别人知道是否支持轻客户端的查询,节点间的能力会有所差异。
后面单独跟他深入聊了具体的 Eclipse Attack 情形,年初波士顿大学的研究员向以太坊基金会报告这个漏洞,由于当前以太坊节点刚启动的时候,本地 DHT 的节点列表还比较空,其他节点加入进来如果 xor 距离比较近就会加入到列表中,一个恶意节点可以用 Sybil Attack 发送大量的 ping 把本地 kad bucket 占满,这时候你所连接的大部分节点都由这个攻击者控制,远离主链的最新状态,只能看到攻击者选择的分叉链了。为了解决这个问题,Felix 调整了节点启动时 Devp2p 的行为,当本地节点列表比较空,不会添加主动 ping 过来的节点,而是通过 DHT lookup 来添加节点,保证节点是来自网络的;另外每个 0.0.0.0/24 的 IP 地址空间内只允许添加一个节点到 DHT,因为在局域网中攻击者可以申请到末段的大量 IP,相当于 Sybil Attack,所以是不可信的,往上一级的 IP 地址就不容易申请到了,实际上这是大多数成熟 DHT 实现都会用到的一个不成文的技巧,只是正式算法不会提到。发现这个攻击的研究员本来提供了一个解决方案,但比较复杂,而且导致新节点和老节点计算 xor 距离的方式不一样,网络无法收敛,新老客户端谈不拢,这样会导致以太坊网络在传输层的分裂,绝对不能用。还跟 Felix 讨论了 Devp2p 的 topic 功能,为了支持 whisper 和以太坊 2.0 的 sharding,每个节点会存储不同的数据,或者对不同的数据感兴趣,而且节点的能力也不对称,因此需要加上基于 topic 的发现机制,如果当前节点负载过高不能提供服务,会添加到队列,让你半小时后重新回来,你要么等待半小时,要么扩大搜索范围找另外的节点。但这有一个参数设置的问题,会导致网络稳定性和性能的取舍,比较头疼。p2p 网络层还有很多优化的空间,讨论了很多我所研究的问题,也包括如何优化区块的广播,最后他说 "That is everything, you know it all now",好吧,看来他已经被榨干了。
还有以太坊 2.0 客户端 Trinity 的维护者 Piper Merriam 讲了实现的最新进展,但是很快把幻灯片过完,剩下时间读了一首长诗,讲他开发的经历和伴随儿女长大的历程,很温暖动人,可以在 Youtube 看他的演讲:
https://www.youtube.com/watch?v=QtC0g75Ju1E
第二天听了 Philip Daian 的关于智能合约安全和机制设计的一个分享,他是康奈尔 IC3 的在读博士,非常优秀的形式证明和智能合约安全研究员,他语速很快,说话很凌厉。他说到当前智能合约安全依然是一个还未解决的问题,但是即使智能合约没有 bug,机制上也不一定安全可靠。当前的去中心交易所都在链上进行交易的撮合,也就会有 front running(抢跑)的问题,用户下单发出交易,首先进入 mempool,但是矿工打包交易的时候看到这个可以调整顺序,加入自己的订单,赚取差价,或者其他一些交易机器人也可以观察 mempool,分析价格信号,插入自己的交易并提高 gas price,让自己的交易优先上链。他写了一个机器人,通过 front running 每天可以赚几百美元,如果扩大到更多交易所全年运行,数额非常可观,他建议采用中心化的交易撮合,会后也跟他讨论了交易所机制的设计。另一个议题是许多区块链的治理机制都依赖用户投票,但实际上用户投票的动力很弱,而且如果有经济激励,可能将投票权寻租,让攻击者廉价获得投票权,形成 Dark DAO,这将会是区块链治理非常严重的问题。
第三天上午是 state channel 专场,主要是 Counterfactual 的通用状态通道设计,作为一个设计哲学有非常广泛的意义。Celer 的 Guardian Network 设计也有些意思,通过引入第三方监督机制缓解作恶的风险,降低用户观察主链状态的负担。Spankchain 也用了 state channel,一个成人视频直播的付费打赏平台,有了区块链技术,小姐姐们从此银行账号不会被封了,也没有中间商赚差价,保护了隐私和尊严。Spank 这个词是”打屁股“的意思,果然有点污。后面他们给自己的 payment channel 起了一个很简单的词组成的名字,会场一小半人都笑了,我没看懂,google 搜了一下,果然学习了新姿势。
下午听了 Casper 研究员 Vlad 关于 Casper CBC 的分享,CBC 是 Correct-By-Construction ,也就是构造即正确的意思,从数学和理论计算机科学的 domain theory 出发,分析了大量共识算法的性质并做形式证明,看哪些构造会导致哪些性质,再看看我们想要达到的性质,不断提问题从一个抽象的框架提炼为具体化的构造,形成覆盖设计空间特定方向的一个协议族,保证每一步都是正确的,并满足我们需要的性质。所以 CBC 是一个抽象的框架,FFG 或者 Casper light client 的设计是其中的一个具体实例。这是一个非常高屋建瓴的设计方式。这次只讲了设计哲学,有人提问 Casper 的具体比较,他说你自己看论文吧。
然后是 Ethereum Randomness 的分享,以太坊 2.0 将引入基于 Casper 的 Sharding 和 PoS 机制,每个 shard 通过 randao 的方式随机选取验证者,保证随机性的公平,严格,不会被干预就非常重要,他们设计了可验证延迟函数 VDF,一个难于计算易于验证的串行过程,保证网络参与节点经过相同的时间,并且无法通过增加机器获得优势(这是和 PoW 不同的地方),受制于时钟周期,也希望节点间即使有差别也不至于过大,让特定的人获得太大优势。以太坊基金会将把这个算法做成 ASIC 芯片,达到 state of the art 的速度,由台积电代工,免费分发给社区,造出十倍百倍快的芯片几乎不可能,获得更多的芯片没有意义,可以说是先发制人了。开发芯片预计需要两到三千万美元,因为 filecoin 也能够使用这样的随机算法,所以一同合作分摊成本,以后 Algorand,Dfinity 这些依赖随机选取节点的网络可以参与,是一笔划算的投资。这是要死磕矿机厂商的架势。
第四天上午是 Plasma 专场,Plasma 是非常 promising 的 layer2 技术框架,有很多优秀团队的工作,也是我研究的方向,但 Plasma 的细节上有许多边缘情况需要克服。后面进行了现场的 Plasma Implementer Call,讨论了很多问题,其中包括如何鼓励并保证用户发现作恶主动提交 challenge,但避免这个过程被 game。还有如何保证 challenge 提交的押金足够支付未来的 gas fee,当前以太坊的 gas 机制有一些弱点,很难保证一笔交易未来有足够 gas 被提交,这个问题以前很少被讨论到。也跟其他 plasma implementer 做了讨论。
下午听了 IC3 的教授 Emin 讲的 The Case of PoS,讲到了 Avalanche 共识,也是我之前很关心的一个算法,非常简单,强大,也很另类,融合了 Nakamoto Consensus 和 BFT 的特征,但也带来了新的挑战,讲完之后大家在会议室外围着 Emin 教师一圈,对于怎么真正实现这个共识问了一些非常核心的问题,也跟我的一些思考有关。教授站在一扇门外,好几次有人推门出来差点把他打到。
最后 Devcon 大会迎来尾声,互联网先驱,黑客文化的塑造者,Whole Earth Catalog (《全球概览》) 的作者 Stewart Brand 做了一场访谈,他作为许多互联网浪潮的见证者和推动者,回顾了黑客文化的崛起,讲了对当前互联网趋势的认识。Devcon 最后在主持人的歌声中结束,还专门创造了一首欢乐的主题歌,歌词很逗。
布拉格这座城市非常美,物价也相对便宜,食物也比较好吃,建筑很有特色,富有人文气息,但科技行业不太发达,以旅游业为主。但布拉格也有结账只收比特币的 Bitcoin Coffee(服)。市区很多精致的咖啡馆和小酒吧。还有卡夫卡博物馆,陈列了作家身前的手稿作品,展示了他的人生轨迹。
行程很松散,听分享也难免有偏差错漏,还请谅解。
至于为什么漏了 V 神的演讲,因为那天早上睡过去了,并没有听到 keynote (捂脸)。
(拍的照片很少,部分图片来自 twitter)
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。