Як перерахувати кошти в мережі Ethereum за допомогою GETH CLI

У моїй попередній статті ви дізналися, як налаштувати повністю синхронізований вузол блокчейну за 10 хвилин. Настав час навчитися виконувати транзакції в мережі Ethereum за допомогою інтерфейсу команди GETH.

Щоб бути на одній сторінці, спочатку пройдіть усі кроки з попередньої статті.

Готово? Ідеально

На даний момент ви знаєте:

  • як запустити повністю синхронізований вузол блокчейну Ethereum
  • як прикріпити GETH console
  • як запитати залишок на рахунку Ethereum
geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc 
eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4")
> 7500000000000000000

Я думаю, ви можете подумати, але почекайте секунду Лукас ... чому 7.5ETHвідображається як 7500000000000000000у Geth console?

Ефір проти Вей

Віртуальна машина Ethereum не підтримує десяткові знаки та плаваючі символи. Очевидно, обчислення у фінансах легше для цілих чисел.

Тому, щоб мати можливість надіслати частку 1 ETH, фонд Ethereum вирішив створити власну метричну систему, де найменшою одиницею буде 1 Wei, а 1 Ether - 1e18 Wei.

Але не турбуйтеся, є інструменти, які можуть полегшити вам життя. Наприклад, я настійно рекомендую онлайн-конвертер Ether у Wei:

//etherconverter.online

Для того, щоб надіслати ефір вартістю 15 доларів, де 1 ETH == 200 доларів (старі добрі часи ...), ви зробите транзакцію, що відправляє 0,0740 ETH, яка буде і повинна бути представлена ​​у Вей як 74000000000000000.

Онлайн конвертер ефіру в Вей:

Огляд метричної системи Ethereum:

Практика робить майстерність. Давайте фактично надішлемо 74000000000000000 Wei ($ 15) на інший рахунок.

Надсилання Ether на інший рахунок за допомогою GETH CLI

В одному терміналі не забудьте запустити повністю синхронізований вузол блокчейну:

geth --rinkeby --datadir=~/.gophersland_ethereum_r1 --port=30304 --cache=2048 --rpc --rpcport=8546 --rpcapi=eth,web3,net,personal --syncmode=fast

В іншому терміналі ми створимо наш другий обліковий запис Ethereum, точно як у Частині 1.

ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 sep 24 15:36 .> drwx------ 4 enchanter enchanter 4096 sep 24 15:26 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 
UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4geth --datadir=~/.gophersland_ethereum_r1 account new> INFO [09-24|15:36:33.566] Maximum peer count ETH=25 LES=0 total=25> Your new account is locked with a password. Please give a password. Do not forget this password.
> Passphrase: > Repeat passphrase: > Address: {7aa4a14286a25e3a275d7a122c23dc3c107a636a}ls -la ~/.gophersland_ethereum_r1/keystore/> drwx------ 2 enchanter enchanter 4096 oct 25 20:14 .> drwx------ 4 enchanter enchanter 4096 oct 25 19:48 ..> -rw------- 1 enchanter enchanter 491 sep 24 15:36 
UTC--2018-09-24T13-36-43.069452577Z--ceee57f2b700c2f37d1476a7974965e149fce2d4

Тепер давайте прикріпимо консоль Geth до поточно запущеного вузла блокчейну, як це було зроблено в попередній статті, щоб переказати $ 15 на цей нещодавно створений рахунок, виконавши eth.sendTransactionкоманду.

geth attach ipc:/home/enchanter/.gophersland_ethereum_r1/geth.ipc 
eth.sendTransaction({from: "0xceee57f2b700c2f37d1476a7974965e149fce2d4",to: "0x7aa4a14286a25e3a275d7a122c23dc3c107a636a", value: "74000000000000000"})

Помилка: потрібна автентифікація: пароль або розблокування.

Ви повинні отримати повідомлення про помилку. Це пов’язано з тим, що відправлення ефіру є «транзакцією», і транзакція змінює стан, коштує газ та витрачає кошти. Це означає, що він повинен бути підписаний нашим приватним ключем, який зберігається у сховищі ключів. Для того, щоб розшифрувати ключ, ми повинні надати пароль, або іншими словами, розблокувати обліковий запис.

Виконайте наступну команду, щоб розблокувати свій акаунт протягом наступних 60-х років, і виконайте команду sendTransaction ще раз.

web3.personal.unlockAccount(web3.personal.listAccounts[0], null, 60) 
eth.sendTransaction({from: "0xceee57f2b700c2f37d1476a7974965e149fce2d4", to: "0x7aa4a14286a25e3a275d7a122c23dc3c107a636a", value: "74000000000000000"})

Ми також могли передати пароль як другий аргумент замість null. Але цей спосіб безпечніший, оскільки ваш пароль знаходиться лише в буфері, а не зберігається в жодному журналі та не відображається на екрані.

Цього разу команда вдалася, і повернено хеш-квитанцію транзакції! О так!

Оскільки ми підключені до мережі Rinkeby, ми можемо скористатися переглядачем графічного інтерфейсу Rinkeby, щоб перевірити стан цієї транзакції, витрачений газ, ціну на газ тощо.

  1. Відкрийте провідник
  2. Вставте хеш квитанції транзакції в рядок пошуку
  3. Готово, ми витратили 21000 газу (стандарт для пересилання коштів), і транзакція вдалася!

Тепер ви можете запитати залишки обох рахунків і побачити змінений стан:

eth.getBalance("0xceee57f2b700c2f37d1476a7974965e149fce2d4") > 7425979000000000000 
eth.getBalance("0x7aa4a14286a25e3a275d7a122c23dc3c107a636a") > 74000000000000000

Працює як шарм.

Вітаємо! Ви:

  • дізнався різницю між Ефіром та Вей та як їх перетворити
  • подав свою першу транзакцію через глобальну тестову мережу Ethereum, Rinkeby

You can continue expanding your blockchain skills by building one from scratch in Go!"