Smart Contracts

The EL2 smart contracts that power Universal High Income. Revenue share, staking, Universal High Income Nodes, Partner Registry, governance, vaults, and deflationary burns, all deployed and verifiable on Solana.

DEVNET
DEPLOYED PROGRAMS
ProgramIDNetworkStatusVersion
Revenue Share 38R1hk...XQEB Devnet Deployed 0.1.0
Staking 7J2ruG...1WDf Devnet Deployed 0.1.0
Ecosystem Rewards DjZ2HH...roWo Devnet Deployed 0.1.0
USDi Stablecoin BcQffb...nP8f Devnet Deployed 0.1.0
INCOME Nodes income_nodes Compiled Testing 0.1.0
Partner Registry partner_registry Compiled Testing 0.1.0
Revenue Share Split
60%Holders
25%Burn
15%Treasury
Every revenue deposit automatically splits. Burns are permanent supply reduction. Holder rewards accumulate proportionally to staked $INCOME.
DEVNET TOKEN REGISTRY
TokenSymbolMintDecimalsPurpose
Universal High Income $INCOME A7G77...DESH 9 Core ecosystem token - staking, revenue share, burns
Partner Token Partner qhttQ...LHoR 6 Ecosystem rewards - distributed to $INCOME stakers
INCOME USD USDi H1hgC...49i9 6 Stablecoin - 1:1 USDT-backed, USD-denominated rewards
FUNCTIONS REFERENCE
Revenue Share - 38R1hkdDwqEpdDnpPv5Sqh7zQ354q5AwLY4wraqM9YEB
initializeAdmin

Creates the revenue pool PDA. Sets token mint, treasury wallet, and split percentages.

holder_bps u16 - Holder share in basis points (6000 = 60%)
burn_bps u16 - Burn share (2500 = 25%)
treasury_bps u16 - Treasury share (1500 = 15%)
deposit_revenueAdmin

Deposits tokens with automatic 60/25/15 split. Burns 25% permanently. Increments reward-per-token accumulator for proportional distribution.

amount u64 - Total deposit amount
category String - Revenue category (e.g. WHALES, TG_APP, PARTNER)
description String - Human-readable description
stakeAny Holder

Stakes $INCOME tokens into the revenue pool. Creates user account PDA on first stake. Checkpoints pending rewards before updating balance.

amount u64 - Tokens to stake
unstakeStaker

Withdraws staked tokens. Automatically claims all pending rewards before returning the unstaked amount.

amount u64 - Tokens to unstake
claim_rewardsStaker

Claims accumulated rewards without unstaking. Rewards = staked_balance * (global_reward_per_token - user_checkpoint).

update_configAdmin

Updates split percentages and optionally the treasury wallet. Must total 10,000 basis points.

holder_bps u16 - New holder share
burn_bps u16 - New burn share
treasury_bps u16 - New treasury share
new_treasury Option<Pubkey> - New treasury address
pause / unpauseAdmin

Emergency controls. Pausing halts deposits, staking, and claims until unpaused.

Staking - 7J2ruGh8PWfj2NHUJLQJvajWE9DMbYXtrGHcaQwF1WDf
initialize / stake / unstake / claimVarious

Anchor-based staking with tiered APY, lock multipliers, and 90/10 claim split (90% to wallet, 10% burned).

Ecosystem Rewards - DjZ2HHWT6ENgRM54NngVxXX7qJooyDu6A5g1GR2zroWo
initializeAdmin

Creates the reward pool PDA. Configures distribution parameters.

burn_bps u16 - Burn % on claims in basis points (0 = no burn)
min_reward u64 - Minimum reward per claim
max_reward u64 - Maximum reward per claim
cooldown_seconds i64 - Cooldown between claims
fund_vaultAdmin

Deposits partner tokens into the contract vault for distribution.

amount u64 - partner tokens to deposit
claim_rewardStaker

Claims a randomized partner token reward. Requires active $INCOME stake (cross-program read). Subject to cooldown period. Reward amount scales with staked balance.

burn_partner_tokenAny Holder

Voluntary burn of partner tokens. Permanently reduces supply.

amount u64 - partner tokens to burn
update_configAdmin

Updates distribution parameters: burn percentage, reward range, cooldown period.

burn_bps u16 - New burn %
min_reward u64 - New minimum reward
max_reward u64 - New maximum reward
cooldown_seconds i64 - New cooldown period
pause / unpauseAdmin

Emergency controls. Pausing halts all claims until unpaused.

USDi Stablecoin - BcQffbzwvwmT6AkWKuJp5ghQ853wYB8vTUxCQVJxnP8f
initializeAdmin

Creates the stable pool PDA. Configures collateral token (USDT), exchange rate, and fee structure.

mint_usdiAny User

Deposit USDT collateral to mint $USDi at 1:1 rate. Collateral locked in vault.

amount u64 - USDT amount to deposit
redeem_usdiAny User

Burn $USDi to redeem USDT at 1:1 rate from the collateral vault.

amount u64 - $USDi amount to redeem
burn_usdiAny Holder

Voluntary burn of $USDi tokens without redeeming collateral.

amount u64 - $USDi tokens to burn
pause / unpauseAdmin

Emergency controls. Pausing halts all minting and redemption.

INCOME Nodes — income_nodes
initialize_configAdmin

Creates the global NodeConfig PDA. Sets minimum node stake threshold (10M $INCOME), income mint, and revenue share program reference.

create_nodeOperator

Registers an INCOME Node for the caller. Cross-program reads staked balance from income_revenue_share. Requires 10M+ $INCOME staked. Creates per-operator IncomeNode PDA with cached stake weight.

