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 n ≤ 101 n \leq 101 n ≤ 101 validators
Architectural Innovations
1. Layer Separation Theorem
FPoS achieves orthogonal separation between consensus and governance:
L consensus ∩ L governance = ∅ \mathcal{L}_{\text{consensus}} \cap \mathcal{L}_{\text{governance}} = \emptyset L consensus ∩ L governance = ∅
Consensus Layer (L C \mathcal{L}_C L C ):
Block production (Fenine PoA engine)
Signature verification (ECDSA secp256k1)
Finality guarantees (probabilistic)
Governance Layer (L G \mathcal{L}_G 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) G = ( V , E , w )
where:
V V V = Set of all delegators
E ⊆ V × V E \subseteq V \times V E ⊆ V × V = Directed edges (delegation relationships)
w : E → [ 0 , 1 ] w: E \to [0, 1] w : E → [ 0 , 1 ] = Weight function (proximity coefficients)
Graph Properties :
Acyclicity : ∀ v ∈ V : v ∉ ancestors ( v ) \forall v \in V: v \not\in \text{ancestors}(v) ∀ v ∈ V : v ∈ ancestors ( v )
Bounded Depth : depth ( v ) ≤ 8 \text{depth}(v) \leq 8 depth ( v ) ≤ 8
Single Parent : ∣ parent ( v ) ∣ ≤ 1 |\text{parent}(v)| \leq 1 ∣ parent ( v ) ∣ ≤ 1
3. Economic Equilibrium
FPoS converges to a Nash equilibrium where no rational actor benefits from unilateral strategy change.
Delegator Optimization :
max v ∈ V E [ R i ( v ) ] = max v l e f t R v ⋅ ( 1 − γ v ) ⋅ ( 1 − P prox ) ⋅ ( 1 − τ ) S v total + S i r i g h t \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\\} v ∈ V max E [ R i ( v )] = v max l e f t S v total + S i R v ⋅ ( 1 − γ v ) ⋅ ( 1 − P prox ) ⋅ ( 1 − τ ) r i g h t
subject to:
S i ≥ S min DC = 1000 FEN S_i \geq S_{\text{min}}^{\text{DC}} = 1000 \text{ FEN} S i ≥ S min DC = 1000 FEN
Validator Optimization :
max γ l e f t γ ⋅ R v total r i g h t \max_{\gamma} \\left\\{ \gamma \cdot R_v^{\text{total}} \\right\\} γ max l e f t γ ⋅ R v total r i g h t
subject to delegator retention constraint:
γ ≤ γ ∗ ⟹ APY delegator ≥ APY market \gamma \leq \gamma^* \implies \text{APY}_{\text{delegator}} \geq \text{APY}_{\text{market}} γ ≤ γ ∗ ⟹ APY delegator ≥ APY market
Validator Lifecycle
State Machine
Validators transition through 5 states:
State Definitions
NOT_EXIST (0)
CREATED (1)
STAKED (2)
VALIDATED (3)
UNSTAKED (4)
Definition : Address has never created a validatorVA ( a d d r ) = ∅ \text{VA}(addr) = \emptyset VA ( a dd r ) = ∅ Transitions :
→ createValidator \xrightarrow{\text{createValidator}} createValidator CREATED
Definition : Validator registered but not stakedRequirements :
Commission rate set: γ ∈ [ 0 , 100 ] \gamma \in [0, 100] γ ∈ [ 0 , 100 ]
BLS public key provided (optional)
Transitions :
→ stakeValidator \xrightarrow{\text{stakeValidator}} stakeValidator STAKED (if S ≥ 10 , 000 S \geq 10,000 S ≥ 10 , 000 FEN)
→ exitValidator \xrightarrow{\text{exitValidator}} exitValidator NOT_EXIST
Definition : Sufficient stake, pending activationInvariant :S self ≥ 10 , 000 FEN S_{\text{self}} \geq 10,000 \text{ FEN} S self ≥ 10 , 000 FEN Activation Delay :E activation = E stake + 1 E_{\text{activation}} = E_{\text{stake}} + 1 E activation = E stake + 1 Transitions :
→ epoch \xrightarrow{\text{epoch}} epoch VALIDATED (at next epoch if ∣ V ∣ < 101 |\mathcal{V}| < 101 ∣ V ∣ < 101 )
→ unstakeValidator \xrightarrow{\text{unstakeValidator}} unstakeValidator CREATED
Definition : Active validator, producing blocksResponsibilities :
Sign blocks in round-robin order
Execute system transactions at epochs
Maintain >99% uptime (best practice)
Earnings :R VA = Ω epoch ∣ V ∣ × γ + R delegator_share R_{\text{VA}} = \frac{\Omega_{\text{epoch}}}{|\mathcal{V}|} \times \gamma + R_{\text{delegator\_share}} R VA = ∣ V ∣ Ω epoch × γ + R delegator_share Transitions :
→ unstakeValidator \xrightarrow{\text{unstakeValidator}} unstakeValidator UNSTAKED
→ slashing \xrightarrow{\text{slashing}} slashing JAILED (future hardfork)
Definition : Deactivated, stake locked for cooldownCooldown Period :T cooldown = 1 epoch = 600 seconds T_{\text{cooldown}} = 1 \text{ epoch} = 600 \text{ seconds} T cooldown = 1 epoch = 600 seconds Transitions :
→ epoch \xrightarrow{\text{epoch}} epoch CREATED (can withdraw stake)
Validator Selection Algorithm
At each epoch boundary, active set updated:
Read Candidates
Query all validators with status STAKED: C = v ∈ AllValidators : status ( v ) = STAKED \mathcal{C} = \\{v \in \text{AllValidators} : \text{status}(v) = \text{STAKED}\\} C = v ∈ AllValidators : status ( v ) = STAKED
Sort by Stake
Order by total stake (self + delegated): C sorted = sort ( C , S total , desc ) \mathcal{C}_{\text{sorted}} = \text{sort}(\mathcal{C}, S_{\text{total}}, \text{desc}) C sorted = sort ( C , S total , desc )
Select Top-N
Take up to 101 validators: V new = C sorted [ : 101 ] \mathcal{V}_{\text{new}} = \mathcal{C}_{\text{sorted}}[:101] V new = C sorted [ : 101 ]
Update State
Transition states: ∀ v ∈ V new : status ( v ) ← VALIDATED ∀ v ∈ V old ∖ V new : 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*} ∀ v ∈ V new : ∀ v ∈ V old ∖ V new : status ( v ) ← VALIDATED status ( v ) ← UNSTAKED
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 = ∣ D validator ∣ − 1 \text{ProximityDepth}(\text{DC}) = \text{stakerIndex} = |\mathcal{D}_{\text{validator}}| - 1 ProximityDepth ( DC ) = stakerIndex = ∣ D validator ∣ − 1
Earlier delegators have lower indices → receive proximity from later delegators.
Reward Accumulation
Rewards accrue each block:
Δ R DC ( B n ) = S DC S VA total × R VA delegator_pool \Delta R_{\text{DC}}(B_n) = \frac{S_{\text{DC}}}{S_{\text{VA}}^{\text{total}}} \times R_{\text{VA}}^{\text{delegator\_pool}} Δ R DC ( B n ) = S VA total S DC × R VA delegator_pool
Pending Rewards :
R pending = ∑ i = B joined B current Δ R i R_{\text{pending}} = \sum_{i=B_{\text{joined}}}^{B_{\text{current}}} \Delta R_i R pending = i = B joined ∑ B current Δ R i
Proximity Distribution
When delegator claims, rewards flow through proximity chain:
R distributed = R pending × P total R_{\text{distributed}} = R_{\text{pending}} \times P_{\text{total}} R distributed = R pending × P total
where:
P total = ∑ k = 1 min ( d , 8 ) α k P_{\text{total}} = \sum_{k=1}^{\min(d, 8)} \alpha_k P total = k = 1 ∑ m i n ( d , 8 ) α k
Level Coefficients (α k \alpha_k α k ):
Level k k k α k \alpha_k α k Cumulative Delegator Receives - - - R × ( 1 − 0.30 ) R \times (1 - 0.30) R × ( 1 − 0.30 ) 1 0.070 0.070 Upline gets 7% 2 0.050 0.120 Upline-2 gets 5% 3 0.040 0.160 Upline-3 gets 4% 4 0.035 0.195 Upline-4 gets 3.5% 5 0.030 0.225 Upline-5 gets 3% 6 0.025 0.250 Upline-6 gets 2.5% 7 0.025 0.275 Upline-7 gets 2.5% 8 0.025 0.300 Upline-8 gets 2.5%
Ineligibility Handling :
If upline at level k k k is ineligible (unstaked, exited), the share redistributes:
R residual ( k ) = R × α k R_{\text{residual}}^{(k)} = R \times \alpha_k R residual ( k ) = R × α k
Split 50/50:
Claimer ← R residual ( k ) × 0.5 Validator ← R residual ( 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*} Claimer Validator ← R residual ( k ) × 0.5 ← R residual ( k ) × 0.5
Tax Application
After proximity, tax deducted:
R final = R after_prox × ( 1 − τ ) R_{\text{final}} = R_{\text{after\_prox}} \times (1 - \tau) R final = R after_prox × ( 1 − τ )
Tax distributed:
R burned = R tax × 0.50 R dev = R tax × 0.50 \begin{align*}
R_{\text{burned}} &= R_{\text{tax}} \times 0.50 \\
R_{\text{dev}} &= R_{\text{tax}} \times 0.50
\end{align*} R burned R dev = R tax × 0.50 = R tax × 0.50
Net Delegator Yield :
Yield net = ( 1 − P total ) × ( 1 − τ ) × ( 1 − γ v ) \text{Yield}_{\text{net}} = (1 - P_{\text{total}}) \times (1 - \tau) \times (1 - \gamma_v) Yield net = ( 1 − P total ) × ( 1 − τ ) × ( 1 − γ v )
For default params:
Yield net = 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) Yield net = 0.70 × 0.90 × ( 1 − γ ) = 0.63 × ( 1 − γ )
Economic Model
Tokenomics
Emission Schedule
Deflationary Mechanics
APY Dynamics
Block Reward :R block = 1 FEN R_{\text{block}} = 1 \text{ FEN} R block = 1 FEN Annual Emission :E annual = R block × 365.25 × 24 × 3600 T block E_{\text{annual}} = R_{\text{block}} \times \frac{365.25 \times 24 \times 3600}{T_{\text{block}}} E annual = R block × T block 365.25 × 24 × 3600 E annual = 1 × 31 , 557 , 600 3 = 10 , 519 , 200 FEN/year E_{\text{annual}} = 1 \times \frac{31,557,600}{3} = 10,519,200 \text{ FEN/year} E annual = 1 × 3 31 , 557 , 600 = 10 , 519 , 200 FEN/year Dynamic Adjustment :Governance can update via RewardManager: function updateBlockReward ( uint256 newReward , uint256 activationEpoch )
external onlyGovernance
Burn Sources :
EIP-1559 Base Fee :
B 1559 = BaseFee × G used B_{\text{1559}} = \text{BaseFee} \times G_{\text{used}} B 1559 = BaseFee × G used
Tax Burn :
B tax = ∑ claims R claim × τ × 0.50 B_{\text{tax}} = \sum_{\text{claims}} R_{\text{claim}} \times \tau \times 0.50 B tax = claims ∑ R claim × τ × 0.50 Total Burn :B total = B 1559 + B tax B_{\text{total}} = B_{\text{1559}} + B_{\text{tax}} B total = B 1559 + B tax Net Inflation :I net = E annual − B annual I_{\text{net}} = E_{\text{annual}} - B_{\text{annual}} I net = E annual − B annual Deflationary Threshold :Network becomes deflationary when: BaseFee avg × G avg × 31 , 557 , 600 3 > E annual \text{BaseFee}_{\text{avg}} \times G_{\text{avg}} \times \frac{31,557,600}{3} > E_{\text{annual}} BaseFee avg × G avg × 3 31 , 557 , 600 > E annual For E annual = 10.52 M E_{\text{annual}} = 10.52M E annual = 10.52 M FEN: BaseFee avg > 10 , 519 , 200 G avg × 10 , 519 , 200 × 1 0 18 \text{BaseFee}_{\text{avg}} > \frac{10,519,200}{G_{\text{avg}} \times 10,519,200} \times 10^{18} BaseFee avg > G avg × 10 , 519 , 200 10 , 519 , 200 × 1 0 18 At G avg = 15 M G_{\text{avg}} = 15M G avg = 15 M : BaseFee avg > 66.79 gwei \text{BaseFee}_{\text{avg}} > 66.79 \text{ gwei} BaseFee avg > 66.79 gwei Validator APY :APY VA = R annual VA S self × 100 % \text{APY}_{\text{VA}} = \frac{R_{\text{annual}}^{\text{VA}}}{S_{\text{self}}} \times 100\% APY VA = S self R annual VA × 100% where: R annual VA = E annual ∣ V ∣ × γ + R prox from_delegators R_{\text{annual}}^{\text{VA}} = \frac{E_{\text{annual}}}{|\mathcal{V}|} \times \gamma + R_{\text{prox}}^{\text{from\_delegators}} R annual VA = ∣ V ∣ E annual × γ + R prox from_delegators Delegator APY :APY DC = R annual DC S DC × 100 % \text{APY}_{\text{DC}} = \frac{R_{\text{annual}}^{\text{DC}}}{S_{\text{DC}}} \times 100\% APY DC = S DC R annual DC × 100% where: R annual DC = S DC S VA total × R VA pool × ( 1 − γ ) × 0.63 R_{\text{annual}}^{\text{DC}} = \frac{S_{\text{DC}}}{S_{\text{VA}}^{\text{total}}} \times R_{\text{VA}}^{\text{pool}} \times (1-\gamma) \times 0.63 R annual DC = S VA total S DC × R VA pool × ( 1 − γ ) × 0.63 Example Calculation :Assumptions:
∣ V ∣ = 50 |\mathcal{V}| = 50 ∣ V ∣ = 50 validators
S total = 100 M S_{\text{total}} = 100M S total = 100 M FEN
γ = 5 % \gamma = 5\% γ = 5%
R annual per_VA = 10 , 519 , 200 50 = 210 , 384 FEN APY base = 210 , 384 × 0.95 100 M / 50 × 100 % = 199 , 865 2 M × 100 % ≈ 10.0 % \begin{align*}
R_{\text{annual}}^{\text{per\_VA}} &= \frac{10,519,200}{50} = 210,384 \text{ FEN} \\
\text{APY}_{\text{base}} &= \frac{210,384 \times 0.95}{100M / 50} \times 100\% \\
&= \frac{199,865}{2M} \times 100\% \\
&\approx 10.0\%
\end{align*} R annual per_VA APY base = 50 10 , 519 , 200 = 210 , 384 FEN = 100 M /50 210 , 384 × 0.95 × 100% = 2 M 199 , 865 × 100% ≈ 10.0% With proximity bonuses, effective APY can reach 12-15% .
Game Theory
Delegator Strategy
Rational delegators solve:
arg max v ∈ V APY ( v ) = arg max v R v × ( 1 − γ v ) × 0.63 S v total + S my \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}}} arg v ∈ V max APY ( v ) = arg v max S v total + S my R v × ( 1 − γ v ) × 0.63
Nash Equilibrium :
All validators converge to similar APY:
∀ v i , v j ∈ V : ∣ APY ( v i ) − APY ( v j ) ∣ < ϵ \forall v_i, v_j \in \mathcal{V}: \quad |\text{APY}(v_i) - \text{APY}(v_j)| < \epsilon ∀ v i , v j ∈ V : ∣ APY ( v i ) − APY ( v j ) ∣ < ϵ
where ϵ ≈ 0.5 % \epsilon \approx 0.5\% ϵ ≈ 0.5% (arbitrage threshold).
Validator Strategy
Validators compete on:
Commission Rate : Lower γ \gamma γ attracts delegators
Uptime : Missed blocks reduce rewards
Proximity Depth : Early delegators incentivized to stay
Optimal Commission :
γ ∗ = arg max γ l e f t γ × S total ( γ ) r i g h t \gamma^* = \arg\max_{\gamma} \\left\\{ \gamma \times S_{\text{total}}(\gamma) \\right\\} γ ∗ = arg γ max l e f t γ × S total ( γ ) r i g h t
Empirically, γ ∗ ∈ [ 3 % , 10 % ] \gamma^* \in [3\%, 10\%] γ ∗ ∈ [ 3% , 10% ] for competitive markets.
Proximity Mathematics
Fibonacci-Inspired Decay
The proximity coefficients follow a modified Fibonacci sequence :
α k = { 0.07 k = 1 0.05 k = 2 0.04 k = 3 0.035 − 0.005 × ( k − 4 ) 4 ≤ k ≤ 6 0.025 7 ≤ k ≤ 8 \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} α k = ⎩ ⎨ ⎧ 0.07 0.05 0.04 0.035 − 0.005 × ( k − 4 ) 0.025 k = 1 k = 2 k = 3 4 ≤ k ≤ 6 7 ≤ k ≤ 8
Decay Rate :
α k + 1 α k ≈ 0.714 for k ≤ 2 \frac{\alpha_{k+1}}{\alpha_k} \approx 0.714 \text{ for } k \leq 2 α k α k + 1 ≈ 0.714 for k ≤ 2
This mimics golden ratio decay:
ϕ = 1 + 5 2 ≈ 1.618 ⟹ 1 ϕ ≈ 0.618 \phi = \frac{1 + \sqrt{5}}{2} \approx 1.618 \implies \frac{1}{\phi} \approx 0.618 ϕ = 2 1 + 5 ≈ 1.618 ⟹ ϕ 1 ≈ 0.618
Expected Value Analysis
For delegator at depth d d d :
Expected Proximity Income :
E [ R prox ( d ) ] = ∑ j = 1 8 P ( 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}} E [ R prox ( d )] = j = 1 ∑ 8 P ( downline at depth j ) × α j × R ˉ downline
Assuming uniform distribution:
E [ R prox ] ≈ 0.30 × N ˉ downlines 8 × R ˉ \mathbb{E}[R_{\text{prox}}] \approx 0.30 \times \frac{\bar{N}_{\text{downlines}}}{8} \times \bar{R} E [ R prox ] ≈ 0.30 × 8 N ˉ downlines × R ˉ
where N ˉ downlines \bar{N}_{\text{downlines}} N ˉ downlines = average downline count.
Optimal Depth
Delegator utility maximization:
U ( d ) = R own + E [ R prox ( d ) ] − C wait ( d ) U(d) = R_{\text{own}} + \mathbb{E}[R_{\text{prox}}(d)] - C_{\text{wait}}(d) U ( d ) = R own + E [ R prox ( d )] − C wait ( d )
where C wait ( d ) C_{\text{wait}}(d) C wait ( d ) = opportunity cost of waiting for position d d d .
Result : Earlier positions (d < 100 d < 100 d < 100 ) have higher lifetime value.
Network Dynamics
Validator Growth Model
Network validator count evolves:
d ∣ V ∣ d t = λ join − μ exit \frac{d|\mathcal{V}|}{dt} = \lambda_{\text{join}} - \mu_{\text{exit}} d t d ∣ V ∣ = λ join − μ 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*} λ join μ exit = f ( APY , barriers ) = g ( opportunity cost , slashing risk )
Equilibrium :
∣ V ∣ ∗ : λ join = μ exit |\mathcal{V}|^* : \lambda_{\text{join}} = \mu_{\text{exit}} ∣ V ∣ ∗ : λ join = μ exit
Empirically, ∣ V ∣ ∗ ∈ [ 30 , 80 ] |\mathcal{V}|^* \in [30, 80] ∣ V ∣ ∗ ∈ [ 30 , 80 ] for mature networks.
Stake Concentration
Measure decentralization via Nakamoto Coefficient :
N c = min l e f t k : ∑ i = 1 k S i > 1 3 S total r i g h t N_c = \min\\left\\{ k : \sum_{i=1}^{k} S_i > \frac{1}{3} S_{\text{total}} \\right\\} N c = min l e f t k : i = 1 ∑ k S i > 3 1 S total r i g h t
Healthy Range : N c ≥ 7 N_c \geq 7 N c ≥ 7
Gini Coefficient :
G = ∑ i = 1 n ∑ j = 1 n ∣ S i − S j ∣ 2 n 2 S ˉ G = \frac{\sum_{i=1}^{n} \sum_{j=1}^{n} |S_i - S_j|}{2n^2 \bar{S}} G = 2 n 2 S ˉ ∑ i = 1 n ∑ j = 1 n ∣ S i − S j ∣
Target: G < 0.50 G < 0.50 G < 0.50 (moderate inequality).
Slashing Mechanism (Future)
Slashing is not active in current implementation. Planned for future hardfork.
Slashable Offenses
Offense Severity Slash % Jail Time Double Sign Critical 5% 7 days Downtime (>50 blocks) Major 0.1% 1 day Invalid System TX Critical 10% 30 days
S new = S old × ( 1 − p slash ) S_{\text{new}} = S_{\text{old}} \times (1 - p_{\text{slash}}) S new = S old × ( 1 − p slash )
Burned Amount :
B slash = S old × p slash B_{\text{slash}} = S_{\text{old}} \times p_{\text{slash}} B slash = S old × p 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 :
R reporter = B slash × 0.10 R_{\text{reporter}} = B_{\text{slash}} \times 0.10 R reporter = B slash × 0.10
Comparison with Other Systems
Feature Fenines FPoS BNB Chain Cosmos Hub Ethereum PoS Validator Selection Smart contract Hard-coded On-chain governance Permissionless Max Validators 101 21 175 Unlimited Min Stake 10,000 FEN 10,000 BNB 1 ATOM (variable) 32 ETH Block Time 3s 3s 5-7s 12s Finality 18s (6 blocks) 18s 7s 12.8 min Slashing Planned Active Active Active 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:
Decouples consensus from governance via dual-layer architecture
Incentivizes long-term participation through proximity rewards
Balances validator profitability with delegator returns
Ensures Byzantine fault tolerance with n ≤ 101 n \leq 101 n ≤ 101 validators
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