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

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

Як підключитися до ТестНету?

Підключитися до 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'); // перетворити приватний ключ в хекс

        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 з одного аккаунту на інший. Результат виводитися в консолі браузера.

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