Docs

How real stocks move through a link: sending, claiming, taking a gift back, safety, and what a recipient or a developer needs to know.

01What STOCKING is

STOCKING sends real stocks as a link. Pick a Robinhood Chain stock token, pay, and the contract buys it on Uniswap v3 right then and holds it, before the link ever reaches anyone. Nothing about it is synthetic and nothing is promised for later: the stock is already sitting in the contract the moment the link exists.

The link is a page address followed by a claim key after the hash:

https://stocking.gifts/g#id.key

Browsers never send the part of a URL after a hash to a server, so that key travels only inside the link itself. Nobody but whoever holds the link, sender and recipient, ever sees it.

02Sending

Open Send, pick a stock, and pay in USDG or ETH. A gift can be one claim for one person, or a drop with up to 1,000 slots so many people can claim from the same link, one claim each. Add a note if you like, up to 140 bytes, and choose how long it stays open: 7, 30 or 90 days.

A fee of 1% comes out of whatever you pay, taken in the same token you paid with, before the contract buys the stock. The contract itself will never take more than 2%, no matter what a site in front of it asks for.

03Claiming

Open the link. Connect a wallet, or paste an address if you would rather not connect one. The page signs that address with the claim key carried in the link, right there in the browser, and hands the signature to the relayer. The relayer submits the claim and pays the gas, so claiming a gift costs the recipient nothing.

Each wallet can claim a given gift once. If the relayer is ever down, the link still works: you can submit that same signed claim yourself, from your own wallet, and pay the gas.

04Taking it back

The sender can take back whatever is left of a gift at any time. Once a gift's expiry passes, anyone, not only the sender, can send what is left home to the sender. A slot that has already been claimed is gone: taking a gift back only ever reaches the shares nobody has claimed yet.

05Safety

A gift can only ever hold a real Robinhood stock token. Every one of those tokens shares the same runtime code, so the contract checks that code before it accepts a token, and a memecoin wearing a stock's ticker is refused outright.

Every claim signature binds the exact wallet receiving it. A signature caught in the mempool cannot be pointed at another wallet, because the recipient address is part of what was signed. Once a claim is made, the sender has no way to reach it: the shares already belong to the recipient.

STOCKING is unaudited at launch. Nothing on this site is investment advice.

06For recipients

A wallet is a small piece of software, a browser extension or an app, that holds keys only you control and lets you sign things, such as a claim, without ever handing those keys to anyone else. Robinhood Chain is an Ethereum layer 2, and the shares you receive are ordinary ERC-20 tokens on it: you can hold them, send them to another wallet, or trade them on Uniswap on Robinhood Chain, the same as any other token.

STOCKING never asks for a seed phrase or a private key. Nothing on this site ever will.

07For developers

The contract is called StockingGifts. To create a gift: createWithUsdg, createWithEth or createWithStock. To act on one: claim and refund. To read one: gifts, status, canClaim, giftsOf and claimsOf. Three events cover everything that happens: GiftCreated, Claimed and Refunded.

A claim signature is EIP-712, so a wallet can read exactly what it is signing:

domain:  name "STOCKING", version "1", chainId 4663
type:    Claim(uint256 id, address recipient)

A link carries its gift id and claim key as /g#id.key, where key is 43 characters of base64url text, the 32 bytes of a throwaway private key made only for that one link.

The relayer takes a signed claim off the page and submits it on the recipient's behalf:

POST /api/claim
{ "id": "the gift id", "recipient": "the wallet claiming it", "sig": "the EIP-712 signature" }

It answers with a status code and a small JSON body:

200  { ok: true, hash }
400  { ok: false, code: "bad-input" | "bad-signature" | "cannot-claim", reason, error }
429  { ok: false, code: "rate-limited", error }
502  { ok: false, code: "chain", error }
503  { ok: false, code: "not-live" | "relayer-off" | "relayer-broke", error }

A 503 means the relayer itself is the problem, not the claim: the claim page then offers to submit it from the recipient's own wallet instead.

08$STOCKING

$STOCKING launches later, on ponsfamily.com. Until an address shows up on the STOCKING home page, there is no official token: anything claiming to be $STOCKING before then is not this project.