SKUdesk
SKUdesk/Opportunities
Robinhood Chain Testnet · Run + live chain reads
Next: Agent trade

Opportunities

The one opportunity the agent committed on-chain, with every number it rests on.

What you are looking at

An opportunity is one proposed trade: buy 350 iPhone 16 Pro clear cases (phone cases, not phones) from one listing and sell them into another for a profit. The agent proposed it, the identity gates confirmed both listings are the same product, and then the contract re-calculated the profit itself before accepting it. There is exactly one real opportunity in the run, and this is it.

The contract works in whole cents and refuses any claim that does not match its own arithmetic. That refusal is called a revert. Below: the trade, the arithmetic line by line, and the 12 checks it passed.

iPhone 16 Pro Clear MagSafe Case IDENTITY LOCKED COMMITTED ON-CHAIN

Buy · shopee-8841$5.90+ $0.42 shipping · $6.59 landed with duty, tax and fees · Supplier A
350 units$4.40 above landed cost, before fees
Sell · google-5501$10.99Retail demand · free shipping

FIXED SNAPSHOT · 2026-10-03 SKU CASE-IP16PRO-CLEAR-MAG-001 (iPhone 16 Pro Clear MagSafe Case). Listing prices as of 2026-10-03 15:39:11 UTC: a fixed snapshot of listings that does not update. The buy price is the reference price before shipping, tax and fees; the landed cost adds shipping and fixed assumptions for duty, tax and fees. These are test listings: no real stock or delivery is implied.

Units350proposed by the agent, within the contract’s hard bounds
Landed cost / unit$6.59buy price, shipping, duty, tax and fees
Net / unit$2.61after marketplace fee, fulfilment, returns, chain cost
Margin23.74%owner’s floor is 18.00%
Derived spend$2,306.50659¢ × 350, computed by the contract; cap $2,500.00

Expected profit if every unit sells as listed: $913.50 ($2.61 × 350). That is the figure the contract verified before it let the agent lock any money.

The arithmetic, line by line

  • landed590+42+12+8+5+2$6.59Everything it costs to put one unit in stock: buy price, shipping, duty, tax, procurement fee and payment fee, added up in whole cents.
  • marketplaceFeeceil(1099*800/10000)$0.88The marketplace keeps 8% (800 bps; 1 bps = 0.01%) of the $10.99 sell price. Rounded up to the next cent, so rounding never flatters the result.
  • returnReserveceil(1099*200/10000)$0.222% (200 bps) of the sell price is set aside for returns. Also rounded up.
  • net1099-88-65-22-659-4$2.61What one unit really earns: sell price minus marketplace fee, fulfilment, return reserve, landed cost and on-chain cost. This is the number the agent must report and the contract re-derives.
  • marginBpsfloor(261*10000/1099)2374 bps · 23.74%Net as a share of the sell price, rounded down. 2374 bps = 23.74%, against the owner's floor of 18.00%.
  • totalCost659+88+65+22+4$8.38All costs per unit added up, with fees taken at this sell price. The true break-even price is a little lower, because fees fall with the price.
Opportunity id (oppHash), derived on-chain from product, quote and snapshot
0x93f6fb43754a60f6afec7ed6e9c33232fb8983b3ff12f00640d02f1ddd918f89
snapshotHash, the fingerprint of the market list the agent saw AGENT ATTESTED · hash only, data not stored
0x30b03dbaf54acd3f9d0065272d52f366b43faaf6eb04070003f9464ea28d76da
ONCHAIN Commit transaction: 0x2eef0a8f…1299ab · block 128229470 · gas 216,056 · success Open the full proof

What the contract checked

