> For the complete documentation index, see [llms.txt](https://docs.trover.tech/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trover.tech/engineering/social-claims.md).

# Social X claims and Pons creator-fee claims

Trover supports two distinct Robinhood Chain flows. They do not share a treasury or a contract balance.

## Pons creator-fee claim

When a linked user asks Trover to collect Pons fees, the agent resolves the token from its current conversation, reads the active and legacy Pons factory on-chain, and discovers that launch's locker. It then reads the locker payout redirect. The request is accepted only when the active wallet is the launch deployer or the configured payout wallet. A token holder is not entitled to a launch creator's fee merely by holding the token.

Trover calls only `collectFees(address token)` on the locker discovered from the factory and simulates that call before signing/submitting it.

## X-handle transfer escrow

`TroverXClaimEscrow` is for a transfer to an X recipient who has not linked a Trover wallet yet. It is separate from `TroverStockDistributor`.

* The sender funds native ETH or a standard ERC-20 against an opaque claim id.
* After the intended recipient links the exact X account and a wallet, the server signs a short-lived EIP-712 voucher for that wallet only.
* The recipient submits `claim` and pays their own chain gas.
* An unclaimed deposit can return only to the original sender after the fixed recovery delay (`cancelExpiredDeposit`, sender only).
* If the sender is a contract that reverts on receipt, that path can never complete, so `forceRelease(claimId, to)` exists for `RECOVERY_ROLE` (the Safe) and opens only after six recovery delays (180 days at the 30-day default). It is exercised in `packages/contracts/test/TroverRescuePaths.test.ts` and was run live on testnet 46630 with a 60-second delay. `pause` and `unpause` are held by `PAUSER_ROLE`.
* The X account identifier is never stored in contract state.

## Deploy the escrow

The escrow is part of the stack that `packages/contracts/scripts/deploy-stack.mjs` deploys in one idempotent run (inputs, order and the mainnet checklist are in [contracts-runbook.md](/engineering/contracts-runbook.md)); the standalone script below still works for an escrow-only deployment. On testnet 46630 the rehearsed escrow is `0x1c2635d745fB7F90FE7831349E2BE4Da2A4deA71`. A stuck deposit is released with `safe-rescue.mjs build escrow.forceRelease <claimId> <to>`, then `sign` and `exec`.

These values must be server-only except the two public addresses:

```env
CONTRACT_DEPLOYER_PRIVATE_KEY=0x...
SOCIAL_CLAIM_ADMIN_ADDRESS=0x...             # a Safe/multisig
SOCIAL_CLAIM_VOUCHER_SIGNER_PRIVATE_KEY=0x... # server-only; never NEXT_PUBLIC
SOCIAL_CLAIM_VOUCHER_SIGNER_ADDRESS=0x...
SOCIAL_CLAIM_RECOVERY_DELAY_SECONDS=2592000
```

From `packages/contracts`, set the one-time guard and deploy:

```sh
SOCIAL_CLAIM_DEPLOY_CONFIRM_MAINNET=DEPLOY_TROVER_SOCIAL_CLAIMS \
pnpm deploy:social-escrow:robinhood
```

Copy the emitted contract address into the backend environment as `SOCIAL_CLAIM_ESCROW_ADDRESS`, then restart the API and worker. Do not place a private key in Vercel or any `NEXT_PUBLIC_*` variable.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.trover.tech/engineering/social-claims.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
