Web3-稳定性-如何使用DelegateCall?

问题描述

我正在尝试学习如何使用soliditydelegatecall功能。我已经从另一个智能合约中复制了以下delegatecall代码

   function exec(address _to,bytes memory _data)
        internal
        returns (bytes memory result)
    {
        assembly {
            let succeeded := delegatecall(
                sub(gas,5000),_to,add(_data,0x20),mload(_data),0
            )
            let size := returndatasize

            result := mload(0x40)
            mstore(
                0x40,add(result,and(add(add(size,0x1f),not(0x1f)))
            )
            mstore(result,size)
            returndatacopy(add(result,size)

            switch iszero(succeeded)
                case 1 {
                    revert(add(result,size)
                }
        }
    }

我已经创建了一个ERC20令牌,比方说TokenABC。然后,创建包含上面的delegatecall函数的智能合约。让我们将其称为delegateContract。现在,我尝试执行delegatecall中存在的delegateContract,以便它调用transfer中存在的TokenABC函数以将一些令牌转移到recipient地址

这是我正在使用的web3代码。我只是想从ERC20令牌执行传递函数。我认为我犯了一个非常简单的基本错误。我无法弄清楚它是什么并解决它。

        var data = web3.eth.abi.encodefunctionCall({
            name: 'transfer',type: 'function',inputs: [{
                type: 'address',name: 'recipient'
            },{
                type: 'uint256',name: 'amount'
            }]
        },['<recipient address>','10000000000000000000']);


        let tokenAddress = '<address of TokenABC>';

        const tx = delegateContract.methods.exec(
                    tokenAddress,data
        );

我已经在Ropsten测试网上尝试过此操作,并且收到以下FAIL错误

Warning! Error encountered during contract execution [Reverted]

我的最终目标是像上面的示例一样通过传递数据来从1英寸或未交换执行交换功能

有人可以指导我如何实现这一目标吗?

谢谢。 ish

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)