Transaction Workflow

ODATANO follows a strict Build → Sign → Submit flow.
The server never holds private keys.

Build → Sign → Submit transaction flow \

  • Build (server) returns unsignedTxCbor, txBodyHash, fee, buildId.
  • Sign (client / wallet / HSM) using the unsigned CBOR.
  • Submit (server) via:
    • SubmitTransaction(buildId, signedTxCbor)
    • SubmitSignedTransaction(signedTxCbor, network).

There are two possible builder engines: csl and buildooor for transaction building available.
Make sure to use Buildooor for any Plutus / mint / ref-script / validity-bound work

Signing Methods

MethodsignerTypeKey LocationNotes
Cardano CLIcardano-cliFile system (.skey)Backend automation
CIP-30 walletbrowser-walletBrowser extensionNami, Eternl, Lace, Yoroi, Flint
Hardware wallethardware-walletLedger / TrezorVia wallet adapter
HSM (PKCS#11)-HSM chipServer-side, key never leaves chip

External signing flow (4 actions):
1.BuildXXXCreateSigningRequestclient signsSubmitVerifiedTransaction.
2. HSM flow (2 actions): BuildXXXSignAndSubmitWithHsm.
HSM details + setup: Security › HSM.

Build Action Parameters

Required = bold. Optional fields are tagged where they apply only to a specific builder or feature.

BuildSimpleAdaTransaction

ParamTypeNotes
senderAddressStringBech32 address with funds
recipientAddressStringBech32 address ( overridden when lockOnScript=true )
lovelaceAmountIntegerAmount to send / lock
changeAddressbech32Defaults to sender
outputDatumJsonStringPlutusData JSON - required when sending to a script address
assetsJsonStringAssets as Json String [{unit, quantity}]
forceInputsJsonStringUTxOs that MUST be consumed
validatorScriptStringPlutus validator hex (used to derive script address)
scriptParamsJsonStringPlutusData params for parameterized validators
lockOnScriptBooleanRoute output to derived script address
referenceScriptHexStringCIP-33 ref-script
validityStartMsStringPosix-ms (Buildooor only)
validityEndMsStringPosix-ms (Buildooor only)

BuildTransactionWithMetadata

ParamTypeNotes
senderAddressStringBech32 address with funds
recipientAddressStringBech32 recipient address
lovelaceAmountIntegerAmount to send
metadataJsonStringObject keyed by numeric label
changeAddressStringDefaults to sender

BuildMultiAssetTransaction

ParamTypeNotes
senderAddressStringBech32 address with funds
recipientAddressStringBech32 address ( overridden when lockOnScript=true )
lovelaceAmountIntegerAmount to send / lock
assetsJsonString[{unit, quantity}]
changeAddressStringDefaults to sender
outputDatumJsonStringPlutusData JSON - required when sending to a script address
referenceScriptHexStringCIP-33 ref-script
validityStartMsStringPosix-ms (Buildooor only)
validityEndMsStringPosix-ms (Buildooor only)

BuildMintTransaction

ParamTypeNotes
senderAddressStringBech32 address with funds
recipientAddressStringBech32 address ( overridden when lockOnScript=true )
lovelaceAmountIntegerAmount to send / lock
mintActionsJsonString[{assetUnit, quantity}] (negative = burn)
mintingPolicyScriptStringCBOR hex
requiredSignersJsonString28-byte hex key hashes for extra_signatories
scriptParamsJsonStringPlutusData params for parameterized validators
inlineDatumJsonStringParameterized validators / state machines
mintRedeemerJsonStringParameterized validators / state machines
lockOnScriptBooleanRoute output to derived script address
forceInputsJsonStringOne-shot mint seeds
referenceInputsJsonStringCIP-31 ref inputs (Buildooor only)
metadataJsonStringCIP-20 / label-674
referenceScriptHexStringCIP-33
validityStartMsStringPosix-ms (Buildooor only)
validityEndMsStringPosix-ms (Buildooor only)

BuildPlutusSpendTransaction

ParamTypeNotes
senderAddressStringBech32 address with funds
recipientAddressStringBech32 address ( overridden when lockOnScript=true )
lovelaceAmountIntegerAmount to send / lock
validatorScriptStringCBOR hex
scriptTxHashString64-char hex
scriptOutputIndexIntegeroutputindex of script output index
redeemerJsonStringSupports __INPUT_IDX:txHash#n__ (Buildooor only)
datumJsonStringOnly for hash-based datums
requiredSignersJsonString28-byte hex key hashes for extra_signatories
scriptParamsJsonStringPlutusData params for parameterized validators
inlineDatumJsonStringParameterized validators / state machines
lockOnScriptBooleanRoute output to derived script address
forceInputsJsonStringBesides the script UTxO
extraOutputsJsonString[{address, lovelaceAmount, assets?, inlineDatumJson?, referenceScriptHex?}]
mintActionsJsonStringCombined spend+mint
mintingPolicyScriptStringCombined spend+mint
mintRedeemerJsonStringCombined spend+mint
referenceInputsJsonStringCIP-31 ref inputs (Buildooor only)
referenceScriptHexStringCIP-33
validityStartMsStringPosix-ms (Buildooor only)
validityEndMsStringPosix-ms (Buildooor only)

SetCollateral

ParamTypeNotes
addressstringbech32

Submission

ActionParams
SubmitTransactionbuildId: UUID, signedTxCbor: String
SubmitSignedTransactionsignedTxCbor: String, network: String(10) (mainnet / preview / preprod)
CheckSubmissionStatusbound on TransactionSubmissions(id)

Utility actions (v1.7.5, no network call)

ActionParamsReturns
DeriveScriptAddressvalidatorScript, scriptParamsJson?, network?{ scriptAddress, scriptHash }
ExtractPaymentKeyHashaddress{ paymentKeyHash }

For Plutus Smart Contract details: Plutus & Smart Contracts.

Examples