Всего за 349 руб. Купить полную версию
Заметим, что в реальной сети вместе с транзакцией нам нужно указать средства, которые пойдут на обработку этой транзакции (так называемый газ). Для этого команде eth.sendTransaction нужно задать параметры gas (количество газа, заданное для выполнения операции) и gasPrice (стоимость газа в Wei):
eth.sendTransaction({from:"0x208970e5e3d48a6eab968e64ba3447f6181310c1", to:"0x82a4165f21d8f1867d536e81537fc0085e5470a1",value: web3.toWei(5, "ether"), gas: 120000, gasPrice: 80000000000})
Просмотр состояния транзакции
В ответ вы получите объект следующего вида:
> web3.eth.getTransaction("0xb6d13a5e915c3af1feabad7caec7b45348146695973b32285df287639717e916")
{
blockHash: "0x3c9761fefa52a0bc563733d87163828c5fe1316d78ca89be8af18d9c818b0eea",
blockNumber: 4643,
from: "0x4f744742ac711fd111c7a983176db1d48d29f413",
gas: 90000,
gasPrice: 1000000000,
hash: "0xb6d13a5e915c3af1feabad7caec7b45348146695973b32285df287639717e916",
input: "0x",
nonce: 0,
r: "0x1e3519fbca45cc5f6a0804232c8f0362d42c8abfeaf5225536867651f53787fd",
s: "0x69e617eceec461b727a0997fd837264e02242fa16f61491e58974faaf20c49c7",
to: "0xf212d0180b331a88bd3cafbd77bbd0d56398ae00",
transactionIndex: 0,
v: "0xfc2",
value: 50000000000000000
}
Поля объекта состояния транзакции перечислены в табл. 4.3.
Таблица 4.3. Состояние транзакции
Как видите, здесь есть адреса отправителя from и получателя to, а также объем переведенных средств в Wei.
Когда вы запускаете транзакцию на выполнение, она выполняется не сразу. Вначале транзакция находится в состоянии ожидания, пока майнеры не создадут для нее новый блок. Анализируя поля номера блока blockNumber, в котором размещается транзакция, можно определить, была ли запущена транзакция или еще нет.
Поля v, r, s содержат значения для подписи транзакции. Их содержимое можно использовать для получения публичного ключа аккаунта. Способ их использования с этой целью обсуждается здесь: https://ethereum.stackexchange.com/questions/13778/get-public-key-of-any-ethereum-account.
Содержимое полей gasPrice и gas имеет отношение
к стоимости транзакции. Пока мы работаем с тестовой сетью, об этом можно не беспокоиться. Если кратко, то gasPrice содержит так называемую стоимость газа, который тратится на выполнение транзакции, а поле gas количество газа, которое выделил отправитель для выполнения транзакции.
Вы можете думать о газе, как о бензине, который тратится на выполнение транзакций. Стоимость этого бензина может меняться, а на разные транзакции этого бензина тратится разное количество.
Квитанция транзакции
Передайте этому методу в качестве параметра хеш завершенной транзакции, и вы получите квитанцию в виде объекта:
> web3.eth.getTransactionReceipt("0xb6d13a5e915c3af1feabad7caec7b45348146695973b32285df287639717e916")
{
blockHash: "0x3c9761fefa52a0bc563733d87163828c5fe1316d78ca89be8af18d9c818b0eea",
blockNumber: 4643,
contractAddress: null,
cumulativeGasUsed: 21000,
from: "0x4f744742ac711fd111c7a983176db1d48d29f413",
gasUsed: 21000,
logs: [],
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
root: "0xa5cdcd909d837e937189f4cffc52840111f4430bf871f07094eaea96c47d682d",
to: "0xf212d0180b331a88bd3cafbd77bbd0d56398ae00",
transactionHash: "0xb6d13a5e915c3af1feabad7caec7b45348146695973b32285df287639717e916",
transactionIndex: 0
}
Поля объекта квитанции перечислены в табл. 4.4.
Таблица 4.4. Квитанция выполненной транзакции
Анализируя квитанцию, вы можете узнать номер блока, в котором размещена транзакция blockNumber, а также индекс позиции размещения транзакции в блоке transactionIndex.
При помощи полей cumulativeGasUsed и gasUsed вы сможете понять, сколько газа ушло на выполнение транзакции. При запуске транзакции вы можете выделить определенное количество газа, но если газа будет больше, израсходуется только часть ваших средств. В реальной сети Ethereum, если газа будет выделено слишком мало, транзакция будет очень долго находиться в состоянии ожидания или не будет выполнена вовсе.
Также обратите внимание на поле contractAddress. Когда мы займемся публикацией смарт-контрактов, нам потребуется адрес размещенного смарт-контракта из этого поля.
Итоги урока
Попутно вы изучили криптовалютные единицы, которые применяются в сети Ethereum.
Вы узнали, что созданные транзакции сначала попадают в состояние ожидания и находятся в нем до тех пор, пока в блокчейн не будет добавлен новый блок. Проверку состояния транзакции можно выполнить методом web3.eth.getTransaction.
Когда транзакция выполнена, то с помощью метода web3.eth.getTransactionReceipt вы можете получить ее квитанцию. Из квитанции можно определить, сколько газа было потрачено на выполнение транзакции. Если транзакция была связана с публикацией контракта, то этот метод поможет вам получить адрес опубликованного контракта. Адрес контракта необходим, как вы скоро узнаете, для вызова его методов.