以太坊Devcon大会精选!十大关键技术全解析,将彻底改变Web3?

时间:2024-12-01  分类:电子
使用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问题的核心手段:



批次拍卖的优势:



实际案例:


假设有三位用户的交易意图:



这三笔订单在批次拍卖中被组合在一起。由于A和B的购买需求总和(300DAI)恰好匹配C的出售需求(1ETH),因此可以直接在用户之间进行点对点交换,无需触及链上流动性。这不仅提高了交易效率,还降低了交易成本,并消除了MEV攻击的风险。


Unichain的MEV解决方案


与CoWSwap将MEV处理集中在应用层的设计不同,Unichain选择在基础设施层通过可信执行环境(TEE)来解决MEV问题。Unichain是基于OPStack的OptimisticRollup,其核心创新在于加密交易与TEE排序,保证交易排序的透明与公平。


Unichain解决MEV的关键流程:




Part8:ZeroKnowledgeProof(ZKP)


ZeroKnowledgeProof(ZKP)技术的应用展示了如何透过密码学方法,实现隐私保护与效能的平衡。以下将介绍几个令我印象深刻的ZK应用。


ZKPassport


ZKPassport结合了国际电子护照(ePassport)的晶片技术与ZKP,为用户提供一种既安全又隐私的身份验证方式。透过手机感应护照的NFC,用户可以取得护照晶片中由政府签署的资料,例如基本资讯和照片。由于这基于全球标准(ICAOBiometricPassport),超过100个国家的护照均可支援。基于此签章即可生成护照资料有效性的零知识证明。


技术特点



应用场景



ZKEmail



-->> 7/10 文章未完,请继续阅读

以上就是以太坊Devcon大会精选!十大关键技术全解析,将彻底改变Web3?的全部内容,望能这篇以太坊Devcon大会精选!十大关键技术全解析,将彻底改变Web3?可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。