Ich möchte die Syntax kennen, um ein Byte-Array solide in Bytes32 zu konvertieren.
Dies ist eine Fortsetzung der Frage: Wie speichert man den öffentlichen Schlüssel im Ethereum-Vertrag?
Ich möchte den als Byte-Array gespeicherten PublicKey abrufen.
Bitte teilen Sie mir mit, wie dies erreicht werden könnte.
Vielen Dank.
Hier ist eine Möglichkeit, bytes32 aus einem Bytes-Array zu extrahieren:
function bytesToBytes32(bytes b, uint offset) private pure returns (bytes32) {
bytes32 out;
for (uint i = 0; i < 32; i++) {
out |= bytes32(b[offset + i] & 0xFF) >> (i * 8);
}
return out;
}
Sie können bytes32 direkt im Konstruktor des Vertrags verwenden und dann das Attribut über einen Getter abrufen :
contract PubKey {
bytes32 pubKey;
function PubKey(bytes32 initKey) {
pubKey = initKey;
}
function getPubKey() constant returns (bytes32) {
return pubKey;
}
}
Sehen Sie sich auch diese Frage an, um Details zur Typkonvertierung in Solidität zu erhalten.
.
bytes memory toBeConvert = "xxxxx";
bytes32 converted;
assembly {
encoded := mload(add(result, 32))
}
Wenn Sie nur die Konvertierung durchführen möchten, versuchen Sie dies. Stellen Sie jedoch sicher, dass Sie require in der Produktionsumgebung hinzufügen.
Sie können die Daten aufteilen, wenn sie in den Anrufdaten enthalten sind:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract Slice {
function bytesToBytes32(bytes calldata b) external pure returns (bytes32) {
return bytes32(b[:32]);
}
}
das Fett
pkoch
0
.Schlamm
Bill Burdick