Статус транзакции

Очень элементарный вопрос, как мне получить статус транзакции после обстрела транзакции? Я имею в виду, что я делаю sendTransaction, где я переношу некоторое количество эфира из одной учетной записи в другую, как я могу проверить статус транзакции, используя ее хэш?

19 голосов | спросил Aman C 14 J0000006Europe/Moscow 2016, 09:04:41

1 ответ


35

Обновление 21 октября 2017

В византийской вилке есть некоторые изменения - getTransactionReceipt(...).status теперь возвращает 0 для неудачной транзакции и 1 для успешной транзакции. EtherScan.io отображает этот статус в поле TxReceipt Status: для транзакций. См. Как обнаружить неудачную транзакцию после византийской вилки, поскольку код операции REVERT не потребляет весь газ? для получения дополнительной информации.



Резюме

eth.getTransaction("{txhash}") и eth.getTransactionReceipt("{txhash}") предоставит вам подробную информацию.

Поле .blockNumber будет null, пока транзакция не будет включена в заминированный блок.

В приведенных ниже примерах демонстрируются некоторые способы определения статуса транзакции.

Обратите внимание, что может возникнуть проблема с обнаружением того, завершилась ли транзакция из-за возникшей ошибки, поскольку ситуация может быть обнаружена путем проверки того, является ли gas = gasUsed. Я создал вопрос Как можно определить статус транзакции из заброшенной ошибки, когда газ может быть точно таким же, как газ для успешной транзакции? , чтобы попытаться решить этот вопрос.

И из результатов, приведенных выше в Q & A, вот короткий код кода, чтобы определить статус вашей транзакции.

> var status = debug.traceTransaction("0x9ee86a200528de32a695f1e2dd0d94a3871fefc7e49c5fd24a4a37eab1b99f7a")
undefined
> status.structLogs[status.structLogs.length-1].error
"invalid jump destination (PUSH1) 2"

Возвращаемое значение будет "", если ошибок нет или "Out of gas", если у вас закончился газ.



Подробности - Статус транзакции

Ниже приведены некоторые примеры использования eth.getTransaction(...) и eth.getTransactionReceipt(...), чтобы узнать статус транзакции.


Ожидающая транзакция, не поддающаяся блочной цепочке во время запроса

Вот результат, когда нет ожидающих транзакций

// eth.getBlock("pending").transactions[0] = null
> eth.getTransaction(eth.getBlock("pending").transactions[0])
invalid or missing value for params[0]
    at web3.js:3119:20
    at web3.js:6023:15
    at web3.js:4995:36
    at <anonymous>:1:1

И вот отложенная транзакция. .blockNumber = null.

> eth.getTransaction(eth.getBlock("pending").transactions[0])
{
  blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  blockNumber: null,
  from: "0xea674fdde714fd979de3edf0f56aa9716b898ec8",
  gas: 90000,
  gasPrice: 20000000000,
  hash: "0xdfa60d4e97c242c5222a11b485c051bbdeb133c99baccd34dc33ceae1dc0cd67",
  input: "0x",
  nonce: 181930,
  to: "0x4ac944f4e8ab60f9481bcecd78a9915ed3eb98ba",
  transactionIndex: null,
  value: 1005685497455181600
}



Успешно завершена транзакция, состояние транзакции хорошее

Эта транзакция выполнена успешно. gas(666666) < gasUsed(106824).

> eth.getTransaction(eth.getBlock("latest").transactions[1])
{
  blockHash: "0x425a4d04ac0185863266b0d1b000f579f9675a37c5c6df3bf3cf72e0bc9a94e7",
  blockNumber: 1701040,
  from: "0x81747eb1afd9e2670aa6883ed80973ffcb531e1f",
  gas: 666666,
  gasPrice: 20000000000,
  hash: "0x6ef5b459ed945fbabfc3a5ef34fb0087752002c319649ff44c3b2759d13a517d",
  input: "0xf04fd2f3000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001e0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
  nonce: 16,
  to: "0x2cac6e4b11d6b58f6d3c1c9d5fe8faa89f60e5a2",
  transactionIndex: 1,
  value: 0
}