In the order the Solidity runs them. If any one fails, the whole transaction is refused and nothing changes. All 12 passed for this opportunity. Checks the run also tried to break on purpose are marked, with the sentence the contract returned.

  1. Caller is the agent Unauthorized

    sent by 0x3EC91B…1818, the registered agent

    Only the agent can act as agent; only the owner can change policy, payees or withdraw. The owner can only become the agent by replacing it with setAgent, which is on chain.

    proved by Foundry test testOnlyOwnerAdminAndOnlyAgentActions
  2. Owner has not paused the vault Paused

    vault was running

    The owner can pause every agent action instantly.

    proved by Foundry test testPausedBlocksAgent
  3. Quote matches its hash BadQuoteHash

    keccak256 of the 11 quote fields = 0xdfbb50d1…25b1

    The agent commits a hash of the quote it used; submitting a different quote is refused.

    Tried in the run. The quote hash does not match the quote that was submitted. Rejected.
    proved by Foundry test testBadQuoteHashReverts
  4. Observation is not from the future FutureObservation

    observed at or before the block time

    The agent cannot claim an observation from the future to defeat the freshness check.

    proved by Foundry test testFutureObservationReverts
  5. Opportunity is new Replay

    oppHash 0x93f6fb43…8f89 derived on-chain, not seen before

    The opportunity id is keccak256(productHash, quoteHash, snapshotHash), so the same id cannot be committed twice, and each commit is bounded by the per-trade and daily caps. The agent supplies the snapshot hash, so a new snapshot hash is a new id: the caps, not the id, limit how often the same quote can be committed.

    Tried in the run. This exact opportunity was already committed. Replay blocked.
    proved by Foundry test testReplayRevertsEvenWithSameInputs
  6. Quote is inside the freshness window Stale

    inside the owner's 180s window, by the observation time the agent supplied

    The age check uses the observation time the agent supplies, so it limits how stale the agent’s own claim can be, not the real age of the source data. The snapshot hash binds the data that was shown.

    Tried in the run. Quote is 781s old; the policy allows 180s. Rejected.
    proved by Foundry test testStaleRevertsWithAgeAndTtl
  7. Inputs inside hard bounds OutOfBounds

    350 units; every quote field is small enough that arithmetic cannot wrap

    Every quote field and unit count has a hard upper bound, so arithmetic cannot overflow or wrap.

    proved by Foundry test testQuoteFieldOutOfBoundsReverts
  8. Spend under the per-trade cap SpendCap

    $2,306.50 (659¢ × 350) ≤ $2,500.00

    Spend is derived as landed cost × units, never supplied by the agent, then compared with the owner’s cap.

    Tried in the run. Spend $2,636.00 exceeds the per-execution cap of $2,500.00. Rejected.
    proved by Foundry test testPerExecutionCapRevertsWithValues
  9. Commitments under the daily cap DailyCap

    $2,306.50 committed today ≤ $5,000.00

    A running total of new commitments per UTC day; the agent cannot split a big purchase into many small ones to dodge it. It limits commitments, not cash-out: opportunities do not expire, so commitments banked on earlier days can be funded later. Across a midnight, up to twice the cap can be committed within 24 hours. What actually leaves the vault is bounded by the vault’s free balance; each lot is at most the per-trade cap.

    proved by Foundry test testDailyCapRevertsAndResetsNextDay
  10. Agent’s claimed economics equal the derived ones MathMismatch

    claimed $2.61 and 23.74% = derived $2.61 and 23.74%

    The contract recomputes net and margin from the quote. If the agent’s claim differs by even one cent it reverts and shows both numbers.

    Tried in the run. Agent claimed net $3.90 but the contract derived $2.61 from the quote. Rejected. See the reverted transaction.
    proved by Foundry test testLieAboutNetRevertsWithBothNumbers
  11. Net is positive NonPositiveNet

    $2.61 per unit > $0.00

    A loss-making opportunity is never committed.

    proved by Foundry test testLossMakingReverts
  12. Margin clears the floor MarginTooLow

    23.74% ≥ 18.00%

    Net margin below the owner’s floor is refused. Rounding always favours caution.

    proved by Foundry test testWeakMarginReverts

Not on this list: whether the two listings are the same product. That is the identity gates’ job and it happens off-chain; the contract only records a hash of the product. All guardrails

What the agent did not choose FIXED SNAPSHOT

The agent’s first proposal passed every gate and every limit, so no proposal was rejected in this run. The other 7 of the 10 offers failed an identity gate; the agent’s own reasoning names the tempting ones it skipped. Each tile shows the first failing gate. Full evidence per offer

  • shopee-6120REJECTED
    $3.60model: galaxy s25
  • shopee-9902REJECTED
    $3.80magsafe: missing
  • lazada-2207REJECTED
    $4.10model: iphone 15 pro
  • lazada-3051REJECTED
    $4.50model: Pro Max
  • shopee-7710REJECTED
    $5.20pack: 2
  • shopee-8841LOCKED
    $5.90Chosen buy. iPhone 16 Pro
  • lazada-4410LOCKED
    $10.59iPhone 16 Pro
  • google-5501LOCKED
    $10.99Chosen sell. iPhone 16 Pro
  • google-5503REJECTED
    $11.99model: Pro Max
  • google-5502REJECTED
    $12.49model: iphone 15 pro