Web3 Javascript API – Transaktionsobjekt stimmt nicht mit Dokumentation überein

Noob-Frage zur Web3 Javascript API.

Wenn ich verwende web3.eth.getTransaction(), hat das zurückkommende Objekt einige Eigenschaften, die ich anscheinend nicht in der Dokumentation finden kann. Hier ist zum Beispiel, was ich sehe, wenn ich laufe web3.eth.getTransaction().

{ blockHash: '0xf2a40da650009deb5b064660c2b3fd8030a1bb0e9e92ed38ab66813cc366c7e0',
  blockNumber: 3593309,
  from: '0x485fbe8fce05a862832ddc9464e96be131544c45',
  gas: 147622,
  gasPrice: { [String: '211000000000'] s: 1, e: 11, c: [ 211000000000 ] },
  hash: '0xdbbcb4d5be94f56ee23bcf7b9f42fa72294d6f5b735f994a05e122e2a2687f51',
  input: '0x9cf5453d000000000000000000000000485fbe8fce05a862832ddc9464e96be131544c45',
  nonce: 34,
  to: '0x1d0dcc8d8bcafa8e8502beaeef6cbd49d3affcdc',
  transactionIndex: 0,
  value: { [String: '500000000000000000'] s: 1, e: 17, c: [ 5000 ] },
  v: '0x26',
  r: '0x48a7fbc581ec4a7509cabbb0d603eceeaf5d43901128fa79b33f0bc73d41ad13',
  s: '0x4c006097a7fe312e9373a3c6488a16ba80d170c77a6b7a124437ac0796005ba2' }

Zum Vergleich, hier ist, was die Web3-JavaScript-Dokumentation zeigt:

{ "hash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b",
  "nonce": 2,
  "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46",
  "blockNumber": 3,
  "transactionIndex": 0,
  "from": "0xa94f5374fce5edbc8e2a8697c15331677e6ebf0b",
  "to": "0x6295ee1b4f6dd65047762f924ecd367c17eabf8f",
  "value": BigNumber,
  "gas": 314159,
  "gasPrice": BigNumber,
  "input": "0x57cb2fc4"}

Was sind die Eigenschaften "v", "r" und "s"? Und was sind „s“, „e“ und „c“ innerhalb des „value“-Objekts?

Gibt es eine aktualisierte Dokumentation, die ich mir ansehen sollte? Wenn es darauf ankommt, verwende ich web3 v 0.20.1eine lokale Instanz von Geth.

Antworten (2)

Für weitere Details , wie bereits erwähnt, handelt es sich bei diesen Buchstaben um bignumber Properties:

c: coefficient
e: exponent
s: sign

Der Wert einer BigNumber wird in einem dezimalen Fließkommaformat gespeichert, das durch einen Koeffizienten, Exponenten und ein Vorzeichen dargestellt wird, z. B.:

x = new BigNumber(-123.456);
x.c    coefficient (i.e. significand) == [ 123, 45600000000000 ]  
x.e     exponent == 2                      
x.s    sign == -1                       

Koeffizient - aus dem bignumber doc:

Ab Version 2.0.0 dieser Bibliothek wird der Wert des Koeffizienten einer BigNumber in einem normalisierten Fließkommaformat zur Basis 100000000000000 gespeichert, im Gegensatz zum Format zur Basis 10, das in Version 1.xx verwendet wird

Zeichen ist klar 1 oder -1.

Exponent e ist der Exponent der Exponentialschreibweise (toExponential() ) zB :

y.toExponential()  // '-1.234567e+4' => y=4

Diesbezüglich v, r, swerden sie im gelben Papier als Werte beschrieben, die der Unterschrift der Transaktion entsprechen und zur Bestimmung des Absenders der Transaktion verwendet werden

ECDSASIGN(e ∈ B32, pr ∈ B32) ≡ (v ∈ B1, r ∈ B32, s ∈ B32)

Die Werte s, eund cwerden in den Attributen und gefunden value, gasPriceda sie Instanzen von BigNumber sind . BigNumber verwaltet eine interne Darstellung einer Zahl, sodass größere Zahlen als einfache JavaScript-Zahlen verarbeitet werden können. (Werte in Wei überschreiten diese Grenze leicht)

Wenn Sie eine BigNumber verwenden, sollten Sie einfach ihre öffentliche API verwenden , ohne sich um die internen Variablen kümmern zu müssen.


v, r, und ssind Werte, die verwendet werden, um die Signatur der Transaktion zu überprüfen. Wenn Sie die Signatur nicht erneut überprüfen möchten, können Sie diese ignorieren.