Updated for Solana Mainnet
The Migration Widget anddescription provided below have been updated to reflect Solana Mainnet.
The Helium Network is migrating to the Solana blockchain. All Helium Network Tokens (HNT, IOT, andMOBILE), will become Solana SPL tokens.
If an exchange already supports SPL tokens, follow the steps below.
SPL token Support
Please refer to the Solana Documentation on how toAdd Solana to Your Exchange for details.
Mint IDs
All Helium Network Tokens are available on theTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
program, and mint IDs exist both on mainnet-beta
and devnet
for testing.
The mint IDs are as follows:
Name | ID |
---|---|
HNT | hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux |
MOBILE | mb1eu7TzEc71KxDpsmsKoucSSuuoGLv1drys1oP2jh6 |
IOT | iotEVVZLEywoTn1QdwNPddxPWszn3zFhEot3MfL9fns |
DC | dcuc8Amr83Wz27ZkQ2K9NS6r8zRpf1J6cvArEBDZDmm |
Mapping Helium Wallets to Solana Wallets
Helium Wallets use the same ED25519 curve as Solana Wallets, resulting in Helium public keys andsecret keys mapping directly to Solana Wallets.
You can either migrate your wallet using this widget:
Helium Address:
Solana Address:
Or continue reading for manual instructions:
JavaScript
To get the Solana public key equivalent of a Helium public key in javascript run:
import Address from "@helium/address";
import { PublicKey } from "@solana/web3.js"
const addr = Address.fromB58("...helium pubkey...");
// Gets the solana pubkey
new PublicKey(addr.publicKey).toBase58()
To get a Solana equivalent Keypair
from a Helium Keypair
:
import { Keypair } from "@helium/crypto";
import { Keypair as SolanaKeypair } from "@solana/web3.js"
const solanaKeypair = SolanaKeypair.fromSecretKey(heliumKeypair.privateKey);
Rust
In rust, to get a pubkey:
let helium_pubkey_bytes = helium_pubkey.to_vec();
let solana_pubkey = solana_sdk::pubkey::Pubkey::new(&helium_pubkey_bytes[1..]);
println!("solana public key: {}", solana_pubkey);
To map a keypair:
solana_sdk::signature::Keypair::from_bytes(helium_keypair.secret_to_vec())
Migration API
The Migration API can be used to retrieve the Solana Wallet address from a Helium Wallet address.
https://migration.web.helium.io/helium/*helium-wallet-address*
Wallet Migration
Wallets will need to be inflated on Solana. In essence this is recreating the Wallet's Helium stateon Solana.
Themigration-servicecan be used to migrate wallet(s) to Solana.
For the Helium Wallet app users, the Wallet requests the migration-service to get the neededtransaction and submits them to the Solana blockchain when the app is opened for the first timeafter the Migration is complete.
Since exchange Wallets may not use the Helium Wallet app, the migration service can instead be useddirectly by following the below steps:
For mainnet:
Get the Solana Wallet address from a Helium Wallet address:
https://migration.web.helium.io/helium/*helium-wallet-address*
Get the list of serialized transactions, which should be sent to Solana:
https://migration.web.helium.io/migrate/*solana-wallet-address*?limit=1000&offset=0
Submit the transactions to Solana. You can see typescript code demonstrating how to use thishere.
Note: Each transaction is only allowed to execute once.
Alternatively, you can use thecommand line utilityfor steps 2-3.
$ env MIGRATION_SERVICE_URL=https://migration.web.helium.io env SOLANA_URL=https:/api.mainnet-beta.solana.com env SOLANA_WSS_URL=wss://api.mainnet-beta.solana.com ./migration-tx-executor --wallet *your-solana-wallet*
Trustless Wallet Migration
The tools listed above are convenient but rely on the migration service provided by the HeliumFoundation.
The on-chain implementation of the migration is trustless, and the full state of the Heliumblockchain will be converted to a list of Solana transactions and compressed into a Merkle Tree rooton Solana.
Any entity providing the proper proof that the provided transactions are valid can execute thetransactions to inflate a wallet. Each transaction is only allowed to execute once.
If you would like a copy of the database serving the proofs for the migration service, pleasecontact the Helium Foundation.
This database copy can be used to run an instance of themigration service