Skip to main content
The Clementine protocol uses various transaction types for different protocol operations including deposits, withdrawals, challenges, and reimbursements.

Transaction Identifiers

GrpcTransactionId

Unified transaction identifier supporting both normal and numbered transaction types.
normal_transaction
NormalTransactionId
Normal transaction type (used once per deposit)
numbered_transaction
NumberedTransactionId
Numbered transaction type (used multiple times)

NormalTransactionId

Transaction types that occur once per deposit or operation.
UNSPECIFIED_TRANSACTION_TYPE
enum
default:"0"
Unspecified transaction type
ROUND
enum
default:"1"
Round transaction (operator’s collateral chain)
KICKOFF
enum
default:"2"
Kickoff transaction initiating withdrawal process
MOVE_TO_VAULT
enum
default:"3"
Move-to-vault transaction (deposit confirmation)
PAYOUT
enum
default:"4"
Payout transaction for withdrawals
CHALLENGE
enum
default:"5"
Challenge transaction for dispute resolution
DISPROVE
enum
default:"6"
Disprove transaction responding to challenges
DISPROVE_TIMEOUT
enum
default:"7"
Disprove timeout transaction
REIMBURSE
enum
default:"8"
Reimbursement transaction
ALL_NEEDED_FOR_DEPOSIT
enum
default:"9"
Special identifier to request all transactions needed for a deposit
DUMMY
enum
default:"10"
Dummy transaction for testing
READY_TO_REIMBURSE
enum
default:"11"
Ready-to-reimburse state transaction
KICKOFF_NOT_FINALIZED
enum
default:"12"
Kickoff not finalized transaction
CHALLENGE_TIMEOUT
enum
default:"13"
Challenge timeout transaction
BURN_UNUSED_KICKOFF_CONNECTORS
enum
default:"14"
Burn unused kickoff connectors transaction
YIELD_KICKOFF_TXID
enum
default:"15"
Yield kickoff transaction ID
REPLACEMENT_DEPOSIT
enum
default:"17"
Replacement deposit transaction
LATEST_BLOCKHASH_TIMEOUT
enum
default:"18"
Latest blockhash timeout transaction
LATEST_BLOCKHASH
enum
default:"19"
Latest blockhash transaction
OPTIMISTIC_PAYOUT
enum
default:"20"
Optimistic payout transaction

NumberedTransactionType

Transaction types that occur multiple times per operation (indexed by number).
UNSPECIFIED_INDEXED_TRANSACTION_TYPE
enum
default:"0"
Unspecified indexed transaction type
WATCHTOWER_CHALLENGE
enum
default:"1"
Watchtower challenge transaction (one per watchtower)
OPERATOR_CHALLENGE_NACK
enum
default:"2"
Operator challenge negative acknowledgment
OPERATOR_CHALLENGE_ACK
enum
default:"3"
Operator challenge acknowledgment
ASSERT_TIMEOUT
enum
default:"4"
Assert timeout transaction
UNSPENT_KICKOFF
enum
default:"5"
Unspent kickoff transaction
MINI_ASSERT
enum
default:"6"
Mini assert transaction (multiple per BitVM proof)
WATCHTOWER_CHALLENGE_TIMEOUT
enum
default:"7"
Watchtower challenge timeout

Transaction Models

TransactionRequest

Request to create transactions for a specific deposit and kickoff.
deposit_outpoint
Outpoint
required
Deposit UTXO outpoint
kickoff_id
KickoffId
required
Kickoff identifier

RawSignedTx

Raw Bitcoin transaction in serialized format.
raw_tx
bytes
required
Serialized Bitcoin transaction bytes

RawSignedTxs

Collection of raw signed transactions.
raw_txs
repeated RawSignedTx
required
Array of raw signed transactions

SignedTxWithType

Signed transaction with its type identifier.
transaction_type
GrpcTransactionId
required
Transaction type identifier
raw_tx
bytes
required
Raw transaction bytes

SignedTxsWithType

Collection of signed transactions with their types.
signed_txs
repeated SignedTxWithType
required
Array of signed transactions with type information

RawTxWithRbfInfo

Raw transaction with Replace-By-Fee signing information.
raw_tx
bytes
required
Raw transaction bytes
rbf_info
RbfSigningInfoRpc
required
RBF signing information

SendTxRequest

Request to send a transaction with fee specification.
raw_tx
RawSignedTx
required
Raw signed transaction to send
fee_type
FeeType
required
Fee payment method

Fee Types

FeeType

Methods for paying transaction fees.
UNSPECIFIED
enum
default:"0"
Unspecified fee type
CPFP
enum
default:"1"
Child-Pays-For-Parent fee bumping
RBF
enum
default:"2"
Replace-By-Fee for fee bumping
NO_FUNDING
enum
default:"3"
No additional fee funding required

Transaction Metadata

TxMetadata

Metadata associated with a transaction for tracking and debugging.
deposit_outpoint
Outpoint
required
Associated deposit outpoint
operator_xonly_pk
XOnlyPublicKeyRpc
required
Operator’s x-only public key
round_idx
uint32
required
Round index
kickoff_idx
uint32
required
Kickoff index
tx_type
GrpcTransactionId
required
Transaction type identifier

Withdrawal Models

WithdrawParams

Parameters for withdrawal/payout transactions.
withdrawal_id
uint32
required
Withdrawal ID in Citrea
input_signature
bytes
required
User’s TapSighashType::SinglePlusAnyoneCanPay signature
input_outpoint
Outpoint
required
User’s UTXO to claim the deposit
output_script_pubkey
bytes
required
Withdrawal output’s script pubkey (signature is only valid for this pubkey)
output_amount
uint64
required
Withdrawal output’s amount in satoshis (signature is only valid for this amount)

WithdrawParamsWithSig

Withdrawal parameters with optional verification signature.
withdrawal
WithdrawParams
required
Core withdrawal parameters
verification_signature
string
Optional ECDSA signature from Citrea/aggregator for authentication

FinalizedPayoutParams

Parameters for finalized payout transactions.
payout_blockhash
bytes
required
Bitcoin blockhash for the payout
deposit_outpoint
Outpoint
required
Associated deposit outpoint

Example Usage

Transaction Request

{
  "deposit_outpoint": {
    "txid": {"txid": "<32_bytes>"},
    "vout": 0
  },
  "kickoff_id": {
    "operator_xonly_pk": "<32_bytes>",
    "round_idx": 1,
    "kickoff_idx": 0
  }
}

Signed Transaction with Type

{
  "transaction_type": {
    "normal_transaction": "MOVE_TO_VAULT"
  },
  "raw_tx": "<raw_bitcoin_tx_bytes>"
}

Numbered Transaction

{
  "transaction_type": {
    "numbered_transaction": {
      "transaction_type": "MINI_ASSERT",
      "index": 42
    }
  },
  "raw_tx": "<raw_bitcoin_tx_bytes>"
}

Build docs developers (and LLMs) love