Rob this company
The agent can be talked into it.The vault cannot.
Chat with the house company's treasury agent and try to talk it into sending you money. Then press the button: this server sends real NEAR transactions that try to move the company's funds, from the agent's operator key and from a stranger's account. The vault contract refuses each one, and each refusal links to its failed receipt.
No wallet needed. The server pays the gas, within a per-address and a daily limit.
- Company
- Ledgerline Audit #1
- State
- FREE
- Vault
- c-1.incorpr.near
- Agent operator
- operator.incorpr.near
- Stranger
- rob.incorpr.near
1. Talk to the treasury agent
The agent has no keys. What it agrees to becomes a proposal, and the vault decides. Try one of these:
2. Try to move the money
Where the agent should send the BTC. Empty: a random address nobody holds a key for.
Chat with the agent first to include attempt 4, which submits its signed reply as an approval.
- 01
A stranger asks the MPC network to sign a Bitcoin spend
The rob account, which does not own the company, asks the vault to have v1.signer sign a 32-byte Bitcoin sighash with the treasury key.
stranger account → vault.request_shareholder_signature
- 02
The agent withdraws the BTC treasury to an outside address
The operator key, which relays the treasury agent, asks the vault to sign a NEAR Intents withdrawal of the day's BTC allowance to the visitor's address.
agent operator key → vault.agent_withdraw_intent
- 03
The agent sells the day's USDC allowance for 1 satoshi
A colluding solver would fill this swap and keep the difference. The operator proposes it as a normal rebalance.
agent operator key → vault.agent_swap_intent
- 04
The operator presents the agent's signed chat reply as its approval
The reply in the chat panel is signed inside a NEAR AI Cloud TEE. The operator submits that signed reply, unchanged, as the TEE proof for a swap.
agent operator key → vault.agent_swap_intent
- 05
The operator forges a complete TEE approval with its own key
The operator rebuilds the exact request the vault expects, writes "APPROVE <proposal_hash>" as the reply, dates it now and signs it with a key it generated.
agent operator key → vault.agent_swap_intent
- 06
The owner drains retained earnings while the company is listed or pledged
The NFT owner tries to take the cash out after a buyer or lender has priced the company. The amount is above retained earnings, so the call cannot pay out in any state.
owner key → vault.claim_dividends
Why it is safe
A transaction stops at the first check it fails, and the vault panics with that check's error code. Nothing in the agent's reply reaches these checks: the vault reads only the caller, its own state and the signed proof.
- 01Caller is the policy operator
ERR_ONLY_TEE_TREASURY_AGENT - 02Company is FREE: not listed, pledged or changing hands
ERR_ACCOUNT_ENCUMBERED_AGENT_FROZEN - 03Token is on the allowed list
ERR_FIREWALL_BLOCKED_TOKEN - 04Amount is above zero
ERR_FIREWALL_INVALID_PROPOSAL - 05Token is a bridged token (nep141:<chain>.omft.near) on a known chain
ERR_FIREWALL_BLOCKED_TOKEN - 06Destination is this vault’s own treasury address on that chain
ERR_FIREWALL_BLOCKED_UNWHITELISTED_DESTINATION - 07The token withdraws to the same chain as the destination
ERR_FIREWALL_BLOCKED_UNWHITELISTED_DESTINATION - 08Amount fits the 24-hour spend cap for the token
ERR_FIREWALL_EPOCH_CAP_EXCEEDED - 09The intent nonce is 32 bytes, unused, and fewer than 32 approvals are live
ERR_INVALID_NONCEERR_TOO_MANY_LIVE_NONCESERR_NONCE_USED - 10The proof has signed text, a signature, the response body and the system prompt
ERR_MISSING_TEE_ATTESTATION - 11Prompt and response fit the size limits
ERR_TEE_PROOF_TOO_LARGE - 12The signed text is model:request_hash:response_hash
ERR_TEE_TEXT_FORMAT - 13The model is on the policy
ERR_TEE_MODEL_NOT_ALLOWED - 14sha256 of the system prompt equals the pinned prompt hash
ERR_TEE_PROMPT_NOT_PINNED - 15The reply is exactly "APPROVE <proposal_hash>" for this proposal
ERR_TEE_NOT_APPROVED - 16The reply is at most 10 minutes old and not dated in the future
ERR_TEE_APPROVAL_EXPIRED - 17The signed response hash is sha256 of the response body
ERR_TEE_RESPONSE_MISMATCH - 18The signed request hash is sha256 of the request the vault builds itself
ERR_TEE_REQUEST_MISMATCH - 19The signature recovers to a TEE signer pinned from attestation
ERR_TEE_SIGNATURE_UNTRUSTED
Recent attempts
No attempts yet
From the evidence log
owner holds an unbroadcast BTC transaction signed this epoch, then tries to list: refused
2026-11-06 · demo-buyer.incorpr.near · list_company
ERR_SETTLEMENT_FAILED288ZLY…8CVWi1rob attempt from /rob: the operator presents the agent's signed chat reply (it said APPROVE) as the approval
2026-11-06 · operator.incorpr.near · agent_swap_intent
ERR_TEE_NOT_APPROVED4wbpoE…j6efhErob attempt from /rob: the operator forges a TEE approval with its own key
2026-11-06 · operator.incorpr.near · agent_swap_intent
ERR_TEE_SIGNATURE_UNTRUSTED97HLn2…gdQQjqrob attempt from /rob: the treasury agent sells the day's USDC allowance for 1 satoshi
2026-11-06 · operator.incorpr.near · agent_swap_intent
ERR_FIREWALL_PRICE_BELOW_FLOORBqvJHj…stre5Mrob attempt from /rob: the treasury agent withdraws the BTC treasury to an outside address
2026-11-06 · operator.incorpr.near · agent_withdraw_intent
ERR_FIREWALL_BLOCKED_UNWHITELISTED_DESTINATION9yHuad…oS2AyLrob attempt from /rob: a stranger asks the vault to have v1.signer sign a Bitcoin spend
2026-11-06 · rob.incorpr.near · request_shareholder_signature
ERR_ONLY_CURRENT_SHAREHOLDERFtbSPN…wRhx6U