联系人A:
function redeemAssetsForBuyback(address[] calldata tokens) external {
// ...
}我想从合同B打电话给redeemAssetsForBuyback:
function initiateRedeem() external {
// ...
// I have address[] memory payload ready to be sent
address[] memory myPayload;
// Can I transform myPayload to address[] calldata?
IContractA(contractAAdrress).redeemAssetsForBuyback(myPayload); // Parameter mismatchs
}我可以将redeemAssetsForBuyback函数的参数更改为内存,而不是回调数据,我的问题在Remix上的JS上得到了解决,但我读到应该使用这里。
所以,我是否可以在ContractB上创建一个ContractB,并用它调用ContractA的函数?如果没有,那么使用redeemAssetsForBuyback(address[] memory tokens)可以吗?
发布于 2022-04-16 23:33:28
这是这样做的一个方法:
pragma solidity ^0.8.0;
contract A {
event Received(bytes);
function redeemAssetsForBuyback(address[] calldata) external{
emit Received(msg.data);
}
}
contract B{
function initiateRedeem(address _contractA, address[] calldata address_array) external {
(bool success, ) = _contractA.call(
abi.encodeWithSignature("redeemAssetsForBuyback(address[])", address_array)
);
require(success);
}
}如果您部署contractA并将ContractA的地址传递给ContractB中的initiateRedeem()以及您的地址数组,它将调用ContractA中的redeemAssetsForBuyback函数。
https://ethereum.stackexchange.com/questions/126357
复制相似问题