Skip to main content

Introduction

Finality Proof-of-Stake (FPoS) represents a fundamental reimagining of delegated consensus mechanisms, transcending traditional DPoS limitations through contract-layer validator governance and hierarchical proximity incentives. Unlike systems where validators are hardcoded at the protocol level (BNB Chain, Cosmos), Fenines implements validator selection entirely within smart contracts, enabling dynamic governance without hard forks.
Innovation: Smart contract-governed validators + 8-level proximity rewards
Economic Model: Nash equilibrium-driven delegation
Decentralization: Byzantine fault tolerance with n101n \leq 101 validators

Architectural Innovations

1. Layer Separation Theorem

FPoS achieves orthogonal separation between consensus and governance: LconsensusLgovernance=\mathcal{L}_{\text{consensus}} \cap \mathcal{L}_{\text{governance}} = \emptyset Consensus Layer (LC\mathcal{L}_C):
  • Block production (Fenine PoA engine)
  • Signature verification (ECDSA secp256k1)
  • Finality guarantees (probabilistic)
Governance Layer (LG\mathcal{L}_G):
  • Validator selection (FenineSystem contract)
  • Stake management (ERC-20-like accounting)
  • Reward distribution (proximity-aware)
Benefit: Validator set updates without protocol changes.

2. Hierarchical Proximity Model

The proximity system implements an 8-level reward cascade: G=(V,E,w)\mathcal{G} = (V, E, w) where:
  • VV = Set of all delegators
  • EV×VE \subseteq V \times V = Directed edges (delegation relationships)
  • w:E[0,1]w: E \to [0, 1] = Weight function (proximity coefficients)
Graph Properties:
  1. Acyclicity: vV:v∉ancestors(v)\forall v \in V: v \not\in \text{ancestors}(v)
  2. Bounded Depth: depth(v)8\text{depth}(v) \leq 8
  3. Single Parent: parent(v)1|\text{parent}(v)| \leq 1

3. Economic Equilibrium

FPoS converges to a Nash equilibrium where no rational actor benefits from unilateral strategy change. Delegator Optimization: maxvVE[Ri(v)]=maxvleftRv(1γv)(1Pprox)(1τ)Svtotal+Siright\max_{v \in \mathcal{V}} \mathbb{E}[R_i(v)] = \max_{v} \\left\\{ \frac{R_v \cdot (1-\gamma_v) \cdot (1-P_{\text{prox}}) \cdot (1-\tau)}{S_v^{\text{total}} + S_i} \\right\\} subject to: SiSminDC=1000 FENS_i \geq S_{\text{min}}^{\text{DC}} = 1000 \text{ FEN} Validator Optimization: maxγleftγRvtotalright\max_{\gamma} \\left\\{ \gamma \cdot R_v^{\text{total}} \\right\\} subject to delegator retention constraint: γγ    APYdelegatorAPYmarket\gamma \leq \gamma^* \implies \text{APY}_{\text{delegator}} \geq \text{APY}_{\text{market}}

Validator Lifecycle

State Machine

Validators transition through 5 states:

State Definitions

Definition: Address has never created a validatorVA(addr)=\text{VA}(addr) = \emptysetTransitions:
  • createValidator\xrightarrow{\text{createValidator}} CREATED

Validator Selection Algorithm

At each epoch boundary, active set updated:
1

Read Candidates

Query all validators with status STAKED:C=vAllValidators:status(v)=STAKED\mathcal{C} = \\{v \in \text{AllValidators} : \text{status}(v) = \text{STAKED}\\}
2

Sort by Stake

Order by total stake (self + delegated):Csorted=sort(C,Stotal,desc)\mathcal{C}_{\text{sorted}} = \text{sort}(\mathcal{C}, S_{\text{total}}, \text{desc})
3

Select Top-N

Take up to 101 validators:Vnew=Csorted[:101]\mathcal{V}_{\text{new}} = \mathcal{C}_{\text{sorted}}[:101]
4

Update State

Transition states:vVnew:status(v)VALIDATEDvVoldVnew:status(v)UNSTAKED\begin{align*} \forall v \in \mathcal{V}_{\text{new}}: &\quad \text{status}(v) \leftarrow \text{VALIDATED} \\ \forall v \in \mathcal{V}_{\text{old}} \setminus \mathcal{V}_{\text{new}}: &\quad \text{status}(v) \leftarrow \text{UNSTAKED} \end{align*}
5

Commit

Write active set to storage:
activeValidatorSet = newSet;
emit ValidatorSetUpdated(epoch, newSet);

Delegator Mechanics

