Привет, незнакомец!

Похоже, вы здесь новенький. Чтобы принять участие, нажмите одну из кнопок ниже!

Как подключиться к ТестНету?

отредактировано October 2017 Раздел: Работа с Testnet

Подключиться к Ukraine Ethereum Testnet можно тремя способоми, используя один из слудующих инструментов:

1. MetaMask (Google Chrome Plugin)
2. Geth (консольный клиент для работы с Ethereum)
3. Web3.js (Javascript API для работы с Ethereum)

Ниже будут описаны способы подключения к Testnet со всеми выше перечисленными инструментами.

1. Подключение с использованием плагина MetaMask для браузера Google Chrome

Для того что бы установить MetaMask нужно перейти на сайт разработчиков https://metamask.io/ и кликнуть на ссылку "Get Chrome Plugin". Или можно зайти на Google Webstore и найти его там.
На сайте плагина есть короткое видео с инструкциями как установить и пользоваться данным плагином.

После добавления данного расширения для браузера Chrome в правом углу окна браузера появиться иконка в виде мордочки лисы.

При первом клике на иконку нужно проскролить до конца "Term of Use"( условия и соглашения) использования расширения после чего кнопка "Accept" станет активной.

После принятия условий соглашения необходимо ввести пароль и сохранить сгенерировнные 12 слов на случай если вы потеряете или забудете свой пароль и вам будет необходимо его востановить для доступа к с воему аккаунту MetaMask. Вам будет предложено на выбор сохранить этот набор слов в файл "save seed words as file" или вы можете скоприровать и сохранить их самостоятельно и кликнуть "I’ve copied it somewhere safe".

По умолчанию плагин подключяеться к главной сети Ethereum (Main Ethereum Network). Для того что бы переключиться на наш Testnet, в главном окне плагина в вверху с лева вам необходимо выбрать в выпадающем списке пункт "Custom RPC".

Затем в текстовое поле "New RPC Url" необходимо задать адрес нашего Testnet:
http://136.243.173.186:8540
и сохранить новое подключения нажав кнопку "Save"

Теперь вы подключены к сети Ukraine Ethereum Testnet. И можете принимать и отправлять эфир в нутри сети.

Для того что бы получить адрес своего аккаунта(кошелька) нужно в выпадающем списке на против имени аккаунта кликнуть "Copy Address to clipboard".

Для того что бы зачислить себе в аккаунт тестовые монеты ETH и убедиться в том что вы все правильно настроили,
вам необходимо перейти на следующий сайт: http://faucet.ethereum.net.ua/ и в текстовое поле ввести свой скопированный адрес из MetaMask и затем нажать "Request 0.5 ETH". После этого на ваш счет будет зачислено 0.5 ETH.

Теперь вы можете перечислить одному из участников сообщества Ukraine Ethereum Testnet немного эфира(ETH) и просмотреть совершенные вами транзакции.

Для этого вам необходимо кликнуть на кнопку "Send" в интерфейсе плагина MetaMask

После этого вам нужно ввести адрес кошелька получателя и сумму которую вы хотите перечислить и нажать кнопку "Next"

На следущей вкладке будет выведена информацию о планируемой транзакции(адреса аккаунтов между которыми происходит транзакция, gas price, gas limit, etc. ). Если вы со всем согласны то вам нужно нажать кнопку "Submit" и тем самым подтвердить транзакцию.

После этого в списке отправленных транзакций (во вкладке SENT) будет отображена ваша транзакция и информация о ней.

Теперь вы владеете навыками коммуникации с сетью Testnet при помощи графического инструмента MetaMask который легко устанавливается в качестве плагина для браузера Google Chrome. Данный метод коммуникации будет полезен пользователям не владеющими навыками программирования или работы в консоли а также разработчикам для тестов и экономии времени.



2. Подключение с использованием консольного клиента Geth

Инструмент Geth (Go Ethereum) является реализацией протокола Ethereum, написанный на языке Go. При помощи geth можно коммуницировать с сетью Ethereum используя консоль.

Установка Geth в вашу систему является довольно простой поэтому ниже будут приведены ссылки на официальную документацию:

Хочу заметить что если после установки Geth под вашу ОС вы в консоли запустите команду geth без каких либо параметров то на ваш компьютер начнет загружаться полноценная нода главной сети Ethereum размер которой довольно большой(более 40 Gb) и это займет "некоторое время". Поэтому если вы не собираетесь работать с основной сетью Ethereum(а данное руководство посвящено работе с сетью Ukraine Ethereum Testnet ) то вам этого делать не стоит.

Для того чтобы при помощи Geth подключиться к Testnet необходимо запустить команду geth с параметром attach
$ geth attach http://136.243.173.186:8540

Для того чтобы выйти из среды Testnet необходимо выполнить команду exit

