DeVault
A pawn shop with a public order book.
Created on 3rd September 2026
•
DeVault
A pawn shop with a public order book.
The problem DeVault solves
Pawnbroking is one of the oldest forms of credit and one of the least changed. If you need short-term cash against something you own, you walk into a shop, accept whatever single rate that shop offers, and walk out with a paper ticket. The shop holds your item, sets the price, and keeps the only record that the item is yours.
DeVault rebuilds that arrangement as a market. The receipt becomes an object in the borrower's own wallet, and lenders compete to fund a loan against it.
Title you actually hold: The pawn ticket is a Sui object in the borrower's wallet, not a row in our database. Whoever holds it is the owner of record, and nothing in the system can move it.
Competition instead of one quote: The borrower names the amount and the highest rate they will pay. Lenders bid by undercutting each other downward from that ceiling.
Rules enforced, not promised: Loan-to-value ceilings by item category, the maximum interest rate, and the grace period before default are all checked on chain at the moment of the transaction, not written into terms and conditions.
Money held, never custodied: A lender's offer escrows into a hold that can only fund that loan or return to them. Losing offers refund themselves by reading the listing's own status, needing nothing from us.
A way out for lenders: A funded position is a transferable object carrying its own terms, so a lender can sell it mid-loan instead of waiting for maturity. The borrower is not involved and their loan does not change.
Stablecoin settlement throughout: Every leg moves in USDC: offer escrow, disbursement, repayment, payoff, and secondary sales.
No gas, no crypto learning curve: Transactions are sponsored and sign-in works with a Google account, so a borrower never holds SUI, manages a seed phrase, or sees a wallet prompt they do not understand.
The goal is simple: make a pawn loan behave like a market, and make the ticket something the borrower actually holds.
Challenges we ran into
Most of our hard problems were not the lending logic. They came from the chain's own rules, and from errors that confidently pointed in the wrong direction.
zkLogin proofs are bound to one network: A zkLogin signature commits to a maxEpoch, and every Sui network counts epochs separately, so a proof made on mainnet can never verify against testnet. Our API checked against a single network fixed at boot, which locked out anyone whose wallet sat elsewhere. It now tries each allowed network until one accepts the proof, so nobody has to move their wallet just to sign in.
One line of error handling hid it: catch { return false; } collapsed an expired proof, a wrong network, and a timed-out full node into the same "invalid signature". That is also why it looked intermittent rather than broken: a rate-limited node was being reported to users as a bad signature, so retrying eventually worked. Unreachable now raises something different from invalid, and every attempt logs which network refused it and why.
A 404 that had nothing to do with the listing: Buying on the secondary market failed with "That is no longer here", while the listing was plainly still there. The API resolves the buyer's coin before it ever looks at the listing, and throws a not-found when no single coin covers the ask, which our frontend maps to that one message. An error's status code is part of its meaning, and reusing 404 for "you cannot afford this" sent us hunting a phantom.
You cannot add a Display after publishing: Showing the item's photograph in wallets needs a Display, which needs a Publisher, which needs a one-time witness that exists only inside init at publish time. Our package had shipped without one, and init never runs again on upgrade, so there was no route but a full republish under a new package ID.
Deployment that failed silently: Our Vercel config sat at the repository root while Vercel read it from the app directory, so the API rewrite was simply absent. Every call returned 404 with nothing in the build log to explain why, and the fix was making the repo carry the config in both places.
Tracks Applied (1)
PAYMENTS & STABLECOINS
Sui Foundation
Technologies used