Staking Process

Delegators stake to validators with proximity tracking:
function stake(address validatorAddress) external payable {
    require(msg.value >= MIN_DC_STAKE, "Insufficient stake");
    require(validators[validatorAddress].status == VALIDATED, "Invalid validator");
    
    // Create delegator record
    DelegatorInfo storage dc = delegators[msg.sender][validatorAddress];
    dc.stakeAmount = msg.value;
    dc.status = DC_ACTIVE;
    dc.joinedAt = block.number;
    
    // Add to validator's staker list (proximity array)
    dc.stakerIndex = validators[validatorAddress].stakers.length;
    validators[validatorAddress].stakers.push(msg.sender);
    
    // Update totals
    validators[validatorAddress].totalStake += msg.value;
    totalNetworkStake += msg.value;
}
Proximity Position: ProximityDepth(DC)=stakerIndex=Dvalidator1\text{ProximityDepth}(\text{DC}) = \text{stakerIndex} = |\mathcal{D}_{\text{validator}}| - 1 Earlier delegators have lower indices → receive proximity from later delegators.

Reward Accumulation

Rewards accrue each block: ΔRDC(Bn)=SDCSVAtotal×RVAdelegator_pool\Delta R_{\text{DC}}(B_n) = \frac{S_{\text{DC}}}{S_{\text{VA}}^{\text{total}}} \times R_{\text{VA}}^{\text{delegator\_pool}} Pending Rewards: Rpending=i=BjoinedBcurrentΔRiR_{\text{pending}} = \sum_{i=B_{\text{joined}}}^{B_{\text{current}}} \Delta R_i

Proximity Distribution

When delegator claims, rewards flow through proximity chain: Rdistributed=Rpending×PtotalR_{\text{distributed}} = R_{\text{pending}} \times P_{\text{total}} where: Ptotal=k=1min(d,8)αkP_{\text{total}} = \sum_{k=1}^{\min(d, 8)} \alpha_k Level Coefficients (αk\alpha_k):
Level kkαk\alpha_kCumulativeDelegator Receives
---R×(10.30)R \times (1 - 0.30)
10.0700.070Upline gets 7%
20.0500.120Upline-2 gets 5%
30.0400.160Upline-3 gets 4%
40.0350.195Upline-4 gets 3.5%
50.0300.225Upline-5 gets 3%
60.0250.250Upline-6 gets 2.5%
70.0250.275Upline-7 gets 2.5%
80.0250.300Upline-8 gets 2.5%
Ineligibility Handling: If upline at level kk is ineligible (unstaked, exited), the share redistributes: Rresidual(k)=R×αkR_{\text{residual}}^{(k)} = R \times \alpha_k Split 50/50: ClaimerRresidual(k)×0.5ValidatorRresidual(k)×0.5\begin{align*} \text{Claimer} &\gets R_{\text{residual}}^{(k)} \times 0.5 \\ \text{Validator} &\gets R_{\text{residual}}^{(k)} \times 0.5 \end{align*}

Tax Application

After proximity, tax deducted: Rfinal=Rafter_prox×(1τ)R_{\text{final}} = R_{\text{after\_prox}} \times (1 - \tau) Tax distributed: Rburned=Rtax×0.50Rdev=Rtax×0.50\begin{align*} R_{\text{burned}} &= R_{\text{tax}} \times 0.50 \\ R_{\text{dev}} &= R_{\text{tax}} \times 0.50 \end{align*} Net Delegator Yield: Yieldnet=(1Ptotal)×(1τ)×(1γv)\text{Yield}_{\text{net}} = (1 - P_{\text{total}}) \times (1 - \tau) \times (1 - \gamma_v) For default params: Yieldnet=0.70×0.90×(1γ)=0.63×(1γ)\text{Yield}_{\text{net}} = 0.70 \times 0.90 \times (1 - \gamma) = 0.63 \times (1-\gamma)

Economic Model

Tokenomics

Block Reward:Rblock=1 FENR_{\text{block}} = 1 \text{ FEN}Annual Emission:Eannual=Rblock×365.25×24×3600TblockE_{\text{annual}} = R_{\text{block}} \times \frac{365.25 \times 24 \times 3600}{T_{\text{block}}}Eannual=1×31,557,6003=10,519,200 FEN/yearE_{\text{annual}} = 1 \times \frac{31,557,600}{3} = 10,519,200 \text{ FEN/year}Dynamic Adjustment:Governance can update via RewardManager:
function updateBlockReward(uint256 newReward, uint256 activationEpoch) 
    external onlyGovernance

Game Theory

