Ich weiß , dass bytes32
32 Bytes gespeichert werden, aber was bytes
speichert? Und was ist der Unterschied zwischen den beiden?
Bytes ist ein dynamisches Array von Bytes. Es ist eine Abkürzung für byte[] und Sie werden von Zeit zu Zeit Beispiele für Bytes sehen, die im Code als Array behandelt werden. myByte[x]
. Es kann eine Länge von Null haben und Sie können beispielsweise ein Byte an das Ende anhängen.
Bytes32 ist genau 32 Bytes lang. Es ist genau ein 32-Byte-Wort erforderlich, um ein Byte32 darzustellen, da kein Platz reserviert werden muss, um die Länge zu codieren. Die Länge beträgt immer 32. Ein Byte mit 32 Byte Daten benötigt eine zusätzliche Codierung, um mit variabler Länge umzugehen.
Ein wichtiger praktischer Unterschied besteht darin, dass die Bytes fester Länge32 in Funktionsargumenten verwendet werden können, um Daten an den Vertrag weiterzugeben oder Daten aus dem Vertrag zurückzugeben. Der Bytes-Typ mit variabler Länge kann auch ein Funktionsargument sein, aber nur für den internen Gebrauch (innerhalb desselben Vertrags), da die Schnittstelle namens ABI keine Typen mit variabler Länge unterstützt.
Einige möglicherweise verwirrende Situationen sind möglich, wenn Bytes als Funktionsargument verwendet wird und der Vertrag erfolgreich kompiliert wird. Verwenden Sie immer Typen mit fester Länge für alle Funktionen, die von außen aufgerufen werden.
Ich hoffe es hilft.
Aktualisieren:
Sie können variable Länge string
und bytes
von Web3 zu Verträgen (und zurück) übergeben, aber derzeit nicht zwischen Verträgen.
pragma solidity ^0.4.11;
contract VariableLength {
event LogTest(bytes b);
function test(bytes b) public returns(bool success) {
LogTest(b);
return true;
}
}
bytes
ist nicht genau gleichbedeutend mit byte[]
. Aus den DokumentenYou should use bytes over byte[] because it is cheaper, since byte[] adds 31 padding bytes between the elements.
http://solidity.readthedocs.io/en/develop/types.html#fixed-size-byte-arrays
Byte-Arrays mit fester Größe
bytes1, bytes2, bytes3, …, bytes32. byte ist ein Alias für bytes1.
----------------==
http://solidity.readthedocs.io/en/develop/types.html#dynamically-sized-byte-array
bytes: Byte-Array mit dynamischer Größe , siehe Arrays. Kein Werttyp!
----------------==
bytes _data ist ein Byte-Array mit dynamischer Größe, und jedes Element ist vom Typ byte1
Kryptorenaissance