Hard-coded constants used across the XE network. Every value below is traceable to a
named constant in the xeprotocol/core source;
the Go node and the embedded web UI must agree on all of them.
On-chain amounts — balances, send amounts, lease cost and stake, pending sends — are
uint64micro-units: 1 XE = 1_000_000 µXE, and the same for XUSD. They travel on
the wire as plain JSON numbers, not strings. Where integer division on an amount cannot
be avoided, the rounding policy is always round up (ceilDiv, core/ledger.go).
Memos are allowed on send and burn blocks only, and must be valid UTF-8 of at most
64 bytes.
Block PoW and chat PoW are deliberately separate constants — they price different kinds
of spam. A node advertises the thresholds it enforces as hex strings in GET /node
(pow_difficulty, chat_pow_difficulty); "0" means PoW is disabled. Clients should
read them from the node rather than hardcoding.
Delay before the 67% converge-quorum commit-lock may form
Stale conflict sweep
15 seconds
Periodic conflict re-drive and cleanup
revoteBackoff
15 seconds
Minimum interval between sweep-driven converge re-emits
phantomEvictionDelay
30 seconds
Eviction of unbacked phantom candidates
phantomUnretrievableTimeout
10 minutes
Drop deadline for a live but unretrievable phantom
failedPromotionTTL
30 seconds
Quarantine for a winner that failed full promotion
periodicSyncInterval
10 seconds
Frontier sync interval
syncCooldown
5 seconds per peer
Per-peer sync throttle
Bootstrap watchdog
30 seconds
Re-dial interval for disconnected bootstrap peers
Directory TTL
30 minutes
Account directory entry expiry
[!INFO] Timestamp windows
The block timestamp window (±1 hour) is intentionally generous to accommodate clock drift between nodes. Votes use a tighter ±5 minute window because representatives are expected to have reasonably synchronized clocks.
[!WARNING] Pre-mainnet values
These are the constants compiled into core/ledger.go today, on a testnet-only network. They may still change before mainnet. See Cost Model.
Constant
Value
Description
LeaseVCPURate
20,000 µXUSD / vCPU / hour
Per-vCPU cost
LeaseMemGBRate
10,000 µXUSD / GB / hour
Per-GB memory cost
LeaseDiskGBRate
1,000 µXUSD / GB / hour
Per-GB disk cost
LeaseStakeDivisor
5
Stake = ⌈cost / 5⌉, minimum 1 µXUSD
LeaseMaxDuration
31,536,000 seconds
Longest allowed lease (365 days)
Cost is computed in whole hours (partial hours round up) and whole GB of memory
(partial GB round up), then scaled by the provider's price multiplier, which is carried
×1000 (1000 = 1.000×) and ceiling-divided back out.
[!EXAMPLE] Cost calculation
The worked target from core/ledger.go: 1 vCPU, 1 GB memory, 10 GB disk for 1 day at a 1.000× multiplier.
The XE emitted to the provider on settlement is not equal to the cost: it is
ceil(cost × R_capped / 1000), where R_capped is the epoch's emission ratio (scaled
×1000) locked into the lease_accept block. See Cost Model
and Economics for the emission curve.
Dead zone before the consumer force-settle window opens
DefaultLeaseEscrowExpiry
365 days
Expiry → escrow burn deadline
DefaultLeaseArchiveGap
1 hour
Local GC delay past the consensus deadline
Force-settle becomes eligible at expiry + LeaseSettleGrace + LeaseForceSettleGap —
1 hour 25 minutes after expiry on the defaults above.
[!IMPORTANT] Lease timing is pinned in genesis
These are the production (mainnet) defaults. A network may override any of them in its genesis block, which is where every node gets its values from — a compressed test network is a different genesis, not a different binary. Read a live network's effective values from GET /node (lease_timing), not from these constants.
Reads and writes get separate per-IP buckets: browsing the chain must never trip the
limiter, while POST mutations (block submission, chat, directory registration) are held
to a much tighter rate.