Bitcoin

Bitcoin Transactions

Build, sign, broadcast Bitcoin transactions, and compute signature hashes with Zafeguard Bitcoin components.

Bitcoin Transactions

Components for building, signing, and broadcasting Bitcoin transactions, plus signature hash computation.

Public endpoints enforce rate limits per IP address and can fail under concurrent load. Use a private or self-hosted Bitcoin node. See Connecting to Bitcoin.


BROADCAST_BITCOIN_TRANSACTION

BROADCAST_BITCOIN_TRANSACTION Workflow Component

Broadcasts a finalized raw transaction to the Bitcoin network and returns the transaction ID.

Config

FieldTypeRequiredDescription
network'mainnet' | 'testnet'YesTarget Bitcoin network

Inputs

FieldTypeDescription
signedTransactionstring (hex)Raw transaction hex to broadcast

Outputs

FieldTypeDescription
txidstringTransaction ID (64-char hex)

SDK example

import { WorkspaceClient, ComponentModule } from '@zafeguard/caller-sdk';
const workspace = new WorkspaceClient({ apiKey: process.env.ZAFEGUARD_API_KEY! });

const result = await workspace.call(ComponentModule.BROADCAST_BITCOIN_TRANSACTION, {
  signedTransaction: 'deadbeef...',
}).promise();
console.log(result.txid);

BUILD_BITCOIN_TRANSACTION

BUILD_BITCOIN_TRANSACTION Workflow Component

Builds an unsigned PSBT with UTXO selection, fee estimation, and sighash generation. Supports optional locktime, OP_RETURN data, change address configuration, and fee deduction.

Config

FieldTypeRequiredDefaultDescription
paymentType'p2pkh' | 'p2sh-p2wpkh' | 'p2wpkh' | 'p2tr'YesBitcoin payment type (address format)
network'mainnet' | 'testnet'YesTarget Bitcoin network
deductFeebooleanNofalseWhen true, subtracts the estimated fee from amount instead of adding it on top

Inputs

FieldTypeDescription
recipientAddressstringDestination Bitcoin address
amountnumberAmount to send in satoshis (non-negative integer)
publicKeystring (hex)Sender public key — compressed 33 bytes (66 hex) or uncompressed 65 bytes (130 hex)
locktimestring | nullTransaction locktime as block height string. null to disable
opReturnDatastring | nullHex data to embed in an OP_RETURN output. null to skip
changeAddressstring | nullAddress for change output. null uses the sender's address
feeRatenumber | nullCustom fee rate in sat/vByte. null falls back to the network's half-hour fee estimate. Must be a positive number. See Customizing Transaction Fees for the vBytes formula and recommended rate ranges.

Outputs

FieldTypeDescription
unsignedTransactionstring (hex)Hex-encoded unsigned PSBT
messageHashesstring[]Array of sighash hex strings, one per input (each 64 hex chars)
estimatedFeenumberEstimated network fee in satoshis (using the chosen fee rate)

SDK example

import { WorkspaceClient, ComponentModule } from '@zafeguard/caller-sdk';
const workspace = new WorkspaceClient({ apiKey: process.env.ZAFEGUARD_API_KEY! });

const result = await workspace.call(ComponentModule.BUILD_BITCOIN_TRANSACTION, {
  recipientAddress: 'bc1q...',
  amount: 50000,
  publicKey: '02abc123...',
  locktime: null,
  opReturnData: null,
  changeAddress: null,
  feeRate: null, // or e.g. 25 for 25 sat/vByte
}).promise();
console.log(result.unsignedTransaction);
console.log(result.messageHashes); // sign each of these
console.log(result.estimatedFee);

SIGN_BITCOIN_TRANSACTION

SIGN_BITCOIN_TRANSACTION Workflow Component

Applies signatures to an unsigned PSBT and produces a finalized raw transaction ready to broadcast.

Config

None.

Inputs

FieldTypeDescription
unsignedTransactionstring (hex)Hex-encoded PSBT from BUILD_BITCOIN_TRANSACTION
signaturesstring[]Hex-encoded signatures, one per input
publicKeystring (hex)Signer public key — compressed 33 bytes (66 hex) or uncompressed 65 bytes (130 hex)

Outputs

FieldTypeDescription
signedTransactionstring (hex)Finalized raw transaction hex, ready to broadcast

SDK example

import { WorkspaceClient, ComponentModule } from '@zafeguard/caller-sdk';
const workspace = new WorkspaceClient({ apiKey: process.env.ZAFEGUARD_API_KEY! });

const result = await workspace.call(ComponentModule.SIGN_BITCOIN_TRANSACTION, {
  unsignedTransaction: buildResult.unsignedTransaction,
  signatures: ['3045...', '3044...'],
  publicKey: '02abc123...',
}).promise();
console.log(result.signedTransaction);

COMPUTE_BITCOIN_SIGNATURE_HASH

COMPUTE_BITCOIN_SIGNATURE_HASH Workflow Component

Computes a signature hash for a message using either the standard Bitcoin message format or raw SHA-256 hashing.

Config

FieldTypeRequiredDescription
format'bitcoin-message' | 'raw'Yesbitcoin-message produces a standard signed-message hash. raw produces a double SHA-256 hash

Inputs

FieldTypeDescription
messagestringMessage string to hash

Outputs

FieldTypeDescription
messageHashstring32-byte hash as 64-char hex, ready for external signing

Transaction flow

GET_BITCOIN_DERIVATION_PATH


  (external signing)
  → public key


BUILD_BITCOIN_TRANSACTION ─── messageHashes ──▶ (external signing)
         │                                              │ signatures
         │                                              ▼
         └─── unsignedTransaction ──▶ SIGN_BITCOIN_TRANSACTION

                                               ▼ signedTransaction
                                   BROADCAST_BITCOIN_TRANSACTION

Stage statuses

StatusMeaning
CREATEDQueued, waiting to execute
RUNNINGActively executing
COMPLETEDFinished successfully
FAILEDFailed — check error field

On this page