Skip to main content

Tx

export interface Tx {
  addSignature(
    signature: Signature,
    verify?: boolean
  ): Tx
  addSignatures(
    signatures: Signature[],
    verify?: boolean
  ): Tx
  body: TxBody
  calcMinCollateral(
    params: NetworkParams,
    recalcMinBaseFee?: boolean
  ): bigint
  calcMinFee(params: NetworkParams): bigint
  calcSize(forFeeCalculation?: boolean): number
  clearMetadata(): Tx
  dump(): any
  hasValidationError: undefined
    | string
    | false
    | UplcRuntimeError
  id(): TxId
  isSmart(): boolean
  isValid(): boolean
  isValidSlot(slot: bigint): boolean
  kind: "Tx"
  metadata: undefined | TxMetadata
  recover(network: {getUtxo(id: TxOutputId): Promise<TxInput<SpendingCredential>>}): Promise<void>
  toCbor(forFeeCalculation?: boolean): number[]
  validate(
    params: NetworkParams,
    options?: TxValidationOptions
  ): void
  validateSignatures(): void
  validateUnsafe(
    params: NetworkParams,
    options?: TxValidationOptions
  ): Tx
  witnesses: TxWitnesses
}
Represents a Cardano transaction. For transaction-building, see TxBuilder instead.

Properties​

addSignature​

addSignature(
  signature: Signature,
  verify?: boolean
): Tx
Adds a signature created by a wallet. Only available after the transaction has been finalized. Optionally verifies that the signature is correct (defaults to true)

addSignatures​

addSignatures(
  signatures: Signature[],
  verify?: boolean
): Tx
Adds multiple signatures at once. Only available after the transaction has been finalized. Optionally verifies each signature is correct (defaults to true)

body​

body: TxBody

calcMinCollateral​

calcMinCollateral(
  params: NetworkParams,
  recalcMinBaseFee?: boolean
): bigint
Returns a quantity in lovelace

calcMinFee​

calcMinFee(params: NetworkParams): bigint
Returns a quantity in lovelace

calcSize​

calcSize(forFeeCalculation?: boolean): number
Number of bytes of CBOR encoding of Tx Is used for two things:

  • tx fee calculation
  • tx size validation

clearMetadata​

clearMetadata(): Tx
Creates a new Tx without the metadata for client-side signing where the client can't know the metadata before tx-submission.

dump​

dump(): any

hasValidationError​

hasValidationError: undefined
  | string
  | false
  | UplcRuntimeError
Indicates if a built transaction has passed all consistency checks.

  • null if the transaction hasn't been validated yet
  • false when the transaction is valid
  • a string with the error message if any validation check failed
  • a UplcRuntimeError in case of any UPLC script failure

id​

id(): TxId

isSmart​

isSmart(): boolean

isValid​

isValid(): boolean
Indicates if the necessary signatures are present and valid

isValidSlot​

isValidSlot(slot: bigint): boolean
Used by emulator to check if tx is valid.

kind​

kind: "Tx"

metadata​

metadata: undefined | TxMetadata

recover​

recover(network: {getUtxo(id: TxOutputId): Promise<TxInput<SpendingCredential>>}): Promise<void>
Restores input information after deserializing a CBOR-encoded transaction A serialized tx throws away input information This must be refetched from the network if the tx needs to be analyzed

toCbor​

toCbor(forFeeCalculation?: boolean): number[]
Serializes a transaction. Note: Babbage still follows Alonzo for the Tx size fee. According to https://github.com/IntersectMBO/cardano-ledger/blob/cardano-ledger-spec-2023-04-03/eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Tx.hs#L316, the isValid field is omitted when calculating the size of the tx for fee calculation. This is to stay compatible with Mary (?why though, the txFeeFixed could've been changed instead?)

validate​

validate(
  params: NetworkParams,
  options?: TxValidationOptions
): void
Throws an error if the tx isn't valid Checks that are performed:

  • size of tx <= params.maxTxSize
  • body.fee >= calculated min fee
  • value is conserved (minus what is burned, plus what is minted)
  • enough collateral if smart
  • no collateral if not smart
  • all necessary scripts are attached
  • no redundant scripts are attached (only checked if strict=true)
  • each redeemer must have enough ex budget
  • total ex budget can't exceed max tx ex budget for either mem or cpu
  • each output contains enough lovelace (minDeposit)
  • the assets in the output values are correctly sorted (only checked if strict=true, because only needed by some wallets)
  • inputs are in the correct order
  • ref inputs are in the correct order
  • minted assets are in the correct order
  • staking withdrawals are in the correct order
  • metadatahash corresponds to metadata
  • metadatahash is null if there isn't any metadata
  • script data hash is correct Checks that aren't performed:
  • all necessary signatures are included (must done after tx has been signed)
  • validity time range, which can only be checked upon submission

validateSignatures​

validateSignatures(): void
Throws an error if all necessary signatures haven't yet been added Separate from the other validation checks If valid: this.valid is mutated to true

validateUnsafe​

validateUnsafe(
  params: NetworkParams,
  options?: TxValidationOptions
): Tx
Validates the transaction without throwing an error if it isn't valid If the transaction doesn't validate, the tx's validationError will be set

witnesses​

witnesses: TxWitnesses