Quiero almacenar una clave pública de una dirección de Ethereum en un contrato. ¿Cuál es el tipo de datos primitivo aconsejable para almacenar una clave pública?
¡Gracias!
Almacene siempre las claves como bytes, ya que se sabe que las cadenas en algunos idiomas terminan en bytes de valor nulo. Puede usar un atributo bytes32 para almacenar la clave y un método getter para recuperarlo del contrato implementado (instanciado):
contract PubKey {
bytes32 pubKey;
function PubKey(bytes32 initKey) {
pubKey = initKey;
}
function getPubKey() constant returns (bytes32) {
return pubKey;
}
}
Editar:
La clave pública tiene una longitud de 64 bytes sin incluir su prefijo:
contract PubKey {
uint8[] pubKeyBytes;
function PubKey(uint8[] initKey) {
for(uint i = 0; i < initKey.length; i++) {
pubKeyBytes.push(initKey[i]);
}
}
function getPubKeyByte(uint i) constant returns (uint) {
return pubKeyBytes[i];
}
Esto es costoso ya que cada recuperación de la clave pública debe llamarse 64 veces. usar dos fragmentos de 32 bytes es más barato (pero más feo):
contract PubKey {
bytes32 pubKeyHalf1, pubKeyHalf2;
function PubKey(bytes32 initKeyHalf1, bytes32 initKeyHalf2) {
pubKeyHalf1 = initKeyHalf1;
pubKeyHalf2 = initKeyHalf2;
}
function getPubKeyHalf1() constant returns (bytes32) {
return pubKeyHalf1;
}
function getPubKeyHalf2() constant returns (bytes32) {
return pubKeyHalf2;
}
}
También puede almacenar la clave pública en bytes
variable, pero eso consumirá más gas. En mi prueba simple, almacenar una clave pública en dos bytes32
variables usa ~ 67,000 gas, y almacenarla en una bytes
variable usa ~ 85,000 gas
caras etéreas
niksmac
Sebí
caras etéreas
Sebí
jmyles
Sebí
jaspe
jmyles