首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回原因字符串‘Dai/不足-允许’测试

返回原因字符串‘Dai/不足-允许’测试
EN

Ethereum用户
提问于 2022-01-17 13:02:04
回答 1查看 761关注 0票数 0

我试着测试一个简单的函数转换Dai平衡。

测试->

代码语言:javascript
复制
const [owner] = await ethers.getSigners();
const amount = await _hardhatPresaleERC20.calculateAmountTokensPurchased(1);
ownerBalanceDai = await _hardhatTokenDai.balanceOf(owner.address);
expect(amount).to.equal(10000);
const buyToken = await _hardhatPresaleERC20.buyToken(1);

固体->

代码语言:javascript
复制
function buyToken(uint256 amountDaiTokens) external returns (bool) {
    uint256 amountTokenPurchased = calculateAmountTokensPurchased(
        amountDaiTokens
    );
    require(
        amountDaiTokens <= dai.balanceOf(msg.sender),
        "Buyer does not have enough tokens"
    );
    require(
        amountTokenPurchased <= calculateNumberOfTokenLeft(),
        "Not enough tokens"
    );
    dai.safeTransferFrom(msg.sender, address(this), amountDaiTokens);
    return true;
}

错误:处理事务时的VM异常:用原因恢复字符串‘Dai/不够-允许’

但我总是收到同样的信息,我不明白我做错了什么。我检查了余额,但打不完电话?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-01-17 13:38:54

涉及ERC20传输的合同交互或多或少是一个两步过程。

  1. 这份合同必须得到一笔津贴。这指定了所涉及的令牌(例如DAI)的多少允许从用户的钱包中支出。请参见这里此权限如何工作或研究ERC20令牌格式这里
  2. 合同可以执行转让。

因此,在转移资金之前,你需要去DAI合同,并approve的支出。伪码:

代码语言:javascript
复制
DAIContract.approve(spender, amount);

翻译为:我的合同( spender__)可以从调用此approve方法(msg.sender)的帐户中支出,即DAI的amount

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/119168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档