我不能调用settoken函数
处理TRUST.settoken错误: VM错误:无效操作码。执行可能已抛出的无效操作码。调试事务以获得更多信息。
pragma solidity ^0.6.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";
import"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol";
contract TRUST is Ownable{
using SafeMath for uint;
uint public free;
mapping (address => mapping(address => data[])) public _data;
mapping (address => address[]) public fromaddr ;
struct data{
uint64 startTime;
uint64 intervals;
uint256 onceamount;
uint256 alltoken;
address ercaddr;
}
function _FREE (uint _free)public onlyOwner{
free = _free;
}
function tokennum(address _from, address _to, address _tokenaddress)private view returns(uint e, uint ee){
if(_data[_from][_to].length != 0){
for(uint8 i; i <= _data[_from][_to].length; i++){
if (_data[_from][_to][i].ercaddr == _tokenaddress){
e++;
ee = i;
}
}
}
}
function settoken (address token ,address to ,uint64 startTime ,uint64 intervals ,uint256 onceamount ,uint256 alltoken)public payable{
require (msg.value == free ,"free err");
require(IERC20(token).transferFrom(msg.sender ,address(this) ,alltoken),"etc");
require (uint(to) *uint(token) *startTime *onceamount *alltoken != 0 ,"input");
uint e;
uint ee;
(e,ee) = tokennum(msg.sender , to , token);
require(_data[msg.sender][to][ee].alltoken == 0);
if (ee == 0){
_data[msg.sender][to].push(data(startTime ,intervals ,onceamount ,alltoken ,token));
}else {
_data[msg.sender][to][ee] = data(startTime ,intervals ,onceamount ,alltoken ,token);
}
IERC20(token).transferFrom(msg.sender ,address(this) ,alltoken);
}
}发布于 2020-11-05 07:51:00
改变这一点:
for (uint8 i; i <= _data[_from][_to].length; i++)对此:
for (uint8 i; i < _data[_from][_to].length; i++)否则,您将尝试在非法索引处访问数组_data[_from][_to]:
if (_data[_from][_to][i].ercaddr == _tokenaddress) ...附带注意:您可能希望在这里将uint8更改为uint256,以避免环绕。
https://ethereum.stackexchange.com/questions/89927
复制相似问题