Delegator Strategy

Rational delegators solve: argmaxvVAPY(v)=argmaxvRv×(1γv)×0.63Svtotal+Smy\arg\max_{v \in \mathcal{V}} \text{APY}(v) = \arg\max_{v} \frac{R_v \times (1-\gamma_v) \times 0.63}{S_v^{\text{total}} + S_{\text{my}}} Nash Equilibrium: All validators converge to similar APY: vi,vjV:APY(vi)APY(vj)<ϵ\forall v_i, v_j \in \mathcal{V}: \quad |\text{APY}(v_i) - \text{APY}(v_j)| < \epsilon where ϵ0.5%\epsilon \approx 0.5\% (arbitrage threshold).

Validator Strategy

Validators compete on:
  1. Commission Rate: Lower γ\gamma attracts delegators
  2. Uptime: Missed blocks reduce rewards
  3. Proximity Depth: Early delegators incentivized to stay
Optimal Commission: γ=argmaxγleftγ×Stotal(γ)right\gamma^* = \arg\max_{\gamma} \\left\\{ \gamma \times S_{\text{total}}(\gamma) \\right\\} Empirically, γ[3%,10%]\gamma^* \in [3\%, 10\%] for competitive markets.

Proximity Mathematics

Fibonacci-Inspired Decay

