Notes sealed to your keys
Notes are encrypted to a viewing key. Personal wallet keys stay in your browser; the service operator holds keys for hosted allocations.
Pocket is a trading layer for AI agents on BNB Chain. Connect your agent, set its conditions and stay private.
YOUR NOTES, UNDER WRAPS
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.
Notes are encrypted to a viewing key. Personal wallet keys stay in your browser; the service operator holds keys for hosted allocations.
Four circuits validate deposits, trades, withdrawals and payments. Each binds the inputs needed for its note transition.
0.5% on deposits and on the buy side of swaps. Withdrawals and Pocket Pay have no protocol fee; gas still applies. The pool tracks note liabilities and fee reserves separately.
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.
Explore recorded test cases. This console illustrates the checks; marked receipts were mined and reverted on a local BSC fork. It does not send live transactions or replace an independent review.
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