Me gustaría conocer el detalle de la estructura de datos de transacciones de Ethereum. ¿Qué datos se almacenan en la transacción?
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):
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:
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í
A partir de la bifurcación de Londres , se introduce una nueva transacción EIP-2718 con TransactionType
2, 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])
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_price
como 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 TransactionPayload
para 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_s
elementos 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 ReceiptPayload
para 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
Satoshi Nakanishi
jimkberry
geth
,eth
ypyethapp
use, o incluso pueda usar, exactamente el mismo interno estructura de datos para representar una transacción.Abhishek Deb
oh suculento