恢复委托传递函数上的错误

问题描述

这是我的代码库,首先,我在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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...