Migration Introduction
If you're in the migration working group, check the Notion docs for more detail.
This page provides a basic introduction for the Morse → Shannon Migration.
Context
The goal: migrate account state from Morse to Shannon Pocket Networks.
Focus: The
Migration & Cutover→Judgement Daysections (see Migration Roadmap).Note: This migration approach can be supported indefinitely (tech-wise), but can be turned off later by protocol update.
Constraints
"Why can't this be done in Shannon genesis?"
Morse and Shannon use different signing key algorithms.
You MUST generate a new private key for Shannon.
Use your new Shannon key to "claim" your Morse account identity and balance (staked & unstaked).
Background on key schemes
If you're advanced in crypto and want more info, ask the Grove team for access to the Background on Key Schemes doc.
Disambiguation / Definitions
Some terms changed from Morse to Shannon. Use this mapping for this migration section:
Servicer
Supplier
- Onchain actor providing services (e.g. data) and APIs (RPCs). - Morse: runs Tendermint stack + Morse API. - Shannon: MUST run "Relayminer" + Full CometBFT Node (owned or delegated).
Node
Full Node
- Morse: Tendermint full node (Morse AppChain). - Shannon: CometBFT full node (Shannon AppChain). - NOTE: In Morse, "Servicers" are sometimes called "Nodes" (matches underlying implementation naming).
Validator / Servicer
Validator
- Morse: Staked Servicers = Validators (top 1000 by stake = consensus set). - Shannon: Validator is an independent actor, must explicitly stake & join. - Supplier role (if present) is decoupled. - Both use Tendermint consensus. - Morse: 1,000 Validators. - Shannon: Validator count TBD.
E2E User Flow
Morse account claiming uses "re-keying".
Migration state doesn't need to sync with Shannon MainNet launch — just wait until Shannon MainNet is live.
Full Shannon launch details: see the overview.
Token Migration: 4 Steps
Visual: End-to-End Migration Process
Shannon NetworkMorse NetworkShannon NetworkMorse Network
morse_account_state.json generated
morse_account_state.json generated
opt[Morse Stakeholders optionally do local verification]
loop[(Re-)Generate morse_account_state.json]
Authority (Foundation)Morse Account Holders
$ pocket util export-geneis-for-reset1return morse_state_export.json2
$ pocketd tx migration collect-morse-accounts3
distribute for verification morse_account_state.json4
$ pocket util export-geneis-for-reset5
return for local verification morse_state_export.json6
$ pocketd tx migration collect-morse-accounts7
manual comparison of morse_account_state.json hashes8 ** (off-chain feedback) **
9upload morse state(MsgCreateMorseAccountState)
10verify morse_account_state_hash field
11valid / invalid
12$ pocketd tx migration claim-...claim morse POKT balance and any actor stake(MsgClaimMorse...)13
Authority (Foundation)Morse Account HoldersWas this helpful?
