frADA
frADA is live: the signer group ingests deposits into the vault on Cardano, mints frADA on Bitcoin and pays burns out in ADA. The first full cycle ran on 14 October 2026 (see Mainnet lifecycle). Start with a small amount, and check the vault address below before you send anything.
frADA is ADA held in custody by a Plutus V3 vault script on Cardano, and represented on Bitcoin as an alkane. 1 frADA unit = 1 lovelace: frADA has the same 6 decimals as ADA.
Contracts
| chain | id | what it is | |
|---|---|---|---|
| frADA | Bitcoin | 4:50052 | the alkane, plus its burn queue. Deployed in 0098eced…5915 |
| frADA-AUTH | Bitcoin | 2:103101 | mint authority, held by the signer group |
| frADA-SIGIL | Bitcoin | 2:103102 | limits and upgrade authority, held by SUBFROST's operator address, never the signer group |
| vault | Cardano | addr1w8a45tdfg0wnxtpcnuna7l4nez84m3n5w74ulvlsj63jlhgwqd6cr | a Plutus V3 script (hash fb5a2da943dd332c389f27df7eb3c88f5dc67477abcfb3f096a32fdd); its address holds the deposits and the vault's state UTxO |
| state NFT | Cardano | policy ec11246196d74089807e01183c86b2889c562dcdcb995cceb8b17757, name frada-state | marks the one state UTxO; there is exactly one |
The vault keeps all of its state in one state UTxO at the vault address, identified by an NFT named frada-state. That UTxO holds the treasury (ADA only) and an inline datum with the vault's state: the group's and the operator's key hashes, the deposit counter, the burn cursor, the pause flag, the limits, the bounce fee and any queued change.
Depositing ADA
- Send ADA to the vault script address in a UTxO carrying an inline
Depositdatum: your deposit intent (where the frADA goes on Bitcoin) and a Cardano refund address. ADA only: no native assets. - The group ingests it. Once your deposit is 30 blocks deep, the group spends it together with the state UTxO in an
Ingest. The vault script checks the deposit, adds its ADA to the treasury and gives it the next deposit sequence number. Ingests carry up to 40 deposits and run while the vault is paused too. - The group mints frADA to the intent's recipient script on Bitcoin, less the mint fee, once the ingest transaction is itself 30 blocks deep.
The deposit intent (at most 512 bytes) is frFB's gateway intent, version 1 or 2, with a recipient script of 1–75 bytes. Only its recipient script and its action are read; the refund key, CSV and sweep fee fields are skipped, because the Cardano refund is the datum's refund address. The first version delivers every action as plain frADA. Details: developer reference.
The datum, as Plutus data: Deposit = Constr 0 [ intent : bytes, refund : Address ], with the ledger's standard Address encoding. It must be inline. Plutus data byte strings longer than 64 bytes must be written as an indefinite-length string of 64-byte chunks (5f 5840… ff); a typical intent with a taproot recipient is 72 bytes, so this applies. Some libraries emit one long string, which the node refuses.
Bounces
A deposit that can't be accepted is bounced: paid back to its refund address with every native asset it carried and its ADA less the vault's bounce fee (at most 1 ADA). The bounce output carries the deposit's own output reference as its datum, so one bounce can never stand in for two deposits. A deposit is bounced if:
- it carries any native asset besides ADA;
- its ADA is below the minimum or above the maximum deposit;
- its intent is over 512 bytes, can't be decoded, names a recipient script that can't be paid, or names the signer group's own script.
A deposit too small to cover the bounce fee and Cardano's minimum UTxO for the refund is bounced with a subsidy from the group of up to 1 ADA, or else left at the vault address.
Some UTxOs can never be spent. A UTxO at the vault address with no datum, or with a datum that is not a Deposit, can't be ingested or bounced by anyone. One with a hashed (not inline) Deposit datum can be bounced but not ingested. Always attach an inline Deposit datum.
Redeeming: burn frADA for ADA
Burn frADA on Bitcoin with a release intent naming a Cardano address:
cellpack [4, 50052, 88, len, w0, …, w(n-1)]
receives exactly the frADA to burn, and no other alkane
release intent v1 = 0x01 ‖ addr_len (1 byte) ‖ raw Cardano address ‖ action (empty = plain)
The release intent is at most 256 bytes. Its usable length is 31–256 bytes: the shortest valid one is an enterprise address (29 bytes) plus the two header bytes. len is its length, and the words w0… are its bytes, 16 per word, little-endian. Encoding, with worked examples, is in the developer reference.
An edict in the burn protostone does not limit it. Spend a UTXO holding exactly the frADA to burn and no other alkane, or put an edict-only protostone before the burn that sends it the exact amount. See Getting the amount right, which has a worked frADA example.
The address must be a mainnet Shelley payment address: base (57 bytes), enterprise (29 bytes) or pointer (32–59 bytes). The burn reverts, and you keep your frADA, on:
- a zero amount, or one above the max burn;
- a release intent that isn't version-1 shaped;
- a Byron, reward, reserved-type or testnet address;
- non-zero words after the intent;
- a second burn in the same protostone.
Read the max burn before you sign (GetLimits, opcode 22 on 4:50052, word 4; see Reading a view) and don't build a larger burn: it reverts, and you still pay the Bitcoin fee.
Payout
After the burn has 3 Bitcoin confirmations, the group pays the ADA from the treasury in a Payout: burns strictly in Bitcoin order, up to 20 per transaction, within the vault's window cap.
paid = burned − flat payout fee (1 ADA by default, no percentage on top)
The payout fee stays in the treasury and covers the Cardano transaction fee, which the group's wallet pays. That wallet also posts the collateral and takes the change.
A payout waits, and is not voided, when:
- the window's payout cap has no room left for it: it waits until the next window opens or the cap goes back up;
- it would take the treasury under 2 ADA.
Payouts run strictly in order, so the burns after a waiting payout wait too. Any burn the alkane accepts fits in one window: the payout signers don't run unless the max burn less the payout fee is at most the largest payout they make, and that largest payout is at most the vault's cap.
How long a payout may wait. The payout window is in the vault's state datum, on the UTxO at the vault address that holds the frada-state NFT under policy ec11246196d74089807e01183c86b2889c562dcdcb995cceb8b17757 (match the policy, not just the name). Fields 7 to 10 of its inline datum's Constr 0, counting from 0, are cap (lovelace), window_ms, window_start (POSIX milliseconds) and window_spent (lovelace). A window starts at the first payout after the previous window closed. While now is before window_start + window_ms, the room left is cap - window_spent; after that, the whole cap is open. No alkane read gives this: the window in the alkane's GetLimits is the Bitcoin mint window.
Burns that are voided
The alkane only checks the address's shape. A burn it accepts but the group can't pay is voided: the vault's cursor passes it and nothing is paid, though the frADA is already burned. This happens when:
- the release address passes the alkane's shape check but can't be decoded as a Cardano address;
- its payment part is the vault script (hash
fb5a2da943dd332c389f27df7eb3c88f5dc67477abcfb3f096a32fdd) or the signer group's key (key hash472b0786b4e93c5744ae5b975bebf17dee8d688a73e2184553802cb9, the group's walletaddr1v9rjkpuxkn5nc46y4edewklt7977artg3fe7yxz92wqzewgv7qprl), whatever its stake part. No other payment credential is voided: the group has no other fee, collateral or change address; - the payout after the fee would be under Cardano's minimum UTxO for that output.
The minimum UTxO is computed for each payout from Cardano's live protocol parameters: (160 + the output's CBOR size) * coinsPerUTxOByte. With coinsPerUTxOByte at 4,310 lovelace (today), a plain ADA output needs about 0.858 ADA to an enterprise address and about 0.978 ADA to a base address. With the 1 ADA fee, a burn of 2 frADA (2,000,000 units) or more clears both.
The vault lets the operator and the group together settle a voided burn later, paying it to an address the operator approves. Settling isn't automatic: check the address and amount before you burn.
Fees, limits and confirmations
| value | where it comes from | |
|---|---|---|
| deposit minimum / maximum | 10 ADA / 100,000 ADA | planned launch values; the vault accepts any setting from 1 ADA to 1,000,000 ADA |
| vault payout cap | 100,000 ADA per 24 h | current setting, enforced by the vault script; the live value is in the state datum |
| alkane mint cap | 100,000 ADA per 144 blocks | compiled default |
| alkane max burn | 100,000 ADA | current setting; the live value is GetLimits word 4 |
| alkane hard ceilings | mint cap 400,000 ADA, max burn 400,000 ADA | compiled |
| mint fee | 0 | the mint program's default; the launch setting will be listed here |
| payout fee | 1 ADA, flat | the payout program's default; never below 0.5 ADA |
| treasury floor | 2 ADA | the payout program; a payout that would take the treasury below it waits |
| bounce fee | at most 1 ADA | the vault's hard bound; the launch value will be listed here |
| deposit depth | 30 Cardano blocks for the ingest, and 30 again for the mint | default |
| burn confirmations | 3 Bitcoin blocks | default |
Tightening a limit is instant. Raising one waits 144 Bitcoin blocks in the alkane, or the vault's timelock (at least 24 hours) with the operator's co-signature in the vault.
What can go wrong
| situation | what happens |
|---|---|
| your deposit carries a native asset, is out of range, or its intent is bad | bounced to your refund address, less the bounce fee |
your deposit has no datum, or a datum that isn't a Deposit | it can never be spent: the ADA is stuck |
your deposit has a hashed Deposit datum | bounced, never ingested |
| the vault is paused | deposits are still ingested; payouts wait until it is resumed |
| the burn is zero, above max burn, not version-1 shaped, or to a Byron, reward, reserved-type or testnet address | the burn reverts; you keep the frADA |
| the burn's address doesn't decode, has the vault's or the group's payment part, or the payout is under the minimum UTxO | voided; the operator and group may settle it later |
| the window's payout cap has no room for the payout, or it would take the treasury under 2 ADA | the payout waits, and the burns after it wait too |
Security, as designed
frADA follows the model in What you trust, with the same governance matrix as the frSOL vault:
- The group alone ingests deposits, pays burns in order within the window cap, voids an unpayable burn, tightens a limit, pauses, and cancels a queued change other than a group replacement.
- The operator alone can pause and cancel any queued change.
- The group and the operator together resume, settle a voided burn, and queue changes that add risk: raising a limit, changing the timelock, replacing the group, or migrating the vault to a new script (Plutus scripts can't be upgraded in place). Each waits a timelock of at least 24 hours; replacing a group without its cooperation waits 72 hours.
- Never pay twice. The vault records the highest burn it has ever paid. If the cursor is ever moved back, a payout of any burn at or below that mark needs the operator too, so the group alone can never pay a burn twice.
- Reads come from at least three independent Cardano API operators, which must agree.
A risk specific to Cardano: everything goes through the single state UTxO, so a compromised group could keep spending it every block to race the operator's pause. The per-window payout cap bounds what that can cost.
Mainnet lifecycle
The deployment and the first full cycle on 13–14 October 2026:
| step | chain | transaction | what happened |
|---|---|---|---|
| frADA deployed | Bitcoin | 0098eced…5915 | 4:50052, frADA-AUTH 2:103101, frADA-SIGIL 2:103102 (block 971,342) |
| AUTH to the group | Bitcoin | cd770d0e…d24e | frADA-AUTH to the signer group; frADA-SIGIL kept by SUBFROST's operator |
| vault initialized | Cardano | 41e911d8… | co-signed by the deployer and the operator, signed by the group: the state UTxO with 10 ADA and the frada-state NFT |
| 1. deposit | Cardano | d0e38d9b… | 12 ADA to the vault with a Deposit datum |
| 2. ingest | Cardano | c7b3b256… | the group ingests it: deposit seq 0, treasury 22 ADA |
| 3. mint | Bitcoin | f766b572…aa04 | 11,988,000 frADA (12 ADA less 0.10%) to the intent's script (block 971,377) |
| 4. burn | Bitcoin | f33e0de1…a502 | 11,988,000 frADA burned to a Cardano enterprise address |
| 5. payout | Cardano | a061c87a… | 10,988,000 lovelace paid (11,988,000 − 1 ADA flat fee); the treasury keeps the fee |