ORMA-IG credential submits a VaultDeposit and the transaction succeeds. A limited partner without one submits the exact same transaction for the same amount, and the ledger returns tecNO_AUTH. Orma is not consulted when that happens. No API of ours is in the path. The difference between a grade and a gate is that a gate does not require anyone to read the grade.
XLS-65 vaults and XLS-66 lending are not on Mainnet, so every vault referenced on this page is a Devnet vault (network ID 2,
wss://s.devnet.rippletest.net:51233, rippled 3.4.0-rc5). The two standards the gate is built from — XLS-70 credentials and XLS-80 permissioned domains — are live on Mainnet today. The vault underneath is what keeps this page Devnet-only.The four-transaction chain
Four transactions, signed by three different parties, none of whom has to trust the others:The ORMA-IG credential type
Credential types in XLS-70 are hex-encoded UTF-8 blobs of 1–64 bytes. Orma uses:
The credential is keyed to a bar, not to a facility. One credential is reusable across every domain that cites Orma’s issuer address. A per-facility credential would be a whitelist wearing a credential’s clothes.
Step 1: Issue the credential
tecNO_AUTH until step 2.
Step 2: The LP accepts
Step 3: The vault owner creates a domain
LedgerIndex of the PermissionedDomain node in AffectedNodes.
Orma signs nothing in this step. The vault owner cites Orma’s issuer address; Orma is not consulted and cannot decline. This is the correct shape for a rating: a prospectus can reference a rating the agency was never asked about. It also means Orma cannot sell placement in a domain — we do not control who lists us.
Step 4: Create the vault with the private flag
The measured outcome
Two limited partners, funded from the same faucet, depositing 20 XRP each into the same vault, submitted concurrently:
The second transaction was refused by the ledger, not by Orma.
Revocation is asymmetric by design
CredentialDelete removes the credential. The LP’s next deposit bounces. Their existing position is untouched and withdraws normally.
LoanBroker owner — who is necessarily the vault owner — holds discretion over other people’s money: they choose when a loss is recognised and in what order losses are realised, and both choices move value from investors to them. A rater who could revoke a credential and thereby trap an LP’s capital inside a vault would be a second party with exactly that shape of power, created by the tool built to expose the first. That would be a worse problem than the one being solved.
Symmetric revocation also inverts the incentive at the moment it matters most. A rater who downgrades a deteriorating facility should make it harder for new money to walk in, not harder for existing money to walk out. Entry-only revocation means the worst thing a hostile or mistaken rater can do is deny someone an allocation — a cost an LP can price. Being unable to redeem is not.
The revocation asymmetry is a property of XLS-70 and XLS-65 composing, not something Orma implements. There is no Orma code path that could make withdrawal conditional on a credential even if we wanted one. Orma verified it holds rather than assuming it, because the whole claim depends on it.
The three traps
Trap 1: DomainID is not on the Vault object
The obvious lookup — read theVault ledger entry and check for DomainID — returns undefined. The field lives on the share MPTokenIssuance, not on the Vault. An absent DomainID on the Vault reads identically to “open to everyone”, even when the vault is gated.
Orma’s gateStatus() function does the correct lookup:
Trap 2: engine_result is not the authoritative result
submit returns a provisional engine_result. Orma observed a provisional engine_result of tecNO_AUTH go on to validate as tesSUCCESS. On any other feature that is a nuisance; on this one it is the difference between “the ledger refused them” and “the ledger let them in”, reported with full confidence, in the wrong direction.
Always read the result from meta.TransactionResult on the validated transaction:
Trap 3: Phase rules mask the credential rule
A closed-ended vault has three phases. Two phase rules return different error codes that can be mistaken for evidence the gate is not working:VaultDepositoutside the Subscription window returnstecEXPIRED. The credential is never consulted.VaultWithdrawduring the Investment phase returnstecTOO_SOON, regardless of credentials.
tecNO_AUTH and tesSUCCESS mean what they appear to mean.
tecNO_AUTH tells you something about credentials. tecEXPIRED and tecTOO_SOON tell you something about the calendar. Know which you are reading before drawing conclusions about the gate.Checking if a vault is gated
UseGET /api/vaults/:vaultId/gate. This route performs the two extra ledger reads — the share issuance and the domain — that GET /api/vaults/:vaultId does not:
issuerNamed answers Orma’s own question — am I cited in this domain — without asking the vault owner. It is true here, and the domainOwner (rGFFSqqY1R3764FKF7crU5F6bYh9qaD45S) never signed anything of ours to make it so.
The note field is null when the gate is working correctly. It is non-null when the answer needs a caveat:
This route caches for 30 seconds. A domain changes when someone explicitly edits it, not on every ledger close.
What this gate does not do
Does not run on Mainnet
XLS-65 and XLS-66 are not on Mainnet, so the vault this gate protects cannot exist there yet. XLS-70 credentials and XLS-80 permissioned domains are already live on Mainnet — the enforcement half has a production path ahead of the measurement half.
Does not make the grade authoritative
A vault owner chooses whether to name Orma’s issuer address, and can remove us from the domain with a single
PermissionedDomainSet we never see coming. The grade binds only where someone has decided it should.Does not restrict withdrawal
By design, and no configuration changes this. There is no Orma code path that could make withdrawal conditional on a credential.
Does not certify the facility
The
ORMA-IG credential is issued to an LP and asserts what that LP may enter. The facility measurement is published separately as an XLS-47 Oracle object.