Security token recovery for lost wallets
What it is
Security token recovery tracking is recording each time a lost security token is moved to an investor’s new wallet after the investor proves their identity again, a recovery that permissioned token standards such as ERC-3643 build into the contract.
Transfer agents and tokenization platforms track recoveries because the holding moves without the old wallet signing anything, and the register has to show who approved the move and why.
Goldsky decodes each recovery event from the token contract into your records, while your identity provider, your tokenization platform and your team handle the request, the checks and the register.
You can track recoveries two ways: stream recovery events into the database your register runs on with Turbo Pipelines, or index them in a subgraph Goldsky hosts and receive each one by webhook.
Who it’s for
Transfer agents and tokenization platforms that keep the holder register for permissioned security tokens.
How security token recovery tracking works
The diagram follows one recovery from the investor’s report of a lost wallet to the register entry that moves their holding, and shows who does each step. Your setup may differ.
Ways to track security token recoveries
Recovery records land next to your register when a pipeline writes them into your own database; with the subgraph they stay in a hosted index, and each new one is pushed to your endpoint.
- Best for
- A register in your own database, tokens on several chains
- Products
- Turbo
- What you run
- The destination: your database, queue or bucket, or a Postgres database Goldsky hosts
- What you write
- Pipeline YAML and SQL; TypeScript transforms when needed
- Where your data lives
- In your own database or systems
- How results reach you
- Pushed to you
- Best for
- One chain per token, recoveries pushed to your backend
- Products
- Subgraphs
- What you run
- Nothing; Goldsky runs indexing, storage and the API
- What you write
- A schema and mapping handlers, or a no-code or low-code config for simple contracts
- Where your data lives
- Hosted by Goldsky
- How results reach you
- You query; changes are pushed
| Usual setupOption 1: Stream to your database | Option 2: Hosted subgraph | |
|---|---|---|
| Best for | A register in your own database, tokens on several chains | One chain per token, recoveries pushed to your backend |
| Products | Turbo | Subgraphs |
| What you run | The destination: your database, queue or bucket, or a Postgres database Goldsky hosts | Nothing; Goldsky runs indexing, storage and the API |
| What you write | Pipeline YAML and SQL; TypeScript transforms when needed | A schema and mapping handlers, or a no-code or low-code config for simple contracts |
| Where your data lives | In your own database or systems | Hosted by Goldsky |
| How results reach you | Pushed to you | You query; changes are pushed |
Take the investor’s report of a lost wallet
A recovery starts when an investor loses access to the wallet that holds their security tokens.
The request reaches the transfer agent with the investor’s details and the new wallet they want to use. Each request needs a reference that stays with it to the end, or the recovery can’t be tied back to the approval later.
Verify the investor again
Moving tokens to a new wallet without the old one signing is only safe once you know the request comes from the real holder.
Your identity verification provider checks the investor again before anything moves. A recovery approved on a weak check hands the holding to whoever asked for it.
Recover the tokens to the new wallet
A permissioned token lets an authorized agent move a lost holding to a new wallet the investor controls.
Your tokenization platform’s agent calls the token’s recovery function with the lost wallet, the new wallet and the investor’s onchain identity. A recovery sent to the wrong wallet is a transfer like any other and has to be reversed the same way.
Execute the recovery on the chain
Once the transaction is included, the contract moves the balance and announces the recovery as an event.
Under ERC-3643 the contract emits a
RecoverySuccessevent naming the lost wallet, the new wallet and the investor’s identity. Until enough blocks sit on top of it, a reorg (the chain replacing its newest blocks) can still undo it.Decode the recovery
Handled by Goldsky TurboThe recovery event has to be turned into a record that names both wallets and the investor.
Decode each recovery from the token’s events, on every chain the security is issued on. A recovery that goes unrecorded leaves the register showing the holding at a wallet that no longer has it.
Turbo Pipelines can decode the token’s logs with the ERC-3643 ABI and keep
Track ERC-3643 recoveries (opens in a new tab)RecoverySuccessevents alongside freezes and identity changes, each with its block time and transaction hash.Write each recovery to your records
Handled by Goldsky TurboThe recovery has to sit in the same database as the register, so the two can be checked together.
Store each recovery as one row with its block and transaction, keyed so a retried write replaces the row. If a reorg drops the recovery, the row has to go too, or the register moves a holding that never moved.
The pipeline writes to a table with
How delivery and reorgs work (opens in a new tab)primary_keyset to the event’sid, so a replayed write is applied as an upsert and a reorg correction deletes the row.Match each recovery to its approved request
Every recovery on the chain should trace back to one request that passed identity checks.
Tie each recovery to its request by the investor’s identity and the two wallets, and confirm the identity check passed before the recovery executed. A recovery with no matching request is an incident to investigate, not a register update.
Update the register
The register is the legal record of who holds what, so it has to show the holding at its new wallet and why it moved.
Move the holding to the new wallet, citing the request, the identity check and the transaction. If the register changes without that trail, the next audit sees a balance move with no reason recorded.
What to know about streaming recoveries into your database
- Goldsky runs the pipeline; you own the database, the register and the check against identity records.
- The same pipeline can carry the contract’s freezes and identity changes, so recoveries sit beside the other events an examiner may ask for.
- Tables keyed on the event’s ID take reorg corrections as updates and deletes, so a recovery the chain drops disappears from your records too.
Take the investor’s report of a lost wallet
A recovery starts when an investor loses access to the wallet that holds their security tokens.
The request reaches the transfer agent with the investor’s details and the new wallet they want to use. Each request needs a reference that stays with it to the end, or the recovery can’t be tied back to the approval later.
Verify the investor again
Moving tokens to a new wallet without the old one signing is only safe once you know the request comes from the real holder.
Your identity verification provider checks the investor again before anything moves. A recovery approved on a weak check hands the holding to whoever asked for it.
Recover the tokens to the new wallet
A permissioned token lets an authorized agent move a lost holding to a new wallet the investor controls.
Your tokenization platform’s agent calls the token’s recovery function with the lost wallet, the new wallet and the investor’s onchain identity. A recovery sent to the wrong wallet is a transfer like any other and has to be reversed the same way.
Execute the recovery on the chain
Once the transaction is included, the contract moves the balance and announces the recovery as an event.
Under ERC-3643 the contract emits a
RecoverySuccessevent naming the lost wallet, the new wallet and the investor’s identity. Until enough blocks sit on top of it, a reorg (the chain replacing its newest blocks) can still undo it.Index each recovery
Handled by Goldsky SubgraphsEach recovery has to become a record your team can look up by investor or wallet.
Index the token contract so every recovery is saved with both wallets, the investor’s identity, the block and the transaction. An index that misses recoveries leaves gaps no one notices until a holder asks.
With Goldsky Subgraphs, a mapping on the token contract can save each
Index onchain data with Subgraphs (opens in a new tab)RecoverySuccessevent as its own record, queryable from a hosted GraphQL API that Goldsky runs.Send each recovery to your backend
Handled by Goldsky SubgraphsYour team should hear about a recovery as soon as it’s indexed, without polling for it.
Each new recovery is posted to an endpoint you run, which stores it for matching. If the chain replaces the block the recovery was in, the endpoint has to undo what it stored.
Goldsky sends each record change to your URL through a subgraph webhook, and a version’s
Learn about subgraph webhooks (opens in a new tab)block_rangelets your endpoint tell a recovery the chain rolled back from a new one.Match each recovery to its approved request
Every recovery on the chain should trace back to one request that passed identity checks.
Tie each recovery to its request by the investor’s identity and the two wallets, and confirm the identity check passed before the recovery executed. A recovery with no matching request is an incident to investigate, not a register update.
Update the register
The register is the legal record of who holds what, so it has to show the holding at its new wallet and why it moved.
Move the holding to the new wallet, citing the request, the identity check and the transaction. If the register changes without that trail, the next audit sees a balance move with no reason recorded.
What to know about tracking recoveries in a hosted subgraph
- Goldsky runs indexing, storage and the GraphQL API; your register stays in your own system.
- Each subgraph indexes one chain, so a security issued on several chains needs a subgraph for each.
- Webhooks carry an insert, update or delete for each change with no guaranteed order, so your endpoint has to handle them by record ID and version.
What you control
- Your team
- Take the investor’s report of a lost wallet
- Match each recovery to its approved request
- Update the register
- Your providers
- KYC/KYB provider
- Transfer agent
Security and deployment
- SOC 2 Type IIIndependently audited security controls.
- Dedicated infrastructureSingle-tenant options for production workloads.
- Data residencyCloud, on-premises or co-located.
More use cases that keep a holder register
- Onchain shareholder register for transfer agentsKeep a transfer agent’s official register of a tokenized fund or stock in step with onchain transfers.
- Tokenized fund register across chainsCombine holdings of one fund issued on many chains into a single register.
- Investor statements from a tokenized registerProduce investor statements and holdings reports straight from the onchain register.
- Onchain primary issuance and allocationsRecord shares issued onchain at issuance or IPO straight into the register.
Track security token recoveries with Goldsky
We’ll map it to your systems and show you what Goldsky runs, so your team builds the product, not the pipelines underneath it.