Código bastante simple aquí:
pragma solidity ^0.4.13;
contract Oracle{
event Print(string _name, bytes32 _value);
bytes32 key;
function Store(bytes32 _key) returns (bytes32) {
key = _key;
Print("Key",_key);
return _key;
}
}
Ahora estoy tratando de almacenar el valor 1 como clave.
Usando remezclas,
entered key: 1
printed key: 0x0100000000000000000000000000000000000000000000000000000000000000
entered key: "0x01"
printed key: 0x0100000000000000000000000000000000000000000000000000000000000000
Ahora uno raro:
entered key: "0x1"
printed key: 0x0100000000000000000000000000000000000000000000000000000000000000
Y también raro:
entered key: "1"
printed key: 0x3100000000000000000000000000000000000000000000000000000000000000
Y también súper raro... cuando se usa NodeJS para impulsar una transacción sin procesar:
Entered:1
Printed key: 0x1000000000000000000000000000000000000000000000000000000000000000
Entonces, la pregunta, ¿por qué "0x1" y "0x01" y 1 me dan la misma respuesta en el remix y no en el nodo? ¿Y por qué el 1 entre comillas es algo diferente?
Según tus ejemplos:
clave ingresada: 1 clave impresa: 0x010000000000000000000000000000000000000000000000000000000000000000
Los bytes se almacenan como una matriz de valores de 256 bits (en su caso, de tamaño 32 bytes), por lo que está almacenando el valor de uint 1 en el primer byte de la matriz, que es simplemente 0x01 y el resto de la matriz es nulo.
clave ingresada: "0x01" clave impresa: 0x01000000000000000000000000000000000000000000000000000000000000000
En Solidity, "0x01" se convertirá en su cadena equivalente, ya que es un valor hexadecimal válido para un uint de 256 bits.
clave ingresada: "0x1" clave impresa: 0x01000000000000000000000000000000000000000000000000000000000000000
Igual que el anterior, 0x01 es lo mismo que 0x1, al igual que 0x001 y 0x000001, todos son el valor entero de 1
clave ingresada: "1" clave impresa: 0x310000000000000000000000000000000000000000000000000000000000000000
Este es el valor hexadecimal ascii de la cadena "1", que es 0x31
Ingresado: 1 Clave impresa: 0x100000000000000000000000000000000000000000000000000000000000000000
Nunca lo he intentado con NodeJS, así que no puedo responder a esto, lo siento. Aunque espero haber respondido a tus otras preguntas.
el feto