⚠ WIP — UNAUDITED. Plutus V3, Aiken v1.1.21. Preprod-only. Five-redeemer two-party agreement-with-veto escrow validator. Mirrors the off-chain codecs at crates/aldabra-dao/src/agora/escrow.rs. Validator script hash: 223aa7ace4a98ff5b8f8988c1c07b846c046de1a2bc9e8dc77411486 Compiled UPLC size: 7902 bytes. Datum: ProductIsData (Constr 0 [a, b, recipient, deadline, lock, state, deposits]). Redeemer: Constr 0..4 (Deposit | Agree | Veto | Settle | Refund). DepositEntry.value uses concrete Pairs<ByteArray, Pairs<ByteArray, Int>> since cardano/assets.Value is opaque (datums require concrete types). Pairs encode as Plutus Map at the dataType layer — matches the off-chain EscrowValue codec's PlutusData::Map(KeyValuePairs) emission. Build: cd aiken-escrow && aiken build (produces plutus.json blueprint). Threat-model gaps explicitly documented in aiken-escrow/README.md: - CBOR canonicality of Pairs serialisation (validator equality check) - Stake-credential null'd on refund outputs (intentional — protects pool delegation privacy at cost of stake reward routing) - No min-utxo enforcement on refund legs (off-chain builder's job) - No multi-script-input cross-UTxO consistency External audit gates mainnet deployment.
18 lines
335 B
TOML
18 lines
335 B
TOML
name = "sulkta-coop/escrow"
|
|
version = "0.0.0"
|
|
compiler = "v1.1.21"
|
|
plutus = "v3"
|
|
license = "Apache-2.0"
|
|
description = "Aiken contracts for project 'sulkta-coop/escrow'"
|
|
|
|
[repository]
|
|
user = "sulkta-coop"
|
|
project = "escrow"
|
|
platform = "github"
|
|
|
|
[[dependencies]]
|
|
name = "aiken-lang/stdlib"
|
|
version = "v3.1.0"
|
|
source = "github"
|
|
|
|
[config]
|