У меня проблемы с отправкой адреса развернутому контракту, моя функция выглядит так:
function addNote(uint _value, address _owner) public {
...
}
и когда я отправляю параметры:
contract.deployed().then(function(instance) {
return instance.addNote(value,"0x092f90acAbb3b23Aded64D59FB6f6Be97615476b");
})
.then(function(result) {
console.log(result);
})
.catch(function(error) {
console.log(error);
});
Я получаю эту ошибку:
Error: invalid address
at inputAddressFormatter (/Desktop/Server/node_modules/truffle-contract/node_modules/web3/lib/web3/formatters.js:274:11)
Также, когда я добавляю последний параметр:
{
from: "0x092f90acAbb3b23Aded64D59FB6f6Be97615476b",
gas: 1000000
}
тогда ошибка:
TypeError: Cannot read property 'constructor' of undefined
at /Desktop/Server/node_modules/truffle-contract/contract.js:96:1
В чем проблема?
Адрес представляет собой 20-байтовое шестнадцатеричное число , поэтому вы не должны отправлять его в виде строки. Пытаться:
return instance.addNote(value, 0x092f90acAbb3b23Aded64D59FB6f6Be97615476b);
ОБНОВЛЕНИЕ : проблема не связана со строкой адреса. Пожалуйста, прочитайте ниже.
Запутанная часть в вашем конкретном примере заключается в том, что вы получаете ошибку, которая вводит вас в заблуждение, полагая, что с функцией что-то не так function addNote(uint _value, address _owner)
. Однако ошибка связана с невалидностью вашего web3.eth.defaultAccount
адреса, то есть откуда выполняются вызовы вашего контракта.
Сразу после компиляции и переноса ваших контрактов сделайте следующее:
web3.eth.defaultAccount = web3.eth.accounts[0];
truffle develop
и следуете моему ответу выше. Я не уверен, какой адрес сервера вы используете. Загляните в эту тему , чтобы получить дополнительные советы.
Каки Мастер Времени
addNote
?Павело
Каки Мастер Времени
constructor
, что привело к этой ошибкеCannot read property 'constructor' of undefined
, и ясно, чтоinvalid address
ошибка исчезла при добавленииfrom
атрибута.Нулик
Каки Мастер Времени
Нулик
input
свой контракт в качествеextra data
параметра транзакции. Вам просто нужно указать правильную спецификацию ABI. Теперь, если вы хотите управлять адресами как строками внутри контракта, это совершенно другая история, и вы можете делать все, что угодно, поскольку EVM является машиной Turing Complete и может выполнять любые общие вычисления.Нулик
geth
вместо трюфеля, вы лучше поймете, как он работает. medium.com/@gus_tavo_guim/…Михаил Владимиров
contract.js
в строке 96?