ОглавлениеНазадВпередНастройки
Добавить цитату

Метод 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 <anonymous>: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=0f860c…d73ae1 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=0f860c…d73ae1 hash=3c9761…8b0eea elapsed=1m17.116s

INFO [02-17|23:22:10.119] block reached canonical chain          number=4636 hash=3b5237…0e8761

INFO [02-17|23:22:10.119] mined potential block                  number=4643 hash=3c9761…8b0eea


Теперь, если проверить баланс второго аккаунта, на который мы переводили средства, то окажется, что он как раз равен 0.05 Ether, как и должно быть:


> web3.fromWei( eth.getBalance("0xf212d0180b331a88bd3cafbd77bbd0d56398ae00"))

0.05


Функции eth.sendTransaction мы передали в параметрах from и to адреса исходного и целевого аккаунта соответственно. В параметре value мы задали количество переводимых средств в единицах Wei. Так как нам удобнее указывать размер средств в более крупных единицах Ether, для перевода в Wei мы воспользовались функцией web3.toWei.

Заметим, что в реальной сети вместе с транзакцией нам нужно указать средства, которые пойдут на обработку этой транзакции (так называемый газ). Для этого команде eth.sendTransaction нужно задать параметры gas (количество газа, заданное для выполнения операции) и gasPrice (стоимость газа в Wei):


eth.sendTransaction( ( from:"0x208970e5e3d48a6eab968e64ba3447f6181310c1", to:"0x82a4165f21d8f1867d536e81537fc0085e5470a1",value: web3.toWei(5, "ether"), gas: 120000, gasPrice: 80000000000 ) )