001package org.consensusj.bitcoinj.signing;
002
003import org.bitcoinj.core.Transaction;
004import org.bitcoinj.wallet.DeterministicKeyChain;
005
006import java.util.concurrent.CompletableFuture;
007
008/**
009 * A low-level transaction signing interface that can sign a {@link SigningRequest} that is a complete
010 * transaction that only needs signatures. The {@link HDKeychainSigner} implementation can sign transactions
011 * using a <b>bitcoinj</b> {@link DeterministicKeyChain}.
012 */
013public interface TransactionSigner {
014    /**
015     * Create a signed bitcoinj transaction from the signing request. This is asynchronous because
016     * user (or other) confirmation may be required.
017     * @param request Signing request with data for all inputs and all outputs
018     * @return A signed transaction (should be treated as immutable)
019     */
020    CompletableFuture<Transaction> signTransaction(SigningRequest request);
021}