Skip to main content

Bitcoin Transactions

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

Avoid public RPC endpoints

White Rabbit runs on shared infrastructure with a shared outbound IP pool. Public endpoints enforce rate limits per IP — under load this can cause errors across all workspaces sharing that IP. 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 'caller-sdk';
const workspace = new WorkspaceClient({ apiKey: process.env.WR_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'Yes—Bitcoin payment type (address format)
network'mainnet' | 'testnet'Yes—Target 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

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

SDK example​

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

const result = await workspace.call(ComponentModule.BUILD_BITCOIN_TRANSACTION, {
recipientAddress: 'bc1q...',
amount: 50000,
publicKey: '02abc123...',
locktime: null,
opReturnData: null,
changeAddress: null,
}).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 'caller-sdk';
const workspace = new WorkspaceClient({ apiKey: process.env.WR_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