Вам не нужно делать это .call, если вы не хотите сохранить msg.sender.
Если msg.sender для вас не важен, я рекомендую вам взглянуть на интерфейсы . Теперь вам нужно создать интерфейс с определением functionB, которое вы хотите вызвать, и затем вызвать его.
Пример:
(некоторые развернутые контракты)
contract MySecondContract {
function functionB() public returns(bool) {
return true;
}
}
(получите развернутый адрес контракта и используйте его в своем коде как)
interface IMySecondContract {
function functionB() external returns(bool);
}
contract MyFirstContract {
function functionA() public returns(bool) {
bool result = IMySecondContract(MySecondContract-address-here).functionB();
return result;
}
}
Если вы хотите продолжать использовать .call, здесь вы можете увидеть что метод .call возвращает два значения.
Что-то вроде
(bool success, bytes myReturn) = addr.call(...);
, а затем this может работать.
Что-то еще, что может помочь это новый способ отладки .