Вызов функции контракта с аргументом bytes4 дает ошибку - PullRequest
0 голосов
/ 25 марта 2020

Это кажется очень маленькой проблемой, и я новичок в разработке контрактов.

У меня есть функция в прототипе контракта:

function exampleContractFunction(
    address somecontractaddress,
    bytes4 someCurrencySymbol,
    uint[] memory someDetails,
    uint16 someTime,
    uint8 data1,
    bytes32 data2,
    bytes32 data3
);

Я использую версию библиотеки Ethers ^ 4.0.33 и трюфель

При компиляции контракта генерируется следующий интерфейс.

exampleContractFunction: TypedFunctionDescription<{
      encode([
        somecontractaddress,
        someCurrencySymbol,
        someDetails,
        someTime,
        data1,
        data2,
        data3
      ]: [
        string,
        Arrayish,
        BigNumberish[],
        BigNumberish,
        BigNumberish,
        Arrayish,
        Arrayish
      ]): string;
    }>;

Я пытаюсь вызвать это для получения закодированных данных для транзакции взаимодействия контракта, которая требует подписания. Когда я вызываю это и передаю

const hexCurrency = (web3.utils.toHex('DAI'));

как someCurrencySymbol в следующем вызове:

const data = this.contracts.somecontract.interface.functions.exampleContractFunction.encode([
      somecontractaddress, // Can be compound or dydx at the moment
      hexCurrency,
      someDetails,
      someTime,
      data1,
      data2,
      data3,
    ]);

Я получаю эту ошибку с изменением любой валютыSymbol, которую я передаю

Error: invalid input argument (arg="someCurrencySymbol", reason="invalid bytes4 value", value="0x444149", version=4.0.42)
    at Object.throwError (/packages/types/node_modules/ethers/errors.js:76:17)

Как я могу отправить этот аргумент bytes4 символом валюты?

1 Ответ

0 голосов
/ 02 апреля 2020

Вы пробовали только с:

web3.utils.toHex('DA')

Сдается мне, что вы не передаете только 4 байта, действительно значение, которое вы получаете со значением = "0x444149", оно на самом деле состоит из 6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...