Как пользователю внести свои данные в скрипт?
Подскажите пожалуйста, как сделать, чтобы любой пользователь мог самостоятельно ввести данные контракта?
Чтобы в строке 47 кода изменился адрес 0xae4243e2c0f910223323dd2f2fdd16820b69f1d6 на свой любой, допустим на адрес 0x41835eba2075d2452fbedeec25bedbbc61d9b8a1 И при нажатии на кнопку 'Get News' получить новую информацию. <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> </head> <body> <table><tr><td> <center> <button class="knopka" id='btn_5'><a id="my_link" href="https://rinkeby.etherscan.io/writecontract/index.html?a=0xae4243e2c0f910223323dd2f2fdd16820b69f1d6&n=rinkeby"><b><span style="color:black;">Send News</span></b></a></button> <button type='button' id='btn_5' class="knopka" onclick="ethcall2('getPost', 'input_5','myanswer_5','string', '|string', 'btn_5');">Get News</button> <div align="left"><b><span id='myanswer_5' style="color:teal"></span></b></div> </center></body></td></tr></table> <script> $('#overlay', window.parent.document).hide(); jQuery(window).load(function () { $('#overlay').fadeOut("slow"); var obj = window.parent.document.getElementById('readcontractiframe'); parent.resizeIframe(obj, 0); }); function getcontractabi(contractaddress) { $.post("https://Rinkeby.etherscan.io/api", { module: "contract", action: "getabit", address: contractaddress }, function (data, status) { console.log("contractAbi = " + data) }); } var Web3 = require('web3'); var web3 = new Web3(new Web3.providers.HttpProvider("https://rinkeby.infura.io")); var version = web3.version.api; console.log(version); var MyContract; var myContractInstance; 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("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"); } catch (err) { console.log(err.message); } function ethcall2(strMethodName, strInputElementName, strOutputElementName, strOutputtype, strOutputFieldNames, strBtnName) { var functionNametoCall = "myContractInstance." + strMethodName; var result; try { var strparas; var elms = document.querySelectorAll("[id=" + strInputElementName + "]"); //console.log("elms.length = " + elms.length); for (var i = 0; i < elms.length; i++) { if (i == 0) { strparas = "'" + add0xforAddress(Escape(elms[i].value)) + "'" } else { strparas = strparas + ",'" + Escape(elms[i].value) + "'" } if (elms[i].value == '') { document.getElementById(strInputElementName).focus(); alert('Input value cannot be empty'); return false; } } showLoading(true, strBtnName); new Function(functionNametoCall + "(" + strparas + ", function(err, res){ if (err) {result = err;} else { result = res; } showMessage('" + strMethodName +"',result,'" + strOutputElementName+"','" + strOutputFieldNames +"','"+ strBtnName +"'); });")(); // result = eval(functionNametoCall + "(" + strparas + ");"); // $('#overlay').show(); } catch (err) { //$('#overlay').show(); result = "" + err + ""; showLoading(false, strBtnName); } //setTimeout(function () { // $('#overlay').show(); //}, 2500); //document.getElementById(strOutputElementName).innerHTML = "<br><br> [ <b>" + strMethodName + "</b> method Response ]<br>" + formatmultipleoutputs(result, strOutputFieldNames) + "<br>"; } function showMessage(strMethodName, result, strOutputElementName, strOutputFieldNames, strBtnName) { document.getElementById(strOutputElementName).innerHTML = "<br><br> [ <b>" + strMethodName + "</b> method Response ]<br>" + formatmultipleoutputs(result, strOutputFieldNames) + "<br>"; showLoading(false, strBtnName); } function showLoading(isShow, strBtnName) { if (isShow) { $(" <img id='waiting_" + strBtnName + "' class='waitingImg' src='https://etherscan.io/images/ajax-loader2.gif' style='margin-left:5px;' alt='Loading' />").insertAfter($('#' + strBtnName)); $('#' + strBtnName).prop('disabled', true); } else { $('#' + strBtnName).prop('disabled', false); $('#waiting_' + strBtnName).remove(); } } function Escape(val) { return val.replace(/'/g, "\\u0027"); } function formatmultipleoutputs(strVal, strOutputFieldNames) { var strAnswer = ''; //console.log("strVal = " + strVal); //console.log("strOutputFieldNames = " + strOutputFieldNames); //console.log("strVal.length = " + strVal.length); if (strOutputFieldNames.includes(';') == true) { var res_2 = strOutputFieldNames.split(';'); for (i = 0; i < strVal.length; i++) { var tmparray = res_2[i].toString().split('|'); strAnswer = strAnswer + " <font color='green'><i class='fa fa-angle-double-right'></i></font> "; if (res_2[i] != null && res_2[i].toString() != '') { strAnswer = strAnswer + " <b>" + tmparray[0] + "</b> <font color='silver'><i>" + tmparray[1] + "</i></font> <b>:</b> " } strAnswer = strAnswer + formatresult(strVal[i].toString(), tmparray[1]) + "<br>"; } } else { strAnswer = strAnswer + " <font color='green'><i class='fa fa-angle-double-right'></i></font> "; if (strOutputFieldNames != '') { var tmparray = strOutputFieldNames.toString().split('|'); strAnswer = strAnswer + " <b>" + tmparray[0] + "</b> <font color='silver'><i>" + tmparray[1] + "</i></font> <b>:</b> "; strVal = formatresult(strVal.toString(), tmparray[1]) } strAnswer = strAnswer + replaceAll(strVal, ",", "<br> <font color='green'><i class='fa fa-angle-double-right'></i></font> ") + "<br>"; } return strAnswer; } function htmlEncode(value) { return $('<div/>').text(value).html(); } function replaceAll(str, find, replace) { return str.replace(new RegExp(find, 'g'), replace); } function formatresult(strResult, resulttype) { if (resulttype.startsWith('uint')) { return toFixed(strResult); } else if (resulttype == 'string') { return htmlEncode(strResult); //return hex_to_ascii(strResult); } else if (resulttype == 'address') { if (strResult != '0x0000000000000000000000000000000000000000') { return "<a href='/address/" + strResult + "' target='_blank'>" + strResult + "</a>"; } else { return htmlEncode(strResult); } //} else if (resulttype == 'bool') { // return Boolean(remove0x(strResult)); } else { return htmlEncode(strResult); } } function hex_to_ascii(str1) { var hex = str1.toString(); var str = ''; for (var n = 0; n < hex.length; n += 2) { str += String.fromCharCode(parseInt(hex.substr(n, 2), 16)); } return str; } function extractaddress(str1) { if (str1.length > 40) { str1.substr(str1.length - 40) } return str1; } function remove0x(str1) { if (str1.startsWith("0x") == true) { str1 = str1.substr(str1.length - str1.length + 2); } return str1; } function add0xforAddress(straddress) { straddress = straddress.trim(); if (straddress.startsWith("0x") == false && straddress.length == 40) { straddress = "0x" + straddress; } return straddress; } function toFixed(x) { if (x.indexOf("e+") !== -1) { var value = web3.toBigNumber(x); x = value.toString(10); } return x; } setTimeout(function () { }, 0); </script> </html> |
Как пользователю внести свои данные в скрипт?
1. Мне уже подсказали ранее скрипт для изменения ссылки
'Send News' После <table> в строке 008 добавляется код со скриптом: <tr> <td> <!-- Чуть усложнили --> <input type="text" id="txt_addr2"/> </td> <td> <input type="button" id="btn2" value="Подставить адрес из поля в Ваш код"> <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> </table> И теперь после внесения в поле: 0x41835eba2075d2452fbedeec25bedbbc61d9b8a1 Изменяется ссылка при нажатии на 'Send News' Вот что получилось: https://wall.0xbt.net/ball5.html Так было: https://wall.0xbt.net/ball4.html Я прошу прощения если что-то нарушаю, вижу здесь не приняты ссылки 2. Так же были предложен вариант для решения главной задачи: заменить код в строке 47 Код:
myContractInstance = MyContract.at("0xae4243e2c0f910223323dd2f2fdd16820b69f1d6"); Код:
myContractInstance = MyContract.at(document.getElementById("txt_addr2").value); Но что-то не срастается. Может у вас есть какие либо решения или подсказки? |
Как пользователю внести свои данные в скрипт?
Я прошу прощения. Впервые здесь.
Может я что делаю не так или неправильно ставлю вопрос? |
Цитата:
|
Цитата:
Все в том же духе. 2. Закомменировал все что можно (вы уж извините за безграмотность, я понимаю, что это все равно что кувалдой в операционной) Все так же. 3. Спрятал часть скрипта. 4. Добавил поле и подвязал к кнопке 'Get News', не работает так как хотелось, но результаты интересные. Подставил в данную кнопку ссылку для визуализации, иногда думаю для решения задачи стоит взелянуть. Варианты: https://wall.0xbt.net/ball8.html https://wall.0xbt.net/ball9.html https://wall.0xbt.net/ball10.html https://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> Такое ощущение, что решение где-то рядом. Еще раз прошу прощение за тупость. |
Как пользователю внести свои данные в скрипт?
Неужели нет вариантов решения данной задачи???
|
Как пользователю внести свои данные в скрипт?
Есть ли у кого-то какие-то мысли?
Неужели не интересно найти решение данной задачи? Если конечно решение существует.... |
bomj,
попробуйте создавайть ваш обьект в функции addFunc2(). |
Часовой пояс GMT +3, время: 23:32. |