What a Cardano vault is
The vault address is the hash of a native script, not a public key. The script is anatLeast
script: it lists one sig clause per owner, each naming that owner’s payment key hash, and requires
required of them to sign.
There are two scripts, not one. The vault address is a base address built from both:
The address is derived from both script hashes together. You need the payment script to spend and
the stake script to reproduce the exact address.
A vault created without stake keys has no stake script and uses an enterprise address instead. In
that case the Recovery Kit shows only the payment script, and the address is built from it alone.
Such a vault can never delegate; nothing else about recovery changes.
What you need
From your Recovery Kit, on the vault’s page:
And from the owners: enough recovery phrases to meet the threshold. A 2-of-3 vault needs two of
the three owners present, each deriving their own key.
The script file format
The saved.script files look like this: an atLeast with the threshold in required and one
sig per owner:
"type": "atLeast" with "required": 1, which is the form the chain
stores. That is correct and should not be rewritten as "type": "any".
The cosigner key
Each owner’s vault key is not their personal Cardano wallet key. It lives under CIP-1854, the multisig counterpart of CIP-1852:{account} is that vault’s account index, not your Cardano wallet
number.
The key derived at role 0, index 0 is the one whose hash appears in the payment script, and the one
that signs.
Rebuilding the address
Confirm you have the right material before touching a transaction.1
Take the script files
Either the saved
.script files, or JSON you have typed from the printed page in the shape
shown above.2
Rebuild the address from both scripts
--stake-script-file.3
Compare it to the vault address
The output must match the vault address in your Recovery Kit character for character. If it does
not, a key hash is wrong or the scripts were reordered. Stop and fix that before going further.
Deriving a signing key from a phrase
cardano-cli does not read a mnemonic. Converting a recovery phrase into a signing key file takes
the cardano-address tool, then a conversion step.
1
Recover the root key from the phrase
phrase.txt on an offline machine, as one line of space-separated words,
and delete it afterwards.If the account has a passphrase, this is where it is needed; check your tool version’s syntax
for supplying it, and verify the resulting key hash before trusting the result.2
Derive the CIP-1854 multisig payment key
0H in the third position with the vault’s own account index from the Recovery Kit.
The trailing 0/0 is role 0, index 0: the payment key. Role 2 (1854H/1815H/0H/2/0) is the
stake key.3
Check the key hash before you rely on it
4
Convert it to a cardano-cli signing key
Flag names in
cardano-cli and cardano-address have changed between releases, and cardano-cli
has since grown per-era command groups. Check --help on the version you actually have rather
than assuming these invocations are current. The derivation path and the key hash check above are
fixed; only the tooling around them moves.Spending from the vault
Each signature is produced independently and combined at the end. Owners never need to share their keys with each other.1
Find the vault's UTxOs
Query the address against a synced node, or an explorer. The Birthday slot from the Recovery
Kit is the earliest slot the vault could have received anything, so a scan can start there
rather than at genesis.
2
Build the transaction, spending under the script
The spending input is witnessed by the script: pass the payment script file alongside the input
(
--tx-in-script-file) so the node knows what the address’s payment credential resolves to.3
Each owner witnesses the same transaction body
tx.raw to the owners; each returns a witness file. The body must be byte-identical
for every owner, or the witnesses will not combine.4
Assemble and submit
required witnesses. Fewer, and the transaction is rejected.