Skip to content

Transactions

The transaction lifecycle in Tholos — from creation through approval to broadcast.

Transactions in Tholos follow a structured lifecycle with built-in governance. Every transaction requires creation, approval, signing, and broadcasting — with the specific flow depending on whether the vault is Standard or Flex.

TypeDescriptionUse case
TransferSend native tokens or ERC-20/SPL tokensPayments, treasury movements
MessageSign an arbitrary messageOff-chain signatures, authentication
Contract interactionCall a smart contract functionDeFi, governance, staking
ERC-20 approveSet a token spending allowanceDEX approvals, protocol interactions
SwapToken swap via integrated DEX routingTrading, rebalancing
RawSubmit a pre-built raw transactionAdvanced or custom use cases

Every transaction moves through a defined state machine:

DRAFT → SUBMITTED → SUCCEEDED
→ FAILED
→ CANCELLED
→ EXPIRED
StateDescription
DraftTransaction has been created but not yet submitted for approval
SubmittedTransaction is awaiting approval from vault signers
SucceededTransaction was signed, broadcast, and confirmed on-chain
FailedTransaction failed during signing or broadcast
CancelledTransaction was explicitly rejected or cancelled
ExpiredTransaction was not approved within the allowed time window
  1. Create — an Initiator (or higher role) creates a transaction
  2. Approve — Signers review and approve or reject the transaction. A threshold number of approvals is required.
  3. Sign — once the approval threshold is met, the server automatically signs using MPC
  4. Broadcast — the signed transaction is broadcast to the blockchain network
  5. Confirm — the transaction is confirmed on-chain and the state updates to Succeeded
  1. Create — a vault member creates a transaction
  2. Join signing ceremony — all signers connect to the MPC signing room
  3. Sign — each signer contributes their key share to produce the signature via the MPC protocol
  4. Broadcast — the signed transaction is broadcast to the blockchain network
  5. Confirm — the transaction is confirmed on-chain

For Flex vaults, transactions are evaluated against active policies before they can be submitted. Policies can enforce rules like:

  • Spending limits (per-transaction or cumulative)
  • Allowed destination addresses (whitelist)
  • Required cooldown periods between transactions
  • Additional signer requirements for high-value transfers
Terminal window
# Transfer ETH
curl -X POST https://api.tholos.app/transaction/transfer \
-H "Authorization: Bearer $THOLOS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vaultId": 123,
"chain": "ethereum",
"to": "0xRecipientAddress...",
"amount": "1000000000000000000",
"tokenAddress": null
}'

See the Send a Transaction guide for a complete walkthrough.

Before submitting a transaction, you can estimate the network fee:

Terminal window
curl -X POST https://api.tholos.app/transaction/estimate-fee \
-H "Authorization: Bearer $THOLOS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"vaultId": 123, "chain": "ethereum", "to": "0x...", "amount": "1000000000000000000"}'
OperationMethodEndpoint
Create transferPOST/transaction/transfer
Create message signingPOST/transaction/message
Create contract interactionPOST/transaction/contract-interaction
Create ERC-20 approvePOST/transaction/erc20-approve
Create swapPOST/transaction/swap
Create raw transactionPOST/transaction/raw
Get transactionGET/transaction/{id}
Approve transactionPOST/transaction/{id}/approve
Reject transactionPOST/transaction/{id}/reject
Estimate feePOST/transaction/estimate-fee
Get challengeGET/transaction/{id}/challenge