跳到主要内容

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.

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 hash 472b0786b4e93c5744ae5b975bebf17dee8d688a73e2184553802cb9, the group's wallet addr1v9rjkpuxkn5nc46y4edewklt7977artg3fe7yxz92wqzewgv7qprl), 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​

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 hcurrent setting, enforced by the vault script; the live value is in the state datum
alkane mint cap100,000 ADA per 144 blockscompiled default
alkane max burn100,000 ADAcurrent setting; the live value is GetLimits word 4
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
treasury floor2 ADAthe payout program; a payout that would take the treasury below it waits
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, not version-1 shaped, or to a Byron, reward, reserved-type or testnet addressthe 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 UTxOvoided; 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 ADAthe 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:

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