> eth.getTransactionReceipt("0x6ef5b459ed945fbabfc3a5ef34fb0087752002c319649ff44c3b2759d13a517d")
{
  blockHash: "0x425a4d04ac0185863266b0d1b000f579f9675a37c5c6df3bf3cf72e0bc9a94e7",
  blockNumber: 1701040,
  contractAddress: null,
  cumulativeGasUsed: 127824,
  from: "0x81747eb1afd9e2670aa6883ed80973ffcb531e1f",
  gasUsed: 106824,
  logs: [{
      address: "0x2cac6e4b11d6b58f6d3c1c9d5fe8faa89f60e5a2",
      blockHash: "0x425a4d04ac0185863266b0d1b000f579f9675a37c5c6df3bf3cf72e0bc9a94e7",
      blockNumber: 1701040,
      data: "0x00000000000000000000000081747eb1afd9e2670aa6883ed80973ffcb531e1f000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000010b000000000000000000000000000000000000000000000000000000000000025e000000000000000000000000000000000000000000000000000000000047e364",
      logIndex: 0,
      topics: ["0xa8061486280834731cc1ef340255cc5d9880ad748d20cb766f43cb7562ec2c16"],
      transactionHash: "0x6ef5b459ed945fbabfc3a5ef34fb0087752002c319649ff44c3b2759d13a517d",
      transactionIndex: 1
  }, {
      address: "0x2cac6e4b11d6b58f6d3c1c9d5fe8faa89f60e5a2",
      blockHash: "0x425a4d04ac0185863266b0d1b000f579f9675a37c5c6df3bf3cf72e0bc9a94e7",
      blockNumber: 1701040,
      data: "0x000000000000000000000000c3a48462221f4525dd2823853b0d04cf373fe42e00000000000000000000000081747eb1afd9e2670aa6883ed80973ffcb531e1f000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001c7000000000000000000000000000000000000000000000000000000000000010b000000000000000000000000000000000000000000000000000000000000018400000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000b4000000000000000000000000000000000000000000000000000000000000017700000000000000000000000000000000000000000000000000000000000a03e8",
      logIndex: 1,
      topics: ["0x68a83b20dde5c87dee07cc8d46d46e2fda6f176227f8b1f20dcb93752557df0e"],
      transactionHash: "0x6ef5b459ed945fbabfc3a5ef34fb0087752002c319649ff44c3b2759d13a517d",
      transactionIndex: 1
  }, {
      address: "0x2cac6e4b11d6b58f6d3c1c9d5fe8faa89f60e5a2",
      blockHash: "0x425a4d04ac0185863266b0d1b000f579f9675a37c5c6df3bf3cf72e0bc9a94e7",
      blockNumber: 1701040,
      data: "0x00000000000000000000000081747eb1afd9e2670aa6883ed80973ffcb531e1f000000000000000000000000c3a48462221f4525dd2823853b0d04cf373fe42e000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000001c7000000000000000000000000000000000000000000000000000000000000010b00000000000000000000000000000000000000000000000000000000000001840000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000000000000000000272000000000000000000000000000000000000000000000000000000000047e558",
      logIndex: 2,
      topics: ["0x61a43b8785d66f3a53c7b8ab814b4c2e4ff15a1a6f8d24d08818e1f426e13906"],
      transactionHash: "0x6ef5b459ed945fbabfc3a5ef34fb0087752002c319649ff44c3b2759d13a517d",
      transactionIndex: 1
  }, {
      address: "0x2cac6e4b11d6b58f6d3c1c9d5fe8faa89f60e5a2",
      blockHash: "0x425a4d04ac0185863266b0d1b000f579f9675a37c5c6df3bf3cf72e0bc9a94e7",
      blockNumber: 1701040,
      data: "0x00000000000000000000000000000000000000000000000000075fbf48b22000",
      logIndex: 3,
      topics: ["0x8f22ef5ca888de3e246c690a13b066ad49cbf2768b0449441dd6f5bae826a1b1"],
      transactionHash: "0x6ef5b459ed945fbabfc3a5ef34fb0087752002c319649ff44c3b2759d13a517d",
      transactionIndex: 1
  }],
  root: "30353b57e937cfc71f0c97d5c98573be1eff440e3db62987bd9cd66b0f3030c4",
  to: "0x2cac6e4b11d6b58f6d3c1c9d5fe8faa89f60e5a2",
  transactionHash: "0x6ef5b459ed945fbabfc3a5ef34fb0087752002c319649ff44c3b2759d13a517d",
  transactionIndex: 1
}    



Транзакция успешно завершена, но выполнение контракта завершено

Вот пример транзакции, которая была успешно запущена в блок-цепочку, но выполнение контракта не выполнено .

В этом случае gas(50878) == gasUsed(50878).

Это происходит потому, что код Smart Contract, вызванный транзакцией, обнаружил ошибку и выбрал исключение, и это потребляет весь газ.

См. Почему бросок Solidity потребляет весь газ? для получения дополнительной информации о метании ошибок и использовании газа.

И обратите внимание, что может быть случай, когда Smart Contract выполняется без каких-либо ошибок и потребляет ТОЧНО ту же самую сумму газа, которая указана в отправленных деталях транзакции.

