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
Agent operator
operator.incorpr.near

1. Talk to the treasury agent

NEAR AI Cloud, private inference

The agent has no keys. What it agrees to becomes a proposal, and the vault decides. Try one of these:

Enter sends. Shift+Enter adds a line.

2. Try to move the money

6 transactions on mainnet

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.

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

contracts/company-vault/src/lib.rs, in execution order

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.

  1. 01Caller is the policy operatorERR_ONLY_TEE_TREASURY_AGENT
  2. 02Company is FREE: not listed, pledged or changing handsERR_ACCOUNT_ENCUMBERED_AGENT_FROZEN
  3. 03Token is on the allowed listERR_FIREWALL_BLOCKED_TOKEN
  4. 04Amount is above zeroERR_FIREWALL_INVALID_PROPOSAL
  5. 05Token is a bridged token (nep141:<chain>.omft.near) on a known chainERR_FIREWALL_BLOCKED_TOKEN
  6. 06Destination is this vault’s own treasury address on that chainERR_FIREWALL_BLOCKED_UNWHITELISTED_DESTINATION
  7. 07The token withdraws to the same chain as the destinationERR_FIREWALL_BLOCKED_UNWHITELISTED_DESTINATION
  8. 08Amount fits the 24-hour spend cap for the tokenERR_FIREWALL_EPOCH_CAP_EXCEEDED
  9. 09The intent nonce is 32 bytes, unused, and fewer than 32 approvals are liveERR_INVALID_NONCEERR_TOO_MANY_LIVE_NONCESERR_NONCE_USED
  10. 10The proof has signed text, a signature, the response body and the system promptERR_MISSING_TEE_ATTESTATION
  11. 11Prompt and response fit the size limitsERR_TEE_PROOF_TOO_LARGE
  12. 12The signed text is model:request_hash:response_hashERR_TEE_TEXT_FORMAT
  13. 13The model is on the policyERR_TEE_MODEL_NOT_ALLOWED
  14. 14sha256 of the system prompt equals the pinned prompt hashERR_TEE_PROMPT_NOT_PINNED
  15. 15The reply is exactly "APPROVE <proposal_hash>" for this proposalERR_TEE_NOT_APPROVED
  16. 16The reply is at most 10 minutes old and not dated in the futureERR_TEE_APPROVAL_EXPIRED
  17. 17The signed response hash is sha256 of the response bodyERR_TEE_RESPONSE_MISMATCH
  18. 18The signed request hash is sha256 of the request the vault builds itselfERR_TEE_REQUEST_MISMATCH
  19. 19The signature recovers to a TEE signer pinned from attestationERR_TEE_SIGNATURE_UNTRUSTED

Recent attempts

mainnet, since this server started

No attempts yet

Nobody has pressed the button since this server started. Attempts are kept in memory only.

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…8CVWi1
  • rob 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…j6efhE
  • rob 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…gdQQjq
  • rob 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…stre5M
  • rob 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…oS2AyL
  • rob 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