Всего за 349 руб. Купить полную версию
Таблица 4.2. Денежные единицы Ethereum
В интернете можно найти сайты с конвертами криптовалют Ethereum, вот один из них: https://etherconverter.online/. Здесь же показывается текущий курс Ether по отношению к доллару и евро.
Определяем текущий баланс наших аккаунтов
Выше мы добавили в нашу приватную сеть несколько аккаунтов. Полный список аккаунтов всегда можно посмотреть в консоли Geth при помощи команды web3.eth.accounts.
С помощью функции web3.eth.getBalance мы можем посмотреть баланс аккаунта в единицах Wei. Адрес аккаунта нужно передать функции в качестве параметра:
> web3.eth.getBalance("0x4f744742ac711fd111c7a983176db1d48d29f413")
2.3085e+22
Функция web3.eth.getBalance возвращает достаточно большое число. Вообще при работе с API фреймворков Ethereum мы часто будем иметь дело с очень большими числами. Когда вы будете разрабатывать свое децентрализованное приложение (DApp), это нужно будет учитывать.
Для того чтобы узнать баланс нужного вам аккаунта в Ether, используйте функцию fromWei:
> web3.fromWei(eth.getBalance("0x4f744742ac711fd111c7a983176db1d48d29f413"))
23110
При этом функции eth.getBalance нужно передать адрес проверяемого аккаунта.
Перевод средств с одного аккаунта на другой
> web3.fromWei( eth.getBalance("0xf212d0180b331a88bd3cafbd77bbd0d56398ae00"))
0
Это неудивительно, ведь мы еще не переводили средства на эти аккаунты. Но можно перевести деньги с основного аккаунта нашей приватной сети, которую мы создали на втором уроке. Для нее был запущен майнинг, поэтому там уже должны быть средства.
Метод eth.sendTransaction
> web3.eth.accounts
["0x4f744742ac711fd111c7a983176db1d48d29f413", "0xf212d0180b331a88bd3cafbd77bbd0d56398ae00", "0x346cc69a63f9b84c45f17e337574c0150ab6bc03", "0xae7bb3649a5c597d44f812b4a636f3cc21ee98e1"]
> web3.fromWei( eth.getBalance("0x4f744742ac711fd111c7a983176db1d48d29f413"))
23135
> web3.fromWei( eth.getBalance("0xf212d0180b331a88bd3cafbd77bbd0d56398ae00"))
0
> web3.fromWei( eth.getBalance("0x346cc69a63f9b84c45f17e337574c0150ab6bc03"))
0
> web3.fromWei( eth.getBalance("0xae7bb3649a5c597d44f812b4a636f3cc21ee98e1"))
0
Как видите, на первом из этих аккаунтов средства есть, а на остальных ничего нет.
Давайте переведем часть средств, а именно 0.05 Ether, с первого их этих аккаунтов на другой, где средств нет. Воспользуемся для этого методом eth.sendTransaction:
> eth.sendTransaction({from:"0x4f744742ac711fd111c7a983176db1d48d29f413", to:"0xf212d0180b331a88bd3cafbd77bbd0d56398ae00", value: web3.toWei(0.05, "ether")})
При попытке выполнить эту операцию вы, однако, получите сообщение об ошибке:
Error: authentication needed: password or unlock
at web3.js:3143:20
at web3.js:6347:15
at web3.js:5081:36
at :1:1
Перед выполнением такой операции необходимо разблокировать исходный аккаунт, с которого отправляются средства. Для разблокировки введите такую команду:
> web3.personal.unlockAccount("0x4f744742ac711fd111c7a983176db1d48d29f413", "*********")
true
Вместо звездочек укажите пароль, с которым данный аккаунт создавался. Если аккаунт и пароль были указаны правильно, на консоли вы увидите true.
Теперь повторите вызов функции eth.sendTransaction:
> eth.sendTransaction({from:"0x4f744742ac711fd111c7a983176db1d48d29f413", to:"0xf212d0180b331a88bd3cafbd77bbd0d56398ae00", value: web3.toWei(0.05, "ether")})
"0xb6d13a5e915c3af1feabad7caec7b45348146695973b32285df287639717e916"
На этот раз функция выполнится успешно и вернет нам так называемый хеш транзакции (Transaction Hash) со значением:
0xb6d13a5e915c3af1feabad7caec7b45348146695973b32285df287639717e916
Чтобы перевод средств произошел успешно, эта транзакция должна быть выполнена. Кроме того, нужно дождаться, когда в вашу тестовую сеть будет добавлен новый блок. После этого средства появятся на целевом счету.
Посмотрите на консоль, где мы запустили наш узел. Видим, что там есть сообщение о запуске транзакции с указанным выше хешем, а также о том, что был добавлен новый блок:
INFO [02-17|23:20:50.917] Submitted transaction fullhash=0xb6d13a5e915c3af1feabad7caec7b45348146695973b32285df287639717e916 recipient=0xF212D0180B331a88BD3CafbD77bBd0D56398aE00
INFO [02-17|23:20:53.018] Commit new mining work number=4643 sealhash=0f860cd73ae1 uncles=0 txs=1 gas=21000 fees=2.1e-05 elapsed=36.186ms
INFO [02-17|23:22:10.119] Successfully sealed new block number=4643 sealhash=0f860cd73ae1 hash=3c97618b0eea elapsed=1m17.116s
INFO [02-17|23:22:10.119] block reached canonical chain number=4636 hash=3b52370e8761
INFO [02-17|23:22:10.119]
mined potential block number=4643 hash=3c97618b0eea
Теперь, если проверить баланс второго аккаунта, на который мы переводили средства, то окажется, что он как раз равен 0.05 Ether, как и должно быть:
> web3.fromWei( eth.getBalance("0xf212d0180b331a88bd3cafbd77bbd0d56398ae00"))
0.05
Функции eth.sendTransaction мы передали в параметрах from и to адреса исходного и целевого аккаунта соответственно. В параметре value мы задали количество переводимых средств в единицах Wei. Так как нам удобнее указывать размер средств в более крупных единицах Ether, для перевода в Wei мы воспользовались функцией web3.toWei.