Was ist die Transaktionsdatenstruktur von Ethereum?

Ich würde gerne die Details der Transaktionsdatenstruktur von Ethereum wissen. Welche Daten werden bei Transaktionen gespeichert?

Antworten (4)

Eine Ethereum-Transaktion – wie in dem, was Sie übergeben sendRawTransaction()– besteht aus den folgenden Feldern, der Reihe nach und RLP-codiert (beachten Sie, dass die Feldnamen nicht Teil der codierten Daten sind):

  • nonce - Transaktionssequenznummer für das sendende Konto
  • Gaspreis - Preis, den Sie zu zahlen anbieten
  • startgas - maximal zulässige Gasmenge für die Transaktion
  • to - Zieladresse (Konto- oder Vertragsadresse)
  • Wert - eth zum Übertragen an das Ziel, falls vorhanden
  • Daten - all die interessanten Dinge kommen hierher
  • v - bildet zusammen mit r und s die ECDSA-Signatur
  • r
  • s

Jede Nutzlast, ob Rohdaten oder eine Vertragsfunktionssignatur und Parameter, wird in das Datenfeld codiert .

Einige Referenzen:

Transaktion (Python)

LegacyTx (gehen)

rlp.Serializable (Python)

ECDSA-Parameter

Ist eine Nachrichtenstruktur dieselbe wie eine Transaktionsstruktur?
Die Nachrichtenstruktur ist das einzige, was formal festgelegt ist. Die "Datenstruktur", die eine Transaktion darstellt, ist ein Konstrukt der Anwendung, in der sie vorhanden ist (und daher bis zu einem gewissen gethGrad ethdie Programmiersprachepyethapp ) . Datenstruktur zur Darstellung einer Transaktion.
aber was ist ein 'Daten'-Feld? Was für interessante Dinge gibt es dort? Können Sie ein Beispiel für den Datenteil geben?
@AbhishekDeb "interessant" bedeutet hier Argumente für einen Smart Contract. Wenn Sie eine Smart-Contract-Funktion aufrufen oder einen Smart-Contract erstellen, wird der gesamte Code in das Datenfeld geworfen.

Sie können eine Transaktion anhand ihres Hashs überprüfen, zum Beispiel in 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'
}

die Sie hier in einem Blockchain-Scanner sehen können

Haben rohe Transaktionsdaten eine Signatur?

Ab London Fork wird eine neue EIP-2718-Transaktion mit TransactionType2 eingeführt, wie in ethereum/EIPs/eip-1559 beschrieben .

Die neue Nutzlaststruktur -

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])

Spezifikation

Die Blockgültigkeit wird in der Referenzimplementierung unten definiert. Der GASPRICE( 0x3a) Opcode MUSS zurückgeben, effective_gas_pricewie in der Referenzimplementierung unten definiert.

Die intrinsischen Kosten der neuen Transaktion werden von EIP-2930 geerbt, insbesondere 21000 + 16 * non-zero calldata bytes + 4 * zero calldata bytes + 1900 * access list storage key count + 2400 * access list address count.

Der EIP-2718 TransactionPayloadfür diese Transaktion ist 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]).

Die signature_y_parity, signature_r, signature_sElemente dieser Transaktion repräsentieren eine secp256k1-Signatur über keccak256(0x02 || rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, amount, data, access_list])).

Der EIP-2718 ReceiptPayloadfür diese Transaktion ist rlp([status, cumulative_transaction_gas_used, logs_bloom, logs]).

Die Transaktion besteht aus dem folgenden Feld, während es in den Block validiert wird:

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)

Sie können all dies nachverfolgen, wenn Sie den Vertrag auf etherscan.io erstellen und bereitstellen

Der Status ist nicht Teil der Transaktion, sondern im Transaktionsbeleg. Etherscan zeigt mehrere Felder, die für ihre Benutzer nützlich sind, aber nicht Teil der Transaktion sind.
Ahh verstanden, danke für die Klarstellung. Ich habe gerade angefangen, etwas über Blockchain und Ethereum zu lernen.