The proximity coefficients follow a modified Fibonacci sequence: αk={0.07k=10.05k=20.04k=30.0350.005×(k4)4k60.0257k8\alpha_k = \begin{cases} 0.07 & k = 1 \\ 0.05 & k = 2 \\ 0.04 & k = 3 \\ 0.035 - 0.005 \times (k-4) & 4 \leq k \leq 6 \\ 0.025 & 7 \leq k \leq 8 \end{cases} Decay Rate: αk+1αk0.714 for k2\frac{\alpha_{k+1}}{\alpha_k} \approx 0.714 \text{ for } k \leq 2 This mimics golden ratio decay: ϕ=1+521.618    1ϕ0.618\phi = \frac{1 + \sqrt{5}}{2} \approx 1.618 \implies \frac{1}{\phi} \approx 0.618

Expected Value Analysis

For delegator at depth dd: Expected Proximity Income: E[Rprox(d)]=j=18P(downline at depth j)×αj×Rˉdownline\mathbb{E}[R_{\text{prox}}(d)] = \sum_{j=1}^{8} P(\text{downline at depth } j) \times \alpha_j \times \bar{R}_{\text{downline}} Assuming uniform distribution: E[Rprox]0.30×Nˉdownlines8×Rˉ\mathbb{E}[R_{\text{prox}}] \approx 0.30 \times \frac{\bar{N}_{\text{downlines}}}{8} \times \bar{R} where Nˉdownlines\bar{N}_{\text{downlines}} = average downline count.

Optimal Depth

Delegator utility maximization: U(d)=Rown+E[Rprox(d)]Cwait(d)U(d) = R_{\text{own}} + \mathbb{E}[R_{\text{prox}}(d)] - C_{\text{wait}}(d) where Cwait(d)C_{\text{wait}}(d) = opportunity cost of waiting for position dd. Result: Earlier positions (d<100d < 100) have higher lifetime value.

Network Dynamics

Validator Growth Model

Network validator count evolves: dVdt=λjoinμexit\frac{d|\mathcal{V}|}{dt} = \lambda_{\text{join}} - \mu_{\text{exit}} where: λjoin=f(APY,barriers)μexit=g(opportunity cost,slashing risk)\begin{align*} \lambda_{\text{join}} &= f(\text{APY}, \text{barriers}) \\ \mu_{\text{exit}} &= g(\text{opportunity cost}, \text{slashing risk}) \end{align*} Equilibrium: V:λjoin=μexit|\mathcal{V}|^* : \lambda_{\text{join}} = \mu_{\text{exit}} Empirically, V[30,80]|\mathcal{V}|^* \in [30, 80] for mature networks.

Stake Concentration

Measure decentralization via Nakamoto Coefficient: Nc=minleftk:i=1kSi>13StotalrightN_c = \min\\left\\{ k : \sum_{i=1}^{k} S_i > \frac{1}{3} S_{\text{total}} \\right\\} Healthy Range: Nc7N_c \geq 7 Gini Coefficient: G=i=1nj=1nSiSj2n2SˉG = \frac{\sum_{i=1}^{n} \sum_{j=1}^{n} |S_i - S_j|}{2n^2 \bar{S}} Target: G<0.50G < 0.50 (moderate inequality).

Slashing Mechanism (Future)

Slashing is not active in current implementation. Planned for future hardfork.

Slashable Offenses

OffenseSeveritySlash %Jail Time
Double SignCritical5%7 days
Downtime (>50 blocks)Major0.1%1 day
Invalid System TXCritical10%30 days

Slash Formula

Snew=Sold×(1pslash)S_{\text{new}} = S_{\text{old}} \times (1 - p_{\text{slash}}) Burned Amount: Bslash=Sold×pslashB_{\text{slash}} = S_{\text{old}} \times p_{\text{slash}}

Evidence Submission

Validators submit fraud proofs:
function submitDoubleSignEvidence(
    bytes calldata header1,
    bytes calldata header2,
    bytes calldata signature1,
    bytes calldata signature2
) external returns (bool)
Reward for Reporter: Rreporter=Bslash×0.10R_{\text{reporter}} = B_{\text{slash}} \times 0.10

Comparison with Other Systems

FeatureFenines FPoSBNB ChainCosmos HubEthereum PoS
Validator SelectionSmart contractHard-codedOn-chain governancePermissionless
Max Validators10121175Unlimited
Min Stake10,000 FEN10,000 BNB1 ATOM (variable)32 ETH
Block Time3s3s5-7s12s
Finality18s (6 blocks)18s7s12.8 min
SlashingPlannedActiveActiveActive
Proximity Rewards✅ 8 levels
EIP-1559 Burn

Developer Integration

Query Validator APY

async function calculateValidatorAPY(validatorAddress) {
    const info = await fenineSystem.getValidatorInfo(validatorAddress);
    const epoch = await fenineSystem.getCurrentEpoch();
    
    // Estimate annual rewards
    const epochsPerYear = 365.25 * 24 * 3600 / 600; // ~52596
    const rewardPerEpoch = EPOCH_REWARD / activeValidators.length;
    const annualReward = rewardPerEpoch * epochsPerYear;
    
    // Commission earnings
    const commissionEarnings = annualReward * info.commissionRate / 10000;
    
    // Delegator share
    const delegatorPool = annualReward * (1 - info.commissionRate / 10000);
    const validatorDelegatorShare = 
        (info.selfStake / info.totalStake) * delegatorPool * 0.63;
    
    const totalEarnings = commissionEarnings + validatorDelegatorShare;
    const apy = (totalEarnings / info.selfStake) * 100;
    
    return apy;
}

Estimate Delegator Returns

async function estimateDelegatorReturns(
    delegatorAddress,
    validatorAddress,
    stakeAmount
) {
    const vaInfo = await fenineSystem.getValidatorInfo(validatorAddress);
    const dcInfo = await fenineSystem.getDelegatorInfo(
        delegatorAddress,
        validatorAddress
    );
    
    // Calculate share of validator's pool
    const newTotalStake = vaInfo.totalStake + stakeAmount;
    const share = stakeAmount / newTotalStake;
    
    // Annual delegator pool
    const epochsPerYear = 52596;
    const rewardPerEpoch = EPOCH_REWARD / activeValidators.length;
    const annualDelegatorPool = 
        rewardPerEpoch * epochsPerYear * 
        (1 - vaInfo.commissionRate / 10000);
    
    // Expected returns (before proximity)
    const baseReturns = annualDelegatorPool * share;
    
    // Apply proximity and tax
    const afterProximity = baseReturns * 0.70; // 30% to uplines
    const afterTax = afterProximity * 0.90; // 10% tax
    
    // Estimate proximity income (depends on downlines)
    const estimatedProximityIncome = baseReturns * 0.15; // conservative
    
    const totalReturns = afterTax + estimatedProximityIncome;
    const apy = (totalReturns / stakeAmount) * 100;
    
    return {
        apy,
        annualReturns: totalReturns,
        breakdown: {
            base: afterTax,
            proximity: estimatedProximityIncome
        }
    };
}

Conclusion

Fenines FPoS establishes a mathematically rigorous, economically sustainable consensus framework that:
  1. Decouples consensus from governance via dual-layer architecture
  2. Incentivizes long-term participation through proximity rewards
  3. Balances validator profitability with delegator returns
  4. Ensures Byzantine fault tolerance with n101n \leq 101 validators
  5. Enables deflationary tokenomics via EIP-1559 + tax burn
The proximity model creates network effects where early participants are rewarded for ecosystem growth, aligning incentives across validators, delegators, and the protocol itself.

Staking Guide

How to become a validator or delegator

Economics Dashboard

Real-time APY and network metrics

Validator Setup

Run a Fenines validator node

Governance Proposals

Participate in protocol governance