Quiero saber la sintaxis para convertir una matriz de bytes a bytes32 en solidez.
Esta es una continuación de la pregunta: ¿Cómo almacenar la clave pública en el contrato de Ethereum?
Quiero recuperar la clave pública almacenada como matriz de bytes.
Amablemente aconséjeme saber cómo se podría lograr esto.
Gracias.
Aquí hay una forma de extraer bytes32 de una matriz de bytes:
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;
}
Puede usar bytes32 directamente en el constructor del contrato y luego recuperar el atributo a través de un captador :
contract PubKey {
bytes32 pubKey;
function PubKey(bytes32 initKey) {
pubKey = initKey;
}
function getPubKey() constant returns (bytes32) {
return pubKey;
}
}
Además, eche un vistazo a esta pregunta para obtener detalles de conversión de tipo en solidez.
.
bytes memory toBeConvert = "xxxxx";
bytes32 converted;
assembly {
encoded := mload(add(result, 32))
}
Si solo quieres hacer la conversión, prueba esto. Pero asegúrese de agregar requisitos en el entorno de producción.
Puede dividir los datos si están en los datos de la llamada:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
contract Slice {
function bytesToBytes32(bytes calldata b) external pure returns (bytes32) {
return bytes32(b[:32]);
}
}
el feto
pico
0
.mudgen
Bill Burdick