The same invoice can't be pledged twice.
A public lien registry that only a confidential workflow can write to. Not us, not a lender, not the business asking for money.
No account. It reads the chain from your browser.
One receivable, three verdicts
Arc Testnet · chain 5042002Invoice claim recorded
Verified against the accounting system, screened, confirmed by the debtor, underwritten.
Encumberedblock 61,685,965This claim is already pledged
A live lien covers it. The registry does not disclose anything further about that lien.
Refused · 7 of 7resubmissionAdvance repaid, lien released
The escrow settled and the receivable is free to finance again.
Releasedblock 61,687,960
A replay of the cycle recorded on Arc Testnet between blocks 61,685,965 and 61,687,960. No lien is active right now.
Built on the infrastructure it depends on
- ChainlinkConfidential workflow in a TEE
- Arc by CircleUSDC-native settlement
- PrivyOrganization wallets and policies
Every side of the deal, one registry.
Record, refuse, fund and verify, each from its own surface.
Registry
Anyone can ask whether a receivable is already pledged, straight from the chain.
statusOf(lienId)
Confidential verification
The claim is checked inside an enclave. Only the verdict leaves it.
- Invoice found in the accounting system
- Sanctions screening clear
- No collision in the registry
- Debtor confirmation signed
- Underwritten by fixed rules
Fuzzy collision check
A reformatted duplicate still collides. Seven fields compared, six are enough.
Organization wallets
A company signs up with a treasury, and its own policy refuses what it should.
Pool
Investors fund advances in USDC and redeem what the pool holds in cash.
SDK
Check a lien in three lines, without going through our app at all.
npm install caplane-sdk
import { createCaplaneClient } from 'caplane-sdk'
const client = createCaplaneClient({ rpcUrls: [RPC_URL], registry: '0xe7170ee0ce4cab4593970ef5c4ebf7d0d62ae19b', quorum: true })
await client.statusOf(lienId)What you can switch off, and what you cannot.
Most of this system is disposable. The indexer, the tool server, the adversarial worker and these pages hold no authority: stop all four and a lien reads exactly the same, because the public lookup reads the chain from your own browser. What is left is the part that cannot be switched off — one entry point with no owner, an enclave where the claim is decided, and a registry that accepts a write only from the network's own forwarder.
One piece sits between: the confirmation service resolves the debtor's address from the accounting ledger and never accepts one from the caller. The enclave cannot prove the key that signed belongs to the debtor, so the link arriving at an address only the ledger knows is the whole anchor. It is the weakest link, and it is named rather than hidden.
Built for everyone who touches a receivable.
For businesses
Get an advance without handing over your customer list.
The invoice is encrypted in your browser before it leaves. Your company gets its own account with a treasury policy; there is no wallet to install.
Submit a claim →For financiers
Know a receivable is free before you fund it.
Ask the registry directly. If another lender already holds a lien, it says so, and says nothing about who they are or what the invoice was.
Check a lien →For developers
Read any lien without trusting our servers.
The SDK queries two RPCs and refuses a contract whose workflow name is not the frozen one. It never calls a caplane.xyz host.
Install the SDK →Verify it yourself
Every claim on this page has a receipt.
4 contracts, verified, no owner
CaplaneRegistry, CaplaneInbox, CaplanePool, CaplaneEscrow — full-match verified on Arc Testnet. None has an owner, a pause, or an upgrade path.
295 tests, 100% branch coverage
138 contract tests plus 157 unit tests, every branch of all four contracts covered.
One full cycle, already on chain
A lien was recorded at block 61,685,965, a second submission was rejected 7-of-7 for collision, and the first lien was released at block 61,687,960.
Fuzzy match, measured: 0.111%
Across 43 real invoices from Xero's Demo Company (903 pairs), the false-match rate at the shipped threshold is 0.111% (95% CI upper bound 0.524%).
“Nobody can alter an entry, including us.”
The registry has no owner, no pause and no upgrade path. One line proves it:
! grep -q onlyOwner contracts/src/CaplaneRegistry.sol && echo "no owner, no admin, no pause"
Declared, not buried.
Trust rests on the enclave
Confidentiality depends on hardware attestation, not on pure cryptography. We say so rather than hide it.
One receivable, pledged and re-pledged
The registry holds a single lien. It was recorded, released, and recorded again — everything shown here happened to that one claim.
Our API is disposable
If api.caplane.xyz goes dark, every lien stays readable from a block explorer.