Was ist der Unterschied zwischen bytes und bytes32?

Ich weiß , dass bytes3232 Bytes gespeichert werden, aber was bytesspeichert? Und was ist der Unterschied zwischen den beiden?

möglicherweise verwandt ethereum.stackexchange.com/questions/11347/bytes-quotes-or-not "bytes und bytes32 sind eigentlich sehr unterschiedlich. bytes ist identisch mit string, während bytes32 identisch mit uint256 ist."

Antworten (2)

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 stringund bytesvon 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;
    }
}
bytesist 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.
Guter Fang. :-)

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