我部署了两份合同(A、B)。函数A.delegateUpdateIDXcontract_B,1触发函数B.updateIDX1
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.4;
contract A {
string[] private arr = ['a','b','c'];
function showIDX(uint _IDX) public view returns(string memory)
{
return arr[_IDX];
}
function delegateUpdateIDX(address _contractB, uint _IDX) external returns(bool _success)
{
(bool b,)=_contractB.delegatecall( abi.encodeWithSignature("updateIDX(uint _IDX)", _IDX) );
return b;
}
}
//###################################
contract B {
string[] private arr;
function updateIDX(uint _IDX) external
{
arr[_IDX]='X';
}
}然后我调用函数(在Remix中):
A.showIDX[1]
returns 'b'
A.delegateUpdateIDX(B.address,1)
no errors
(should update A.storage and set A.arr[1] to 'X')
but the delegateCall() returns 'success=false' for some reason
and A.arr[1] doesn't change to 'X'
A.showIDX[1]
returns 'b' again (not 'X' as expected)因此,基本上,我不知道为什么delegateCall()返回'success=false‘,因此为什么A.arr1不从'b’改为'X‘。我做错了什么?
发布于 2021-07-03 05:03:11
设法使它起作用
(
-它仍然不起作用,delegateCall()继续返回'false‘--
中的“uint”改为“uint256”
这次工作得很好
https://stackoverflow.com/questions/68232955
复制相似问题