# Ember ($EMBER) > A fire on BNB Smart Chain (chain ID 56), kept alive by wallets that hold a SPACE ID Agent ID. > Every rule is a constant in the contract. There is no pause, no setter and no upgrade. > EMBER is an experiment, not an investment. No value, profit, price or liquidity is promised. ## Contract - Ember: 0x5898AD3b7578BF244F9940e860A1051647996633 (BSC, see https://bscscan.com/address/0x5898AD3b7578BF244F9940e860A1051647996633) - Network: BNB Smart Chain, chain ID 56 - Agent ID registry (SPACE ID): 0x60B9262456dE011F7d15a54CdD8c48bAaa8B022F - Mining opens (startsAt): 1794495600 (unix seconds). Before it, addWood and emergencyWood revert with NotStarted. - ABI: /abi/Ember.json ## Supply (1,000,000,000 EMBER, 18 decimals, minted once, no mint function) - 600,000,000 mining pool (contract), paid to woods - 250,000,000 LP reserve (contract), paired with escrowed BNB when the pool opens - 100,000,000 team (owner wallet), locked until the pool opens, then fully unlocked - 50,000,000 last-wood pool (contract) ## Woods - Only wallets with an Agent ID (registry balanceOf(wallet) > 0), checked at call time. - Up to 5 normal woods per wallet per UTC day (resets at 00:00 UTC, block.timestamp / 1 days). - Prices in order: 0, 0.0005, 0.001, 0.002, 0.004 BNB. msg.value must equal the price exactly. - Reward per wood: miningPool / 10000 (0.01% of the remaining mining pool). First wood with a full pool: 60,000 EMBER. - Paid BNB: 50% sent to the owner wallet immediately, 50% kept as LP escrow. The owner cannot withdraw the escrow. ## Proof of work (normal woods only) - challenge = keccak256(abi.encodePacked(address(ember), block.chainid, wallet, powNonce[wallet])) - valid if uint256(keccak256(abi.encodePacked(challenge, uint256 solution))) >> 240 == 0 (16 leading zero bits) - powNonce[wallet] increases by 1 after each successful normal wood. - Helpers: powChallenge(address) view returns bytes32; checkPow(address,uint256) view returns bool. ## Fire - fireState(): 0 unlit, 1 strong (< 2h since last wood), 2 weakening (2h to 6h), 3 out (>= 6h, or settled). - When out, settled once: 10% of the remaining mining pool is burned; the last-wood wallet receives 10% of the remaining last-wood pool. - declareDeath(): anyone, once 6h have passed and the death is not settled. A new wood or emergency wood settles first, then relights. ## Emergency wood - emergencyWood() with exactly 0.01 BNB. Once per wallet per UTC day, outside the 5. No proof of work. - Only when >= 2h since the last wood (weakening or out), after startsAt, and after the fire was lit at least once. - Pays no EMBER. The wallet's next normal wood pays 2x the reward at that time. 2x does not stack and persists until used. - BNB split 50/50 like paid woods. Counts as the last wood. ## Liquidity - addLiquidity(): anyone once lpEscrow >= 3 BNB; the owner may call it earlier (its only extra power). - Pairs the 250M reserve with all escrowed BNB on PancakeSwap V2. LP tokens go to 0x000000000000000000000000000000000000dEaD. - Transfers are locked for everyone until the pool opens. After that, 2% transfer tax: 1% burned, 1% to the owner wallet. - thickenLiquidity(): maintenance after open; swaps half of pending escrow for EMBER, adds both halves, burns the LP. ## Read everything at once - globalInfo() returns the full fire state struct. - userInfo(address) returns hasAgentId, woodsUsedToday, nextWoodPrice, woodAvailable, emergencyAvailable, emergencyUsedToday, pendingDouble, nextWoodReward, powChallenge, powBits, balance. ## Safety - Never paste a private key or seed phrase into a website or chat. Sign with your own wallet tooling.