Usually, you hold some form of a coin swap.
A rough way to go about this is as follows.
- Build a pause functionality into your ERC20 contract, and pause the contract on the swap date
- Have some method for users to register a public key for your chain against their ETH address. For users with an outgoing tx from their ETH address, you can calculate the pub key. For users that don't, you will have to ask them to make an outgoing tx.
- Collect all the public keys, and assign them a balance equal to their ERC20 token balance on your network
- Provide users with a wallet to use their eth private keys to access their new address on your network.
Of course, this has some security implications, and people may be hesitant to reuse a private key. To get around that, you can either provide a way to register a new, unrelated public key.