add_bonus_stream / deposit_bonusAdmin

Registers a new USDi distribution stream and deposits tokens for distribution to active nodes. Uses Synthetix-style reward-per-token accumulator.

claim_bonusNode Operator

Claims proportional share of USDi distributions based on node weight. Weight-proportional distribution across all active nodes.

refresh_weight / close_nodeOperator

Updates cached node weight from current staked balance. Deactivates node if below 10M threshold. Close removes the node entirely.

Partner Registry — partner_registry
initialize_registryAdmin

Creates the global RegistryConfig PDA. Sets minimum partner stake, income mint, cooldown period for withdrawal.

register_partnerPartner

Registers a partner project. Transfers $INCOME (locked) to the partner vault PDA, creating their PartnerAccount. Activates the partner's INCOME Node. Unlocks EL2 SDK access and partner-gated instructions.

increase_stake / deactivate_partnerPartner

Increase locked stake or begin cooldown for withdrawal. Deactivation starts a configurable cooldown period before funds can be withdrawn.

withdraw_stakePartner

Withdraws locked stake after cooldown expires. Deactivates the partner account and node. Verified by on-chain smart contract checks.

FEATURES
ACTIVE

Auto-Burn on Revenue

25% of every revenue deposit is burned permanently. Supply shrinks automatically with every deposit.

ACTIVE

Proportional Distribution

Rewards accumulate per-token using a Synthetix-style accumulator. Fair, gas-efficient, no snapshots needed.

ACTIVE

Memo Categories

Every deposit tagged with category and description. Track revenue from: WHALES, TG_APP, PARTNER, CEX, BURN_AGENT, AIRDROP.

ACTIVE

Admin Controls

Configurable split percentages, treasury address, and emergency pause/unpause. All changes on-chain.

TESTNET

Tiered Staking + Nodes

Lock-based APY multipliers. 10M+ stakers run INCOME Nodes, locking supply for larger proportional rewards plus exclusive USDi. 10% of staking claims auto-burned. Partner projects run nodes with locked stake.

ACTIVE

Cross-Program Composability

INCOME Nodes verify staked balances cross-program. Partner Registry validates partner stake before allowing interactions. Rewards scale with stake size.

ACTIVE

Partner Ecosystem Rewards

Randomized partner token distribution to stakers. Configurable cooldown, reward range, and optional burn.

TESTNET

$USDi Stablecoin

1:1 USDT-backed stablecoin. Mint by depositing collateral, redeem by burning $USDi. USDT collateral redesign pending.

CHANGELOG
2026-03-26
Ecosystem v0.3.0 - Ecosystem Rewards + USDi Stablecoin Contracts
  • Deployed ecosystem_rewards contract (DjZ2HH...roWo) - randomized partner token distribution to $INCOME stakers
  • Deployed usdi_stablecoin contract (BcQffb...nP8f) - $USDi mint/burn/redeem with USDT backing
  • Cross-program integration: ecosystem rewards read $INCOME staked balances on-chain
  • Configurable cooldown, min/max reward range, optional burn on partner token claims
  • Activity bot updated for contract-based reward claims and USDi operations
2026-03-26
Revenue Share v0.2.0 - Correct Token Architecture
  • Fixed: revenue share pool now uses $INCOME (A7G77...DESH) - the same token as staking
  • Added close_pool, set_deposit_count admin instructions
  • Created partner token for airdrops + ecosystem revenue share
  • Created $USDi stablecoin for USD-denominated rewards
  • 4 revenue deposits on devnet: WHALES, TG_APP, PARTNER, BURN_AGENT - all using $INCOME
  • 10M $INCOME staked across 2 stakers, 2.5M deposited, 625K burned
2026-03-17
Revenue Share v0.1.0 - Initial Devnet Deployment
  • Deployed to devnet: 38R1hkdDwqEpdDnpPv5Sqh7zQ354q5AwLY4wraqM9YEB
  • Pool initialized: 60/25/15 split (holders/burn/treasury)
  • Dashboard integration: live pool state decoded from devnet RPC
  • TX table merges mainnet burns + devnet revenue/staking transactions
2026-03-25
Revenue Share v0.1.0 - Initial Build
  • Built income_revenue_share Anchor program
  • 60% holder / 25% burn / 15% treasury auto-split
  • Reward-per-token accumulator (Synthetix pattern)
  • Freeform memo categorization per deposit
  • stake, unstake, claim_rewards, deposit_revenue
  • Admin: update_config, pause, unpause
  • 15/15 tests passing (initialize, stake, deposit, claim, unstake, pause, config, edge cases)
2026-03-15
Staking v0.1.0 - Devnet Preview
  • Deployed staking program 7J2ruGh8PWfj2NHUJLQJvajWE9DMbYXtrGHcaQwF1WDf
  • Anchor on Solana with PDA vaults
  • Tiered APY (5-25% base), lock multipliers
  • 90% claim to wallet, 10% auto-burned
TEST RESULTS - REVENUE SHARE
15 passing 0 failing 16s
initializes the revenue pool
rejects invalid split (not totaling 10000)
user A stakes tokens
user B stakes tokens
admin deposits revenue with WHALES category
user A claims rewards (50% of holder share)
deposits second revenue with TG_APP category
user A unstakes (auto-claims pending)
admin updates config to 50/30/20 split
admin can pause and unpause
rejects zero stake amount
rejects deposit when no stakers
rejects unauthorized admin actions
user B claims all pending rewards
shows final pool state
Tests run against local validator with full token lifecycle. Program deployed to devnet - pool initialized with live test transactions.
ON-CHAIN DEVNET TRANSACTIONS
Fetching devnet transactions...