cardano/transaction
Types
An output Datum
.
Constructors
-
NoDatum
-
DatumHash(DataHash)
A datum referenced by its hash digest.
-
InlineDatum(Data)
A datum completely inlined in the output.
An Input
made of an output reference and, the resolved value associated with that output.
Constructors
-
Input { output_reference: OutputReference, output: Output }
A transaction Output
, with an address, a value and optional datums and script references.
Constructors
-
Output { address: Address, value: Value, datum: Datum, reference_script: Option<ScriptHash>, }
An OutputReference
is a unique reference to an output on-chain. The output_index
corresponds to the position in the output list of the transaction (identified by its id)
that produced that output
Constructors
-
OutputReference { transaction_id: Hash<Blake2b_256, Transaction>, output_index: Int, }
A type-alias for Redeemers, passed to scripts for validation. The Data
is
opaque because it is user-defined and it is the script’s responsibility to
parse it into its expected form.
Alias
Redeemer = Data
Characterizes the script purpose.
Constructors
-
Mint(PolicyId)
For scripts executed as minting/burning policies, to insert or remove assets from circulation. It’s parameterized by the identifier of the associated policy.
-
Spend(OutputReference)
For scripts that are used as payment credentials for addresses in transaction outputs. They govern the rule by which the output they reference can be spent.
-
Withdraw(Credential)
For scripts that validate reward withdrawals from a reward account.
The argument identifies the target reward account.
-
Publish { at: Index, certificate: Certificate }
Needed when delegating to a pool using stake credentials defined as a custom script. This purpose is also triggered when de-registering such stake credentials.
The Int is a 0-based index of the given
Certificate
incertificates
. -
Vote(Voter)
Voting for a type of voter using a governance action id to vote yes / no / abstain inside a transaction.
The voter is who is doing the governance action.
-
Propose { at: Index, proposal_procedure: ProposalProcedure }
Used to propose a governance action.
A 0-based index of the given
ProposalProcedure
inproposal_procedures
.
A Cardano Transaction
, as seen by on-chain scripts.
Note that this is a representation of a transaction, and not the 1:1 translation of the transaction as seen by the ledger. In particular, on-chain scripts can’t see inputs locked by bootstrap addresses, outputs to bootstrap addresses or just transaction metadata.
Constructors
-
Transaction { inputs: List<Input>, reference_inputs: List<Input>, outputs: List<Output>, fee: Lovelace, mint: Value, certificates: List<Certificate>, withdrawals: Pairs<Credential, Lovelace>, validity_range: ValidityRange, extra_signatories: List<VerificationKeyHash>, redeemers: Pairs<ScriptPurpose, Redeemer>, datums: Dict<DataHash, Data>, id: TransactionId, votes: Pairs<Voter, Pairs<GovernanceActionId, Vote>>, proposal_procedures: List<ProposalProcedure>, current_treasury_amount: Option<Lovelace>, treasury_donation: Option<Lovelace>, }
.withdrawals
Withdrawals are ordered by ascending Credential. Yet, note that
Script
credentials are treated as lower values thanVerificationKey
credentials.
.redeemers
Redeemers are ordered by ascending ScriptPurpose.
.votes
Votes are ordered by ascending Voter and GovernanceActionId.
First constructor variants in a type are treated as lower indices; except for Credential whereScript
credentials are treated as lower values thanVerificationKey
credentials.
Alias
TransactionId = Hash<Blake2b_256, Transaction>
An interval of POSIX time, measured in number of milliseconds since 1970-01-01T00:00:00Z.
Alias
ValidityRange = Interval<Int>
Constants
A placeholder / empty Transaction
to serve as a base in a transaction
builder. This is particularly useful for constructing test transactions.
Every field is empty or null, and we have in particular:
use aiken/interval
transaction.placeholder.id ==
#"0000000000000000000000000000000000000000000000000000000000000000"
transaction.placeholder.validity_range == interval.everything
Functions
Querying
Find an input by its OutputReference
. This is typically used in
combination with the Spend
ScriptPurpose
to find a script’s own
input.
validator {
spend(datum, redeemer, my_output_reference, self) {
expect Some(input) =
self.inputs
|> transaction.find_input(my_output_reference)
}
}
find_datum(
outputs: List<Output>,
datums: Dict<DataHash, Data>,
datum_hash: DataHash,
) -> Option<Data>
Find a Datum
by its hash, if present. The function looks first for
datums in the witness set, and then for inline datums if it doesn’t find any in
witnesses.
Find an input by its OutputReference
. This is typically used in
combination with the Spend
ScriptPurpose
to find a script’s own
input.
validator {
spend(datum, redeemer, my_output_reference, self) {
expect Some(input) =
self.inputs
|> transaction.find_input(my_output_reference)
}
}
find_datum(
outputs: List<Output>,
datums: Dict<DataHash, Data>,
datum_hash: DataHash,
) -> Option<Data>
Find a Datum
by its hash, if present. The function looks first for
datums in the witness set, and then for inline datums if it doesn’t find any in
witnesses.