Me encuentro víctima de mis pobres habilidades para buscar en Google o de la falta de detalles en los bitcoind
documentos.
Tengo un walletNotify
script que se ejecuta en un nodo completo que cada vez que llega una transacción hacia / desde mi billetera, realiza una getRawTransaction(txid, 1)
transacción en la ID de transacción pasada.
Ahora, si alguna de mis direcciones aparece dentro de la vout
matriz, sé que esa transacción es un depósito. Lo que me gustaría verificar es que efectivamente puedo gastar esos bitcoins.
Leí sobre transacciones no estándar (específicamente, transacciones no gastables) y entré en pánico, así que mis preguntas son:
bitcoind
Realiza algún tipo de verificación sobre la "gastibilidad" de los bitcoins que llegan?¡Muchas gracias por adelantado!
Bitcoind solo raspa la cadena de bloques para algunos tipos de transacciones: Pay-to-pubkey, pay-to-pubkey-hash y pay-to-script-hash. Si revisa https://en.bitcoin.it/wiki/Script , verá muchos más operadores de secuencias de comandos que se pueden usar, por lo que el protocolo no es solo esos tres tipos de secuencias de comandos.
Dado que los guiones tienen una forma muy definida, su cliente buscará los casos en los que los pagos se dirijan a USTED en lugar de a otros.
OP_DUP OP_HASH160 <hash de 20 bytes> OP_EQUALVERIFY OP_CHECKSIG
Si se enviaran bitcoins a este script pero con otras operaciones de script al final, su nodo no los informaría como gastables.
Sin embargo, reproducir el intérprete de secuencias de comandos de bitcoind, con compatibilidad error por error, es complicado. Ciertos clientes se han bifurcado de la cadena de bloques al no seguir todas las peculiaridades de la implementación de referencia.
Pero si tiene esto, puede escribir su propio nodo si lo desea. Escuche nuevos bloques de la red, o simplemente de bitcoind. Utilice su intérprete de secuencias de comandos para asegurarse de que las transacciones en los bloques nuevos sean válidas, estén firmadas correctamente, etc. Una vez que esté seguro de que la cadena de bloques con la que termina es correcta, puede analizar los casos que bitcoind ignora y gastarlos si puede.
No se preocupe demasiado por las salidas no prescindibles, son principalmente una forma de almacenar un poco de datos adicionales en la cadena de bloques o de destruir bitcoins. Si alguien le envió una transacción que tenía una salida de TX no gastable, eso no sería malo, siempre que las monedas reales que estaba enviando tuvieran lugar en las otras salidas de TX.
- ¿Bitcoind realiza algún tipo de verificación sobre la "gastibilidad" de los bitcoins que llegan?
Sí, es necesario para determinar el saldo de su billetera. Por ejemplo, si envío a 2 de 3 direcciones multisig para las que solo tengo una de las claves, el cliente bitcoind no registrará eso en su saldo, pero si tengo 2 de las 3 direcciones, incluirá transacciones para esa dirección en mi saldo.
- ¿Hay alguna manera fácil de verificar esto yo mismo? ¿Hay alguna manera no necesariamente fácil?
¡Hay una manera fácil! Si su saldo cambia, entonces recibió monedas. Si está tratando de hacer una dirección de solo observación, donde está tratando de buscar cambios en un 'saldo de dirección' (a falta de un término mejor) de una dirección para la que no tiene la clave privada, entonces podría intentar obtener el scriptPubKeys
hexágono, que debería coincidir exactamente con lo scriptPubKey
que espera.
bitcoind
procesa el script para actualizar el saldo? algun guion? incluso los no estándar? (los scripts multisig son scripts un poco estándar a este respecto)
mpr
karimkorun