以下是一个简单的投票合约,完整的程式码可以在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:重新验证
再次执行验证,确认所有规范均已通过,代表此智能合约的正确性可被数学证明。
Certora也支援定义不变量规则(InvariantRules),确保合约在所有状态下的逻辑一致性。例如:
invarianttotalVotesIsSumInvariant() votesInFavor()+votesAgainst()==to_mathint(totalVotes());
此规则验证totalVotes永远等于赞成与反对票数的总和。
在文章的前半部分中,我们已提到IntentCentricDesign,其中介绍了CoWSwap如何透过设计应用层的逻辑来简化跨链交易并提升用户体验。在这一部分,我将深入探讨CoWSwap如何解决MaximalExtractableValue(MEV)问题,以及其主张MEV应在应用层解决的理念。同时,我们也会介绍Unichain如何通过可信执行环境(TEE)在基础设施层解决MEV问题,呈现两种截然不同但互补的解决方式。
CoWSwap的核心主张是,MEV问题的根源在应用层。目前约99%的MEV问题来自交易排序的竞争,而应用层(例如去中心化交易所DEX)的设计是导致这些问题的主因。因此,MEV问题应该在设计应用时一并考虑,而非依赖基础设施层的迂回解决方案。
CoWSwap引入需求巧合的概念,通过将多笔交易的需求聚合在一起,使交易者直接匹配需求,避免了流动性池的中间操作,从而减少MEV攻击的可能性。
案例:假设Alice想用100USDC换取1ETH,而Bob刚好想用1ETH换取100USDC。在传统DEX中,这些交易需要分别通过流动性池进行,可能会被套利者利用滑点进行MEV攻击。而在CoWSwap中,这两笔交易可以直接匹配,无需经过流动性池,消除了滑点和MEV攻击。
CoWSwap的批次拍卖机制是其解决MEV问题的核心手段:
批次拍卖的优势:
实际案例:
假设有三位用户的交易意图:
这三笔订单在批次拍卖中被组合在一起。由于A和B的购买需求总和(300DAI)恰好匹配C的出售需求(1ETH),因此可以直接在用户之间进行点对点交换,无需触及链上流动性。这不仅提高了交易效率,还降低了交易成本,并消除了MEV攻击的风险。
与CoWSwap将MEV处理集中在应用层的设计不同,Unichain选择在基础设施层通过可信执行环境(TEE)来解决MEV问题。Unichain是基于OPStack的OptimisticRollup,其核心创新在于加密交易与TEE排序,保证交易排序的透明与公平。
ZeroKnowledgeProof(ZKP)技术的应用展示了如何透过密码学方法,实现隐私保护与效能的平衡。以下将介绍几个令我印象深刻的ZK应用。
ZKPassport结合了国际电子护照(ePassport)的晶片技术与ZKP,为用户提供一种既安全又隐私的身份验证方式。透过手机感应护照的NFC,用户可以取得护照晶片中由政府签署的资料,例如基本资讯和照片。由于这基于全球标准(ICAOBiometricPassport),超过100个国家的护照均可支援。基于此签章即可生成护照资料有效性的零知识证明。
ZKEmail
以上就是以太坊Devcon大会精选!十大关键技术全解析,将彻底改变Web3?的全部内容,望能这篇以太坊Devcon大会精选!十大关键技术全解析,将彻底改变Web3?可以帮助您解决问题,能够解决大家的实际问题是非常好学习网一直努力的方向和目标。