【发布时间】:2021-08-10 19:15:15
【问题描述】:
我通过在 ERC20.sol 文件中实现 OpenZeppelin 创建了一个基本的 ERC20 令牌:
pragma solidity ^0.6.4;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v3.4.0/contracts/token/ERC20/ERC20.sol";
contract Token is ERC20 {
constructor(string memory _name, string memory _symbol)
public
ERC20(_name, _symbol)
{
_mint(msg.sender, 10000000000000000000000000000);
}
}
然后执行另一个合约 Contract.sol,如下所示:
import "./ERC20.sol";
pragma solidity ^0.6.4;
contract SimpleBank{
Token tokenContract;
constructor(Token _tokenContract) public {
tokenContract = _tokenContract;
}
function deposit(uint amt) public returns (bool) {
require(amt != 0 , "deposit amount cannot be zero");
tokenContract.transfer(address(this),amt);
return true;
}
}
因为,我已经从地址 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2 部署了两个合约,所以它拥有 100000000000000000000000000000 个令牌。
但是当我从同一地址调用 deposit 函数时,出现以下错误:
对 SimpleBank.deposit 的交易出错:VM 错误:还原。恢复 事务已恢复到初始状态。原因提供者 合约:“ERC20:转账金额超过余额”。调试 交易以获取更多信息。
那么,与已部署的 ERC20 令牌进行交互以使 deploy 函数起作用的正确方法是什么。
【问题讨论】:
-
提供的链接中的答案对我来说并不清楚。这是否意味着另一个帐户出于安全原因无法与 ERC20.sol 交互?你能帮我解决一下@PetrHejda 吗?