译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
我知道,你想直接部署合约和前端,并立刻就开始在测试网上进行测试,但是......我们需要确定一切都按预期工作,而不需要在前端用户界面上进行monkey测试。
因此,在文章的下一部分,我将介绍一些开发人员应该做的事情:测试合约逻辑!
Waffle
Waffle是一个用于编写和测试智能合约的库,它与ethers-js配合得非常默契。
Waffle有很多有帮助的工具。waffle中的测试是用Mocha和Chai一起编写的。你可以使用不同的测试环境,但Waffle的匹配器(matcher)只能在chai下工作。
我们将使用Chai匹配器来验证我们所期望的条件是否已经满足。
在写完所有的测试用例后,你只需要输入yarntest,就会自动针对你的合约进行测试。
我不会解释如何使用这个库,我将专注于应该测试什么。
我们的合约已经实现了一些逻辑:
用mapping(address=>uint256)publicbalances保存用户余额
有一个最小质押金额的阀值uint256publicconstantthreshold=1ether。
SheepDex TVL 超过6000万美元:据官方消息,SheepDex平台币SPC币价今日涨幅70%,周涨幅最高600%,TVL超过6000万美元,24小时交易量超过4000万美元。
SheepDex是一个现货和衍生品为一体的去中心化的流动性聚合平台,10月10日已经上线BSC,是第一个V3核心技术AMM区间挂单带到BSC链上的dex,减少了交易滑点,将资金使用率增加10倍以上。[2021/10/26 20:59:39]
有一个最大的时间限制(deadline)uint256publicdeadline=block
);it('executerevertedbecauseexternalcontractalreadycompleted',async()=>{constamount=ethers
);it('executerevertedbecausedeadlineisreached',async()=>{//reachthedeadlineawaitincreaseWorldTimeInSeconds(180,true);awaitexpect(stakerContract
);it('externalcontractsucessfullycompleted',async()=>{constamount=ethers
The Web3 Index正式上线Web3指数,已追踪6个协议的收入数据:9月21日消息,Livepeer工程师Adam Soffer等人发起的The Web3 Index项目宣布正式上线追踪Web3基础设施的指数Web3 Index,目前该指数汇集了Arweave、Filecoin、Akash、Livepeer、The Graph和Helium网络中的数据。该指数追踪了这些协议的实际使用情况,即用户支付给网络的费用,而不是采用TVL或者市值等数据。[2021/9/21 23:40:58]
);});
第一个测试:如果在质押金额没有达到阈值的情况下调用execute()函数,它将撤销交易并返回适当的错误信息。
第二个测试:连续两次调用execute()函数,质押已经完成,交易应该被撤销,防止再次调用。
第三个测试:在时间到deadline之后调用execute()函数。交易应该被撤销,因为只能在时间到deadline之前调用execute()函数。
最后一个测试:如果所有的要求都满足,那么execute()函数不会回退,并且所有都如预期一样。在函数调用外部合约后,completed变量应该是true,外部合约balance应该等于用户的质押金额,我们的合约余额应该等于0。
如果一切正常,运行yarntest应该会有这样的输出:
MDEX上线SOVI-HT流动性挖矿池,质押LP Token挖矿MDX:据官方消息,HECO生态链DEX平台MDEX.com宣布将于北京时间3月31日18:00,开启SOVI-HT的流动性挖矿池。用户可以质押SOVI-HT交易对的LP Token挖矿MDX,每个区块奖励0.02915MDX。
Sovi.FinanceDeFi策略游戏,通过GameFi开启区块链世界??,致?打造创新型的IP+NFT资产,甄选优质流动性挖矿项目,为用户带来更轻松更丰富的资产交互体验。[2021/3/31 19:32:58]
完整测试代码
下面我们来看看整个测试代码:
const{ethers}=require('hardhat');const{use,expect}=require('chai');const{solidity}=require('ethereum-waffle');use(solidity);//UtilitiesmethodsconstincreaseWorldTimeInSeconds=async(seconds,mine=false)=>{awaitethers
};describe('StakerdApp',()=>{letowner;letaddr1;letaddr2;letaddrs;letstakerContract;letexampleExternalContract;letExampleExternalContractFactory;beforeEach(async()=>{//DeployExampleExternalContractcontractExampleExternalContractFactory=awaitethers
长铗:DEX规模或永远也不会超过CEX 二者关系更多是补充而非竞争:8月13日晚间,针对近期DEX日交易量不断刷新高点,甚至超过了很多CEX交易所现象,比原链创始人长铗表示,DEX的规模可能永远也不会超过CEX,这是由交易效率与成本决定了的,最近规模猛增与流动性挖矿的激励密切相关,激励一过,热度与交易量可能下迅速下降。“业界存在一种误解,以为DEX会取代CEX,但我个人认为它们更多是补充关系,而不是竞争关系。”[2020/8/13]
);describe('Testcontractutilsmethods',()=>{it('timeLeft()return0afterdeadline',async()=>{awaitincreaseWorldTimeInSeconds(180,true);consttimeLeft=awaitstakerContract
);it('timeLeft()returncorrecttimeleftafter10seconds',async()=>{constsecondElapsed=10;consttimeLeftBefore=awaitstakerContract
);});describe('Teststake()method',()=>{it('Stakeeventemitted',async()=>{constamount=ethers
动态 | 区块链公司Modex的所有者M3 Holdings推出网络平台M3 Payments:据Adhugger消息,区块链公司Modex和社交货币应用Moneymailme的所有者M3 Holdings宣布推出M3 Payments。M3 Payments是一个基于网络的平台,帮助公司和个人简单有效地发送和接收跨境支付。[2019/6/12]
);it('Stake0
);it('Stakerevertedifdeadlineisreached',async()=>{//LetdeadlinebereachedawaitincreaseWorldTimeInSeconds(180,true);constamount=ethers
);it('Stakerevertedifexternalcontractiscompleted',async()=>{constamount=ethers
);});describe('Testexecute()method',()=>{it('executerevertedbecausestakeamountnotreachedthreshold',async()=>{awaitexpect(stakerContract
);it('executerevertedbecauseexternalcontractalreadycompleted',async()=>{constamount=ethers
);it('executerevertedbecausedeadlineisreached',async()=>{//reachthedeadlineawaitincreaseWorldTimeInSeconds(180,true);awaitexpect(stakerContract
);it('externalcontractsucessfullycompleted',async()=>{constamount=ethers
);});describe('Testwithdraw()method',()=>{it('Withdrawrevertedifdeadlineisnotreached',async()=>{awaitexpect(stakerContract
);it('Withdrawrevertedifexternalcontractiscompleted',async()=>{//CompletethestakeprocessconsttxStake=awaitstakerContract
);it('Withdrawrevertedifaddresshasnobalance',async()=>{//LettimepassawaitincreaseWorldTimeInSeconds(180,true);awaitexpect(stakerContract
);it('Withdrawsuccess!',async()=>{//Completethestakeprocessconstamount=ethers
);});});
你是否注意到,测试代码的覆盖率远远大于合约本身?这就是我们想看到的!测试所有的东西!
本翻译由CellETF赞助支持。
来源:https://stermi.medium.com/how-to-write-your-first-decentralized-app-scaffold-eth-challenge-1-staking-dapp-b0b6a6f4d242
参考资料
登链翻译计划:https://github.com/lbc-team/Pioneer
翻译小组:https://learnblockchain.cn/people/412
Tiny熊:https://learnblockchain.cn/people/15
Waffle:https://ethereum-waffle.readthedocs.io/en/latest/index.html
Mocha:https://mochajs.org/
Chai:https://www.chaijs.com/
Chai匹配器:https://ethereum-waffle.readthedocs.io/en/latest/matchers.html
CellETF:https://celletf.io/?utm_souce=learnblockchain
免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/10481469.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
比特币进入牛市交叉点,BTC反弹迫在眉睫?
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。