Глава 4
____________________________________
[ 102 ]
___________________________________
{
"transactionHash":
"0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b ",
"transactionIndex": 0,
"blockHash":
"0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46",
"blockNumber": 3,
"contractAddress": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
"cumulativeGasUsed": 314159,
"gasUsed": 30234
}
Рассмотрим подробнее, как работает приведенный здесь метод:
web3.eth.gasPrice()
— возвращает цену газа, как медианное значение цены для
x
последних блоков;
web3.ethgetBalance()
— возвращает баланс указанного счета (адреса). Все хеши
должны быть отправлены в API web3.js как шестнадцатеричные строки, а не ше-
стнадцатеричные литералы. Входные значения для типа
address
в Solidity тоже
должны быть шестнадцатеричными строками;
web3.eth.getTransactionReceipt()
— применяется для получения информации о
транзакции (квитанции) с использованием хеша. Он возвращает объект квитан-
ции, если транзакция была найдена в блокчейне. В противном случае метод воз-
вращает
null
. Объект квитанции содержит следующие свойства:
•
blockHash
— хеш блока, в который помещена транзакция;
•
blockNumber
— номер блока, в который помещена транзакция;
•
transactionHash
— хеш транзакции;
•
transactionIndex
— целое число, индекс позиции в блоке;
•
from
— адрес отправителя;
•
to
— адрес получателя,
null
— если это транзакция создания блока;
•
cumulativeGasUsed
— совокупное количество газа, которое расходуется при
выполнении этой транзакции в блоке;
•
gasUsed
— количество газа, расходуемое при выполнении данной одиночной
транзакции;
•
contractAddress
— адрес контракта, созданного транзакцией, если это была
транзакция, создающая контракт. В противном случае
null
;
•
logs
— массив объектов лога, который сгенерировала данная транзакция.
Учимся работать с web3.js
____________________________________
[ 103 ]
___________________________________
Отправка эфира
Давайте научимся отправлять эфир на любой адрес. Для перевода эфира вам потре-
буется метод
web3.eth.sendTransaction()
. Этот метод можно использовать для от-
правки любых транзакций, но в основном его применяют для перевода эфира, по-
тому что развертывание контракта или вызов метода контракта при помощи этого
метода являются громоздкими и требуют самостоятельной генерации данных тран-
закции вместо автоматического создания. Метод принимает объект транзакции,
который обладает следующими свойствами:
from
— адрес счета отправителя. Если не указан, по умолчанию используется
свойство
web3.eth.defaultAccount
;
to
— необязательное свойство. Остается неопределенным для транзакций созда-
ния контракта;
value
— необязательное свойство. Сумма перевода в Wei либо сумма вознаграж-
дения при создании контракта;
gas
— необязательное свойство. Количество газа, расходуемого на транзакцию
(неиспользованный газ возвращается). Если не указано, задается автоматически;
gasPrice
— необязательное свойство. Цена газа для данной транзакции в Wei,
которая определяется по значению цены газа в сети;
data
— необязательное свойство. Это либо байтовая строка, содержащая при-
соединенное сообщение, либо — в случае создания контракта — код инициали-
зации;
nonce
— необязательное свойство. Каждая транзакция имеет связанное с ней це-
лое число
nonce
. Это счетчик, который показывает число транзакций, передан-
ных отправителем транзакции. Если свойство не определено, то задается авто-
матически. Это свойство позволяет предотвратить атаку массовыми транзак-
циями. Напомним, что данное свойство
nonce
— это вовсе не число
nonce
,
которое имеет отношение к майнингу блока. Если мы используем значение
nonce
, которое больше, чем должна была бы иметь транзакция, то эта транзакция
встает в очередь, пока не поступят другие транзакции. Например, если свойство
nonce
следующей транзакции должно иметь значение
4
, а мы установили значе-
ние
10
, то Geth будет ждать шесть промежуточных транзакций, прежде чем
транслировать данную транзакцию. Поэтому наша транзакция, у которой
nonce
равно десяти, называется
отложенной транзакцией
(queued transaction), и не
является
транзакцией в обработке
(pending transaction).
Вот простой пример того, как отправляют эфир по заданному адресу:
var txnHash = web3.eth.sendTransaction({
from: web3.eth.accounts[0],
to: web3.eth.accounts[1],
value: web3.toWei("1", "ether")
});
Do'stlaringiz bilan baham: |