如何解决Web3-稳定性-如何使用DelegateCall?
我正在尝试学习如何使用solidity的delegatecall
功能。我已经从另一个智能合约中复制了以下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 举报,一经查实,本站将立刻删除。