译文出自:登链翻译计划
译者:翻译小组
校对:Tiny熊
我知道,你想直接部署合约和前端,并立刻就开始在测试网上进行测试,但是......我们需要确定一切都按预期工作,而不需要在前端用户界面上进行monkey测试。
因此,在文章的下一部分,我将介绍一些开发人员应该做的事情:测试合约逻辑!
Waffle
Waffle是一个用于编写和测试智能合约的库,它与ethers-js配合得非常默契。
Waffle有很多有帮助的工具。waffle中的测试是用Mocha和Chai一起编写的。你可以使用不同的测试环境,但Waffle的匹配器(matcher)只能在chai下工作。
我们将使用Chai匹配器来验证我们所期望的条件是否已经满足。
在写完所有的测试用例后,你只需要输入yarntest,就会自动针对你的合约进行测试。
我不会解释如何使用这个库,我将专注于应该测试什么。
我们的合约已经实现了一些逻辑:
用mapping(address=>uint256)publicbalances保存用户余额
有一个最小质押金额的阀值uint256publicconstantthreshold=1ether。
经纪商Scalable Capital推出加密交易工具:金色财经报道,根据一份公告,ScalableCapital已成为推动加密货币交易的最新经纪商,其宣布推出新产品“Scalable Crypto”。该产品将通过德国受监管的证券交易所运营,旨在针对“所有将金融投资掌握在自己手中并希望将其部分投资组合多样化为数字资产的投资者”。在该在平台上,加密货币以证券的形式存在于客户现有的托管账户中。交易在正常交易时间内在Xetra和gettex交易所进行。[2021/12/16 7:42:36]
有一个最大的时间限制(deadline)uint256publicdeadline=block
);it('executerevertedbecauseexternalcontractalreadycompleted',async()=>{constamount=ethers
);it('executerevertedbecausedeadlineisreached',async()=>{//reachthedeadlineawaitincreaseWorldTimeInSeconds(180,true);awaitexpect(stakerContract
);it('externalcontractsucessfullycompleted',async()=>{constamount=ethers
NFT资产浏览器和数据分析平台NFTSCAN推出API开放平台:10月16日消息,NFTSCAN推出API开放平台,目前,NFT开放平台支持的API主要有以下几个:
1)获取一个钱包地址中持有的NFT资产数据;
2)获取一个NFT资产合约下所有的NFT数据;
3)获取某个NFT资产的详细信息,如:铸造信息、Metadata等;
4)获取一个钱包地址与所有NFT资产合约相关的历史交易记录;
5)获取一个钱包地址与指定NFT资产合约相关的历史交易记录;
其他更多的NFT数据API还在开发和拓展中。除了上述常规的API外,NFTSCAN团队也支持NFT数据接口的定制化服务。
据悉,NFTSCAN作为一个专业的NFT资产浏览器和数据分析平台,目前已全面覆盖了以太坊网络的NFT数据,拓展多链NFT数据也在积极筹划中。[2021/10/16 20:33:53]
);});
第一个测试:如果在质押金额没有达到阈值的情况下调用execute()函数,它将撤销交易并返回适当的错误信息。
第二个测试:连续两次调用execute()函数,质押已经完成,交易应该被撤销,防止再次调用。
第三个测试:在时间到deadline之后调用execute()函数。交易应该被撤销,因为只能在时间到deadline之前调用execute()函数。
动态 | 外媒:etherscan.io被中国互联网防火墙阻止访问:中国的互联网防火墙疑似已阻止访问以太坊区块链浏览器网站etherscan.io,目前原因不明。据悉,etherscan.io是运行时间最长,使用最广泛的以太坊区块浏览器之一。(coindesk)[2019/12/4]
最后一个测试:如果所有的要求都满足,那么execute()函数不会回退,并且所有都如预期一样。在函数调用外部合约后,completed变量应该是true,外部合约balance应该等于用户的质押金额,我们的合约余额应该等于0。
如果一切正常,运行yarntest应该会有这样的输出:
完整测试代码
下面我们来看看整个测试代码:
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
动态 | LoanScan和Bloqboard背后团队推出带有DeFi后端的银行服务应用Linen:加密借贷公司Bloqboard和加密货币数据提供商LoanScan背后的团队正在推出一款名为Linen的银行服务应用。该应用整合了DeFi功能,目标是通过减少借贷过程中对多个DApp的需求来降低普及加密的障碍,从而让非加密用户更容易接触到加密货币。Linen最近还完成了一轮金额未披露的融资,参投者包括Polychain、Coinbase、Wyre和Hashkey,其中Hashkey为战略性投资。需要注意的是,Linen并未对纽约居民开放服务。(The Block)[2019/9/21]
);describe('Testcontractutilsmethods',()=>{it('timeLeft()return0afterdeadline',async()=>{awaitincreaseWorldTimeInSeconds(180,true);consttimeLeft=awaitstakerContract
);it('timeLeft()returncorrecttimeleftafter10seconds',async()=>{constsecondElapsed=10;consttimeLeftBefore=awaitstakerContract
动态 | EOSPark 整理出 EOSCast 攻击者账户的关系图:据 IMEOS 报道,EOSCast 游戏今日凌晨遭遇黑客攻击后损失 7 万 EOS 后,所有攻击者账户已被 ECAP 列入黑名单,随后 EOSPark 在第一时间根据账户信息和交易记录对攻击者账户的关系图进行了分类如下。[2018/10/31]
);});describe('Teststake()method',()=>{it('Stakeeventemitted',async()=>{constamount=ethers
);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反弹迫在眉睫?
本文来自Decrypt,原文作者:StacyElliottOdaily星球日报译者?|念银思唐 摘要: -Uniswap和SushiSwap等大型去中心化交易所的价值较去年增长了5倍.
为鼓励更多用户积极参与Gate.io流动性挖矿,今日上午11:00,BAKED/USDT、BAKED/ETH流动性矿池奖励各新增额外301.
FellowBinancians,BinancehasaddedPIVXtothelistofsupportedassetsonSavings.
市场回顾 BTC今日突破新高,并且多头走强。币赢研究院在之前多篇文章中,反复提及年底前基本牛市趋势不变,BTC目前表现和我们之前的趋势预测一致.
出品|白泽研究院 尽管最近加密市场如此火爆,但即便如此,作为加密交易所的交易份额竞争并不是那么容易.
尊敬的用户:? BKEXGlobal现已恢复BIN_USDT,FTS_USDT,SPS_USDT,MINIDOGE_USDT,DPET_USDT,GINUX_USDT,ZOON_USDT.