Александр Вячеславович Фролов - Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство стр 14.

Книгу можно купить на ЛитРес.
Всего за 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 вы можете получить ее квитанцию. Из квитанции можно определить, сколько газа было потрачено на выполнение транзакции. Если транзакция была связана с публикацией контракта, то этот метод поможет вам получить адрес опубликованного контракта. Адрес контракта необходим, как вы скоро узнаете, для вызова его методов.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке

Скачать книгу

Если нет возможности читать онлайн, скачайте книгу файлом для электронной книжки и читайте офлайн.

fb2.zip txt txt.zip rtf.zip a4.pdf a6.pdf mobi.prc epub ios.epub fb3