坏消息:过去这一年,我们期待的区块链上的重大突破依然没有出现。
好消息:很多新的探索依然在发生,其中不少 技术方面的尝试, 被证实适用于并且有助于区块链发展,它们被吸收进来,令区块链成为愈发健壮的系统。在技术之外,人们也探索 开源社区的治理 和 公共物品的资助 问题,并走出了一些道路,相比技术,这些问题的解决可能更为重要,它们是区块链可持续发展的源动力。
在这篇文章中,我们邀请了 10 位区块链世界的观察者和探索者, 请他们撰文介绍 以太坊 ,这个目前区块链最大开源社区上的新鲜事物,其中会有对时下最热门的 Rollup 的底层思路的分析,会有对 Vitalik Buterin 心心念念一整年的 二次方融资 的详解,也会包含还未进入大众视野的内容,比如 BLS 签名 对于 以太坊 2.0 鉴权设计 的重要意义,比如在以太坊上使用 Zcash 代币。
这些新鲜事物以及推动这些事物发生的思想和人让我们相信:虽然道路漫长,但是未来可期。
本文关键词:Rollup、Validity Proof、BLS 签名、以太坊和 Zcash 互操作、account abstraction、CREATE2 指令;Staking、DeFi、ENS;以太坊新治理流程、集市开发模式、二次方融资。
硬核技术 6 条
千字读懂 Rollup
p0n1,安比实验室研究员,关注零知识证明和智能合约安全
Rollup 是一大类 Layer-2 扩容方案 的统称,特指先在链下进行复杂的计算和状态维护,再将与状态更改相关的数据通过合约调用的方式,利用更便宜的 CALLDATA 在链上保存。任何人都能根据链上保存的数据复原出全局的状态,从而消除因数据可用性问题带来的安全风险。Rollup 将大量交易卷起 / 汇总成为一个交易,在保证数据可用性的前提下提高 TPS。
那么如何保证状态更改的正确性? ZK Rollup 和 Optimistic Rollup 是目前较热的两种不同方案,它们的核心区别如下:
ZK Rollup 方案的关键在于 ZK,它的每一次的状态转变都需要提供零知识证明,并由主链上的合约进行验证,只有验证通过才能更改状态。即,ZK Rollup 的状态转变严格依赖于密码学证明。Optimistic Rollup 方案中,每次状态转变无需严格验证,它是先乐观地假设每次转变都是正确的 (这就是 Optimistic 一词的由来) ,然后在一定时限内可以对某次转变进行挑战,如果挑战成功就证明之前的提交有问题,会惩罚提交者并将状态回滚。即,Optimistic Rollup 的状态转变依赖于经济激励和博弈。
两种方案的差别还可以从证明模型角度来看:前者为 Validity Proof (有效性证明) ,只有提供了「 有效性证明 」的状态才会被写入主链合约;后者为 Fraud Proof (错误性证明) ,用户需要在挑战期内对异常提供「错误性证明」,举报不正确的状态。
在安全性上,ZK Rollup 更具优势。因为 Optimistic Rollup 或基于 Fraud Proof 的二层扩容协议必须在挑战期内投诉举报,因此可以构造一个场景让矿工配合做恶,在挑战期内拒绝掉所有提交 Fraud Proof 的投诉交易,导致不正确的状态转变会被确认,攻击者可从合约中盗取资金。但这种攻击方式对 ZK Rollup 无效,因为它的合约中始终有正确性校验。
在 TPS 上,ZK Rollup 利用 zk-SNARK 技术在保障数据正确性的同时压缩了链上计算量。所有交易的计算过程不用在合约中执行, Operator (运营者) 只需把存储账户状态的 Merkle Tree 的 Merkle Root、交易数据和 zk-SNARK 证明提交至合约,合约验证通过后将新的状态写入。
因为 zk-SNARK 证明大小 (很小) 与验证时间 (很快) 是常数,不会随交易数量增长,因此 ZK Rollup 可以极大地提高交易 TPS。ZK Rollup 的链上性能限制仅取决于 CALLDATA 存储数据的成本,随着以太坊伊斯坦布尔升级的完成,CALLDATA 使用成本降为原来的 1/4,ZK Rollup 的性能则获得 4 倍提升,TPS 可达到近 2000。
目前已有多个团队基于 ZK Rollup 方案开发,比如 Matter Labs 发布的无需信任的扩容和隐私方案 ZK Sync 。ZK Sync 底层依赖于 ZK Rollup,产品路线为先专注提高简单转账的性能和易用性,再实现通用智能合约的扩容,最后再加上隐私保护,其目标是在确保安全性的前提下提升交易性能。
Validity Proof: 设计 Layer-2 的一种新思路
阿剑,「以太坊爱好者」内容负责人
名为 Rollup 的 Layer-2 可扩展性方案风头正劲,但其实,是不是 Rollup 可能不算重点,Layer-2 方案使用的是 Validity Proof (有效性证明) 还是 Fraud Proof (错误性证明) 才是重点。
此前的 Layer-2 方案,如状态通道和 Plasma,在用户取款时,也即在链下状态上链完成清算的过程中,是无法防止运营者或用户提交非最新状态的,因此这些方案都有「挑战期」,即在状态上链后的一段时间内允许他人提交更新的状态,或者证明上链状态是无效的。我们称这种模式为「错误性证明」。
然而,一种新的思路认为,为什么不仅在某人能证明自己提交的状态转换是有效的时候才接收 TA 提交的状态更新呢?换言之,这种模式要求链下计算的运营者证明某些计算已然发生,并由智能合约负责验证,当且仅当新状态值被证明是经合法运算而成时才接受该值并更新状态。我们称这种这种模式为「 有效性证明 」,它只需保证证据足够小、验证所需计算量足够低便可。
以 ZK Rollup 为代表的方案,与其它 Rollup 方案以及更早的 Layer-2 方案的区别,就在于证明状态转换有效性的思路上。相比错误性证明,有效性证明在不少方面都有巨大优势,其最大的好处在于免去了长时间的挑战期,提高了资金运转效率和用户体验。
BLS 签名之于以太坊
谢翔,PlatON 算法科学家
目前, 以太坊 2.0 已经全面转化为 采用 BLS ( Boneh-Lynn-Shacham) 签名 作为其核心签名算法。
BLS 签名的设计初衷是在低带宽的通信环境下,寻找一种具有较短签名长度的数字签名方案,以代替传统的 RSA 签名 (1024bit 的签名长度) 和 ECDSA 签名 (320bit 的签名长度) 。BLS 签名仅需 160bit 的签名长度,且安全性与 ECDSA 相当。
在区块链场景里,我们总是希望尽可能地降低通信量,BLS 签名不但单个签名长度更短,其工作方式也有助于达成这一目标。例如降低通信量的一个方法是使用聚合签名代替多重签名,但 ECDSA 无法做聚合签名,Schnorr 虽满足签名可聚合,不过其本质是多个参与者对同一个消息进行协同签名,这种分布式的协作过程需要极大地增加通信次数。
相比之下,BLS 签名的聚合过程是 非交互式 的,即任意节点可以将接收到的多个 BLS 签名消息对直接在本地进行聚合,并且支持对不同消息的签名聚合。下图描述了 BLS 签名聚合的过程:
这些优点使得 BLS 签名非常适用于以太坊 (包括以太坊 2.0) 中的各类鉴权设计。以太坊 2.0 中的 Beacon chain 包括质押合约、 Layer-2 中的分片 都采用了 BLS 来支持链间通信。
让我们以组织验证者进入委员会对提议的区块投票为例,简要地说明 BLS 签名在其中的作用。
在以太坊 2.0 中,验证者将以数十万甚至数百万计,Beacon chain 会根据一定的随机性将验证者分配到委员会中,委员会对被提议的区块进行投票。每个委员会的投票将经由 BLS 聚合算法形成一个签名,这样一来,验证整个委员会的所有投票的工作会极为高效。
除此之外,Beacon chain 节点负责管理验证者和他们的抵押权益、为每个分片提名出块者、负责验证者的奖励和处罚、协助处理跨片交易……这些任务里,所有与确权相关的动作都需要由验证 BLS 签名来完成。
以太坊和 Zcash 的「跨链」操作
吴为龙,以太坊骨灰级玩家
EIP-152 :增加在以太坊合约内验证 Equihash PoW (Zcash 的 PoW) 的功能,开启 Zcash 和以太坊之间中继交易以及原子化互换交易的可能。
如果将 Zcash 和 ETH 当做两个独立的账本,那么以太坊合约内验证 Equihash PoW 就是保证了 Zcash 可以验证以太坊合约对 Zcash 账本的改动,也就是说可以通过以太坊合约使用 Zcash 代币。这样一来,以太坊里就可以有 Zcash 资产。
「资产」就是数据库中的一行,区块链是要签名和验签才能进行数据库改动的,在以太坊合约内验证 Equihash PoW 就是加了个哈希函数,解决验证签名的问题。
如此一来,就可以支持类似这样的场景:A 通过执行以太坊上运行的一个合约,可以给 B 一个 Zcash 代币,然后 Zcash 验证签名,通过之后把结果告诉以太坊上的合约,由合约接着执行接下来的动作。
不过,以太坊和 Zcash 两者之间的这种「跨链」或互操作关系是从 Zcash 到以太坊单向的,双向的话需要 Zcash 也增加对应的功能。
Account abstraction: 为帐户的功能加入可扩展性
吴为龙,以太坊骨灰级玩家
以太坊有两种帐户类型,一种叫 外部帐户 ,也就是用户帐户,由密钥控制,它的功能是固定的,只能做基础的转账以及生成合约帐户;另一种叫 合约账户 ,是智能合约代码编译后部署在以太坊网络生成的,由于合约能够自定义逻辑,所以合约账户的功能是可扩展的。
账户抽象化就是在以太坊网络实施一套 DID,交互可以由 DID 持有者直接处理,无论这个 DID 主体是外部账户还是合约账户。这给外部帐户加入了可扩展性,让它能够与合约帐户类似,使用更高的逻辑来操作,也能更通用的用一个「账户」的不同形态来表示外部账户和合约帐户这两种账户类型。 账户抽象化后,外部账户可以管控其他外部账户,也可以分配和管控合约账户。这带来的好处包括可以自定义交易的支付主体来生成账号管理机制,实现资金使用的签名管控功能;可以帮助 DAO 更好地去设计和实现;可以让 外部帐户管控由某个合约账户来出燃料费,解决现有的即便拥有合约还是需要合约部署方来支付燃料费的不够自动化的行为。
CREATE2 指令: 大有用途的新的合约部署方式
王渊命,Westar 实验室首席架构师
EIP 1014 :CREATE2 指令,添加一个新的 0xf5 操作码指令 CREATE2 , 0xf5 指令的行为和 CREATE 相同,只不过它使用 keccak256 ( 0xff ++ address ++ salt ++ keccak256(init_code))[12:] 而不是发送者+nonce hash 来计算合约地址。
虽然 EIP 1014 的 CREATE2 是一个很小的改动,但它对二层的设计有很大的作用。
当前以太坊在合约部署时是没办法预测合约的地址的,因为合约地址由发送方地址和合约部署时发送方的 nonce 决定,但发送方的 nonce 无法预测。我们知道,二层的交易有效是因为有一层的合约的约束,如果要求二层相关的仲裁合约在一层先部署好,就会增加成本。
CREATE2 提供了一种新的合约部署方式,合约地址由发送方地址,salt,以及初始化代码决定。这样一来,二层的系统就可以基于一个尚未上链的合约来写代码——因为此时合约地址是已知的——必要时再部署合约,这就节约了成本,简化了反事实状态通道的设计方案。
用户参与 3 条,如何参与以太坊 Staking?
Rudy Lu,InfStones 中国区代表,Infpool 矿池合伙人
第一,我们需要了解以太坊 Staking 的不同之处 :
区别一:固定的抵押数量
现在我们熟知的大部分项目的 Staking 对一个节点抵押代币的数量并无限制,比如 EOS、TRON、Cosmos 等项目;或者通过抵押金率来作出一定限制,比如 Tezos、Wanchain 等项目。但 ETH 2.0 与这些委托抵押模式非常不同,它的每个节点都需要抵押也只能抵押 32 个 ETH, 如果我有 320 个 ETH,就需要建立 10 个节点。
ETH 2.0 的这种 Staking 设计和它的分片链结构是相适应的,通过强制设定 32ETH 的固定抵押数量可以保证全网节点的数量比较多,也保证了不会有抵押数量巨大的头部节点在某一条分片链上有较为垄断的记账控制权,ETH 2.0 挖矿的去中心化程度会因此得到一定的提升。
区别二:本金与收益不是一种币 ,早期均无法交易
除了 Ontology、Vechain 等双币结构设计的项目外,一般 Staking 挖矿都是「锁什么币,赚什么币」,但是 ETH 2.0 锁定的是 PoW 主链上的 ETH 代币,发放的收益却是信标链上的 BETH 代币,它们在本质上是两种币。因为两条链并不会很快地实现互通, ETH 与 BETH 在公开市场上的交易价格估计也不会完全一致。
在预期明年上线的阶段 0,ETH 2.0 不会有交易功能,即便验证人 (节点) 退出 Staking,本金、收益也无法从账户中转出,因此早期参与的节点的所有本金、收益都是近乎于锁死的状态,只能等待 ETH 2.0 进一步开发,逐步实现账户交易功能。
区别三:早期不存在去中心化委托挖矿
「委托」这项功能可以使代币与代币所承载的出块权相分离,持币者能够将出块权委托给信任的节点代为参与共识并赢得奖励,这也是使得 Staking 广为大众所认识,并逐渐火热的原因。但在 ETH2.0 的前两个阶段 (阶段 0、阶段 1) 均不存在去中心化委托挖矿,这意味着持币者只能自己建立节点运行,或者将币交给中心化的矿池代为挖矿,但代挖矿相当于把币转给别人托管,存在本金的安全风险。
第二,需要了解以太坊 Staking 的参与条件。
以太坊 Staking 的参与门槛不是很高,硬件上看,家用电脑的性能就可以运行一个节点。以太坊希望通过低门槛鼓励更多的持币者参与进来,达到尽可能去中心化的目的。
因为持币者不是专业的节点运营商,一般来讲无法保证节点 24 小时运行,因此在经济模型的设计上,以太坊 Staking 对于节点离线的惩罚力度非常小,连续 3 天离线的惩罚在 1% 左右,但离线时间越长,惩罚力度会越大,21 天离线会惩罚 50%。
对于参与者来说,24 小时运营节点可以保证最大收益,同时也要做好节点版本升级、防止「双花」、故障监测防灾等工作,届时会有节点运营商推出专业的节点运营服务。
了解了以上信息之后,让我们看看以太坊 Staking 的收益分析 。
ETH 2.0 的年增发率是随全网质押率动态变化的,以目前公布的规则看,年增发率与全网质押率的增长是 0.5 次方的关系。全网质押率越高,年增发率越高,单个节点的年化收益率越低。全网质押 10% 时,节点的年收益率为 5.72%。
DeFi 在 2020
杨民道,dForce 创始人
2020 年我们将会看到各个链之间的 跨链 和 资产跨链 实现比较大的突破,很多新资产类别进入以太坊的 DeFi 系统,比如 PoS 类型的 Staking 资产,实现 Staking 资产的借贷生息。以太坊体系将会见证更多 Layer-2 的系统的部署, 搭建在 Layer-2 上更容易 规模化 DeFi 生态。
ENS 的玩法只被你我的想象力局限
老白,DApp 玩家,NFT 收藏品爱好者,从 ENS 竞拍开始接触以太坊
ENS (Ethereum Name Service) 是建立在以太坊区块链之上的分布式域名系统。如果以太坊是下一代去中心化网络的基础平台,那么 ENS 将成为与当前 ICANN 一样的域名注册机构,而 eth 将更替 com 成为 Web3 的核心构件。
ENS 有较大的想象空间,也有较大的实验空间,简单介绍一些现有的玩法:
1. 用 ENS 代替普通账户地址,可以减少因为输入错误带来的资金损失,因为当我们向 ENS 转账时,如果输入有误就无法有效解析出其指向的 ETH 地址,这阻止了进一步的操作。
2. 把 ENS 指向代理合约地址,可以通过向 ENS 域名转账实现闪兑。比如我们向 dai.now.eth 打入 ETH 就可以收到 dai,其原理是将 ENS 指向了 uniswap 的 eth/dai 兑换合约。也可以将代理合约的回退函数 (fallback function) ,也就是合约接收到 ETH 后的默认功能函数设置为 uniswap 或 eth2dai 的兑换网关,从而实现兑换。
3. 如果你的浏览器安装了 MetaMask,就可以直接访问「.eth」域名,也就是用浏览器打开以「.eth」结尾的网站或 DApp 前端地址,就像打开互联网的「.com」网站一样。而这个网站或 DApp 前端是可以建立在 IPFS 之上,不依赖于单点的中心式的服务器的。比如我们通过浏览器就可以访问 https://almonit.eth,一个构建在 IPFS 上的 ENS 导航网站,而开发者要做的只是在自己的 ENS 管理界面中添加一条 RECORDS ,指向网站对应的 IPFS 地址。
4. DApp 开发者可以注册 ENS 的主域名,再根据用户意愿为用户分配子域名,如果这是一个加密通信类的应用,用户之间就可以用子域名做为用户名进行交互。
5. ENS 的 DApp 商户应用是一个值得看好的场景。以星巴克为例,它可以通过 coupon.eth 注册申请会员:starbuck.coupon.eth,然后生成自己的 ERC721 收藏品 ,每批收藏品有孙域名如:2019santa.starbuck.coupon.eth,并把该孙域名指向一个 NFT 合约。可以设置用户发送 0 ETH 至这个 ENS 地址就能够领取一个收藏品或者参与抽奖,从而实现商户纪念品的发行和投放。
社区建设 3 条
以太坊的新治理流程
阿剑,「以太坊爱好者」内容负责人
从 今年 3 月份 开始,以太坊社区开始摸索新的治理流程。
以 Alexey Akhunov 为主的开发者提议在以太坊 1.x 的开发流程中,不再将 EIP 的参考实现和测试任务全部压给客户端团队, 而是引入独立的工作组,由自由组合的工作组把感兴趣的 EIP 实现出来并生成测试,然后提交给客户端团队。Alexey 自己便是这种模式的亲力践行者。
而后,有人提出可以成立 「代表人」制度 ,就是一个 EIP 必须有一个代表人,由该代表人负责社区联络、与社区沟通、回应社区的疑问等等工作。
再后来,有人提议应该让硬分叉的时间常态化以提供可预测性,同时,硬分叉只接收已经完全准备好、没有疑问的 EIP,但凡有疑问的 EIP 就推迟部署,不让 EIP 的实现进度影响硬分叉的时间。类似于火车,到点就发车,没上车的 EIP 就等下一趟。
我一直认为 治理流程 是治理的核心,上述多种对 EIP 流程的改进皆让开发责任更加分明,Credit 的归属更加清晰,而且让整个社区有了更明确的预期。同时我也感叹,实践的发展似乎又一次跑在了知识发展的前面。
集市模式会引导以太坊 2.0 如何演化?
雷神,区块链世界观察者
一个全新的系统在设计和实现初期一般都是由发起者主导,小范围封闭式推进,以太坊 1.0 在起步阶段亦是如此。因为一方面发起者对于自己的想法最了解,早期封闭式开发的效率可能更高,另一方面在没有品牌认同和社区文化沉淀的情况下,吸引志同道合的参与者加入协作的难度不小。
以太坊 2.0 在技术层面,某种程度上可以说是一个近乎全新的系统,但在品牌认同和社区文化上则不是。以太坊创世后运行至今,社区不断演化,逐渐形成了具有较强生命力的自组织系统。有旧人不断离开,但社区的愿景和文化不断吸引着新鲜血液加入,壮大了整个生态的鲁棒性。
因此,以太坊 2.0 有机会在起步阶段就实践更加激进的、开放的集市式设计与开发模式,并以此为基础上尽可能地弱化权威个体对协议发展的影响,维持集市模式的特性。集市模式会如何促进以太坊 2.0 的演化和发展,集市模式能否比采取大教堂模式的公链项目更具竞争优势和生命力?这是除了技术之外,我对以太坊 2.0 最感兴趣的点。
Gitcoin Grants: 对公共物品融资模式的探索
Mako,v2eth.com 创办者
Gitcoin Grants 是一个为以太坊开源项目 周期性地提供资金的众筹平台,它采用二次方融资 CLR 机制 (Capital-constrained Liberal Radicalism) ,该机制是 Vitalik Buterin 和《 激进市场 》作者之一的 Glen Weyl 在《Liberal Radicalism: Formal Rules for a Society Neutral among Communities》论文中提出的。
可以说 Gitcoin Grants 是区块链技术与激进市场二次方投票思想 (二次方融资是对二次方投票的扩展) 的一次非常好的的实践,它探索的是如何以数学最佳的方式资助开源项目 / 公共物品,这是我对这个项目非常感兴趣的原因。
二次方融资 CLR 机制包括 众筹 和 配捐 两个部分:
众筹:个人对公共物品捐款,把每个人捐款金额的平方根加起来得到 A,再对 A 求平方得到 B,B 就是项目方应该获得的资助总额。配捐:项目方应得的金额,也就是 B,是大于每个捐款人捐出的金额的总和的,便由基金会或私人慈善家补足这个差额。在这种机制下,项目获得的资金与一共有多少人支持关联度变得更高,如果某个项目的捐款人越多,该项目方获得的匹配资金就越多。
事实上,在一个社会配置公共物品时会面临两个最基本的问题:搭便车问题和倾轧少数派利益的问题。
在「一人一票」方式下,一张选票对结果的影响微不足道,因此理性人不会去投票,这会造成搭便车现象,融资也是一样的道理,本来想资助项目的人,认为自己的一块钱不能帮助到项目方,就不会参与;但如果采用二次方融资的方式,一块钱会被放大,理性人会有动力参与众筹,从而减少搭便车现象。
在「一人一票」方式下,少数服从多数,系统不能反应多样的产品对不同个体的重要性,进而会压制少数派的利益,放在融资中,资助哪些项目是由多数投票决定的;如果采用二次方融资,个人可以选择资助自己感兴趣的项目,并间接影响该项目的配捐金额,这可以部分解决倾轧少数派利益的问题。
自 2019 年 1 月启动以来,Gitcoin Grants 已帮助向开源社区募集、分发了 82.7 万美元的资助金额;在 2019 年的第三次配捐中,它为 68 个开源项目提供了 1982 笔捐款,价值 17 万美元; 在 2020 年,Gitcoin Grants 计划至少每季度进行一次募资活动。
我建议以太坊的开源项目可以在 2020 年第一季度提交自己的项目 (1 月 6 号至 1 月 21 号) ,参与 Gitcoin Grants 二次方融资。以太坊基金会和 Gitcoin Core 将会为社区媒体项目和基础设施建设项目提供 20 万美元的配捐资金,而哪些项目可以获得资金是由我们决定的, 每个人只需要赞助 1 美元。
如何参与 Gitcoin Grants:
项目方 :开发者通过申请加入到接受捐款的候选名单中,需提交项目的相关介绍和项目每个月需要的资金。用户 :用户给自己喜欢的项目赞助,可以选择赞助的资金总额,以及资金分多少个周期分发给项目开发者。通过 Gitcoin Grants 捐助,平台会收取 5%的费用。以太坊基金会 :以太坊基金会确定配捐金额。