Как я могу подключить свой пользовательский HTML-интерфейс к моей частной цепочке Ethereum?

Я пытаюсь изучить разработку смарт-контрактов и протестировать свои контракты.

Раньше я использовал truffle, Metamask и testrpc для проверки своих контрактов; и он позаботился о том, как взаимодействовать с моей HTML-страницей в локальной цепочке.

Сейчас я использую «geth» и частный блокчейн в Ethereum (в ближайшее время я объясню все шаги). Я могу развернуть свой контракт с помощью geth. Я могу взаимодействовать с развернутым контрактом с помощью консоли geth. Но я не знаю, как подключить свой HTML-файл к моему блокчейну.

Вопрос 1 : Как я могу подключить свой пользовательский HTML-интерфейс к частной цепочке блоков?

Вопрос 2 : Нужно ли мне использовать Metamask, когда я использую приватную цепочку? Если да, то как я могу войти в Metamask? поскольку частная цепочка не предоставляет фразу из 12 слов, которая нужна Metamask (она предоставляется testrpc).

Мой контракт очень прост:

pragma solidity ^0.4.4;

contract T2{

 uint public k2;
 function T2(){
  k2=32; 
} }

Шаги, которые я предпринимаю, следующие:

шаг 1-

 geth --identity "MyNodeName" --rpc --rpcport "8545" --rpccorsdomain 
"*" --datadir Users/xx/TestChain1 --port "30303" --rpcaddr "127.0.0.1" 
 --nodiscover --rpcapi "db,eth,net,web3" --networkid 123 
 init/Users/xx/CustomGenesis.json

шаг 2-

 geth --identity "MyNodeName" --rpc --rpcport "8545" --rpccorsdomain "*" 
--datadir Users/aydinabadi/TestChain1 --port "30303" --nodiscover --
rpcapi "db,eth,net,web3" --networkid 123 console

шаг 3-

разблокировать мой аккаунт на консоли и развернуть мой контракт: т.е. я ставлю свой контракт на ремикс, запускаю его и копирую содержимое "Web3 deploy". Затем вставьте его в консоль geth.

Мой файл .js:

import "../stylesheets/app.css";
import { default as Web3} from 'web3';
 var web3;
if (typeof web3 !== 'undefined') {
    web3 = new Web3(web3.currentProvider);
} else {
    // set the provider you want from Web3.providers
    web3 = new Web3(new 
Web3.providers.HttpProvider("http://localhost:8545"));
 }

 var abi=[{"constant":true,"inputs":[],"name":"k2","outputs":
 [{"name":"","type":"uint256"}],"payable":false,"type":"function"},
 {"inputs":[],"payable":false,"type":"constructor"}];

 var ins=web3.eth.contract(abi);
 var instance= ins.at("0x863c7b1600b9312f85501dbc933a862b63dad374");
 var accounts;
 var account;
 var account2;
 window.App = {
 start: function() {
 web3.eth.getAccounts(function(err, accs) {
  if (err != null) {
    alert("There was an error fetching your accounts.");
    return;
  }

  if (accs.length == 0) {
    alert("Couldn't get any accounts! Make sure your Ethereum client is 
  configured correctly.");
    return;
  }
  accounts = accs;
  account = accounts[0];
  account2 = accounts[1];
  });
   },
  setStatus: function(message) {
  var status = document.getElementById("status");
  status.innerHTML = message;
   },


  k2: function() {
  var spec6 = document.getElementById("spec6");
  var val= instance.k2.call();
  spec6.innerHTML = val.valueOf();

  },
  };

и мой файл HTML:

 <!DOCTYPE html>
<html lan="en">
<head>
<script src="./app.js"></script>
<body>
<div class="col-sm-4">
 <br><br><button id="send" onclick="App.k2()">Get value</button>
 <span style="padding-left:130px;"> <span style="padding-left:200px;"  
id="spec6"></span>
 <br>
</div>
</body>
</html>
какие ошибки вы получаете в консоли браузера js?
@AchalaDissanayake Кроме того, я понял, что когда я вызываю развернутую переменную контракта, она возвращает 0. В моем вопросе я устанавливаю «k2 = 32», но когда я вызываю k2, она возвращает 0 (в консоли). Ты знаешь почему? Спасибо
возвращает 0 или не определено?
изменить в файле html onClick="k2()"и в файле js k2 : function ()на function k2(). Попробуй и расскажи мне логи консоли
конечно, прокомментируйте здесь результаты
Кстати, для вашего обновления вопроса вам не нужна метамаска для подключения к частной цепочке, даже к тестовой сети или живой сети, если у вас есть полный узел, работающий локально, метамаска обеспечивает аналогичный легкий клиент, когда вы запускаете кошку полный узел
Я опубликую ответ и обновлю его с помощью вашего отзыва на приведенное выше.

Ответы (2)

На вопрос 1 :

Вам не нужна метамаска для подключения к частной цепочке, даже к тестовой сети или живой сети, если у вас есть полный узел, работающий локально, метамаска обеспечивает аналог легкого клиента, когда вы не можете запустить полный узел.

Для вопроса 2 :

Ваша функция onClick не ссылается на функцию в app.js, поскольку приложение не определено.

Большое спасибо за ваш ответ. У меня еще два вопроса: 1-как клиент подписывает свою транзакцию без использования кошелька? 2- В общем, как мой HTLM подключается к приватной/живой цепочке? Спасибо :)
поскольку вы являетесь файлом js, подключаетесь к вашему локальному узлу через web3, когда у вас есть разблокированная учетная запись (учетная запись по умолчанию), она подписывает транзакции
Вы подключили файл js к вашей цепочке? это через порт rpc, который вы открываете, js web3 получает доступ к цепочке через порт
спасибо, за комментарии! Да, пока все идет нормально.

Во-первых, вы можете подключить Metamask к вашему локальному хосту или любой другой сети, которую вы хотите. Я опубликовал несколько простых примеров кода (в ответах) для интеграции VanillaJS и Metamask с контрактами. Надеюсь поможет :)

Подпишите данные с помощью Metamask и Vanilla JS

Как преобразовать ABI контракта в интерфейс HTML?