После подключения к Testnet мы можем в демонстративных целях проверить баланс своего аккаунта который мы создали при помощи браузерного плагина MetaMask. Для этого вам необходимо скопировать адрес вашего аккаунта из MetaMask и передать его в качестве параметра для метода eth.getBalance()

> eth.getBalance("0xB6353c93Da243bdBDA7Ee5471e01c842eC5f5EE0")

Если после создания аккаунта в MetaMask вы воспользовались сервисом Faucet(http://faucet.ethereum.net.ua/) для пополнения  своего счета, то после выполнения команды eth.getBalance() вам будет отображен ваш текущий счет.

Давайте теперь создадим два новых аккаунта средствами Geth и совершим перевод монет между кошельками.

Создать первый аккаунт можно выполнив метод personal.newAccount() передав в качестве параметра пароль для нового аккаунта.

personal.newAccount("password")

после выполнения данной команды вам отобразиться адрес созданного кошелька. Скопируйте и запишите адрес созданного кошелька и пароль который вы указали при его создании они нам будут необходимы для выполнения транзакций. Вы также можете проверить баланс для свеже созданного аккаунта, он будет равен 0.

Повторите эти действия чтобы создать второй аккаунт.

Для отображения адресов всех аккаунтов сети Testnet выполните команду eth.accounts

Итак, у нас есть два новых аккаунта с нулевым балансом. Теперь нам необходимо пополнить первый аккаунт одним из двух способов. Вы можете перевести на него некоторое количество эфира со своего аккаунта MetaMask или вы можете воспользоваться сервисом Faucet(http://faucet.ethereum.net.ua/) и указав в текстом поле адрес своего первого аккаунта пополнить его. После этого проверьте баланс что бы убедиться что на нем имеется некоторое количество эфира.

Теперь мы можем выполнить перевод с первого аккаунта(на котором есть эфир) на второй. Для этого мы воспользуемся методом:

personal.sendTransaction({from:sender, to:receiver, value: amount}, "password_of_the_sender_account")

в качестве первого параметра метод принимает объект который содержит данные с адресом отправителя(from), получателя(to) и суммой(value). Для значения параметра value вы воспользуемся функцией web3.toWei() что бы привести число в соответствующую форму. И второй параметр метода это пароль от аккаунта с которого происходит перевод(sender).

В моем случае это выглядит следующим образом
personal.sendTransaction({from:'0x5b2f12208362ff55faf4db43f32cf5d3b28868b3', to:'0x7a176d0ad4c0a667913b3235e948408f6d2f8476', value: web3.toWei(0.3, "ether")}, '1111')

Метод personal.sendTransaction возвращает хэшь транзакции что то вроде id в базе данных блокчейна по которому в дальнейшем можно отследить транзакцию или получить информацию по ней. Хэшь транзакции выглядит примерно так: 0x0a8461d9387962b0b7a6c10fef0b7b42ee325d42eccf858d39efcb91396cab9b

Если передать этот хэшь в метод eth.getTransaction() то вы увидите информацию о данной транзакции.

> eth.getTransaction("0x0a8461d9387962b0b7a6c10fef0b7b42ee325d42eccf858d39efcb91396cab9b")
{
  blockHash: "0x2ae9afe3293c21a5732a8a6da7c69dbf5d629b3fd74f466f30a89db1e4e0c777",
  blockNumber: 290,
  condition: null,
  creates: null,
  from: "0x5b2f12208362ff55faf4db43f32cf5d3b28868b3",
  gas: 940000,
  gasPrice: 2000000000,
  hash: "0x0a8461d9387962b0b7a6c10fef0b7b42ee325d42eccf858d39efcb91396cab9b",
  input: "0x",
  networkId: 8995,
  nonce: 0,
  publicKey: "0x33b828422685c659a33ab534e2a1092ec2dab277b3affe4bf68720992c81a20de8bbb87c36b364e5e324d26a6e000271c1cedd72308614dfa69cee3317edb733",
  r: "0x288aa237344d684b6394df715dd649a31f9b5813197c0f70398c95f47813a19e",
  raw: "0xf86e808477359400830e57e0947a176d0ad4c0a667913b3235e948408f6d2f8476880429d069189e00008082466aa0288aa237344d684b6394df715dd649a31f9b5813197c0f70398c95f47813a19ea04b21c1d8197a2a5a443a4923a668dadf87a8bc898f0e3c708721dae64bb659c6",
  s: "0x4b21c1d8197a2a5a443a4923a668dadf87a8bc898f0e3c708721dae64bb659c6",
  standardV: "0x1",
  to: "0x7a176d0ad4c0a667913b3235e948408f6d2f8476",
  transactionIndex: 0,
  v: "0x466a",
  value: 300000000000000000
}

Теперь проверьте балансы обоих аккаунтов что бы убедиться в успешном выполнении операции.

На этом описание взаимодействия с Testnet используя инструмент Geth закончено. Можете продолжить экспериментировать с консольным инструментом Geth в сети Ukraine Ethereum Testnet.



3. Подключение используя библиотеку Web3.js из web приложения.

Библиотека Web3.js представляет собой JavaScript API для взаимодействия с блокчейном Ethereum по средствам JSON-RPC. С ее помощью можно построить веб интерфейс взаимодействия с блокчейном, подключив библиотеку в html страницу или импортировать модуль для nodeJS.

Ниже мы рассмотрим пример подключения к нашему testnet используя Web3 в html странице.

Для начала нам необходимо скачать саму библиотеку web3.js а также вспомогательную библиотеку ethereumjs-tx.js которую мы будем использовать для создания и подписания транзакции.

Скачайте файл web3.min.js: https://github.com/ethereum/web3.js/tree/develop/dist
Скачайте файл ethereumjs-tx.js: https://github.com/vaporry/ethereumjs-tx/tree/master/dist

Также для выполнения перевода с одного аккаунта на другой нам потребуется:
* Адрес аккаунта с которого будет происходить списание средств
* Приватный ключ аккаунта с которого будет происходить списание средств
* Адрес аккаунта на который будем пересылать средства

Так как мы не можем получить приватный ключ от нашего аккаунта при удаленном подключении к testnet, то мы будем использовать аккаунт созданный в MetaMask. Если вы еще не создали себе аккаунт при помощи MetaMask то вам необходимо это сделать. Детальная инструкция описана в первом способе подключения данной статьи.

Для того что бы получить адрес аккаунта и приватный ключ от него вам необходимо открыть MetaMask и скопировать их. Затем мы их будем передавать в качестве параметров в нашем JS приложении. Адрес получателя вы можете создать как при помощи Geth(personal.newAccount('pass')) так и при помощи MetaMask.




Ниже приведен код html страницы снабженный комментариями если будут какие то трудности или вопросы пишите их в комментарии к данной статье.

<head>
    <script type="text/javascript" src="web3.min.js"></script> 
    <script type="text/javascript" src="ethereumjs-tx.js"></script> 
    <script type="text/javascript">

        var web3 = new Web3(); // создаем инстанс web3

        // Устанавливаем провайдер
        web3.setProvider(new web3.providers.HttpProvider('http://136.243.173.186:8540'));

        var senderAccount = '0x2FEF84c4D7acF4783ce28359FAd829cC0170d555'; // адрес отправителя
        var senderPrivateKey = "6c7461861f76ddb98919dd78e8836af933820b713bf370d914df196f62d0e871"; // приватный ключ отправителя
        var receiverAccount = '0x5df80b226b8703acae2225e613b67353d8432032'; // адрес получателя
        var amount = parseInt(web3.toWei(0.5, "ether"));// Кол-во 0.5 эфира
        var gasLimit = web3.toHex(35000); //  Лимит газа
        var privateKeyHex = new Buffer(senderPrivateKey, 'hex'); // преобразовать приватный ключ в hex

        var gasPrice = parseInt(web3.eth.gasPrice);
        var gasPriceHex = web3.toHex(gasPrice);
        var nonce = web3.eth.getTransactionCount(senderAccount); // получаем кол-во транзакций отправленных с данного аккаунта
        var nonceHex = web3.toHex(nonce); // преабразуем в hex

        // формируем объект данных необходимых для осуществления транзакции
        const rawTx = {
          nonce: nonceHex,
          gasPrice: gasPriceHex,
          gasLimit: gasLimit,
          to: receiverAccount, 
          value: web3.toHex(amount),
          data: '0x00',
          chainId: web3.toHex(web3.version.network)
        };

        console.log("rawTx", rawTx)

        var tx = new EthTx(rawTx); // создаем инстанс ethereumjs-tx
        tx.sign(privateKeyHex); // подписываем транзакцию используя приватный ключ отправителя
        var serializedTx = tx.serialize();

        function sendTransaction() {
            web3.eth.sendRawTransaction("0x" + serializedTx.toString('hex'), function(error, transactionHash) {
                if (!error)
                    console.log("Transaction has been succesfully SENT, transaction hash: ",transactionHash); 
                else
                    console.log(error)
            });
        }

    </script>
</head>

<body>
    <button onclick="sendTransaction()">Send Transaction</button>
</body>

Теперь вам необходимо скопировать данный код, создать на его основе html файл и заменить значения 3-х переменных:
senderAccount
senderPrivateKey
receiverAccount

По нажатию на кнопку Send Transaction выполняется отправка 0.5 ether с одного аккаунта на другой. Результат выводиться в консоли браузера.

Войдите или Зарегистрируйтесь чтобы комментировать.