bomj (OP)
|
|
November 16, 2018, 01:44:42 PM |
|
День добрый. Додумываю одну идею. Есть страница http://wall.0xbt.net/ball2.htmlКак сделать, чтобы любой пользователь мог самостоятельно ввести данные контракта В строке 70 кода страницы надо поменять адрес 0xae4243e2c0f910223323dd2f2fdd16820b69f1d6 на свой, допустим на адрес 0x41835eba2075d2452fbedeec25bedbbc61d9b8a1 myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"); В js не силен. А так же и заменять в url 0xae4243e2c0f910223323dd2f2fdd16820b69f1d6 на свой, допустим на 0x41835eba2075d2452fbedeec25bedbbc61d9b8a1 В строке 31 кода страницы: <button class="knopka" id='btn_5'><a href="https://rinkeby.etherscan.io/writecontract/index.html? a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby" title="section - '4. setPost'" target="_blank"><b> Что-то я не соображу. Есть ли такая возможность? Просьба к модератерам - пока не удалять вопрос.
|
|
|
|
Schwarzenberg
|
|
November 17, 2018, 11:14:09 AM |
|
bomj, конечно возможность есть. Делается все через getElementById. Чтобы долго не объяснять - ловите готовый код прямо на основе Вашей страницы. Сложного там ничего нет, должны разобраться. Может, и другим пригодится. В первом поле общий простой пример, как в JS отловить введенное значение из поля и что-то с ним сделать (в примере выведено алертом). Во втором поле - пример, который реально меняет адрес в Вашем коде на введенное в поле значение и дальше можете спокойно нажимать свою серую кнопку "Send & News". Пример на коленке, без сохранения в переменную, но использовать уже можно Удачи!
|
|
|
|
bomj (OP)
|
|
November 17, 2018, 05:33:01 PM |
|
bomj, конечно возможность есть. Делается все через getElementById. Чтобы долго не объяснять - ловите готовый код прямо на основе Вашей страницы. Сложного там ничего нет, должны разобраться. Может, и другим пригодится. В первом поле общий простой пример, как в JS отловить введенное значение из поля и что-то с ним сделать (в примере выведено алертом). Во втором поле - пример, который реально меняет адрес в Вашем коде на введенное в поле значение и дальше можете спокойно нажимать свою серую кнопку "Send & News". Пример на коленке, без сохранения в переменную, но использовать уже можно Удачи! Большое спасибо за ваш "Пример на коленке". Буду признателен если бы и по строке 70 кода подсказали, чтобы я сарай не городил. myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6");
|
|
|
|
Coin-1
Legendary
Offline
Activity: 2604
Merit: 2277
|
|
November 17, 2018, 06:00:46 PM |
|
bomj, конечно возможность есть. Делается все через getElementById. Чтобы долго не объяснять - ловите готовый код прямо на основе Вашей страницы. Сложного там ничего нет, должны разобраться. Может, и другим пригодится. В первом поле общий простой пример, как в JS отловить введенное значение из поля и что-то с ним сделать (в примере выведено алертом). Во втором поле - пример, который реально меняет адрес в Вашем коде на введенное в поле значение и дальше можете спокойно нажимать свою серую кнопку "Send & News". Пример на коленке, без сохранения в переменную, но использовать уже можно Удачи! Большое спасибо за ваш "Пример на коленке". Буду признателен если бы и по строке 70 кода подсказали, чтобы я сарай не городил. myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"); 1) Отредактируйте 70-ю строку примерно так: myContractInstance = MyContract.at(document.getElementById("contract_instance").value); 2) Добавьте новую строку после 30-й строки: Введите контракт: <input type="text" id="contract_instance" /> Должно работать.
|
|
|
|
bomj (OP)
|
|
November 17, 2018, 06:41:06 PM |
|
...... Должно работать.
Большое спасибо, обдумаю завтра, голова уже не хочет варить. Меритов к сожалению пока больше нет, но в любом случае буду должен. Понимаю, что надо изучать js, но по ходу староват для этого, да и времени не хватает. Что бы вы поняли суть происходящего почитайте: https://acdc.0xbt.net/index.php?topic=11.0 я там изложил суть задумки. Если прочитаете, то будет понятно, что меняя на подобной странице контрактн. адрес можно будет переходить своего рода на индивидуальные каналы общения.
|
|
|
|
Schwarzenberg
|
|
November 17, 2018, 06:52:26 PM |
|
bomj, конечно возможность есть. Делается все через getElementById. Чтобы долго не объяснять - ловите готовый код прямо на основе Вашей страницы. Сложного там ничего нет, должны разобраться. Может, и другим пригодится. В первом поле общий простой пример, как в JS отловить введенное значение из поля и что-то с ним сделать (в примере выведено алертом). Во втором поле - пример, который реально меняет адрес в Вашем коде на введенное в поле значение и дальше можете спокойно нажимать свою серую кнопку "Send & News". Пример на коленке, без сохранения в переменную, но использовать уже можно Удачи! Большое спасибо за ваш "Пример на коленке". Буду признателен если бы и по строке 70 кода подсказали, чтобы я сарай не городил. myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"); Корректнее я бы сделал так: поменяйте строчку myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"); на myContractInstance = MyContract.at(document.getElementById("txt_addr2").value); Это будет менять значение myContractInstance на значение, введенное ранее в поле с id="txt_addr2". Разумеется, оставив код из "примера на коленке" -)
|
|
|
|
bomj (OP)
|
|
November 18, 2018, 12:30:03 PM |
|
Schwarzenberg, Coin-1Прошу прощения за свою тупость, но что-то не получается. Поэкспериментировал, при запросе выдает ошибку: [ getPost method Response ] string : Error: invalid argument 0: hex string has length 0 want 40 for common.Address Выложил страницу с изменениями: https://wall.0xbt.net/ball3.htmlЧто-то я делаю неправильно.......(
|
|
|
|
Schwarzenberg
|
|
November 18, 2018, 03:12:07 PM |
|
bomj, js в плане программирования ничем особо не отличается от других языков. Большинство несложных вещей можно понять даже интуитивно). В Вашем примере (не копал глубоко, то, что сразу видно навскидку) - при вызове функции ethcall2 на строке 85 вторым параметром после метода 'getPost' идет передаваемый параметр 'input_5'. Не знаю логики Вашей программы, но предполагаю, что этот параметр должен содержать значение, передаваемое функции ethcall2. В коде страницы 'input_5' больше нигде не встречается, поля или переменной с таким названием нет. Соответственно, при выполнении код у Вас ругается на неправильный аргумент с нулевой длиной. Не знаю, что должно передаваться в функцию ethcall2 - смотрите там, откуда брали кусок кода, скорее всего, еще какой-то инпут должен быть. Может, адрес - попробуйте заменить 'input_5' на 'txt_addr2'. Но это уже не программирование, а гадание на гуще) Вот третий параметр для ethcall2 'myanswer_5' присутствует на странице и в него приходит ответ- правда, отсутствует 'ajax-loader2.gif' для него.
|
|
|
|
bomj (OP)
|
|
November 22, 2018, 01:31:18 AM |
|
Несколько поэкспериментировал. Подкорректировал 'код на коленке' и привязал его к кнопке 'Get Post', добавив id кнопки. Добавил в данную кнопку ссылку для наглядности. Быть может теперь сможете разглядеть новые варианты решения задачи? https://wall.0xbt.net/ball6.html
|
|
|
|
yart
Newbie
Offline
Activity: 3
Merit: 0
|
|
December 03, 2018, 10:40:02 PM |
|
Народ, извиняюсь за оффтоп! У меня вопрос по той же теме, но в иной плоскости: надо подтянуть по адресу юзера его дивиденды по заданному смарткотракту. То есть, сделать то, что можно посмотреть вот здесь https://etherscan.io/address/0xdDFc21DF6f2556528b21574695c7b33f22e60A70#readContract в 6 разделе. кто знает, куда копать? Там на кнопку повешена функция ethcall2() - мне б хотя б найти как её подключить к своему скрипту, а в идеале надо бы понять, как эти данные автоматом подтягивать со самрт-контракта?
|
|
|
|
bomj (OP)
|
|
December 04, 2018, 05:34:23 AM Last edit: December 04, 2018, 05:46:20 AM by bomj |
|
|
|
|
|
yart
Newbie
Offline
Activity: 3
Merit: 0
|
|
December 04, 2018, 09:10:47 AM |
|
Похоже на то! Сейчас попробую реализовать это у себя. Будут вопросы - обязательно напишу!
|
|
|
|
yart
Newbie
Offline
Activity: 3
Merit: 0
|
|
December 04, 2018, 06:29:08 PM |
|
Спасибо вам огромное! Благодаря скриптам на вашей странице удалось понять и усвоить довольно-таки большой кусок информации )))
|
|
|
|
bomj (OP)
|
|
December 27, 2018, 06:49:44 PM |
|
1. Закомментировал все что можно (вы уж извините за безграмотность, я понимаю, что это все равно что кувалдой в операционной) Все так же. 2. Спрятал часть скрипта. 3. Добавил поле и подвязал к кнопке 'Get News', не работает так как хотелось, но результаты интересные. Подставил в данную кнопку ссылку для визуализации, иногда думаю для решения задачи стоит взглянуть. Варианты: https://wall.0xbt.net/ball8.htmlhttps://wall.0xbt.net/ball9.htmlhttps://wall.0xbt.net/ball10.htmlhttps://wall.0xbt.net/ball11.html Вот что осталось в результате: <html> <head> <meta charset="utf-8"> <script type="text/javascript" src="https://rinkeby.etherscan.io/assets/plugins/jquery/jquery.min.js"></script> <script type="text/javascript" src="https://rinkeby.etherscan.io/jss/web3.min.js?v=0.20.6"></script> <!-- <script type="text/javascript" src="https://wall.0xbt.net/r1.js"></script> --> </head> <body> <table> <table> <tr> <td> <!-- Поле для 'Send News' --> <input type="text" id="txt_addr2"/> </td> <td> <input type="button" id="btn2" value="Подставить адрес из поля в 'Send News'"> <script> function addFunc2(){ if (document.getElementById("txt_addr2").value.trim().length == 0) { alert('Адрес не введен!'); } else { var new_addr = document.getElementById("txt_addr2").value; document.getElementById("my_link").href = "https://rinkeby.etherscan.io/writecontract/index.html?a=" + new_addr + "&n=rinkeby"; alert("Адрес '" + new_addr + "' подставлен! Закройте это окно и нажмите кнопку 'Send & News'"); } } document.getElementById("btn2").onclick = addFunc2; </script> </td> </tr> <td> <!-- Поле для 'Get News' --> <input type="text" id="0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"/> </td> <td> <input type="button" id="btn_3" value="Подставить адрес из поля в 'Get News'"> <script> function addFunc2(){ if (document.getElementById("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6").value.trim().length == 0) { alert('Адрес не введен!'); } else { var new_addr = document.getElementById("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6").value; document.getElementById("my_code").text = "https://rinkeby.etherscan.io/writecontract/index.html?a=" + new_addr + "&n=rinkeby"; alert("Адрес '" + new_addr + "' подставлен! Закройте это окно и нажмите кнопку 'Get & News'"); } } document.getElementById("btn_3").onclick = addFunc2; </script> </td> </tr> </table> <tr><td>
<button class="knopka" id='btn_5'><a id="my_link" href="https://rinkeby.etherscan.io/writecontract/index.html?a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby"><span style="color:black;">Send News</span></a></button> <!-- <input type="text" id="contract_instance" /> --> <!-- <input type="text" id="0xae4243e2c0f910223323dd2f2fdd16820b69f1d6" /> --> <button type='button' id='btn' class="knopka" onclick="ethcall2('getPost','input','myanswer','string', '|string', 'btn');"><a id="my_code" href="https://rinkeby.etherscan.io/writecontract/index.html?a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby" target="_blank">Get </a><i class="fa fa-btc"></i> News</button> <div align="left"><b><span id='myanswer' style="color:teal"></span></b></div> </body></td></tr></table>
<script> var web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io")); var version = web3.version.api; try { MyContract = web3.eth.contract([{"constant":true,"inputs":[],"name":"getPost","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newPost","type":"string"}],"name":"setPost","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]); myContractInstance = MyContract.at(document.getElementById('0xae4243e2c0f910223323dd2f2fdd16820b69f1d6').value); myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"); } catch (err) { console.log(err.message); } </script> <script type="text/javascript" src="https://wall.0xbt.net/r1.js"></script>
</html> Такое ощущение, что решение где-то рядом. Еще раз прошу прощения за безграмотность в данном вопросе.
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
December 28, 2018, 03:58:09 AM |
|
В чем вопрос? вставить яваскриптом текст из одного поля в другое? С каких пор это является проблемой? Или надо событие отловить сначала? Тогда какое событие? Ставьте листенер на него.
|
|
|
|
bomj (OP)
|
|
December 28, 2018, 08:18:37 AM |
|
В чем вопрос? вставить яваскриптом текст из одного поля в другое? С каких пор это является проблемой? Или надо событие отловить сначала? Тогда какое событие? Ставьте листенер на него.
Ну а как это сделать? Помоги пожалуйста. Я уже данный вопрос и на форуме javascript задал, думал уж там решат. Тишина. А самое интересное, что я, не разбирающийся в js, нашел в гугл процентов 15-20 ответов на вопросы, заданные на том форуме.
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
December 28, 2018, 08:40:15 AM |
|
Используй jquery
$('#btn2').val($('#txt_addr2').val())
|
|
|
|
bomj (OP)
|
|
December 28, 2018, 09:48:26 AM |
|
$('#btn2').val($('#txt_addr2').val())
Сразу же вбил это в гугл и на 1-ом месте мой вопрос на форуме javascript. Спасибо за подсказку, буду тренироваться. Позднее сообщу о результатах.
|
|
|
|
kzv
Legendary
Offline
Activity: 1722
Merit: 1285
OpenTrade - Open Source Cryptocurrency Exchange
|
|
December 28, 2018, 06:17:48 PM |
|
$('#btn2').val($('#txt_addr2').val())
Сразу же вбил это в гугл и на 1-ом месте мой вопрос на форуме javascript. Спасибо за подсказку, буду тренироваться. Позднее сообщу о результатах. JQuery подгружается к странице одной строчкой в хтмл. Зато сразу появляется в распоряжении мощная библиотека для которой примеров в инете вагон и тележка. Объясняю код: $ - это имя функции JQuery. С этого имени начинаются все обращения к библиотеке. '#btn2', '#txt_addr2' - это обращение к твоему элементу по его id. Можно еще обращаться по имени класса, тогда вместо решетки будет точка. $('#txt_addr2').val() - JQuery получает значение элемента с ид=txt_addr2 $('#btn2').val($('#txt_addr2').val()) - JQuery записывает значение элемента с ид=txt_addr2 в значение элемента с ид=btn2
|
|
|
|
|