Integration with Helium Network
Helium is not just an IoT network with tokens. After migration from its native blockchain to Solana (April 2023), the architecture changed radically: now it's a set of subDAOs on Solana with Helium Program Library (HPL), not a separate L1. Most teams coming with the task "connect devices to Helium" face this break — documentation is outdated, code examples written for old blockchain, and new HPL architecture requires understanding Solana Account Model.
Architecture After Solana Migration
Key HPL Programs
Helium operates through three main on-chain programs:
helium_entity_manager — manages hotspot NFT (ENTITY). Each hotspot after migration is a compressed NFT (cNFT) by Metaplex Bubblegum standard. Important: merkleized NFT aren't stored in regular token accounts — their state is proven through Merkle proof.
helium_sub_daos — manages subDAO economy (IoT, MOBILE, ENERGY). Rewards, epoch transitions, delegation — all here.
data_credits — manages DC (Data Credits). DC is burned when transmitting data. Burn rate fixed: $0.00001 per 24-byte payload. DC cannot be transferred — only burned.
How Data Transmission Works
Device → Hotspot (LoRaWAN/5G) → Router/OUI → Data Credits burned → Payload delivered
OUI (Organizational Unique Identifier) — on-chain entity you must register to route traffic. OUI registration costs 1,000,000 DC ($10) + staking 0.5% of total DC balance.
If task is just sending device data without own OUI, there are community-operated Network Servers (Chirpstack-based), but you lose control over routing rules and data privacy.
Integration: Practical Patterns
Working with Helium API and Oracles
After migration, Helium removed its own blockchain explorer and API. Data available through:
- Solana RPC — directly, but need to know program addresses and deserialize Anchor structures
- Helium Foundation oracles — off-chain services for location/reward claims
-
@helium/helium-react-hooksand@helium/spl-utils— official libraries
import { init } from '@helium/helium-entity-manager-sdk'
import { AnchorProvider } from '@coral-xyz/anchor'
async function getHotspotInfo(hotspotKey: PublicKey, provider: AnchorProvider) {
const program = await init(provider)
// Hotspot is compressedNFT, find via asset proof
const hotspot = await program.account.hotspotV0.fetchNullable(hotspotKey)
if (!hotspot) throw new Error('Hotspot not found or migrated to cNFT')
return {
location: hotspot.location?.toString(16), // H3 hex index
elevation: hotspot.elevation,
gain: hotspot.gain,
isFullHotspot: hotspot.isFullHotspot,
}
}
Onboarding New Device
Adding hotspot is multi-step process with several on-chain transactions:
- Create Maker account — device manufacturer gets Maker NFT, stakes HNT
-
Issue hotspot — mint cNFT for specific device via
issue_entity - Assert location — bind H3 geohash to hotspot (costs DC)
- Config hotspot — transmit gain/elevation data
Each step requires signatures from both maker and owner. This is Helium design decision to prevent device spam.
Decentralized Network Server
If building own Network Server (for enterprise IoT), recommended stack:
- Chirpstack v4 — open-source LNS, supports Helium packet routing
- Helium packet router — LoRa packet routing service (Rust, open-source)
- gRPC endpoint — receive uplink packets from router
# Chirpstack configuration for Helium backend
[network]
net_id="000024" # Helium net_id
[[regions]]
name="EU868"
common_name="EU868"
[backend.basic_station]
bind="0.0.0.0:3001"
Packet router uses ED25519 keys for authentication — same keys as Solana keypair (Ed25519 curve), simplifying management.
Economics of DC and Automation of Replenishment
Critical production question: how to ensure uninterrupted operation with DC burn. Scenario: you have 1000 sensors, each sends data every 15 minutes → ~2.8M transactions/day → ~2.8M DC/day ≈ $28/day.
Automation of replenishment:
import { burnAndMint } from '@helium/data-credits-sdk'
async function ensureDCBalance(
provider: AnchorProvider,
targetDC: BN,
currentDC: BN
) {
if (currentDC.lt(targetDC.muln(0.2))) { // less than 20% of target
const hntToBurn = await estimateHNTForDC(targetDC.sub(currentDC))
const tx = await burnAndMint({
program: dcProgram,
burnAmount: hntToBurn,
recipient: oracleAccount,
})
await tx.rpc()
}
}
HNT→DC rate updates via Oracle Price every 6 hours. Don't use hardcoded rate — typical mistake.
Testing and Devnet
Helium has testnet on Solana devnet. But caveat: testnet hotspots don't earn real rewards and don't appear in production explorer. For development:
# Solana CLI with Helium devnet
solana config set --url https://solana-devnet.rpcpool.com
export HELIUM_NETWORK=devnet
# Get test tokens
helium-admin create-maker --name "TestMaker" --staking-amount 1000000
What's Included in Integration
| Component | Description |
|---|---|
| OUI registration | On-chain, staking, routing rules |
| Hotspot onboarding SDK | Custom flow for manufacturers |
| Network Server setup | Chirpstack + packet router |
| DC management | Automatic replenishment, monitoring |
| Solana integration | State reading, reward claims |
| Monitoring | Alerting on DC balance, device health |
Timeline of typical integration — 3–6 weeks depending on device count and Network Server requirements.







