问题描述
这是我的代码库,首先,我在tesnet上部署tokenPS合约,该合约生成一个addr(0xaddr),然后部署调用者合约。在调用者合同中,当我尝试使用适当的参数执行该函数时,它会触发tokenPS合同,但无法触发传输功能显示错误(检查txn哈希值,然后检查内部txns-https://ropsten.etherscan.io/tx/0xa74bde27c3ca86469ae0dc8b605aee9adb8a90a2a3cf0b2d9ff9ee517f8be8ed)。可能是什么问题以及如何解决这个问题?
pragma solidity ^0.4.24;
contract Caller {
event AddedValuesByDelegateCall(address from,address to,uint256 value,bool resp,bool success);
function addValuesWithDelegateCall(address addr,uint256 value) public payable returns (bool) {
IERC20 x = IERC20(addr);
(bool resp) = address(x).delegatecall(abi.encodeWithSignature("approve(address,uint256)",msg.sender,value));
(bool success) = address(x).delegatecall(abi.encodeWithSignature("transferFrom(address,address,to,value));
emit AddedValuesByDelegateCall(msg.sender,value,resp,success);
return success;
}
}
// ----------------------------------------------------------------------------
interface IERC20 {
function transfer(address to,uint256 value) external returns (bool);
function approve(address spender,uint256 value) external returns (bool);
function transferFrom(address from,uint256 value) external returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(address who) external view returns (uint256);
function allowance(address owner,address spender) external view returns (uint256);
event Transfer(address indexed from,address indexed to,uint256 value);
event Approval(address indexed owner,address indexed spender,uint256 value);
}
// ------------------------------------------------------------------------
// ERC20 Token,with the addition of symbol,name and decimals supply and founder
// ------------------------------------------------------------------------
contract tokenPS is IERC20{
string public name = "tokenPS";
string public symbol = "TPS";
uint8 public decimals = 6;
uint public supply;
address public founder;
mapping(address => uint) public balances;
mapping(address => mapping(address => uint)) allowed;
event Transfer(address indexed from,uint value);
// ------------------------------------------------------------------------
// Constructor With 10,00,000 supply,All deployed tokens sent to Main wallet
// ------------------------------------------------------------------------
constructor() public{
supply = 1000000000000;
founder = msg.sender;
balances[founder] = supply;
}
// ------------------------------------------------------------------------
// Returns the amount of tokens approved by the owner that can be
// transferred to the spender's account
// ------------------------------------------------------------------------
function allowance(address owner,address spender) public view returns(uint){
return allowed[owner][spender];
}
// ------------------------------------------------------------------------
// Token owner can approve for spender to transferFrom(...) tokens
// from the token owner's account
// ------------------------------------------------------------------------
function approve(address spender,uint value) public returns(bool){
allowed[msg.sender][spender] = value;
emit Approval(msg.sender,spender,value);
return true;
}
// ------------------------------------------------------------------------
// Transfer tokens from the 'from' account to the 'to' account
// ------------------------------------------------------------------------
function transferFrom(address from,uint value) public returns(bool){
require(allowed[from][msg.sender] >= value);
require(balances[from] >= value);
balances[from] -= value;
balances[to] += value;
allowed[from][msg.sender] -= value;
emit Transfer(from,value);
return true;
}
// ------------------------------------------------------------------------
// Public function to return supply
// ------------------------------------------------------------------------
function totalSupply() public view returns (uint){
return supply;
}
// ------------------------------------------------------------------------
// Public function to return balance of tokeNowner
// ------------------------------------------------------------------------
function balanceOf(address tokeNowner) public view returns (uint balance){
return balances[tokeNowner];
}
// ------------------------------------------------------------------------
// Public Function to transfer tokens
// ------------------------------------------------------------------------
function transfer(address to,uint tokens) public returns (bool success){
require(balances[msg.sender] >= tokens && tokens > 0);
balances[to] += tokens;
balances[msg.sender] -= tokens;
emit Transfer(msg.sender,tokens);
return true;
}
// ------------------------------------------------------------------------
// Revert function to NOT accept ETH
// ------------------------------------------------------------------------
function () public payable {
revert();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)