Контрактная функция A вызывает контрактную функцию B, а функция A может хранить значение - PullRequest
0 голосов
/ 16 февраля 2020

У меня проблема со значением функции дескриптора.

нравится заголовок ..

Я уже знаю, что вызов функции контракта зависит от другой функции контракта:

addr.call(abi.encodeWithSignature("function(parameter_type)", parameter ));

но что делать, если я хочу временно обработать значение функции (например, bool) (память) для условия.

Я видел abi.encodePacked(), но я даже не знаю, какой параметр возвращает мне (ошибка компиляции) другой тип параметра), что я даже не могу его сохранить.

Некоторые статьи пишут это только для байтов, uint, но я хочу только выполнить условие (bool).

1 Ответ

0 голосов
/ 20 февраля 2020

Вам не нужно делать это .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 может работать.

Что-то еще, что может помочь это новый способ отладки .

...