Dentro de mi contrato, quiero verificar si un dato block hash
es válido o no.
block_hash_validation(string blockhash) returns (bool){
...//check()
return true; || return false;
}
P1: En caso afirmativo, a partir del block hash
valor, ¿podría también aprender su número de bloque?
P2: ¿O también debo proporcionar el número de bloque block_hash_validation(uint blockNumber, string blockhash)
para ver si el número de bloque apunta al correcto block hash
?
block_hash_validation(uint blockNumber, string blockhash) returns (bool) {
if (block.blockhash(blockNumber) == blockhash)
return true;
else
return false;
}
P1 : No veo una forma obvia de hacerlo sin entrar en un proceso descabellado que consume mucha gasolina y que no escalará. En mi opinión , un cliente web3 sería más adecuado para buscarlo .
P2 : Me inclinaría por este enfoque si es necesario.
Parece que debería ser bytes32 en lugar de cadena. De acuerdo con esto: http://solidity.readthedocs.io/en/develop/units-and-global-variables.html devolverá bytes32, por lo que probablemente sea mejor compararlo con el mismo tipo.
Observe la advertencia sobre el alcance limitado: hash del bloque dado: solo funciona para los 256 bloques más recientes, excluyendo el actual.
Parece que puede reducir el if/else a una sola línea, por lo que me parece correcto:
function block_hash_validation(uint blockNumber, bytes32 blockHash)
constant returns(bool isValid)
{
return (block.blockhash(blockNumber) == blockHash);
}
No hay tiempo para probar. Sin garantía :-)
Espero eso ayude.
tjaden hess
alper
ethereum alarm clock
) para impulsar el hash recién generado.Rob Hitchens
alper
blockHash
comobytes32
, supongo que debemos definirlo comostring
, ya que el formato de byte se almacena como una cadena, por ejemplo: "0x...b = web3.eth.getBlock(0).hash; block_hash_validation(b, 0)"
esto funciona cuando blockHash se define comostring
@RobHitchensRob Hitchens
alper