Skip to main content

frADA

Live on mainnet

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​

chainidwhat it is
frADABitcoin4:50052the alkane, plus its burn queue. Deployed in 0098eced…5915
frADA-AUTHBitcoin2:103101mint authority, held by the signer group
frADA-SIGILBitcoin2:103102limits and upgrade authority, held by SUBFROST's operator address, never the signer group
vaultCardanoaddr1w8a45tdfg0wnxtpcnuna7l4nez84m3n5w74ulvlsj63jlhgwqd6cra Plutus V3 script (hash fb5a2da943dd332c389f27df7eb3c88f5dc67477abcfb3f096a32fdd); its address holds the deposits and the vault's state UTxO
state NFTCardanopolicy ec11246196d74089807e01183c86b2889c562dcdcb995cceb8b17757, name frada-statemarks 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​

  1. Send ADA to the vault script address in a UTxO carrying an inline Deposit datum: your deposit intent (where the frADA goes on Bitcoin) and a Cardano refund address. ADA only: no native assets.
  2. 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.
  3. 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.

The burn burns every frADA its protostone receives

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.

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)

The payout fee pays the Cardano transaction fee, which the group covers.

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 doesn't decode;
  • it is the vault script itself, or the signer group's wallet;
  • the payout after the fee would be under Cardano's minimum UTxO for that output;
  • the payout after the fee is more than the vault's whole window cap.

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​

valuewhere it comes from
deposit minimum / maximum10 ADA / 100,000 ADAplanned launch values; the vault accepts any setting from 1 ADA to 1,000,000 ADA
vault payout cap100,000 ADA per 24 hplanned launch value; enforced by the vault script
alkane mint cap100,000 ADA per 144 blockscompiled default
alkane max burn100,000 ADAcompiled default
alkane hard ceilingsmint cap 400,000 ADA, max burn 400,000 ADAcompiled
mint fee0the mint program's default; the launch setting will be listed here
payout fee1 ADA, flatthe payout program's default; never below 0.5 ADA
bounce feeat most 1 ADAthe vault's hard bound; the launch value will be listed here
deposit depth30 Cardano blocks for the ingest, and 30 again for the mintdefault
burn confirmations3 Bitcoin blocksdefault

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​

situationwhat happens
your deposit carries a native asset, is out of range, or its intent is badbounced to your refund address, less the bounce fee
your deposit has no datum, or a datum that isn't a Depositit can never be spent: the ADA is stuck
your deposit has a hashed Deposit datumbounced, never ingested
the vault is pauseddeposits are still ingested; payouts wait until it is resumed
the burn is zero, above max burn, or to a malformed or testnet addressthe burn reverts; you keep the frADA
the burn's address is the vault or the group's wallet, the payout is under the minimum UTxO, or over the whole window capvoided; the operator and group may settle it later
the window's payout cap is used upthe payout waits for the next window

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:

stepchaintransactionwhat happened
frADA deployedBitcoin0098eced…59154:50052, frADA-AUTH 2:103101, frADA-SIGIL 2:103102 (block 971,342)
AUTH to the groupBitcoincd770d0e…d24efrADA-AUTH to the signer group; frADA-SIGIL kept by SUBFROST's operator
vault initializedCardano41e911d8…co-signed by the deployer and the operator, signed by the group: the state UTxO with 10 ADA and the frada-state NFT
1. depositCardanod0e38d9b…12 ADA to the vault with a Deposit datum
2. ingestCardanoc7b3b256…the group ingests it: deposit seq 0, treasury 22 ADA
3. mintBitcoinf766b572…aa0411,988,000 frADA (12 ADA less 0.10%) to the intent's script (block 971,377)
4. burnBitcoinf33e0de1…a50211,988,000 frADA burned to a Cardano enterprise address
5. payoutCardanoa061c87a…10,988,000 lovelace paid (11,988,000 − 1 ADA flat fee); the treasury keeps the fee