Кто работает с этой библиотекой для разработки DApp под Ethereum (Blockchain) подскажите, пожалуйста.
Есть тестовая вебстраничка https://jsfiddle.net/LenaR/m3chqnmt/1/
которая передает криптовалюту в количестве 0.1ether (количество указано в переменной на 10 строке в этом примере) из своего кошелька (который также указан строковой переменной в коде на 4 строке). Кошелек, на который надо перевести вносится пользователем в поле input.
При переводе (Send Transaction) выдает ошибку. http://i.piccy.info/i9/83aa4da88d511deef2138981a66f8846/1509892815/86229/1193847/ex1.jpg
Ошибка в том, что значение из инпута передает пустую строку, а не то, которое ввел пользователь. Оно не передает значение из этой переменной var receiverAccount = web3.toHex(recac.value); в объект const rawTx , и поэтому to: receiverAccount (25 строка кода) всегда 0. В консоли браузера этот ноль хеширован как 0х0.
Как передать value инпута в этот объект?
Код работает под МетаМаск (плагин браузера) с локальной страницы, в JSFiddle не знаю сработает ли.
Вопрос задавала также на https://ethereum.stackexchange.com, пока не отвечают.
Как? В функцию sendTransaction передать эту переменную? пример https://jsfiddle.net/m3chqnmt/2/
Но так тоже не работает, тогда в консоли выдает undefined. Оно сначала в объект передает, и уже потом в функцию отправки, и я этот момент не понимаю как оно должно работать
https://jsfiddle.net/m3chqnmt/3/ пример в чистом виде (без дополнительной логики). Первый алерт показывает значение инпута когда страница только загрузилась. Это пустая строка. Заполни инпут, кники по кнопке, увидешь второй алерт, который выполнится когда в инпуте уже есть значение. Из вышеописанного пойми когда надо забирать значение из инпута в твоем коде.
потому что при загрузке страницы инпут пустой, а при клике - заполненный.
Но в этом коде https://jsfiddle.net/m3chqnmt/5/ данные для передачи формируются этой строкой web3.eth.sendRawTransaction(“0x” + serializedTx.toString(‘hex’) - то есть она собирает всё то что получает объект const rawTx. В обход этого объекта нельзя что-то отдельно в функцию обработчика клика передать. Я так понимаю. Или ты имеешь ввиду - в самом объекте код править а не в функцию обработчика добавлять передачу данных из инпута?
Т.е. при загрузке страницы инпут пустой, во время клика в нем есть значение. Теперь о твоем примере - в какой момент времени (при загрузке или при клике на кнопку) записываются значения в объект rawTx?
Получается что при загрузке.
Навешивать обработчик с вызовом функции - прямо в этом объекте? - нельзя
document.querySelector('button').addEventListener('click', function () {
alert(recacc.value);
receiverAccount = web3.toHex(recac.value);
А если в объекте записать присвоение to: receiverAccount = web3.toHex(recac.value), - так тоже не работает
Я не знаю как его передать в объект const rawTx
Сама формулировка не верна. Пересмотри то как ты думаешь про регистрирование обработчиков событий.
Как выглядит это “не работает”?
Ты можешь собрать все данные для запроса до нажатия кнопки. В момент нажатия кнопки скопировать приготовленные параметры в новый объект, и добавить в этот объект еще один параметр - значение инпута. https://jsfiddle.net/m3chqnmt/6/
так что только для alert этот код работает, а для передачи транзакции выдает ошибку самой библиотеки. Если бы не работала функция обработчика - тогда бы и алерт не сработал.
Разбила эту библиотеку по строкам, чтобы посмотреть где что в какой строке ошибки:
Возможно дело в самой библиотеке, а не в моем коде? Что библиотека не пропускает передачу данных из инпута?
(на скринах ошибки в строках кода из этой библиотеки)
если значение передать строкой а не с инпута: var receiverAccount = '0x4d...1212'; - тогда работает (пересылает криптовалюту). Я не знаю где искать ошибку - если та же функция для алерта работет а для инпута - нет. И в консоли ошибок из моего файла нет, есть только ошибки этой библиотеки…
В коде, который ты кинула нет принципиальных отличий от того кода, с которого мы начинали. И оба примера не имеют отличий в ключевых моментах.
Процесс наполнения объекта rawTx и создание трансзакции в обоих случаях происходит в один и тот же момент.
В моем примере эту моменту соответствует первый алерт. В тот момент времени значения инпута нет. У тебя создаутся объект rawTx. И отправляешь ты его через некоторое время внутри sendTransaction. Но объект уже создан, и значение из инпута ты не забираешь (в моем примере этому соответствует второй алерт, который показывает что значение в инпуте есть). Видна структурная похожесть моего кода и твоего?
Что делать? Создавать объект и трансзакцию тогда когда данные в инпуте уже есть:
В твоем комментарии неожиданное для меня выражение: в свойство to записывается результат выражения receiverAccount = web3.toHex(recac.value). Это то что ты хочешь сделать? Во что вычисляется это выражение?
И что значит “не работает”? Описывай как выглядит результат неработы (ошибка в консоли, не запускается код, ошибка ответа от сервера итд), без этого тебе не смогут помочь.