微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。