Docs menu

SHRIVE docs, for developers

Claim

Payment release blocked

This source targets the NU6.3 Ironwood pool and a signature claim that keeps the saved code private. The ZEC API is hard closed. Do not send payment. Rust compilation, live Ironwood receipt, reserve and claim integration, host validation and independent review remain UNVERIFIED. See the Zcash advisory.

SHRIVE has no keeper. Pons buys use api/mint-auth.js and the existing signed authorization flow. Ironwood ZEC uses a separate invoice API and UFVK-only watcher. The browser creates the code before payment, the watcher confirms the Ironwood note, and the EVM signer reserves its hash. You later sign and claim to any nonzero EVM recipient on Robinhood Chain 4663.

Status

What the route does, in order

POST { "txHash": "0x..." } to api/mint-auth.js. It refuses at the first failure, in this order, each with its own status code:

StepStatusMessage
Method and JSON shape405 / 400POST only / Send a JSON object
txHash shape400txHash must be 0x and 64 hex characters
Config present503minting not connected
Per-IP budget503 / 429busy, try again shortly / too many authorisations from this address, wait a few minutes
Receipt reachable502chain not reachable
Transaction exists404transaction not found
Transaction succeeded400that transaction failed
Two confirmations409buy is too new, try again in a moment
Collection readable, not paused, right chain502 / 503collection not readable / minting is paused / wrong chain
A qualifying pool-to-buyer transfer400buy under the minimum / no buy from the pool in that transaction
Not already used409that buy already has its piece
Domain and digest match the contract502collection domain mismatch
Success200buyer, buyRef, amountIn, deadline, signature, collection

Nothing is cleaned up on the caller's behalf. A malformed field is refused, never guessed at. This table applies only to Pons buys. Ironwood ZEC invoices and watcher reservations use separate routes and checks.

Rate limits

Six authorisations per client per ten minutes, counted by the first of x-vercel-forwarded-for, x-forwarded-for or x-real-ip. The store is bounded: expired windows are dropped first, and when every slot is held by a live caller a new caller is told the service is busy rather than evicting someone else's window.

The signer key is the trust root

Limit

Anyone holding SIGNER_KEY can authorise a mint for any address. That is the honest shape of this design: the chain proves the buy, but a server attests to it. The contract can rotate the signer (setSigner) and can be paused, and the owner is a two-step transfer that cannot be renounced, so a leaked key is recoverable. It is still a key and belongs only in the private operator API environment. The separate watcher holds only a Zcash UFVK and an internal API token.

Claiming your piece

You bring your claim code to Get my pieces, choose the wallet you want the piece in, and submit. That submission is yours: your wallet signs it and your wallet pays the small Robinhood network fee. The watcher scans Zcash for Ironwood payments and keeps a durable checkpoint. It does not mint on your behalf. The EVM signer must have funds for reserve gas.

What can go wrong when you claim