Я пытаюсь изучить разработку смарт-контрактов и протестировать свои контракты.
Раньше я использовал 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>
На вопрос 1 :
Вам не нужна метамаска для подключения к частной цепочке, даже к тестовой сети или живой сети, если у вас есть полный узел, работающий локально, метамаска обеспечивает аналог легкого клиента, когда вы не можете запустить полный узел.
Для вопроса 2 :
Ваша функция onClick не ссылается на функцию в app.js, поскольку приложение не определено.
Во-первых, вы можете подключить Metamask к вашему локальному хосту или любой другой сети, которую вы хотите. Я опубликовал несколько простых примеров кода (в ответах) для интеграции VanillaJS и Metamask с контрактами. Надеюсь поможет :)
Ачала Диссанаяке
Ай.
Ачала Диссанаяке
Ачала Диссанаяке
onClick="k2()"
и в файле jsk2 : function ()
наfunction k2()
. Попробуй и расскажи мне логи консолиАчала Диссанаяке
Ачала Диссанаяке
Ачала Диссанаяке