¿Cuál es la estructura de datos de transacciones de ethereum?

Me gustaría conocer el detalle de la estructura de datos de transacciones de Ethereum. ¿Qué datos se almacenan en la transacción?

Respuestas (4)

Una transacción de Ethereum, como en lo que pasa sendRawTransaction(), consta de los siguientes campos, en orden y con codificación RLP (tenga en cuenta que los nombres de los campos no forman parte de los datos codificados):

  • nonce - número de secuencia de transacción de la cuenta de envío
  • gasprice - precio que está ofreciendo pagar
  • startgas - cantidad máxima de gas permitida para la transacción
  • a - dirección de destino (dirección de cuenta o contrato)
  • valor - eth para transferir al destino, si corresponde
  • datos - todas las cosas interesantes van aquí
  • v - junto con r y s forman la firma ECDSA
  • r
  • s

Cualquier carga útil, ya sean datos sin procesar o la firma y los parámetros de una función de contrato, se codifica en el campo de datos .

Algunas referencias:

Transacción (python)

LegacyTx (ir)

rlp.Serializable (python)

Parámetros ECDSA

¿Es lo mismo una estructura de mensaje que una estructura de transacción?
La estructura del mensaje es lo único que se especifica formalmente. La "estructura de datos" que representa una transacción es una construcción de la aplicación en la que existe (y, por lo tanto, hasta cierto punto, el lenguaje de programación). Por ejemplo, es muy poco probable que geth, ethy pyethappuse, o incluso pueda usar, exactamente el mismo interno estructura de datos para representar una transacción.
pero ¿qué es el campo 'datos'? ¿Qué tipo de cosas interesantes van allí? ¿Podría proporcionar algún ejemplo para la parte de datos?
@AbhishekDeb "interesante" aquí significa argumentos para un contrato inteligente. Si está llamando a una función de contrato inteligente o creando un contrato inteligente, todo ese código se agrupa en el campo de datos.

puede verificar una transacción por su hash, por ejemplo en eth:

> web3.eth.getTransaction('0xc5eee3ae9cf10fbee05325e3a25c3b19489783612e36cb55b054c2cb4f82fc28')
{
  blockHash: '0xdb85c62ef50103f08e9220b59d6c08cbfb52e61d84926dedb3fe9b6940e6bbea',
  blockNumber: 290081,
  from: '0x1dcb8d1f0fcc8cbc8c2d76528e877f915e299fbe',
  gas: 90000,
  gasPrice: 50000000000',
  hash: '0xc5eee3ae9cf10fbee05325e3a25c3b19489783612e36cb55b054c2cb4f82fc28',
  input: '0x',
  nonce: 34344,
  to: '0x702bd0d370bbf0b97b66fe95578c62697c583393',
  transactionIndex: 0,
  value: 5000111390000000000'
}

que puedes ver en un escáner de cadena de bloques aquí

¿Los datos de transacción sin procesar tienen firma?

A partir de la bifurcación de Londres , se introduce una nueva transacción EIP-2718 con TransactionType2, como se describe en ethereum/EIPs/eip-1559 .

La nueva estructura de carga útil -

rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, amount, data, access_list, signature_y_parity, signature_r, signature_s])

Especificación

La validez del bloque se define en la implementación de referencia a continuación. El código de operación GASPRICE( 0x3a) DEBE devolver el effective_gas_pricecomo se define en la implementación de referencia a continuación.

El costo intrínseco de la nueva transacción se hereda de EIP-2930, específicamente 21000 + 16 * non-zero calldata bytes + 4 * zero calldata bytes + 1900 * access list storage key count + 2400 * access list address count.

El EIP-2718 TransactionPayloadpara esta transacción es rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, amount, data, access_list, signature_y_parity, signature_r, signature_s]).

Los signature_y_parity, signature_r, signature_selementos de esta transacción representan una firma secp256k1 sobre keccak256(0x02 || rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, amount, data, access_list])).

El EIP-2718 ReceiptPayloadpara esta transacción es rlp([status, cumulative_transaction_gas_used, logs_bloom, logs]).

La transacción consta del siguiente campo mientras se valida en el bloque:

Status
Block
TimeStamp
From
To
Value
Transaction fees
Gas Price
Gas Limit & Usage by Txn
Gas Fees
Burnt & Txn Savings Fees
Input Data
Others (Tx type, Nonce, Position)

Puede realizar un seguimiento de todo esto cuando crea e implementa el contrato en etherscan.io

El estado no es parte de la transacción, está en el recibo de la transacción. Etherscan muestra varios campos que son útiles para sus usuarios, pero no son parte de la transacción.
Ahh entendido, gracias por aclarar. Acabo de empezar a aprender sobre Blockchain y Ethereum.