> eth.getTransaction("0x93f39d4213bc48d9e6adda181ddd468d18163ae894ffc3f1a81d34ea33629f84")
{
  blockHash: "0x43403d50e782e2e4f0e9c94e43ce417b2adaf0e0f9fbb4147c2b288fe3c9dc75",
  blockNumber: 1596065,
  from: "0x46fbf1e97365513bb5bdb894259877e026b7f27d",
  gas: 50878,
  gasPrice: 32210000000,
  hash: "0x93f39d4213bc48d9e6adda181ddd468d18163ae894ffc3f1a81d34ea33629f84",
  input: "0x",
  nonce: 2,
  to: "0xbb9bc244d798123fde783fcc1c72d3bb8c189413",
  transactionIndex: 0,
  value: 211417498879620000000
}
> eth.getTransactionReceipt("0x93f39d4213bc48d9e6adda181ddd468d18163ae894ffc3f1a81d34ea33629f84")
{
  blockHash: "0x43403d50e782e2e4f0e9c94e43ce417b2adaf0e0f9fbb4147c2b288fe3c9dc75",
  blockNumber: 1596065,
  contractAddress: null,
  cumulativeGasUsed: 50878,
  from: "0x46fbf1e97365513bb5bdb894259877e026b7f27d",
  gasUsed: 50878,
  logs: [],
  root: "d6771cfbad8d1f2f7cf413a48e968654ec7626797d3ac0ee6cfac26bba09e352",
  to: "0xbb9bc244d798123fde783fcc1c72d3bb8c189413",
  transactionHash: "0x93f39d4213bc48d9e6adda181ddd468d18163ae894ffc3f1a81d34ea33629f84",
  transactionIndex: 0
}



Обычная транзакция, которая не работает, не попадает в блок-цепочку

Я посылаю больше эфиров, чем доступно в моей учетной записи. Ошибка поймана до того, как транзакция будет занесена в цепочку блоков.

> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(50000000, "ether")})
Insufficient funds for gas * price + value
    at web3.js:3119:20
    at web3.js:6023:15
    at web3.js:4995:36
    at <anonymous>:1:1

Я отправляю неверный адрес. Опять же ошибка поймается до того, как транзакция будет забита в цепочку.

> eth.sendTransaction({from: eth.accounts[0], to: "0x12345", value: web3.toWei(50, "ether")})
invalid address
    at web3.js:3887:15
    at web3.js:3716:22
    at web3.js:4939:28
    at web3.js:4938:12
    at web3.js:4964:18
    at web3.js:4989:23
    at <anonymous>:1:1



Успешно завершена транзакция, состояние транзакции Хорошо, газ = газ Используется

Вот пример, где газ gas(21000) == gasUsed(21000), но транзакция прошла успешно.

Я сделал это, поскольку газ, необходимый для обычной транзакции, - 21000, и я указал код gas=21000 в деталях транзакции.

> eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(1.2345, "ether"), gas: 21000})
"0xc7c63b67747c0c825229ce3d36d226423adb8cab6bebe12b6d5001e0dc3f79b3"
> eth.getTransaction("0xc7c63b67747c0c825229ce3d36d226423adb8cab6bebe12b6d5001e0dc3f79b3")
{
  blockHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  blockNumber: null,
  from: "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
  gas: 21000,
  gasPrice: 20000000000,
  hash: "0xc7c63b67747c0c825229ce3d36d226423adb8cab6bebe12b6d5001e0dc3f79b3",
  input: "0x",
  nonce: 55,
  to: "0x4d5bbe7fbc80933ffa90ece988a764e41ee6d018",
  transactionIndex: null,
  value: 1234500000000000000
}
> eth.getTransactionReceipt("0xc7c63b67747c0c825229ce3d36d226423adb8cab6bebe12b6d5001e0dc3f79b3")
{
  blockHash: "0xf0af8236ceec7ad1839d67c9934ab062a8d95fa1f88b06139f97dbdfbd1cd842",
  blockNumber: 2234,
  contractAddress: null,
  cumulativeGasUsed: 21000,
  from: "0xa7857047907d53a2e494d5f311b4b586dc6a96d2",
  gasUsed: 21000,
  logs: [],
  root: "3280f47a0de1149ad5c5fda421faaf95f303da8a77e83c8ec6ac2b3d8ca27abc",
  to: "0x4d5bbe7fbc80933ffa90ece988a764e41ee6d018",
  transactionHash: "0xc7c63b67747c0c825229ce3d36d226423adb8cab6bebe12b6d5001e0dc3f79b3",
  transactionIndex: 0
}
ответил The Officious BokkyPooBah 14 J0000006Europe/Moscow 2016, 09:08:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132