MetaMask показывает «НЕИЗВЕСТНУЮ ФУНКЦИЮ» при вызове функции отправки метода

Я пытаюсь настроить связь между веб-интерфейсом и развернутым контрактом Ethereum (на Rinkeby). Я пытаюсь вызвать простой метод, который обновляет значение, которое выглядит примерно так:

uint public value;

function someFunction(uint newValue) public {
    value = newValue;
}

И я вызываю эту функцию из клиента:

myContract.methods.someFunction(newValue).send({
    from: myAccount,
});

Когда MetaMask всплывает, над значением, которое должно быть отправлено клиенту, написано «НЕИЗВЕСТНАЯ ФУНКЦИЯ» (это также происходит, когда я пытаюсь вызвать методы, которые на самом деле требуют значения эфира). Есть ли способ решить проблему? Кажется, что это, вероятно, было бы неприятно для пользователей, если бы речь шла о реальном эфире.

введите описание изображения здесь

Ответы (1)

Чтобы MetaMask распознал сигнатуру вашей функции, вам необходимо зарегистрироваться по адресу:
https://etherscan.io/address/0x44691B39d1a75dC4E0A0346CBB15E310e6ED1E86#writeContract .

Именно здесь MetaMask извлекает данные, чтобы определить функцию, соответствующую хэшу функции.

т.е. в вашем примере вызовите registerфункцию вышеуказанного контракта, передав:
someFunction(uint256)

можно немного поподробнее, а то я не понял? Откуда я должен вызывать функцию регистрации? С какого аккаунта? Из веб-интерфейса?
Вы можете вызывать registerфункцию из любого места (например, MEW, Mist), что позволяет вам взаимодействовать со смарт-контрактами. etherscan.io теперь также поддерживает запись в контракты (см. ссылку выше) с использованием MetaMask. Учетная запись не должна иметь значения при регистрации функции — все, что вы делаете, это связываете имя функции с ее подписью и записываете эту связь в смарт-контракте. Вам нужно будет заплатить за газ за звонок, но больше ничего.