Logré crear un tx sin procesar usando Bitcoinj pero no pude descubrir cómo verificar sus firmas. Suponiendo que conozco las direcciones correspondientes a las salidas (supuestamente) no gastadas utilizadas como entradas para el Tx, ¿cuál es la forma más fácil de verificar el Tx?
Está interesado en las siguientes llamadas a la API:
public List<TransactionInput> Transaction.getInputs()
public Script TransactionInput.getScriptSig() throws ScriptException
public void Script.correctlySpends(Transaction txContainingThis, long scriptSigIndex, Script scriptPubKey)
Úsalos así:
Transaction tx = ...
List<TransactionInput> inputs = tx.getInputs();
for(int i = 0; i < inputs.size(); i++) {
TransactionInput input = inputs.get(i);
Script scriptSig = input.getScriptSig();
Script scriptPubKey = ...
scriptSig.correctlySpends(tx, i, scriptPubKey);
}
La parte complicada es obtener scriptPubKey. Si tiene las transacciones que está gastando en la memoria, es tan simple comoinput.getConnectedOutput().getScriptPubKey();
Si no es así, puede hacer una conjetura convirtiendo la dirección en una P2PKH scriptPubKey.
public static Script ScriptBuilder.createOutputScript(Address to)
Esto crea un caso límite en el que si alguien intenta gastar una salida de P2PK , parecerá que se firmó incorrectamente en su programa. (Ambos están representados por direcciones).
correctlySpends
requiere un cuarto parámetro booleano ( enforceP2SH
). ¿Qué es eso?I tried to upgrade but it breaks my code (requires some refactoring)
Ah, está bien. Are there any serious issues in using 0.11?
Bueno, la gente en Internet asumirá que estás usando la última versión. :) Pero no hay nada específico en lo que pueda pensar.
amaclin