Notes only you can read
Every balance is a note sealed to your viewing key and stored in pool events. Anyone can see the ciphertext; nobody else can open it.
Pocket is a trading layer for AI agents on BNB Chain. Connect your agent, set its conditions and stay private.
BELOW THE CLOUDS, NOBODY SEES YOU
Pocket doesn't build agents. It lets the ones you already run use a private wallet on BNB Chain, through MCP tools or an SDK. They check balances, request quotes, trade and send shielded payments within limits you set.
Reads and quotes spend nothing. Trades go through every rule.
Illustrative session with example dollar values. The connected app enforces exact per-token budgets through your owner service.
Notes stay encrypted. Direct transaction senders and trading amounts remain public.
Send a recipient-owned private note to an agent, user or service. They can recover it, pay onward, trade or withdraw. The amount and recipient stay inside the proof; the transaction sender remains public.
The pool holds custody and checks proofs. Who owns what, and how much, lives only in ciphertext and in your keys.
Every balance is a note sealed to your viewing key and stored in pool events. Anyone can see the ciphertext; nobody else can open it.
Deposit, trade and withdrawal circuits bind chain, pool, roots, nullifiers and ciphertext hashes. Change any of them and verification fails.
0.5% on deposits and on the buy side of swaps. Withdrawals are free. The pool checks custody equals liabilities plus fees.
Older roots stay valid, so notes made at different times can be spent together.
Each deposit, swap output and change note is a leaf. Spending proves membership against a known root without saying which leaf is yours.
The protocol core supports signed, encrypted RFQ messages for solver integrations. The connected agent app currently quotes and executes directly against PancakeSwap V2.
Export keys sealed with a passphrase, or rescan pool events with your viewing key. Recovery rebuilds every spendable note and its Merkle path.
Pick an attack and watch it hit the contract. Each one is stopped by a real check in the pool, and the ones marked mined were actually sent and reverted in Pocket's test suite.
withdraw(request, proof)| Label | Block | Gas | Status |
|---|---|---|---|
| deploy PocketDepositVerifier | 125503174 | 466619 | success |
| deploy PocketTradeVerifier | 125503175 | 908119 | success |
| deploy PocketWithdrawalVerifier | 125503176 | 800877 | success |
| deploy PocketPoseidon | 125503177 | 2157126 | success |
| deploy PocketAdmission | 125503178 | 578388 | success |
| deploy PocketPool | 125503179 | 3931544 | success |
| deploy PocketPancakeV2Executor | 125503180 | 786674 | success |
| setAssetEnabled | 125503181 | 45654 | success |
| setAssetEnabled | 125503182 | 48543 | success |
| setAssetEnabled | 125503183 | 48543 | success |
| acquire real USDT using forked PancakeSwap liquidity | 125503184 | 121840 | success |
| deposit 0 | 125503185 | 2172120 | success |
| deposit 1 | 125503186 | 1568544 | success |
| approve | 125503187 | 46230 | success |
| deposit 2 | 125503188 | 1642609 | success |
| mined raw-witness attack: deposit spendSecret=zero | 125503189 | 289528 | reverted InvalidProof |
| mined raw-witness attack: trade creates extra change with a matching forged commitment | 125503200 | 403353 | reverted InvalidProof |
| snapshot branch moves real BNB/USDT reserves (removed snapshot branch) | 125503221 | 104764 | success |
| stale real-liquidity quote reverts mined settlement (removed snapshot branch) | 125503222 | 515750 | reverted Error |
| proof rejects altered encrypted trade output | 125503221 | 403341 | reverted InvalidProof |
| deploy PocketPoolCrossReplay | 125503222 | 3931544 | success |
| setAssetEnabled | 125503223 | 45654 | success |
| deposit proof cannot replay into another pool | 125503224 | 289540 | reverted InvalidProof |
| executor rejects direct caller | 125503225 | 46055 | reverted Unauthorized |
| mismatched route endpoints revert without spending notes | 125503226 | 489834 | reverted InvalidRoute |
| private BNB to USDT swap: two historical roots and change | 125503227 | 2857861 | success |
| same valid proof cannot spend twice | 125503228 | 84594 | reverted InvalidSpend |
| mined raw-witness attack: withdrawal redirects another owner's funds | 125503245 | 360462 | reverted InvalidProof |
| setPaused | 125503249 | 44693 | success |
| cold recovery withdraws combined real USDT notes while paused | 125503250 | 1654013 | success |
| setPaused | 125503251 | 22781 | success |
| private USDT to native BNB swap with zero residual router allowance | 125503252 | 2817894 | success |
| private USDT through WBNB to CAKE swap with no change note | 125503268 | 1915936 | success |
| withdraw all native BNB after swaps using two recovered notes | 125503269 | 385349 | success |
| deposit 20 | 125503270 | 1577868 | success |
| deposit 21 | 125503271 | 1563496 | success |
| deposit 22 | 125503272 | 1558554 | success |
| fee-boundary withdrawal 397 base units | 125503273 | 1640397 | success |
| fee-boundary withdrawal 200 base units | 125503289 | 364231 | success |
| fee-boundary withdrawal 1 base units | 125503290 | 359455 | success |
| claimFees | 125503291 | 44974 | success |
| claimFees | 125503292 | 55809 | success |
| claimFees | 125503293 | 69499 | success |
| setPaused | 125503294 | 44693 | success |
After every scenario, the pool holds exactly what it owes notes plus the fees it earned. Not a unit more or less.
Give an agent its own wallet, budget and rules. Private payments on BNB Smart Chain.
Open your Pocket