How LODE works.
From a trade to your wallet
- ABTrades
Buys and sells on the LODE pool pay a flat 1.5% fee.
- BCKeeper claim
Once a minute the keeper claims the fees the pool owes the deployer.
- CDSplit
90% of the claim goes to the vault as the round's pot; 10% stays with the deployer.
- DEHashes
During the minute, miners submit their best keccak256 hash for the round.
- EFShares
Settlement: each miner is owed pot x weight / total weight.
- FendClaim
Shares credit to your on-chain balance; claim pays it to your wallet in SOL.
LODE trades on a Meteora Dynamic Bonding Curve pool quoted in SOL, with a flat 1.5% trading fee. Every round lasts one minute. When a round ends, the keeper (a wallet run by the deployer) claims the fees the pool has accrued for the deployer, settles the round and opens the next one.
90% of each claim goes to the round's pot, held by the program's vault; the other 10% goes to the deployer. If a round has no miners, its pot is not lost: it carries into the next round that has miners.
Anyone with a Solana wallet can mine. There is no minimum holding and no pre-launch window. The keeper wallet itself cannot mine.
Earnings are credited to your Miner account's balance on your next submit or claim, and claim pays the balance to your wallet in SOL. The keeper may also push larger balances to their owners. A settled round stays claimable for 300 rounds, about five hours; a share nobody credited by then moves back into the pot as carry.
72 bytes, one keccak block
- 0-31 challenge
- 32 bytes, from the Rounds account; new every round
- 32-63 wallet
- 32 bytes, your public key
- 64-71 nonce
- 8 bytes, u64 little-endian; the only part you vary
Each attempt hashes the round's challenge, your wallet and a nonce:
h = keccak256(challenge || wallet || nonce_u64_le)
d = leading zero bits of h
(byte 0 first, most significant bit first)The challenge comes from a recent Solana slot hash taken when the round opens, so nobody can start early. Your wallet is inside the preimage, so a nonce found for one wallet is worthless to any other, and copying someone's submission gains nothing.
keccak256 here uses the original Keccak padding, the same as Ethereum and Solana's keccak syscall, which the program uses to check every submitted hash itself. Calibrate runs the standard test vectors on your device.
d_min, the cap, and what a bit is worth
| Best d | Weight | Hashes per hit, average | Note |
|---|---|---|---|
| 19 | rejected | 2^19 = 5.24e5 | below d_min |
| 20 | 1 | 2^20 = 1.05e6 | d_min |
| 21 | 2 | 2^21 = 2.10e6 | |
| 22 | 4 | 2^22 = 4.19e6 | |
| 24 | 16 | 2^24 = 1.68e7 | |
| 26 | 64 | 2^26 = 6.71e7 | |
| 28 | 256 | 2^28 = 2.68e8 | |
| 30 | 1,024 | 2^30 = 1.07e9 | cap reached |
| 32 | 1,024 | 2^32 = 4.29e9 | past the cap |
| 36 | 1,024 | 2^36 = 6.87e10 | past the cap |
The program's defaults: d_min 20, cap_bits 10. The deployer can tune them in Config; the live values appear here once the program is on chain.
A submission counts only if d ≥ d_min. Its weight is 2^min(d - d_min, cap_bits): every bit past d_min doubles the weight, because finding it takes twice the hashing on average. Past d_min + cap_bits, more hashing earns that wallet nothing more.
Each wallet keeps only its best hash per round; a heavier one replaces it. At settlement a miner earns pot x weight / total weight, rounded down to the lamport.
The cap limits how much one wallet can take from a round. It does not stop anyone from splitting work across many wallets; see the risks.
| Hash rate | Example device | Hashes in 60 s | Best d, 50% chance | Weight at that d |
|---|---|---|---|---|
| 1 MH/s | Phone, WASM | 6.0e7 | 26 | 64 |
| 10 MH/s | Laptop CPU | 6.0e8 | 29 | 512 |
| 100 MH/s | Desktop GPU | 6.0e9 | 33 | 1,024 |
| 1 GH/s | Fast GPU or several | 6.0e10 | 36 | 1,024 |
Arithmetic, not a measurement: after H attempts the best hash reaches d with probability 1 - (1 - 2^-d)^H, so the 50% point is about log2(H / 0.69). Device labels are rough orders of magnitude; measure your own on the Mine or Calibrate sheet.
Where the numbers live
| Account | Seeds | Holds |
|---|---|---|
| Config | "config" | keeper, mint, d_min, cap_bits, round length, pot share, carry, what is owed to miners |
| Vault | "vault" | every lamport of pot, carry and miner balances |
| Rounds | "rounds" | the live round (id, challenge, clock, total weight, miners) and a ring of the last 300 settled rounds |
| Miner | "miner", wallet | your balance, your pending round and weight, totals earned and claimed |
Program LodeVLYx4t3t8cakjds4vNy596A9FVVVi9aXqTrT7rw. All four are program-derived addresses of it.
