Ziemlich einfacher Code hier:
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;
}
}
Jetzt versuche ich, den Wert 1 als Schlüssel zu speichern.
Mit Remix,
entered key: 1
printed key: 0x0100000000000000000000000000000000000000000000000000000000000000
entered key: "0x01"
printed key: 0x0100000000000000000000000000000000000000000000000000000000000000
Jetzt ein seltsames:
entered key: "0x1"
printed key: 0x0100000000000000000000000000000000000000000000000000000000000000
Und auch seltsam:
entered key: "1"
printed key: 0x3100000000000000000000000000000000000000000000000000000000000000
Und auch super seltsam ... wenn Sie NodeJS verwenden, um eine Rohtransaktion zu pushen:
Entered:1
Printed key: 0x1000000000000000000000000000000000000000000000000000000000000000
Die Frage also, warum geben mir "0x1" und "0x01" und 1 alle die gleiche Antwort auf Remix und nicht auf Knoten? Und warum ist 1 in Anführungszeichen etwas anderes?
Nach deinen Beispielen:
eingegebener Schlüssel: 1 gedruckter Schlüssel: 0x0100000000000000000000000000000000000000000000000000000000000
Bytes werden als Array von 256-Bit-Werten gespeichert (in Ihrem Fall mit einer Größe von 32 Bytes), sodass Sie den Wert von uint 1 im ersten Byte des Arrays speichern, das einfach 0x01 ist, und der Rest des Arrays ist null.
eingegebener Schlüssel: "0x01" gedruckter Schlüssel: 0x01000000000000000000000000000000000000000000000000000000000000
In Solidity wird "0x01" in sein String-Äquivalent umgewandelt, da es sich um einen gültigen Hex-Wert für eine 256-Bit-Uint handelt
eingegebener Schlüssel: "0x1" gedruckter Schlüssel: 0x0100000000000000000000000000000000000000000000000000000000000
Dasselbe wie oben, da 0x01 dasselbe wie 0x1 ist, genau wie 0x001 und 0x000001, sie alle den ganzzahligen Wert von 1 haben
eingegebener Schlüssel: "1" gedruckter Schlüssel: 0x31000000000000000000000000000000000000000000000000000000000000
Dies ist der ASCII-Hex-Wert der Zeichenfolge "1", die 0x31 ist
Eingegeben: 1 Gedruckter Schlüssel: 0x100000000000000000000000000000000000000000000000000000000000
Ich habe es noch nie mit NodeJS versucht, daher kann ich diese Frage leider nicht beantworten. Ich hoffe, ich habe Ihre anderen Fragen trotzdem beantwortet.
das Fett