Web3 Javascript API: el objeto de transacción no coincide con la documentación

Pregunta de novato sobre la API Javascript de Web3.

Cuando uso web3.eth.getTransaction(), el objeto que regresa tiene algunas propiedades que parece que no puedo encontrar en la documentación. Por ejemplo, esto es lo que veo cuando ejecuto 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' }

A modo de comparación, esto es lo que muestra la documentación de Web3 JavaScript :

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

¿Cuáles son las propiedades "v", "r" y "s"? ¿Y qué son "s", "e" y "c" dentro del objeto "valor"?

¿Hay alguna documentación actualizada que deba mirar? Si importa, lo estoy usando web3 v 0.20.1con una instancia local de Geth.

Respuestas (2)

Para más detalles , como se mencionó antes, estas letras son propiedades de números grandes:

c: coefficient
e: exponent
s: sign

El valor de un BigNumber se almacena en un formato de punto flotante decimal representado por un coeficiente, un exponente y un signo, por ejemplo:

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

Coeficiente -del documento bignumber:

A partir de la versión 2.0.0 de esta biblioteca, el valor del coeficiente de un BigNumber se almacena en un formato de coma flotante de base 100000000000000 normalizado, a diferencia del formato de base 10 utilizado en la versión 1.xx.

el signo es claro 1 o -1.

el exponente e es el exponente de la forma de notación exponencial (toExponential() ), por ejemplo:

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

En cuanto a v, r, sellos se describen en el papel amarillo como Valores correspondientes a la firma de la transacción y utilizados para determinar el remitente de la transacción

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

Los valores s, ey cse encuentran en los atributos valuey gasPriceporque son instancias de BigNumber . BigNumber mantiene una representación interna de un número, por lo que puede manejar números más grandes que los números primitivos de JavaScript. (los valores en wei exceden fácilmente este límite)

Cuando use un BigNumber, solo debe usar su API pública , sin necesidad de preocuparse por las variables internas.


v, ry sson valores utilizados para verificar la firma en la transacción. A menos que esté buscando volver a verificar la firma, puede ignorarlos con seguridad.