¿Cómo determinan los sitios como https://blockexplorer.com si la entrada (consulte el cuadro de entrada en el encabezado de https://blockexplorer.com ) es una dirección, ID de transacción o ID de bloque?
Quiero escribir algo similar en mi máquina local, donde ejecuto un nodo completo y tengo acceso a bitcoind RPC. Necesito saber cómo dirigir la entrada dado que un cuadro puede ser 3 cosas.
Como se describe en el pseudocódigo en la respuesta de amaclin, un sitio web de explorador de bloques simplemente verificaría si pueden encontrar el hash/txid/dirección en su base de datos, luego sabrán qué tipo de entrada es.
No puede realizar esta verificación directamente a través de una llamada RPC del núcleo de bitcoin, tendría que escribir un script de algún tipo para realizar las 3 verificaciones para averiguar qué tipo de entrada recibió. Primero puede verificar si hay un hash de bloque válido usando el getblock
RPC, y si eso falla, sabe que no es un hash de bloque. A continuación, tendría que haberlo txindex
habilitado en su nodo para permitirle consultar txids utilizando gettransaction
/ getrawtransaction
RPC (porque, de manera predeterminada, el nodo solo indexa las transacciones que están relacionadas con su billetera). Y luego, para verificar si es una dirección válida, puede usar la validateaddress
llamada RPC. Si todos fallaron, sabrá que la entrada no es válida.
No hay forma de determinar a partir de un hash solo si representa una dirección, ID de transacción o ID de bloque. Los tres podrían ser cualquier número SHA-256 válido y viceversa.
Para determinar los sitios de exploradores de Blockchain, es probable que hagan algo como el siguiente pseudocódigo, donde blockDB
, transactionDB
y addressDB
representan todos los ID de bloque conocidos, ID de transacciones y direcciones, respectivamente.
if ( blockDB.contains ( input ) )
{
// this is block hash
}
else if ( transactionDB.contains ( input ) )
{
// this is transaction id
}
else if ( addressDB.contains ( input ) )
{
// this is address
}
else
{
// error! unknown input
}
La diferenciación entre blockhash, txid y dirección se puede hacer en función de su longitud, tanto txid como blockhash tienen 64 caracteres, por lo que si la cadena tiene 2 ceros como dos primeros caracteres, es bockhash y no txid. Aquí está el código javascript de muestra:
if (user_input.length == 64) {
for (var i = 0; i < 2; i++) {
if (user_input[i] == '0') {
block_flag = true;
}
else {
block_flag = false;
break;
}
}
if (block_flag == true) {
// it's a blockhash
}
else{
//it's a transaction
}
}
else if (user_input.length == 38 || user_input.length === 34) {
//it's an address
}
BitcoinBLues
david schwartz
if ( blockDB.contains ( input ) )
es probar si la base de datos de bloques válidos contiene la entrada como el hash de uno de los bloques en la base de datos.BitcoinBLues