经过十天在Devcon7与Sideevents的密集学习,我想透过这篇文章浓缩我的所学,并总结几个关键主题,让更多人了解以太坊生态在各个技术面向上的最前沿发展、正在解决的问题,以及未来可达到的理想状态。本文章将涵盖以下主题:
- Infrastructure:以太坊一切的基础
- Usability:如何提升钱包与DApp的易用性
- DevTools:开发流程中可使用的工具
- Security:个人与协议如何保护自己的安全
- FuzzTesting:如何快速发现智能合约的深层问题
- FormalVerification:透过数学证明智能合约的正确性
- MaximalExtractableValue(MEV):如何让使用者避免MEV攻击
- ZeroKnowledgeProof(ZKP):应用与基础设施的最新进展
- MultiPartyComputation(MPC):保护隐私的最新研究与挑战
- ProgrammableCryptography:下一世代密码学的研究与展望
除了Devcon主场馆的演讲与体验活动,我个人更喜欢参加特定主题的sideevents。这些活动不仅能深入学习相关领域的知识,还能遇到志同道合的专家进行交流。例如在一场关于zkTLS的活动中,我有机会直接向项目方请教文件中不太理解的部分,这段经历让我印象深刻。未来若有类似的大型研讨会,我也强烈建议大家多参加与自己兴趣相符的sideevents。
以下正文开始。
Part1:Infrastructure
以下将从成就、现况与未来三个面向,详细阐述以太坊如何透过技术创新解决当前挑战,并为未来的扩容与去中心化铺路。
成就:手续费降低与一流的稳定性
坎昆升级大幅降低L2手续费
今年的坎昆升级带来了前所未有的成本优化。得益于EIP-4844引入的DAS技术(DataAvailabilitySampling)与Blob机制,L2现在可以以更低的成本将更多资料储存到以太坊主网,使每笔交易的费用降至不到$0.01美金,让L2的使用更加经济实惠
ClientDiversity的成功实践
以太坊的ClientDiversity是其稳定性的重要基石。运行以太坊节点的程式(Client)有多套选择,例如Geth、Nethermind和Reth,每套程式的开发团队分布于不同地区,程式码基础也完全独立。知名的执行层Client就有Geth,Nethermind,Reth等等。
- 关键价值:即使某个Client出现Bug,也不会影响整体网路,因为每个Client的使用比例均低于50%,而以太坊的共识机制是至少需要2/3的节点同意才能让区块Finalize,因此能够避免单一Bug导致整条链分岔
- 历史案例:早期以太坊只有Geth与Parity两个Client,在某次Client发生重大问题时,ClientDiversity帮助以太坊维持了整条链的稳定运行。
- 理想状况:最理想的分布是所有Client各自占比低于1/3,这样即便某个Client出现问题,也不会影响区块的最终确认(Finalization)。
以太坊算是目前在ClientDiversity上做得最好的公链。
交易确认效率显著提升
以太坊的TransactionInclusion(交易纳入)能力相较两年前有了很大进步。如今,绝大多数交易可在6~30秒内完成确认,避免了过去常见的交易延迟数分钟甚至被节点丢弃的问题,为用户带来更稳定的交易体验。
现况:Rollup的挑战与安全性
自2020年Vitalik确立了以太坊的RollupCentric扩容路线图以来,整个生态系已经诞生了数百条L2链。在这一架构下,L1作为基础设施的角色,提供高度稳定、安全且可信中立的保障,而L2则像GPU一样,针对特定应用进行加速,显著提升每秒交易次数。然而随着L2的快速增长,也暴露了一些挑战。
L2的信任假设与分级安全模型
目前许多L2项目仍基于强信任假设,某些L2项目方甚至拥有冻结用户资金或停止整条链运作的权力。为了更清楚地衡量L2的安全性,业界将其分为三个阶段:
- Stage0:完全中心化的L2。 Stage0是最基本的Rollup实现,只需定期将数据提交到以太坊主网即可运行,但这意味着资金安全性完全依赖项目方。这种设计类似于脚踏车的辅助轮,主要用于帮助项目快速上线运作。
- Stage1:基础的Rollup证明与治理机制。在Stage1中,L2至少实现了一种Rollup证明系统,例如OptimisticRollup的FraudProof或ZKRollup的ZKProof。这些证明由智能合约验证L2状态的有效性。此外,项目方需引入SecurityCouncil作为治理机制,对协议的关键修改需多数成员同意,并确保项目方无法在SecurityCouncil中占据绝对多数。
- Stage2:去中心化与双重证明系统。在Stage2,L2不仅需要实现两种独立的证明系统,还需将绝大部分控制权交由智能合约处理。SecurityCouncil仅在证明系统出现冲突时介入,选择接受哪一种证明系统。这种设计最大程度地限制了项目方的权力,真正实现了去中心化与安全性的平衡。
在这三个阶段中,最大的差异在于「项目方做坏事的难度」。在Stage0,项目方完全掌控,几乎没有任何限制。Stage1引入了证明系统与治理机制,尽管攻击者可能通过贿赂SecurityCouncil成员等方式发起攻击,但成功的难度已显著提高。而Stage2则彻底消除人为干预的可能性,实现了理想的去中心化。
目前的L2发展现状与挑战
目前,大多数L2项目仍处于Stage0或Stage1。虽然这些项目标榜去中心化,但实际安全性与项目方的宣传往往存在差距。专注于L2安全分析的网站l2beat提供了最新且详细的报告,帮助用户了解项目方的真实安全实现是否达标。他们的研究深入程式码层面,揭露了许多项目过于依赖行销术语而忽视技术实现的现象。
EscapeHatch:L2安全性的核心机制
L2必须具备一项关键功能,即EscapeHatch(逃生舱)机制,来应对项目方的Operator或Sequencer停止运作时的突发情况。这项机制允许用户生成自己在L2上持有资金的证明,并将该证明提交到L1的治理智能合约以赎回资金。整个过程必须在没有项目方介入的情况下完成,才能充分体现L2的安全性。
例如dydx发行的L2在这方面表现出色。当他们的L2决定停止营运时,提供了工具让用户自行将资金转回L1,确保了用户资金的安全。
L1的扩容需求与去中心化的坚守
为了应对未来可能的大量L2逃生交易,L1必须持续扩容。然而,Vitalik多次强调,在扩容过程中,不能为了短期内的大幅扩容而妥协去中心化。一旦去中心化特性被牺牲,将难以挽回。这种坚守是以太坊作为可信中立基础设施的核心价值。
未来:以太坊的进化方向与长期愿景
以太坊在未来将迎来多方面的技术革新,从L2的进一步去中心化,到L1的性能优化,乃至于共识层的全面重写,这些计划都旨在推动以太坊迈向更加高效、安全且去中心化的区块链生态。
L2迈向Stage2:实现真正的去中心化
L2的发展方向之一是推动更多项目迈向Stage2,这是去中心化与安全性的理想平衡点。Vitalik明确表示,未来他只会将达到Stage1的Rollup称为Rollup,而未能进一步迈向Stage2的项目,将难以满足以太坊的长期愿景。在Stage2,L2将依赖双重证明系统,并将控制权完全交由智能合约处理,进一步降低对人为干预的依赖。
降低验证门槛:让更多人参与以太坊网路
未来的目标是让更多人能轻松参与以太坊节点的验证。这包括:
- 开发类似Helios的LightClient,让运算资源有限的设备也能运行以太坊验证程式,实现节点运行的轻量化。
- 将StakeETH作为验证者的门槛从32ETH降低到1ETH,让更多用户能参与验证,进一步分散网路风险。
- 减少对Lido等LiquidStakingProvider的依赖,避免因过度集中化带来的风险。
这些措施旨在提升以太坊网路的去中心化程度,确保其稳定性与长期可持续发展。
执行层的持续扩容:TPS迈向十万级别
目前L1每个区块的Blob数量与大小存在限制,导致L2在现阶段的理论TPS(每秒交易次数)仅达几千笔。然而,未来希望通过扩展Blob机制,如引入PeerDAS技术,实现每秒十万笔交易的目标。这将大幅提升以太坊的可扩展性,为高频交易应用场景铺平道路。
共识层的革命性变革:BeamChain
以太坊的共识层将迎来一项重大改变,即BeamChain的引入。这是Justin提出的对现有BeaconChain的全面重写,旨在解决当前最棘手的问题,并迈向以太坊的终极目标(EndGame)。主要的改进方向包括:
- 抗量子电脑:随着量子电脑技术的发展,现有的椭圆曲线签章(ECDSA)面临被破解的风险。因此,迁移到后量子密码学签章成为当务之急。
- 更快的Finality:目前以太坊达到最终共识(Finality)的时间约为15分钟,而理想目标是12秒(SingleSlotFinality)。更快的最终确认能大幅提升用户体验,特别是在中心化交易所的资金存取等场景中。
- ZKProvable:随着验证者数量的增加,如何降低验证者资源需求成为一大挑战。通过结合ZK技术和签章聚合(SignatureAggregation),验证者能快速验证数万个其他验证者的签章,在四秒内处理完一个Block。然而,现有的BLS签章基于椭圆曲线密码学,也需进行抗量子攻击的改写,才能满足未来需求。
图中绿色的项目可以透过对共识层渐进式的改动完成,然而红色项目最为棘手,需要重写核心程式码,BeamChain因而被提出作为解决方案。
极度严谨的工程精神与长期路线图
BeamChain的引入需要对核心程式码进行全面重写,不仅能解决现有技术债,还能从过去的经验中汲取教训。根据初版BeamChainRoadmap,整个升级计划将分为三个阶段:
- 一年内完成规格定义。
- 1~2年完成实作。
- 1~2年进行完善与全面测试。
这体现了以太坊对去中心化的坚守以及对安全性的极高要求,毕竟整个网路承载了数千亿美元的资金,任何小差错都可能导致灾难性后果。然而,也有许多社区成员批评五年的时间表过于冗长,期待能加速进度。Justin表示,这其中的确存在优化空间,他也希望更多人参与讨论与实作,共同推动这一计划的实现。
需要注意的是,BeamChain并非以太坊未来五年的唯一重点。在共识层进行升级的同时,执行层的改进(例如透过PeerDAS提高TPS)将持续推进,为应用开发者与用户提供更高效能与更流畅的体验。
Part2:Usability
随着ERC-4337帐户抽象标准的定案与上线,各式各样的SmartWallet(智能钱包)应运而生,大幅提升了使用者的体验与易用性。然而,这些创新同时也对钱包和DApp带来了新的技术挑战。另一方面,随着L2的蓬勃发展,资产碎片化问题日益显著,许多协议与应用开始朝向IntentCentricDesign和ChainAbstraction的方向发展,力求解决这些问题,让使用者能更快速完成复杂的跨链交易,并将相关细节隐藏于背后。以下将逐一探讨这些技术。
SmartWallet(ERC-4337)
ERC-4337标准让智能合约钱包日益普及,其中最具特色的一类便是Passkey钱包。使用者只需透过生物认证即可创建Passkey,并将其作为钱包的私钥进行签名。每次发送交易时,使用者只需再次进行生物认证,完全不需要记忆或保存助记词,这被许多人视为钱包的「终极体验」。
Passkey签章的技术挑战
Passkey钱包的核心在于智能合约中如何验证Passkey的签章。Passkey签章使用的是secp256r1椭圆曲线(又称P-256签章),而以太坊原生支持的是secp256k1。两者虽然只在椭圆曲线的参数上有所差异,但带来了巨大的Gas成本差距:
- secp256k1签章的验证只需使用以太坊内建的precompiledcontract,Gas成本约为3000。
- Passkey签章(P-256)的最佳实作目前需要约30万Gas,是前者的100倍。
为了解决这一问题,RIP-7212提案被提出,旨在降低验证Passkey签章的成本。通过该提案后,Gas成本有望降至约3000,与secp256k1签章验证相当,从而显著减轻用户负担。
Passkey钱包的共同挑战
即使在成本降低的前提下,Passkey钱包仍面临以下几个技术挑战:
- Passkey与域名唯一绑定:Passkey是绑定特定域名的。例如,CoinbaseSmartWallet使用的Passkey绑定于keys.coinbase.net。这样的设计完全杜绝了钓鱼攻击,但也带来了域名过期或单点故障的风险。
- 钱包碎片化:每个PasskeyWallet绑定不同的域名,导致使用者必须在不同应用中创建多个钱包,进一步加剧资产碎片化问题。
- 互通性问题:由于Passkey钱包的私钥存储于装置的安全储存空间,不支援汇出,且在Android和iOS之间也无法互通,使用者难以在一个地方统一管理资产。
- 盲签的安全风险:在签名过程中,使用者仅会看到「是否同意此应用使用这把Passkey」的提示,无法查看具体签名内容,导致高资安风险。若钱包前端遭受XSS攻击,用户资产可能被盗。
这些挑战让部分人质疑Passkey作为钱包私钥的适用性,认为其设计初衷是用于Web2登入场景,对于Passkey丢失风险的影响较小,随时都能透过「忘记密码」功能找回帐号,而且不需展示具体签名内容。但这不代表Passkey无法成为钱包的一部分,未来的钱包设计或许可以借鉴Web2,提供多种验证与帐号恢复选项,并依需求设置不同权限。
其他钱包验证与恢复机制:ZKEmail的创新
除了Passkey,ZKEmail团队提出了一种基于Email还原钱包控制权的机制。使用者可以将指定Email地址设为合约钱包的「监护人」(Guardian)。当私钥丢失时,用户只需从该Email发送一封信,包含合约钱包地址及新控制地址等资讯,即可生成ZK证明,在链上验证后取回钱包控制权。这一设计基于多年发展的Email基础设施,安全性高且操作便捷,有效减少了私钥丢失带来的风险。
ERC-4337的互操作性问题与解决方法
随着Passkey和ZKEmail等机制的应用,ERC-4337钱包面临着显著的互操作性挑战。例如,当使用者在A钱包中建立了ERC-4337合约钱包,若希望汇出至B钱包使用,可能因两者使用的AccountFactoryContract不同而无法相容。这导致:
- B钱包无法辨识A钱包所使用的签章方法。
- B钱包无法支援发送A钱包的交易。
为了解决这一问题,业界提出了模组化合约钱包标准,例如ERC-7579和ERC-6900。这些标准将ERC-4337的功能进一步模组化,例如:
- 授权模组:可以用Passkey或多签验证替换。
- 交易执行模组:可根据应用需求更改,例如如何批次执行交易。
- 权限模组:支持灵活的权限配置。
这样的设计允许所有钱包应用共用同一个AccountFactoryContract,并能够灵活组合不同模组,极大提升互操作性,减少资产管理的摩擦成本。
SmartWallet(EIP-7702)
EIP-7702(SetEOACode)是下一代帐户抽象标准,预计将在下一次以太坊Pectra硬分岔中被纳入。这项提案的初衷在于解决ERC-4337的一个关键限制:使用者需要创建新的智能合约钱包,无法延续过去的EOA(ExternallyOwnedAccount)。EIP-7702则提供了一个全新解法,允许任何EOA地址「升级」为智能合约钱包,带来多样化的灵活功能:
- 批次执行交易:将DeFi操作中的多次签名(如Approve+Swap)简化为一次签名即可完成。
- Gas赞助:EOA不必持有ETH,也可以透过其他地址代为支付交易所需的Gas。
- 弹性的权限设定:支持Passkey或多签等验证逻辑,让EOA具备更多智能化功能。
EIP-7702的应用案例
Ithaca团队在EXP-0001中展示了EIP-7702的Demo,让使用者可以一键创建Passkey并将EOA地址的权限代理给该Passkey。此后,所有交易只需Passkey签名即可完成,且已在测试网中部署了RIP-7212(Passkey签章优化)的实作,显著降低了Gas成本。借助这一技术,EOA可透过单一Passkey签章执行多笔交易,进一步提升使用者的便利性。
EIP-7702的技术流程
EIP-7702的核心在于如何将EOA地址绑定智能合约逻辑,其具体流程如下:
- 授权请求:使用者拥有一个EOA地址(假设为A),希望将其升级为智能合约钱包,并选择一个智能合约实作地址(S)。
- 生成授权签章:使用A的私钥签署一个授权讯息,包含链ID、nonce,以及S的地址等资讯。
- 提交授权交易:若A没有ETH,可将授权签章提交给Relayer,由Relayer代为支付Gas,将授权讯息上链。
- 存储合约逻辑:交易完成后,A的AccountCodeStorage将储存S的地址。
- 执行合约逻辑:未来A发送交易时,Relayer可以呼叫A地址并传入交易参数,A的AccountCode会在执行过程中改写为S的逻辑,实现智能化功能。
- 取消授权:若使用者希望取消授权,可使用A的私钥签署取消请求,并提交至链上。
安全挑战与潜在风险
虽然EIP-7702的功能十分强大,但也带来了一些新的安全风险:
- 授权恶意合约的风险:如果使用者不小心签署了一个恶意EIP-7702签章,攻击者可借助合约逻辑批次转移使用者的所有资产,包括Token、NFT和DeFi仓位。相比现有的PermitSignature,EIP-7702的潜在风险更高。
- 跨链授权的风险:签署授权讯息时,若使用chainID=0,表示签章对所有EVM链生效。一个签章可能导致所有链上的资产同时暴露于风险,效果等同于私钥泄漏。
跨链授权的安全考量
EIP-7702的设计中,签章包含AccountNonce,这代表若不同链上的地址nonce不同,签章将无效。这一设计可以让钱包App通过一个签章升级用户的地址至所有链上的合约钱包,提升便利性。然而开发者在设计时需谨慎处理nonce机制,避免出现不必要的安全漏洞。
至于可能会授权恶意合约的问题,钱包App可采取以下措施:
- 引入「白名单」系统,对合约地址进行验证。
- 透过界面提示用户授权的合约逻辑是否安全。
EIP-7702与ERC-4337的互补性
EIP-7702的核心优势在于支持将现有的EOA升级为智能合约钱包。然而,这也带来一个限制:EOA的私钥始终拥有最高权限。如果私钥泄漏,将直接导致钱包的控制权丧失。而ERC-4337可以实现多签钱包等无需依赖单一私钥的设计,提供更高的安全性。因此,EIP-7702与ERC-4337之间并非相互替代,而是互补的关系。EIP-7702弥补了ERC-4337在EOA过渡上的不足,而ERC-4337则提供更高的安全保障,适用于对安全性有更高需求的场景。
SmartSession
虽然智能钱包(SmartWallet)带来了许多创新,但它们的出现并不代表DApp的使用体验会自动变好。钱包与DApp之间的沟通方式需要进一步的协调和标准化,才能真正实现流畅的使用体验。
DApp与SmartWallet的兼容挑战
在传统的EOA设计中,DApp发送交易通常是通过简单的eth_sendTransaction介面向钱包发送请求。然而,SmartWallet(如基于ERC-4337的智能合约钱包)需要一种全新的操作模式。ERC-4337引入了UserOperation的结构作为核心元件,但问题在于许多现有DApp并不知道如何生成UserOperation的资讯。这导致SmartWallet与当前DApp生态的兼容性大打折扣。
为了解决这一问题,社群内正在讨论如何统一相关介面,其中一些重要的提案包括:
- EIP-5792:帮助DApp确认钱包支持哪些SmartAccount的功能。
- ERC-7677:指导DApp如何生成UserOperation中的paymasterAndData栏位。
- ERC-7679:提供生成完整UserOperation的规范。
这些提案的目的是让DApp能更轻松地与SmartWallet互动,提升其易用性并加速智能钱包的普及。
SmartSession的概念与理想体验
除了介面统一外,另一个重要的改进方向是提升钱包与DApp的交互体验,减少使用者需要反覆操作钱包的次数。Reown(前WalletConnect)的创始人提出了SmartSession的概念,旨在简化操作流程并提供OAuth式的授权体验。理想中的使用场景如下:
- 初始授权:使用者登入DApp时,DApp向钱包请求授权,并说明需要执行的交易范围(例如Uniswap请求Approve与Swap的权限)。
- 生成SessionKey:使用者在钱包中点击同意后,DApp获得一个SessionKey,该Key对应于使用者同意的授权范围。
- 简化交易签署:当使用者操作DApp并需要发送交易时,DApp使用SessionKey签署交易并提交到链上,过程中无需用户再次确认。
透过SmartSession,使用者的点击次数可以减少到仅需一次,同时授权流程变得直观,类似Google或Facebook的OAuth体验。这种设计符合钱包与DApp连接的终极目标:「LessClicks&MoreControl」,即在减少用户操作的同时,保持用户对授权的完全掌控。
安全风险与解决方案
SmartSession虽然优化了使用体验,但也带来了一些安全风险,尤其是SessionKey泄漏的可能性。考虑到浏览器端是前端攻击(如XSS)的高发地点,如何安全地储存与管理SessionKey是必须解决的问题。
Passkey是实现SessionKey安全存储与签名的良好选择,因为它能大幅降低泄漏风险。同时,SessionKey的设计应保证丢失后对用户的影响最小,用户只需重新授权即可恢复使用。
IntentCentricDesign
随着上百条L2的诞生,使用者的资产逐渐分散到不同链上。这种分散性带来了跨链操作的复杂性,不仅速度慢,体验也相当不友好。在应用层面,越来越多的协议开始采用IntentCentricDesign(意图导向设计)来解决这些问题。这种设计理念的核心在于,用户只需表达自己的目标意图(Intent),而不需要关心具体实现方式,将操作的复杂性交由Solver(解决者)处理。从过去的「自行开车到目的地」到如今「叫Uber即可」,这正是IntentCentricDesign带来的使用体验转变。
ERC-7683:跨链意图的标准化实现
ERC-7683是由Uniswap和跨链桥Across提出的跨链意图标准,它让用户只需签署跨链操作的意图,由Solver负责完成具体请求,支援以下常见场景:
- 资产跨链移动:将A链上的XToken移动到B链。
- 跨链资产兑换:在A链上的XToken换成B链上的YToken。
- 跨链后的复合操作:在完成跨链兑换后执行目标链上的合约操作,例如购买NFT。
使用者只需一键操作,即可完成如「将ETH从以太坊跨链至Arbitrum并购买NFT」的复杂任务,且整个过程可在三秒内完成。
ERC-7683的操作流程如下:
- 记录意图:使用者在A链将资产存入ERC-7683合约,并记录其操作意图(Intent)。
- Solver锁定意图: Solver监听Intent,判断是否符合其能力与利润需求,然后在A链锁定该Intent。
- 执行跨链意图: Solver在B链垫付资金完成用户的目标操作,例如转移Token或兑换资产。这种「先垫款后操作」的模式大幅提升操作速度。
- 结算与支付:协议在A链上基于B链的最终状态(finalizedstate)每小时进行结算,计算Solver的服务费并支付。
使用者支付的手续费基本等同于一小时的借贷利息。这种模式比传统基于讯息的跨链协议效率更高,因为其采用了批次结算方式,减少了跨链讯息传输的成本,无需每笔交易都传送一个跨链的讯息。
灵活性与挑战
ERC-7683允许开发者自定义结算逻辑,让合约决定支付Solver的条件。这样的灵活性也带来以下问题:
- 流动性碎片化: Solver可能因不熟悉或信任特定的结算逻辑,而选择不参与某些合约的Intent,导致不同Settlement合约间的流动性缺乏竞争性。
- 安全性风险:若结算合约出现问题,Solver可能无法收回垫付资金,增加了参与风险。
为解决这些问题,可在Settlement合约采用模组化设计,让结算逻辑简单易懂且易于审计,从而吸引更多Solver提供流动性。
ERC-7683与EIP-7702的结合应用
未来结合EIP-7702,ERC-7683能实现更高效的跨链操作。例如,透过一个chainID=0的签章升级所有EVM链的EOA为智能合约钱包,使用者可将Intent设定为「在B链执行某操作」,并以目标链上的身份完成交易。这样,用户可在A链上管理资产,同时请求Solver在其他链执行交易并支付对应的Gas。此过程中,Solver的角色不仅执行交易,还帮助减少Gas成本,实现完全去中心化的解决方案。
CoWSwap的Intent解决方案
CoWSwap在单链场景中推动了Intent的应用,专注于优化Swap体验。其核心特点包括:
- 聚合多个Intent: Solver可同时计算多个Intent的最佳交易路径,例如同时满足A使用者想用XToken换YToken,与B使用者想用YToken换XToken的需求。
- 减少手续费:此方法避免了使用者分别与流动池进行交易的成本,带来理论上的最佳价格。
然而,CoWSwap的解决方案对Solver提出了极高的技术要求:
- 流动性获取:必须快速从多个DEX、中心化交易所(CEX)及跨链资源中获取流动性。
- 演算法优化:如何快速聚合并计算最优交易路径仍是未解的最佳化问题。
- 精准执行:在链上执行交易时需避免MEV(最大可提取价值)攻击,同时在CEX执行交易也需确保价格的精准度。
其他Intent案例:Daimo的CrossL2IntentAddress
在交易场景的Intent解决方案之外,Daimo提出了CrossL2IntentAddress的设计,为跨链支付与DeFi操作带来了更高效的方式。该设计允许使用者在sourcechain上将USDC发送到一个指定地址,通过relayer在destinationchain执行后续操作,例如将USDC跨链后进行特定的DeFi操作。整个过程完全去中心化,适用于跨链支付、一键投资等场景。
技术实现原理
这一设计的核心依赖于Circle的CCTP跨链桥和以太坊的CREATE2机制,通过结合这两者实现用户Intent的自动化执行。
- CCTP的目标地址指定:在使用Circle的CCTP跨链桥时,用户可以指定目标链上的接收地址。如果该地址是一个智能合约,relayer就能在接收USDC前执行合约中定义的操作。执行完成后,relayer再通过CCTP获取跨链的USDC作为报酬。这种机制使得relayer能在资金到达前完成用户的Intent,大幅提升交易速度与用户体验。
- CREATE2的地址预计算:在sourcechain上,使用者需要事先确定目标链上的Intent合约地址。这可以通过CREATE2机制实现:CREATE2允许在合约未部署时就计算其未来地址,只需提供合约的bytecode和一个salt。这样,用户在sourcechain上的操作即可预先确定目标链的合约地址。
- Relayer的执行流程:首先在destinationchain部署智能合约,并呼叫智能合约以执行用户的Intent(例如参与DeFi协议)。最后在同一交易中呼叫selfdestruct,清空合约的codestorage并获得gasfeerefund。
这种做法相比ERC-7683更简单,但需要在交易过程中部署合约,导致增加一些gas费用。不过,由于部署的合约只是小型的proxycontract,指向预先部署好的implementationcontract,因此额外成本相对有限。
ChainAbstraction
ChainAbstraction的核心理念是隐藏区块链的存在,让使用者专注于资产本身,而非背后的链。这意味着使用者只需知道自己拥有多少USDC、ETH等资产,而不用关心它们分散在哪些链上。当使用者发起USDC的转帐时,系统会自动检测并整合所有链上的USDC,完成转帐所需的跨链操作。同时,使用者不需要为Gas费烦恼,可以直接用转帐的USDC支付Gas。
BiconomyModularExecutionEnvironment
Biconomy提供了ModularExecutionEnvironment(MEE)解决方案,专为支持ChainAbstraction而设计。这个系统允许ERC-4337钱包的开发者轻松定义跨多链的操作,并将其整合为一个Supertransaction。使用者仅需签署一次对Supertransaction的授权,即可实现以下功能:
- 在多条链上执行指定的UserOperations。
- 自动完成跨链操作并达成最终目标。
其技术基础在于用户对所有操作生成一个MerkleRootHash签章,然后透过ModularExecutionEnvironment自动将这些操作上链执行。
其他解决方案
多家公司也提出了不同形式的ChainAbstraction解决方案:
- ZeroDev:提供了类似的SDK,让开发者可以方便地批量发送多链交易,简化操作流程。
- OneBalance:提供了CredibleAccount模组,支持整合多链的资产并实现ChainAbstraction。
- ParticleNetwork:采用Account-levelChainAbstraction,专注于网页钱包的体验,率先打造具有ChainAbstraction的应用。
- Nekodex:结合ChainAbstraction以及基于Passkey的AccountAbstraction统一DEX上多链的交易体验,降低使用门槛
Part3:DevTools
以太坊的开发生态持续进步,各种工具大幅提升了开发者的效率,无论是在测试网的模拟、智能合约的除错,还是区块链资料的索引,都有显著的创新。以下是几款值得关注的工具与解决方案。
TenderlyVirtualTestNet
TenderlyVirtualTestNet是一个强大的虚拟测试网工具,允许开发者fork主网,其特色是能与主网保持即时同步状态。同时它支援:
- 无限制的资源模拟:开发者可以随时取得测试网上的以太坊或任意修改Storage状态。
- CI整合:通过GithubAction,开发者能快速生成干净的测试环境,用于合约部署与自动化测试。
Simbolik
Simbolik是专为Solidity开发设计的除错工具,与VSCode无缝整合,只要在测试上方案下Debug就能执行。它的功能包括:
- 完整的EVM环境可视化:能即时检查每行Solidity代码执行时的stack、memory和storage状态。
- EVMbytecode分析:直观展示编译后的EVMbytecode的执行过程。
Simbolik为开发者提供了高效且细致的除错支持,帮助快速定位并解决合约中的问题。
TrustBytes
TrustBytes是一款将Solidity程式码转化为图像化呈现的工具,特别适合合约审计。它的核心功能包括:
- 函数调用关系可视化:清晰显示合约中所有函数之间的调用路径。
- 变数读写追踪:快速定位变数的读写位置,分析潜在Re-entrancy风险。
- 恶意输入分析:标示出哪些函数参数来自使用者输入,帮助预防恶意攻击。
TrustBytes通过缩短代码追踪的时间以提升审计效率,特别是在分析潜在攻击点方面。可参考其Demo网站。
EthereumIndexer
以太坊的资料结构让直接从JSONRPC获取资料效率低下,因此需要透过Indexer将资料提取并存储到高效的资料库中。以下是两个值得关注的解决方案。
IndexSupply的Shovel
Shovel是一款开源工具,允许开发者透过简单的config档,将链上资料转化为指定格式并储存到PostgreSQLDB。例如,纪录一个钱包的历史ERC20TokenTransfer可以这样设定:
{ name:erc20_transfers, enabled:true, sources:[{name:mainnet}], table:{ name:erc20_transfers, columns:[ {name:block_num,type:numeric},{name :tx_hash,type :bytea},{name:from,type:bytea}, {name:to,type:bytea}, {name:value,type:bytea}, ] }, block:[ {name:block_num,column:block_num}, {name:tx_hash,column:tx_hash} ], event:{ name:Transfer, type:event, anonymous:false, inputs:[ {indexed:true,name:from,type:address,column:from}, {indexed:true,name:to,type:address,column:to}, {name:value,type:uint256,column:value} ] } }
透过简单的配置,Shovel能快速完成资料的提取与存储,大幅降低开发成本。
RethExecutionExtension
RethExecutionExtension提供了一种新颖且高效的设计,针对链上资料索引与Re-org(链重组)处理,解决了传统方法中的诸多痛点。
过去,如果使用geth等节点软体来扩展功能,往往需要直接修改节点内的程式码,这样的做法相当于对节点进行了fork。一旦上游节点有更新,开发者还需要持续合并更新的程式码,这无疑增加了开发与维护的复杂性。
Reth的创新之处在于其设计为可直接作为libraryimport,开发者不需要fork或修改节点本身的程式码,就能灵活扩展节点功能。
核心特点与通知机制
Reth提供了清晰且灵活的通知介面,用于处理区块链的三种状态变化:
- ChainCommitted:新区块被确认(Committed)。
- ChainReorged:链重组导致出现新旧链切换。
- ChainReverted:区块被Revert
以下是范例程式码展示如何处理这些通知:
asyncfnexex<Node:FullNodeComponents>(mutctx:ExExContext<Node>)->eyre::Result<()>{ whileletSome(notification)=ctx.notifications.recv().await{ match¬ification{ ExExNotification::ChainCommitted{new}=>{ //dosomething } ExExNotification::ChainReorged{old,new}=>{ //dosomething } ExExNotification::ChainReverted{old}=>{ //dosomething } }; } Ok(())}
Part4:Security
安全问题一直是区块链领域的核心挑战,从开发环境的设置,到设备与用户端的保护,再到DeFi合约层面的防御,都需要严密的措施来降低风险。以下针对开发、设备与DeFi安全三大主题进行探讨。
开发环境安全(DevSecurity)
在区块链应用的开发过程中,环境的安全性往往容易被忽视,但它可能成为骇客的突破口。
VSCode信任机制的潜在风险
当开发者在VSCode中开启一个恶意的Repo并点击「Yes,Itrusttheauthors」后,骇客可能利用.vscode资料夹内的设定执行任意脚本,包括:
- 窃取电脑中的secret或privatekey。
- 开启一个reverseshell,让骇客远端控制电脑。
这是因为.vscode中的Tasks可以设置触发特定条件的自动执行脚本(详见官方文档)。这种漏洞可能导致开发者的整个系统处于被骇客接管的风险中。
防范措施:使用Sandbox环境
为避免上述风险,开发者应在Sandbox环境中开启专案。具体来说,可以使用VSCode的DevContainer功能,在Docker容器中执行完整的开发环境。这样即使恶意代码执行,也只会影响隔离的容器,不会危及主机系统。
GithubActionSelfHostedRunner的风险
SelfHostedRunner是Github提供开发者自行建置CI环境所需机器的解决方案。然而如果在PublicRepo启用SelfHostedRunner会带来潜在威胁:
- 恶意用户可以Fork该Repo并修改GithubAction的脚本,执行任意命令。
- 这可能导致Runner被入侵,骇客窃取所有GithubToken和Secrets。
这一风险已被详述于Synacktiv的报告。建议避免在PublicRepo中使用SelfHostedRunner,或采用更严格的权限管理。
设备安全(DeviceSecurity)
Ledger的研究显示iOS和Android平台的SyncablePasskey实作并不像预期中那么安全。主要问题在于:
- 私钥复制到应用程式记忆体:虽然Passkey本应依赖SecureEnclave来存储私钥,但实际上私钥可能会被复制到应用程式记忆体(applicationmemory)。这使得私钥暴露于潜在的恶意软体攻击之下,例如透过监听记忆体来窃取私钥。
- 记忆体快取问题:某些平台的快取机制会在装置解锁之前就将私钥暂存到记忆体中,进一步增加了被恶意软体利用的风险。
安全建议
为了降低使用Passkey带来的风险,建议采取以下措施:
- 选择Un-syncablePasskey:在创建Passkey时,选择「不可同步」(Un-syncable)的选项,避免私钥在不同设备之间同步时的潜在安全问题。
- 避免存放大量资金:不要将过多资金存放于Passkey钱包中,仅作为小额支付或日常操作使用。
- 使用硬体钱包:对于高价值资产,建议继续使用硬体钱包作为主要的存储方式,因为硬体钱包提供了更高的安全保证。
这些建议可以有效降低Passkey在日常应用中的潜在风险,同时确保资产的安全性。
DeFi安全(DeFiSecurity)
区块链应用最核心的DeFi领域,因其高额资金流动性,成为骇客攻击的主要目标。防范这类风险需要智能合约与基础设施层面的共同努力。例如Forta提供了一种基于AI模型的链上防火墙,用于过滤潜在攻击交易。其运作机制如下:
- 交易签名验证:DeFi合约需要为合约中的关键方法加上Forta的签章参数
- 交易模拟与风险评估:Forta的RPC节点将模拟交易执行过程,通过AI模型评估风险分数。Fora已经实现99%以上的准确度
- 执行控制:只有风险分数低于门槛值的交易才会获得签名并被放行。
因此这个做法必须由DApp透过Forta提供的RPC发送交易才可以,如果使用公开的RPC则无法取得必要的签章。但这也带来潜在的问题与挑战:
- 升级与整合困难:DeFi协议需要修改合约以整合Forta的系统,这对现有协议的升级是一大挑战,尤其是影响到可组合性,因为其他DeFi协议就无法轻易呼叫自己的合约。
- 交易模拟问题:在链下的环境模拟交易执行的结果可能与实际上链的结果不同,有机会被骇客利用
- 顺序依赖问题:由于L2链上交易的执行顺序是由Sequencer决定,骇客有机会透过交易顺序的不一致性来在模拟时产生正常的结果,拿到签章后上链执行恶意交易
至于如何解决第二个问题,知名交易安全检测公司Blowfish的CTO提到,可以在模拟交易过程检测该交易是否使用了与EVM环境参数相关的逻辑,例如block.timestamp或block.basefee等等,但也无法保证100%判断正确,因此精准的交易模拟仍然是安全领域待解决的难题。
Part5:FuzzTesting
FuzzTesting是一种强大的测试技术,其核心原理是透过大量随机的输入测试智能合约,试图触发意外的逻辑漏洞。这种方法对于捕捉人眼难以察觉的边缘情境(cornercases)尤其有效。
FuzzTesting的原理与限制
Fuzzer的主要作用是持续尝试各种随机输入来检测智能合约是否能满足定义的Invariant(不可变条件)。开发者可以利用这种方法进行黑箱测试,模拟合约的实际使用情境,并验证其逻辑是否能抵抗各种异常操作。
尽管FuzzTesting是捕捉逻辑漏洞的有效工具,但找不到漏洞并不代表合约没有问题。Fuzzer的效果取决于定义的Invariant是否完善,以及随机测试的覆盖范围。
相关范例
以下是三个经典例子,说明如何使用黑箱的FuzzTesting方法来检测系统的正确性:
- 排序演算法测试:原始输入:未排序的数字阵列A。随机调整:对A随机打乱(Shuffle)后再排序,结果应与原始输入排序结果相同。验证:比较两次排序的结果是否一致。
- 最短路径演算法测试:原始输入:图G和两个节点n1与n2。随机调整:从图G移除某条边后,n1到n2的最短路径应该变长或保持不变。验证:比较移除边前后的最短路径。
- 编译器测试:原始输入:程式P。随机调整:在P中加入DeadCode后编译,结果执行的行为应与原始程式一致。验证:比较两次执行结果。
使用Chimera撰写FuzzTest
以下介绍如何使用Chimera框架来整合多种Fuzzer工具(如Echidna、Medusa和Foundry)进行智能合约的Fuzz测试。
案例分析:Vesting合约漏洞
以下是一个简化的Vesting智能合约范例,其目的是实现用户的积分分配与转移,完整程式码在solidity-fuzzing-comparison Repo中的09-vesting。然而,该合约存在一个漏洞:用户可以通过「自我转移」增加自己的积分,进而破坏总积分不变的Invariant。
Vesting.sol合约部分代码:
//usersentitledtoanallocationcantransfertheirpointsto//anotheraddressiftheyhaven'tclaimedfunctiontransferPoints(addressto,uint24points)external{ require(points!=0,Zeropointsinvalid); AllocationDatamemoryfromAllocation=allocations[msg.sender]; require(fromAllocation.points>=points,Insufficientpoints); require(!fromAllocation.claimed,Alreadyclaimed); AllocationDatamemorytoAllocation=allocations[to]; require(!toAllocation.claimed,Alreadyclaimed); //enforceidenticalvestingperiodsif`to`hasanactivevestingperiod if(toAllocation.vestingWeeks!=0){ require(fromAllocation.vestingWeeks==toAllocation.vestingWeeks,Vestingmismatch); } allocations[msg.sender].points=fromAllocation.points-points; allocations[to].points=toAllocation.points+points; //if`to`hadnoactivevestingperiod,copyfrom`from` if(toAllocation.vestingWeeks==0){ allocations[to].vestingWeeks=fromAllocation.vestingWeeks; }}
用户可以将自己的积分转移给自己(self-transfer),导致总积分超出限制,破坏合约中「所有用户积分总和应等于总分数」的Invariant。然而就算我们不细看transferPoints的实作,也能透过对其黑箱的Fuzzing来找到问题。
设计Invariant:思考不可变条件
在测试此合约时,可以设计以下两个主要Invariant:
- 初始化阶段:所有用户的积分总和应等于TOTAL_POINTS。
- 执行阶段:在任意操作后,所有用户的积分总和仍应保持不变。
这些Invariant可以被用于多个Fuzzer的测试过程中。
使用Chimera框架进行测试
Chimera是一个功能强大的多工具整合框架,允许开发者一次撰写测试代码,并同时在多个Fuzzer工具上执行。以下是使用Chimera的步骤:
1、安装Chimera:forgeinstallRecon-Fuzz/chimera
2、设定测试环境:建立一个Setup.sol文件来初始化测试合约,并追踪需要检查的状态。
//SPDX-License-Identifier:MITpragmasolidity^0.8.23;import{Vesting}from./Vesting.sol;import{BaseSetup}from@chimera/BaseSetup.sol;abstractcontractSetupisBaseSetup{ Vestingvesting; functionsetup()internaloverride{ address; recipients[0]=address(0x1111); recipients[1]=address(0x2222); uint24; points[0]=50_000; points[1]=50_000; uint8; vestingWeeks[0]=10; vestingWeeks[1]=10; vesting=newVesting(recipients,points,vestingWeeks); }}
3、实现Invariant:定义检查条件,例如所有用户的积分总和应等于总积分。
functionproperty_users_points_sum_eq_total_points()publicviewreturns(boolresult){ uint24totalPoints; //sumupalluserpoints for(uint256i;i<recipients.length;i++){ (uint24points,,)=vesting.allocations(recipients[i]); totalPoints+=points; } //trueifinvariantheld,falseotherwise if(totalPoints==TOTAL_POINTS)result=true;}
4、定义如何测试目标函数:指定transferPoints参数需满足的条件,避免因错误参数导致的Revert
functionhandler_transferPoints(uint256fromIndex,uint256toIndex,uint24points)external{ fromIndex=bound(fromIndex,0,recipients.length-1); toIndex=bound(toIndex,0,recipients.length-1); addressfrom=recipients[fromIndex]; addressto=recipients[toIndex]; points=uint24(bound(points,1,vesting.allocations(from).points)); vesting.transferPoints(to,points);}
5、执行FuzzTesting
forgetest--match-contractVestingCryticToFoundry
可以看到Fuzzer在短时间内就找到了打破不变量的方法
修复漏洞
漏洞的解法是避免自我转移:
functiontransferPoints(addressto,uint24points)external{ require(points!=0,Zeropointsinvalid); require(msg.sender!=to,Selftransferinvalid); //...}
修复后再执行一次测试即可通过了
FuzzTestingforZKInfrastructure
零知识基础设施(Zero-KnowledgeInfrastructure,ZKInfra)涉及编译、执行、生成证明与验证ZK电路的多个核心软体元件,对其进行漏洞检测至关重要。FuzzTesting是检测这些基础设施漏洞的一项强大工具,尤其适合处理其高复杂性与高安全需求的特性。
基于黑箱测试的随机变换与不变性检测
零知识基础设施的测试需要克服其内部实现的高度复杂性,黑箱测试因此成为检测漏洞的有效方法。在这种测试中,开发者将处理流程视作不可见的黑箱,仅根据输入和输出进行分析。
首先,测试工具会随机生成一个原始电路(C1),这些电路通常以小型DSL(特定领域语言)描述,用于模拟用户操作。接着,应用一系列随机变换来生成新电路(C2)。这些变换包括乘以1、加减随机表达式或其他等价操作,保证电路语义不变。随后将两个电路各自进行ZK工具的编译处理,若在任何阶段输出或行为不一致,即可定位到处理流程的漏洞。
例如,一个表达式P转换为P×1−0时,应保持输出一致,否则可能指向WitnessGenerator或编译器中的潜在问题。
持续且多元测试
由于零知识基础设施经常被用于Layer2协议,将乘载数亿美金以上的价值,其安全性至关重要,因此持续测试显得尤为必要。这可以通过自动化测试工具来实现,保证每次代码更新后都能迅速发现潜在漏洞。
测试还需要支持多种零知识DSL,如Circum、Gnark和Noir,确保适用于广泛场景。同时,FuzzTesting工具应具备自动化反馈功能,能够持续执行并根据发现的问题进行改进。此外,测试生成的输入应尽量简化,以便开发者快速理解并定位问题。
Part6:FormalVerification
FormalVerification(形式化验证)是一种透过数学方式验证软体是否符合特定FormalSpec(规格)的技术。对于智能合约而言,这种方法能有效检查合约在所有可能状态下的正确性。与FuzzTesting(模糊测试)相比,FormalVerification的验证过程更为系统化,能够覆盖所有可能的状态并「数学证明」合约逻辑的正确性。
然而,FormalVerification的实施通常需要严谨的规格定义,且计算成本较高。另一方面,FuzzTesting则透过随机输入测试合约,具有轻量且能快速发现边界问题的特性,但其测试范围有限,可能无法检测更深层的逻辑漏洞。
Certora
Certora提供了一套完整的工具来弥补这些不足,帮助开发者在现实环境中应用FormalVerification。其主要产品CertoraProver为智能合约提供了强大的验证框架,允许开发者定义规则并自动化验证合约的逻辑正确性。
Certora提供的工具旨在简化智能合约的形式化验证过程,核心功能包括:
- CertoraProver:一个验证平台,允许开发者使用CertoraVerificationLanguage(CVL)定义规格并测试合约逻辑。
- 整合式框架:透过设定档与脚本执行验证。
- 详细报告:自动生成验证结果,包含失败的详细原因与对应的测试输入,协助快速定位问题。
使用CertoraProver于有漏洞的投票合约
以下是一个简单的投票合约,完整的程式码可以在basic-presentation Repo中找到。其中totalVotes在每次投票后会被重置为1,这是一个逻辑错误:
//SPDX-License-Identifier:MITpragmasolidity^0.8.0;contractVoting{ mapping(address=>bool)publichasVoted; uint256publicvotesInFavor; uint256publicvotesAgainst; uint256publictotalVotes; functionvote(boolisInFavor)external{ require(!hasVoted[msg.sender]); hasVoted[msg.sender]=true; totalVotes=1;// BUG:每次投票后重置totalVotes if(isInFavor){ votesInFavor+=1; }else{ votesAgainst+=1; } }}
步骤1:撰写规格
以下是一个简单的规格,检查totalVotes是否在每次投票后递增:
rulevoteIntegrity(enve){ uint256votedBefore=totalVotes(); boolisInFavor; vote(e,isInFavor); assert( totalVotes()>votedBefore, totalVotes应该在每次投票后递增 );}
步骤2:设定config
使用以下.conf档案来设定验证细节,包括要验证的合约与规范档案。
{ files:[src/VotingBug.sol:Voting], verify:Voting:certora/specs/VotingBug.spec, msg:验证totalVotes递增, server:production}
步骤3:执行验证
在专案根目录执行以下指令:
exportCERTORAKEY=xxxcertoraRuncertora/confs/VotingBug.conf
如果还没有APIKey,可以在官方网站注册取得。输出中会有一个CertoraProver结果的连结,点进去即可看到Prover找到了一个错误,并提供详细的输入参数
步骤4:修复问题
修改合约逻辑以修复问题:
functionvote(boolisInFavor)external{ require(!hasVoted[msg.sender]); hasVoted[msg.sender]=true;
totalVotes+=1;//FIXED:正确地累加totalVotes if(isInFavor){ votesInFavor+=1; }else{ votesAgainst+=1; }}
步骤5:重新验证
再次执行验证,确认所有规范均已通过,代表此智能合约的正确性可被数学证明。
进阶功能:验证不变性(InductiveInvariants)
Certora也支援定义不变量规则(InvariantRules),确保合约在所有状态下的逻辑一致性。例如:
invarianttotalVotesIsSumInvariant() votesInFavor()+votesAgainst()==to_mathint(totalVotes());
此规则验证totalVotes永远等于赞成与反对票数的总和。
Part7:MaximalExtractableValue(MEV)
在文章的前半部分中,我们已提到IntentCentricDesign,其中介绍了CoWSwap如何透过设计应用层的逻辑来简化跨链交易并提升用户体验。在这一部分,我将深入探讨CoWSwap如何解决MaximalExtractableValue(MEV)问题,以及其主张MEV应在应用层解决的理念。同时,我们也会介绍Unichain如何通过可信执行环境(TEE)在基础设施层解决MEV问题,呈现两种截然不同但互补的解决方式。
CoWSwap的MEV解决方案
CoWSwap的核心主张是,MEV问题的根源在应用层。目前约99%的MEV问题来自交易排序的竞争,而应用层(例如去中心化交易所DEX)的设计是导致这些问题的主因。因此,MEV问题应该在设计应用时一并考虑,而非依赖基础设施层的迂回解决方案。
CoincidenceofWants(需求的巧合)
CoWSwap引入需求巧合的概念,通过将多笔交易的需求聚合在一起,使交易者直接匹配需求,避免了流动性池的中间操作,从而减少MEV攻击的可能性。
案例:假设Alice想用100USDC换取1ETH,而Bob刚好想用1ETH换取100USDC。在传统DEX中,这些交易需要分别通过流动性池进行,可能会被套利者利用滑点进行MEV攻击。而在CoWSwap中,这两笔交易可以直接匹配,无需经过流动性池,消除了滑点和MEV攻击。
BatchAuction(批次拍卖)
CoWSwap的批次拍卖机制是其解决MEV问题的核心手段:
- 收集交易意图:在链下收集并聚合用户的交易意图。
- 批次处理:将在特定时间段内收集的交易意图组合成一个批次,这些批次通常每隔几秒钟产生一次。
- 竞价解决方案:通过竞标机制选择最佳的解决方案提供者(solver),这些提供者竞争以提供最优交易执行方案,为用户带来最大的价格盈余。
- 统一清算价格:所有涉及相同资产的交易都以统一的清算价格结算,使交易顺序变得无关紧要,从而减少MEV攻击。
批次拍卖的优势:
- MEV保护:批次拍卖透过统一清算价格,使交易顺序的影响被弱化,显著削减MEV攻击的空间。
- 资产匹配:直接点对点交换,无需触及链上流动性。
- 最佳价格保证:确保用户交易的价格不低于在AMM上直接获得的价格。
实际案例:
假设有三位用户的交易意图:
- 用户A希望以100DAI购买ETH。
- 用户B希望以200DAI购买ETH。
- 用户C希望出售1ETH,目标获得300DAI。
这三笔订单在批次拍卖中被组合在一起。由于A和B的购买需求总和(300DAI)恰好匹配C的出售需求(1ETH),因此可以直接在用户之间进行点对点交换,无需触及链上流动性。这不仅提高了交易效率,还降低了交易成本,并消除了MEV攻击的风险。
Unichain的MEV解决方案
与CoWSwap将MEV处理集中在应用层的设计不同,Unichain选择在基础设施层通过可信执行环境(TEE)来解决MEV问题。Unichain是基于OPStack的OptimisticRollup,其核心创新在于加密交易与TEE排序,保证交易排序的透明与公平。
Unichain解决MEV的关键流程:
- 加密交易:使用者在发送交易时,首先使用TEE的公钥加密交易内容。因此,在mempool中,所有节点看到的交易都是加密的,无法直接得知交易的细节,自然也就无法通过交易排序提取MEV。
- TEE排序:只有在TEE环境内才能解密交易并进行排序。TEE会根据预设的规则排序交易并构建区块,最终生成的排序结果带有TEE的签章,保证排序过程的透明度。
- 返还MEV收益:对于普通用户,Unichain提供接近零成本的Gas费,同时完全避免了被抢跑(front-run)的风险。而对于MEVSearcher,他们需要支付更高的Gas费来竞争区块的前位。这些额外的收益会被Unichain用于回馈给验证者,形成公平的经济激励。
Part8:ZeroKnowledgeProof(ZKP)
ZeroKnowledgeProof(ZKP)技术的应用展示了如何透过密码学方法,实现隐私保护与效能的平衡。以下将介绍几个令我印象深刻的ZK应用。
ZKPassport
ZKPassport结合了国际电子护照(ePassport)的晶片技术与ZKP,为用户提供一种既安全又隐私的身份验证方式。透过手机感应护照的NFC,用户可以取得护照晶片中由政府签署的资料,例如基本资讯和照片。由于这基于全球标准(ICAOBiometricPassport),超过100个国家的护照均可支援。基于此签章即可生成护照资料有效性的零知识证明。
技术特点
- 隐私保护:用户可选择只验证护照资料的部分条件,例如「年龄是否大于18岁」或「国籍是否为美国」,而不需要公开完整的护照资讯。
- 效能佳:ZK电路使用Noir编写,在手机上生成证明仅需约5秒钟
应用场景
- SybilResistance:可用于防止多重身份诈骗,例如确保一个人只能领取一次空投。
- ZKKYC(KnowYourCustomer):在不透露完整身份的情况下,证明用户来自合法的国家或符合其他特定条件。
ZKEmail
ZKEmail是一个基于零知识证明的Email验证应用,允许用户选择性地验证邮件内容。例如,证明Email的发信人是否为特定组织、Email内文是否有特定文字,而无需公开整封邮件的内容。关键是采用每个Email都会由MailServer签署的DKIMSignature,产生一封信是由该域名发出的零知识证明,且无法被伪造。
技术特点
- 将可信的Email资料带到链上验证,串连Web2资料与Web3
- 新推出的ZKEmailRegistry:提供可共享的EmailtemplateRegistry,开发者可快速使用。如有人收到Devcon的拒绝信后,写了一个让任何人证明自己有收到拒绝信的template。
- 更方便的SDK:开发者仅需撰写JSON设定,而不需了解如何实作ZK电路,并隐藏具体的ZK电路实作,如Circom,Noir
应用场景
- ZKP2P:透过点对点转帐的确认信,打造法币与虚拟货币兑换的平台,且完全去中心化
- EmailWalletGuardian:Email可作为智能合约钱包的备援手段。例如,用户寄出一封Email即可恢复钱包的控制权。此功能也能兼容ERC-7579的模组化SmartAccount架构。
- Whistleblowing:在保护个人身份隐私的前提下,以特定组织的身份揭发秘密
技术挑战
- DKIMpublickey的正确性:在智能合约中需验证DKIMSignature对应的PublicKey是否真正属于该域名,而这目前只能透过Oracle提供资料。需要透过像Re-staking的机制来确保该资料足够去中心化,避免单点故障
- 在处理较长的邮件时,ZKP的计算效能面临挑战。团队正在研究递回证明(recursiveproof)以支援更高效的bodyhash验证。
- 未来可能支援Email附件(例如PDF)内容的证明,进一步拓展应用场景,如证明银行的转帐纪录
- 手机用户体验:由于手机端无法像桌面端下载原始邮件,ZKEmail目前仅能透过OAuth授权读取邮件。虽然这引发一定的隐私顾虑,但ZKEmail的开源性确保了这些操作仅限于客户端,不会回传Email资料到服务器。
ZKP2P
ZKP2P是一个基于零知识证明技术的域名交易市场,旨在提供快速、安全、去中心化的域名交易体验。该平台支持利用零知识证明验证域名所有权,并使用ETH进行域名交易。目前ZKP2P已支援使用者交易Namecheap上的域名。
域名交易的核心机制
- 域名所有权验证:平台使用一种基于密码学的Web认证协议来验证域名的所有权。卖家需使用ZKP2P提供的浏览器Extension,从Namecheap网站生成不可篡改的域名所有权证明,并提交到智能合约中。
- 交易过程中的隐私保护:买家在提交购买申请时,需提供Namecheap用户名,该资讯会加密处理,仅卖家可见。
- 资金锁定:买家的ETH会先被锁定在智能合约的托管中,直到卖家完成域名转让并提供相关的零知识证明后,资金才会释放。
- 零知识证明的使用:卖家转移域名后会收到Namecheap的确认信,因此ZKP2P使用ZKEmail产生这封信的零知识证明,确保域名已转移给买方。
技术特点与优势
- 隐私与安全性:ZKP2P通过加密用户敏感资讯(例如Namecheap用户名)来保护隐私,确保只有域名卖方能看到买方的用户名。
- 去中心化与透明性:平台所有的交易验证过程均在智能合约中执行,减少对第三方的依赖,并提高整体透明度。
- 降低交易成本:每笔交易仅收取2.5%的交易费用,远低于其他域名交易市场(一般超过10%),让买卖双方都能享受更低的交易成本。
PolygonZisK
Polygon正在开发新一代的ZKVM证明系统ZisK,目标是实现即时证明整个EVM区块中所有交易的计算。ZisK的设计核心在于其通用性(GenericZKVM)和极致的证明生成速度优化,旨在提升零知识证明在区块链应用中的性能。
ZisK的设计架构
ZisK的架构受到嵌入式系统(EmbeddedSystem)的启发,采用了模组化的设计,主要组件包括:
- ROM(只读存储器):储存ZKVM的程序逻辑和静态数据。
- ZisKProcessor(处理器):负责执行电路的核心计算逻辑。
- RAM(随机存取存储器):用于储存临时数据和中间结果,支援高效的数据访问。
- Bus(总线):负责连接ZisK系统内部的各模组,协调讯息交换。
目前,ZisK还处于非常早期的开发阶段,可参考其开发文件。
ReclaimProtocol
ReclaimProtocol是一个将TLSProxy技术与零知识证明(Zero-KnowledgeProof,ZKP)相结合的隐私保护协议,旨在让用户能够在不泄露敏感资讯的前提下,验证HTTPS通讯内容的真实性。该协议为资料验证与互操作性提供了安全的解决方案,尤其适用于Web2和Web3场景的整合。
TLSProxy机制
ReclaimProtocol的核心依赖于TLSProxy作为信任中介。过程中HTTPS请求和回应会经过TLSProxy,并由Proxy签署该流量的加密内容,从而为后续的证明生成提供基础。TLSProxy的角色仅限于签署加密流量,无法解密任何资料,这也减少了隐私风险。
TLSProxy的一个重要功能是处理使用者和伺服器之间的HTTPS流量,并保证这些流量来自正确的伺服器。例如,在证明某银行网站的余额资讯时,TLSProxy签署的加密流量可以确保数据未被篡改,并提供可信的资料来源。
然而尽管TLSProxy提供了关键的信任保障,在极端网路条件下(例如BGPHijack攻击),可能会出现Proxy认证的流量被路由到错误伺服器的风险。这种攻击需要在TLSHandshake后精准篡改流量,实现难度极高,但这仍是协议中需要特别关注的安全边界。
zkTLS技术细节
ReclaimProtocol结合了ZKP技术,允许用户在不泄露完整TLS明文的前提下验证其真实性,其ZK电路的设计旨在处理解密与部分揭露的功能。
协议中的ZK电路能够解密特定的TLS流量,并仅揭露其中需要验证的部分资讯。例如,用户可以提供AES解密金钥作为PrivateInput,在电路中解密TLS流量,并公开指定区域的明文资讯。这些操作基于gnark框架进行,确保了高效的证明生成。
值得注意的是,ReclaimProtocol提供了透过RegularExpression或是HTMLtemplate匹配TLS流量的功能,而这一匹配逻辑被设计为在电路外实作,以避免电路过度复杂。因此客户端需首先自行透过Template定位哪些AESBlock中有包含所需的明文,再生成ZK证明来证实匹配结果。这样导致的资安风险是,如果TLSPayload中在其他部分也出现了类似的字串,客户端则有机会伪造证明。
应用场景
ReclaimProtocol目前将重点放在Web2场景的资料互操作性上,解决不同平台间的数据共享问题。例如:
- 电商优惠:用户可以从A电商生成消费记录的ZKTLS证明,并将其提供给B电商以获取专属优惠,精准吸引新用户。在这一过程中,协议可确保B电商只能知道消费总金额,而不会接触完整的消费明细。
- 身份验证:用户可使用协议生成ZKTLS证明,证明其在特定平台的活动,如在某论坛的参与情况,或在某开发者平台的贡献数据。
技术与信任的挑战
- 信任TLSProxy:协议需要用户信任TLSProxy,因为Proxy会签署HTTPS流量,成为证明可信来源的基础。
- ZK证明的链上应用:由于目前ZK证明的链上验证成本较高,ReclaimProtocol将应用重点放在Web2场景,尚未在链上进行完整的ZK验证。
- 网路攻击风险:极端情况下,如BGPHijack,可能导致TLSProxy无法正常运作,但这类攻击需要精确的时间和网路控制,实现难度极高。
vLayer
Vlayer是一家专注于开发「可验证资料基础设施」的加密初创公司,称之为「Solidity2.0」。其目标是使开发者能够将真实世界的资料验证后整合至以太坊智能合约中。具体而言,Vlayer为Solidity语言引入了四个新功能:
- TimeTravel:允许智能合约使用历史链上资料。
- Teleport:使合约能在多个EVM兼容的网络上运行。
- WebProofs(zkTLS):验证并整合网页内容,包括API和网站。
- EmailProofs(ZKEmail):存取并验证电子邮件内容。
这些功能旨在扩展智能合约的应用范围,特别是在去中心化金融(DeFi)、真实世界资产(RWA)和游戏等领域。目前,Vlayer正处于Alpha阶段,邀请开发者在其平台上进行开发,并计划于2025年推出测试网、主网和代币。
Mopro
Mopro(MobileProver)是一个专为Mobile环境开发的ZK证明生成工具,以简化客户端的证明过程。Mopro的主要特点包括:
- 易用性:简化了在移动应用中整合ZK证明的复杂性
- 高性能:比在浏览器上使用snarkjs更快,并尝试使用GPU优化性能
- 跨平台兼容性:支援iOS、Android平台
然而,在Mobile环境下仍存在一些挑战:
- GPU加速的限制:虽然Mopro尝试利用GPU提升性能,但由于移动设备使用的MetalAPI不如桌面端CUDA易于优化,开发上面临一定难度。然而,数据显示在处理大型电路时,Mopro的性能表现有望优于其他传统工具。
- 记忆体限制:Mobile设备的记忆体容量有限是主要挑战之一,特别是在运行复杂的ZK电路(如ZKEmail)时,可能会因内存不足导致应用Crash
Part9:Multi-PartyComputation(MPC)
MPC是一种密码学技术,允许多方在不泄露各自输入的情况下,共同计算一个函数的结果。其与ZK的差别在于:
- MPC需要多方参与计算,且所有人都能隐藏输入的内容。
- ZK:仅需一方(Prover)生成证明,另一方(Verifier)验证其声明是否正确,无需多方协作。因此Prover需要知道所有计算过程的资料。ZK保障的是SinglePlayerPrivacy。
以下介绍几个MPC的应用与最新研究,展示其在隐私保护与分布式计算中的潜力。
WorldID
WorldID是Worldcoin的核心技术,旨在为每位用户建立独特的数位身份,用以证明个人的「唯一性」。注册过程中,使用者需透过「虹膜扫描」验证身份,确保每人仅能注册一次。这需要将新扫描的虹膜与已注册的数据库进行比对。然而,大量集中存储的真实虹膜数据可能带来巨大的隐私风险。
为解决此问题,Worldcoin与Taceo合作,探索基于MPC的去中心化虹膜比对方案。
技术细节与流程
- 资料的SecretSharing:用户的虹膜扫描资料被拆分为三个SecretShare,分发给三个计算方,确保单一计算方无法取得完整的虹膜资料。
- Hamming距离计算:透过内积运算将用户的虹膜资料与资料库中的虹膜逐一比对,计算Hamming距离并与设定的阈值进行比较。整个过程在MPC框架下执行,确保数据隐私不被泄露。
- 结果聚合:将比对结果以逻辑OR聚合,产生最终的验证结果,判断虹膜的唯一性。
WorldID最大的技术挑战在于计算成本高昂:Worldcoin的使用者数已超过1,600万,每次唯一性验证需要针对庞大的数据库进行线性扫描。在GPU加速环境下,一次验证需要32台NVIDIAH100GPU,峰值网络吞吐量达2.5Tbps。
因此,Worldcoin正积极探索计算资源需求更低但验证严谨度相对较低的替代方案,例如借鉴ZKPassport的护照唯一性证明机制,以在减少成本的同时保持足够的验证可信度。
MPCStats
MPCStats是一个基于MPC的开源框架,旨在实现多方参与的统计计算,同时保护数据隐私。该框架允许多个数据提供者匿名参与计算,结果公开但不泄露个人数据细节。
技术特点
- 隐私保护:数据提供者的资料以秘密共享的方式进行处理,并且在计算过程中保持加密。
- 整合TLSNotary:使用TLSNotary确保输入数据来自可信来源,避免「垃圾输入」影响结果。
- 支持多种统计操作:包括平均值、中位数、吉尼系数等常见统计指标,以及数据筛选和JoinTable操作。
展场Demo
在Devcon展会中,MPCStats提供了一个Demo,让参与者私密分享其BinanceETH余额,计算平均值。数据的完整性由TLSNotary证明,最终生成可信且隐私保护的统计结果。
PublicAuditableMPC
PublicAuditableMPC(PAMPC)是一种结合MPC和零知识证明(ZK)的新型协议,旨在解决现有MPC系统中无法向第三方验证计算正确性的挑战。该协议允许计算方在保护输入隐私的同时,向第三方公开验证计算结果的正确性。
核心概念与技术
- 引入CollaborativeZK-SNARKs:PAMPC使用协作式ZK-SNARKs,将每个计算方生成的部分证明(proof)进行线性聚合产生完整证明,确保计算的正确性可被第三方验证。
- 处理输入一致性问题:在MPC的预处理和在线阶段中,透过对输入数据进行Commit,确保数据的一致性。
- 加速位元运算:传统的SPDZMPC协议对于加法和乘法支持良好,但在处理位元运算时效率低下。PAMPC对SPDZ进行了优化。
应用场景与优势
- 电子投票:在保护选民隐私的同时,提供公开验证机制,增强系统透明度同时保护隐私。
- 去中心化拍卖:确保拍卖结果的公正性,同时保护投标者的隐私。
- 医疗数据与机器学习:PAMPC特别适合于需要多方共享敏感数据的场景,例如多机构合作训练机器学习模型。各机构可以保留数据隐私,同时协作完成模型训练或预测。
- 去中心化游戏:PAMPC可被应用于去中心化游戏中,如狼人杀(Werewolf/Mafia)游戏,通过MPC确保角色分配、投票计算的隐私性与正确性,而不需要游戏主持者(GM)。
Part10:ProgrammableCryptography
0xPARC提出可程式化密码学(ProgrammableCryptography)概念,指出此技术是从「专用型密码学」转向「通用型密码学」的世代革命。
过去,密码学工具为特定用途而设计,如RSA加密、椭圆曲线签章等等。当人们需要新的功能,就必须发明新的密码学协议来满足需求,如GroupSignature协议可以让个人代表一群人签署资料,而不透露具体身份,这与RSA加密演算法的设计有显著差异。
相对而言,可程式化密码学将密码学设计的数学问题转化为工程问题,允许开发者写程式来实现任意密码学操作。以下是一些重要技术:
- 零知识证明(zkSNARKs):证明程式在私密输入上的正确执行,无需泄露输入。
- 多方计算(MPC):在多方私密数据上进行计算,仅揭示最终结果。
- 完全同态加密(FHE):允许在加密状态下执行任意运算,运算结果仍为加密状态。
- 不可区分混淆(iO):将程式加密,让程式可执行但不可解析内部逻辑,被誉为密码学的「圣杯」,因其能构建所有其他密码学工具。
最理想的Internet
可程式化密码学能帮助实现Internet的理想状态,包括:
- 去中心化(P2P):恢复网路对等性,避免数据和计算集中化。
- 隐私保护:让数据拥有者控制其数据使用方式。
- 资料互操作性:不同应用间数据能无缝流转并保持真实性与隐私。
- 信任最小化与无需许可:用数学保证取代对中央机构的信任,任何人均可参与。
例如,MPC与FHE技术让伺服器在完全不了解用户数据的前提下,完成计算任务,同时确保计算结果的可验证性,这代表使用者资料将永远由自己掌控。
以下透过两个例子解释,为何有了可程式化密码学后,能建构理想的社交网路与投票应用。
去中心化Facebook
过去当人们思考去中心化社交网路时,总是想先模仿Twitter,原因是Twitter的机制较为单纯:每个使用者可以公开发布内容,任何人都能看到其他人的内容。然而相较于去中心化Twitter,去中心化Facebook的实现更加复杂,因其数据拓扑和隐私要求更高:
- 隐私设置:用户可能只想让特定好友查看特定内容。
- 朋友的朋友权限:需动态计算贴文可见性范围。
- 推荐演算法(NewsFeed):需要整合多方数据进行运算。
此外,这些应用需要处理隐私的全域状态(PrivateGlobalState),例如推荐演算法的参数可能无任何单一方知晓,但系统仍需保证其正确运行。这些挑战只能透过可程式化密码学解决。
投票系统的技术演进
投票是个很好的案例,因为它需要同时满足许多特性,才能做到公平、隐私且公正。在加入不同的可程式化密码学技术后,能一步步朝向理想的投票系统迈进:
- 将投票上链:将提供公开可验证的投票结果,以及实现抗审查的投票过程。
- 加入零知识证明(ZK):让投票者可隐藏投票内容,保护隐私。
- 加入MACI(MinimalAnti-CollusionInfrastructure)机制:可在计票方不泄漏资讯的前提防止贿选,因为投票者将无法证明自己投票给谁。
- 加入全同态加密(FHE):进一步将需信任的参与方扩展为M-of-N模型,只要M方中有N个参与方是诚实的,就没有人知道谁投票给谁。另一方面可轻易更换投票系统逻辑(如平方投票法)。
- 加入不可区分混淆(iO):将计票程式经过混淆处理,确保就算所有人共谋也都无法知道投票运算细节。
ZuPass
ZuPass是由0xPARC推出的一个实验性应用,基于可程式化密码学(ProgrammableCryptography)的概念设计,旨在帮助使用者实现对自身资料的自主管理与跨平台互操作性。ZuPass的核心是Proof-CarryingData(PCD),使用者可以在保护隐私的前提下安全储存并证明其数据的有效性。
以下介绍几个在本次Devcon会场的ZuPass应用。使用ZuPass的应用又被称为ZApp
Devcon门票验证
ZuPass在Devcon活动中被用来验证与会者身份,其原理如下:
- 使用者的Devcon票券以PCD的形式存入ZuPass。
- 当需要进场时,使用者可透过ZuPass生成零知识证明(Zero-KnowledgeProofs,ZKProof),证明自己持有有效票券而无需透露身份细节。
- 此外,还能用于基于身份的Telegram群组验证,确保只有符合条件的成员可以加入特定群组。
FrogCrypto
FrogCrypto是一个基于ZuPass的有趣应用,让参与者在展场中搜集各种类型的青蛙,并生成证明来展示自己拥有的青蛙。其特色在于
- 资料自主权:参加者完全掌握自己的青蛙数据。
- 互操作性:开发者可以基于使用者拥有的青蛙资料创建新应用,例如允许使用者将两只青蛙合成为新的青蛙。这与传统Web2生态的封闭API截然不同,使用者和开发者不再受限于中心化平台的规则与改动。
Meerkat
Meerkat是促进讲者与听众互动的ZApp,结合了Slido问答功能与ZK技术,实现匿名互动。其功能包括:
- 即时发起问答或投票,讲者和听众能在保护隐私的同时提升互动性。
- 使用者可透过ZuPass登入并生成互动所需的证明,而无需暴露个人资讯。
ZuPass的整合方式
ZuPass提供方便整合的SDK,达成类似GoogleOAuth的方便整合SDK:
- 用户授权:应用整合ZuPass后,会跳出ZuPass弹窗供使用者登入并选择授权哪些资料的读写权限。
- 资料请求与验证:授权后,应用可向ZuPass请求特定资料的证明,或对应用程式中记录的数据进行读写操作。
POD与GPC技术
ZuPass建立在两个关键技术之上:ProvableObjectData(POD)与GeneralPurposeCircuit(GPC)。这两项技术支撑了像是Meerkat、FrogCrypto和Devcon门票验证等应用,实现了数据的隐私验证与互操作性。
POD是一种以密码学为核心的数据格式,专为零知识证明设计。GPC则是一种模组化电路,能根据POD的结构生成灵活且高效的ZK证明。
POD的设计与技术基础
- MerkleTree结构:每个POD都是一个扁平的key-value键值对结构,透过MerkleTree压缩成一个唯一的ContentID,用于标识数据的完整性与来源。
- 签名与验证:POD的ContentID由发行者使用ECDSA签名。
- 零知识证明友好性:采用ZK-friendly的PoseidonHash函数与模组化数据格式,以加速生产POD的零知识证明
GPC的模组化电路设计
GPC是针对POD设计的通用电路,只需单一电路即可产生基于POD灵活的零知识证明。其设计基于模组化架构,包含:
- ObjectModule:验证POD的ContentID与签名的一致性。
- EntryModule:检查POD内容的MerkleProof。
- NumericValueModule:进行数值比较与范围检查。
- MembershipModule:验证栏位是否在指定列表中。
POD的不足与挑战
尽管POD系统具有灵活性与隐私保护能力,但其仍存在以下限制:
- 单用户技术(SinglePlayerTechnology):POD的设计限制了其只能由用户本人生成与证明,无法支持隐私保护的多用户协作运算。
- 无法递回证明:POD生成的证明仅能被验证,而不能用于生成基于该证明的进一步证明,限制了其应用深度。
- 与现有系统不兼容:资料生产方需要调整系统来生成具签名的POD,无法直接应用于现有的Web2资料。
POD2的诞生与改进
为了解决POD1的缺陷,POD2系统应运而生,其引入了「Proof-CarryingData(PCD)」的概念,使所有数据都带有可验证的证明,并支援多方运算:
- 支援多用户隐私协作:POD2引入了多方计算(Multi-PartyComputation,MPC),允许多方基于隐私POD数据进行联合运算并生成新POD。例如,两位用户可共同计算某条件是否成立,而无需泄露各自的数据细节。
- 递回证明与计算:POD2的证明支持递回计算,允许生成基于现有证明的新证明,构建深度计算图。
并且POD2框架支援开发者将任意的Web2资料转换为POD格式,以解决POD与既有系统不兼容的问题,称为「UniversalDataAdapter」。例如开发者可将来自ZKEmail、TLSNotary等Web2系统的资料转换为POD格式的ProofCarryingData,让所有系统的资料产生互通性,实现不同系统间的无缝整合。最大的好处在于完全不需修改既有Web2系统的资料产生逻辑。
POD2的技术挑战在于,需依赖于多方全同态加密(Multi-PartyFullyHomomorphicEncryption,MP-FHE)实现多个POD2之间的共同隐私运算。
PEX语言
0xPARC也发明了类似Lisp的PEX语言,用于描述POD2的数据结构与条件:
[createpodid-card age26 zip-code12001 id1847202750][>age18]
提供简洁且直观的语法,使开发者能快速建立基于POD的应用。
FrogZone游戏
FrogZone是0xPARC在Devcon展示的技术游戏,旨在实践最尖端密码学应用,展示全同态加密(FullyHomomorphicEncryption,FHE)和多方计算(Multi-PartyComputation,MPC)技术如何结合,创造出具隐私保护和分布式特性的应用环境。这款游戏作为首个多用户MP-FHE应用,为分布式隐私计算和应用开发提供了重要的技术示范。
游戏玩法
- 玩家数量:最多支持4位玩家同时参与。
- 可见范围:每名玩家只能观察自己周围5x5方格内的地图,一开始玩家互相看不见。
- 地图大小:32x32格子,其中包含怪物、地形障碍以及装备等互动元素。
- 玩家可选择移动、攻击怪物或捡取装备,提升自己的攻击力与防御力。
- 游戏中的怪物会随机移动,增加挑战性和游戏趣味性。
- 玩家需在探索地图的同时攻击怪物,以争取获得最高分数。
技术核心:Multi-PartyFullyHomomorphicEncryption
- FHE是一种允许在加密数据上直接进行计算的密码学技术。运算结果仍保持加密状态,只有持有解密密钥的一方可以获取结果。核心特性是「可计算性与隐私性共存」。
- 将FHE与MPC结合可以将FHE的能力扩展到多方环境,使多名参与者可以在共享的加密状态上进行协作计算。在FrogZone游戏中,每名参与者持有部分加密状态的分片,并通过MPC协议协同完成伺服器功能的模拟。
- 整个游戏的状态是由四台使用者的机器,加上五台在AWS云端的机器共同维护与计算,没有任何一台机器能解密出完整的游戏状态。由于是九台机器一起运算游戏状态,就像产生了共同的「幻觉」,也因此这个运算过程被称为HallucinatedServer
- 每次玩家发出移动或攻击指令时,该指令以加密形式发送至伺服器。伺服器在加密环境中执行状态转换函数,生成新的加密游戏状态。
- 完成操作后玩家请求可见范围(5x5)的加密数据,并通过多方协作解密获取结果。
技术挑战与限制
- 运算成本高昂:每个二进制逻辑门的运算耗时约10毫秒,比传统计算慢10亿倍,而且每1bit明文需要约3,000bit的加密资料表示。FrogZone动用5台AWS最高规格的192CoreCPU的机器,每小时花费200美金,但每个玩家只能每四秒操作一次。
- 开发模式的转变:MP-FHE仅支持电路模型,而非传统记忆体模型,开发过程中需要平行模拟所有可能的操作分支。例如,当玩家尝试移动时,伺服器需同时计算所有可能的移动结果并选择正确的分支。若要使用记忆体模型,需使用ObliviousRAM以确保隐私地存取记忆体内容
- 多方解密的频宽成本:每次玩家请求5x5可见范围内容时,需由四台本地客户端协同解密,导致解密过程高度依赖多方同步,对网路频宽要求极高。
未来展望
FrogZone展示了利用全同态加密和多方计算技术实现隐私保护和去中心化应用的可能性。虽然当前技术仍面临性能和开发难度的挑战,但这就如同1960年代的电脑,虽然庞大且效率低下,却是开创现代计算时代的起点。FrogZone的意义在于,它象征了ProgrammableCryptography的雏形,为未来理想化的网际网路铺平了道路。
随着ProgrammableCryptography技术的发展,未来的网际网路将实现去中心化、自主性和隐私保护的目标,建立一个真正属于用户的数位世界。这个世界将带来更安全、透明且自由的数位生活,每个人都将能完全掌控自己的资产、资料与身份。