This document describes adding a new output type to transactions called Collateral Outputs.
As of Alonzo, transactions that call Plutus smart contracts are required to put up collateral to cover the potential cost of smart contract execution failure. Inputs used as collateral have the following properties:
Additionally, there cannot be more thanmaxColInputs (protocol parameter) inputs and the inputs have to cover a percentage of the fee defined bycollateralPercent (protocol parameter)
However,
If phrase-2 verification fails, we can send outputs to a special output marked as the collateral output.
There are two ways to create collateral outputs
TxOut = Addr × Value × DataHash? × Source?
where source (optional for backwards compatibility) is an enum0 = regular output, 1 = collateral output
.Option #1 provides the best backwards compatibility because we don't expect phase-2 validation to be a common occurrence and so wallets that (due to not being updated) never check collateral outputs will still in the overwhelming majority of cases return the correct result.
Additionally, this requires updating the collateral requirement.
If no collateral output is specified (and therefore no tokens are in the collateral input), then we keep the old definition
ubalance (collateral txb ◁ utxo) ≥ quot (txfee txb * (collateralPercent pp)) 100
However, if collateral output is specified, then
sum(collateral_input) = sum(collateral_output) + collateral_consumed
Wherecollateral_consumed
is equal to the old formula (quot (txfee txb * (collateralPercent pp)) 100
). Note that when collateral is consumed, any certificate, etc. in the transaction is ignored so they have no impact on the change calculation.Some use-cases like hardware wallets, who do not have access to the content of the collateral inputs, cannot easily check if the collateral is balanced. Similar to how we specify an explicit fee as part of the transaction body to tackle this problem, the transaction body also needs a new field that explicitly specified how much collateral will be consumed in the case of phase-2 validation failure.
This CIP is licensed underCC-BY-4.0.