// SPEC·BNB · REVIEW_SOURCE
15 NOV 2026
πPASSIVE_INCOME[ SPEC ]← HOME
(08) - TECHNICAL_DOCUMENTATION · REVISION 0.2

TIME, TAX
AND BNB.

A finite, fee-funded reward system for PI on BNB Chain. Every acquisition has its own age. Holding time changes the exit fee and the holder's share of realized revenue.

IMPLEMENTED FOR REVIEW · NO PUBLIC DEPLOYMENT · OPENFOUR ADMISSION PENDING
BUY TAX5%
EXIT TAX10 → 1%
HOLDER FUND70%
REWARD ASSETBNB
(01) - ACQUISITION_MODEL

The clock belongs
to the PI.

A purchase on launch day and a purchase on day 365 both begin at the same 10% exit fee. A wallet's older balance cannot give a new purchase an immediate discount. New PI creates a new acquisition cohort; existing cohorts keep their age.

Conservative daily cohorts

Let D = 86,400 seconds, receipt time be t₀, and current time be t. All timestamps are Unix time. Integer arithmetic defines:

birth = ceil(t₀ / D)
age   = max(0, floor(t / D) - birth)

A checkpoint is reached at least its stated number of full days after receipt, and less than one day later. The 1% floor therefore activates after 30 to under 31 days. The first reward qualification takes 1 to under 2 days. This rounding never grants a new purchase an early discount across midnight.

Storage bound: at most 31 active daily cohorts plus one mature balance per wallet. Global settlement iterates over cohorts, never over every holder. Historical cohort checkpoints remain in storage so dormant accounts can settle their earned rewards.

Exit fee and reward weight at completed cohort-day checkpoints
AgeSell / transfer feeReward weight
0 days10%0×
1 day8%1×
3 days6%1×
7 days4%1.5×
14 days2%1.5×
30+ days1%2×

Fees decrease on each completed cohort day between these checkpoints. For adjacent checkpoints (a, h) and (b, l), with rates in basis points:

rate(d) = h - floor((h - l) × (d - a) / (b - a))
1 basis point = 0.01%; rate(d ≥ 30) = 100 bps
EXIT TAX 10.00%REWARD WEIGHT 0×

Newest acquisitions leave first

Exits consume the newest PI first, then older cohorts, then the mature balance. Example: hold 1,000 mature PI, buy 100 fresh PI, and sell 100 PI immediately. The exit uses the 10% cohort. The original 1,000 PI retain their age and weight. Selling everything clears the holdings, but never erases BNB already earned.

Gifts, own-wallet moves and transfers to unregistered intermediaries are exits too. The sender pays the applicable fee; the recipient receives fresh-age PI. Zero-value transfers and self-transfers do not change age or charge tax. This prevents a simple wallet transfer from laundering a fresh purchase into an old balance.

(02) - FEES_AND_SETTLEMENT

One project fee.
Two trading phases.

RouteBuySell / exit
OpenFour bonding5% added to curve quote in WBNBAge-weighted fee deducted from gross curve quote in WBNB
Canonical PancakeSwap V2 pool5% withheld from gross PI outputPer-cohort fee withheld from gross PI sent; pool receives net PI
Wallet transferNo separate buy feeSender's age fee withheld in PI; recipient clock restarts

These are PI project fees. OpenFour protocol and developer fees, AMM fees, gas, price impact and any platform launch protection are additional. The 10% cap is not a promise that total trading costs are capped at 10%.

No double tax during bonding

PiTradeModule quotes the fee from the actual trader's ledger. On the authorized Core-to-vault collection leg, PiToken consumes the acquisition lots but charges no second PI fee. The Core settles the quoted WBNB tax to PiTreasury. This exact caller, recipient and settlement order must be confirmed against the production Core.

OpenFour's quote fee is an integer number of basis points. A mixed-age sale rounds its balance-weighted rate upward by less than one basis point. After graduation, the token computes each consumed cohort's fee directly in PI with integer rounding down.

Only received assets fund the budgets

During bonding, quote fees arrive as WBNB. After graduation, PI fees accumulate in the treasury and are sold in bounded batches for WBNB. The split applies to the actual WBNB received, after conversion costs, not an assumed PI price or a displayed dollar amount.

7015105
BucketSharePermitted use
Holders70%Fund the WBNB-backed reward ledger
Buyback / burn15%Buy PI after graduation and reduce token supply
Liquidity10%Acquire PI, pair it with WBNB, and send LP to the burn address
Operations5%Withdraw only to the launch-configured operations account

Cumulative allocation targets preserve integer dust. For cumulative receipts R and bucket share pₖ, Aₖ = floor(R × pₖ / 100) and availableₖ = Aₖ - spentₖ. Unallocated rounding dust is less than four wei. No bucket can borrow from another. If no holders qualify, their entire allocation waits for a later round.

(03) - REWARD_ACCOUNTING

Time changes the share.
Never the pot.

At settlement, each retained acquisition contributes its PI balance multiplied by its current weight. For holder i, cohorts j, and the funded holder pot F:

Wᵢ = Σⱼ balanceᵢⱼ × weight(ageᵢⱼ)
W  = Σᵢ Wᵢ
rewardᵢ = F × Wᵢ / W

Two wallets with equal PI holdings at 1× and 2× divide a 3 BNB pot into 1 BNB and 2 BNB. If every wallet reaches 2×, the pot remains 3 BNB. A zero-weight wallet receives no allocation; a zero total weight defers the entire pot.

Bounded index accounting

The implementation uses integer weight units 0, 2, 3, 4, equivalent to 0×, 1×, 1.5×, 2×. For cohort weight w, it increments a reward-per-PI index by floor(F × w × 10³⁶ / W). Each account stores paid indices and an earned balance. Every balance change settles its old entitlement before moving PI.

At maturity, a cohort records the mature-index checkpoint and merges into the mature balance. Dormant holders retain all previously accrued index differences. Whole-wei rounding remainder carries into later rounds; fractional account entitlements remain attached to the account.

Allocation every 15 minutes, claims when needed

distribute() is permissionless and accepts a funded round no more frequently than every 900 seconds. Contracts do not wake themselves up. A keeper or user must call it. The operational target is 15 minutes when the batch is economical; low activity accumulates funds for later settlement.

Allocation credits a claimable balance. It does not push BNB to every holder. A holder calls claim(recipient, true) for native BNB, or claim(recipient, false) for WBNB. If the recipient rejects BNB, the contract rewraps it and transfers WBNB. A failed transfer reverts atomically; unpaid entitlement remains.

Eligibility is measured at allocation time. The model does not assign historical trading fees to a past holder set. An acquisition earns no index allocation made before it arrived, but may share in accumulated, still-unallocated revenue once it qualifies. Delayed settlement and large-holder fee recapture therefore remain economic review topics.

paid rewards + unpaid funded entitlement ≤ holder funding
new fee receipts = 0  ⇒  new fee-funded rewards = 0

Pool balances, bonding inventory, burn addresses and protocol processing balances are excluded. No reward minting, fixed APR, rebase or borrowing backs the reward pot.

(04) - CONTRACT_COMPOSITION

A custom
OpenFour preset.

The reviewed OpenFour developer interfaces permit custom token, curve, trade, vault and migration modules. PI requires those custom components; a standard constant-tax preset does not implement per-acquisition age. Preset registration and production acceptance remain OpenFour decisions.

TRADERpurchase / sale
→
CORE + TRADEcurve quote + age fee
→
TREASURYrealized WBNB split
→
REWARDSfund / index / claim
ComponentResponsibility
PiTokenERC-20, canonical pool registration, PI transfer taxes and acquisition ledger hooks
PiRewardsBounded cohorts, exit quotes, funded indices and BNB/WBNB claims
PiTreasury70/15/10/5 budgets, conversion, burn, locked LP and price guards
PiTradeModule5% buy quote and trader-specific sell quote to the treasury
PiCurveModuleTransparent virtual-reserve pricing with no extra curve exit penalty
PiVaultInherited OpenFour TaxBondingVault custody and settlement hooks
PiMigrateModuleGraduation, matching opening liquidity price and LP burn custody
PiTokenModuleBound token initialization from the authorized Core
PiPresetValidatorSupply, quote, module bindings, raise target and sufficient LP inventory
PiRatesShared immutable age, tax and reward-weight arithmetic

Trading and processing are separate transactions

Ordinary transfers update the bounded accounting ledger. They do not call a swap router, external payout recipient or keeper. Conversion, buyback, liquidity and claims run separately. A stale price observation or an uneconomic treasury batch can delay processing without preventing an ordinary exit.

The treasury fixes its router and quote asset at initialization. Processing requires the canonical, registered pool; a 30-minute time-weighted price observation no older than two hours; spot deviation at most 5%; an input no larger than 0.5% of the relevant pool reserve; and a minimum output at least 95% of the observed price. The deadline is at most five minutes. These limits reduce execution risk; they are not a proof of immunity to manipulation in thin liquidity.

(05) - LAUNCH_AND_MIGRATION

One ledger.
Through graduation.

The recovered concept's maximum supply of 1 billion PI is retained in this review implementation. All initial supply goes to the bonding vault. There is no initial team-token allocation. The 5% operations share is a fee budget, not an initial allocation. Sale inventory and the virtual reserves below are a reproducible test configuration, not approved launch pricing.

Curve and opening liquidity

Let S be PI sold, X₀ virtual PI, Y₀ virtual WBNB, and R actual curve-raised WBNB. Then x = X₀ - S and y = Y₀ + R.

buy ΔPI:  quote = ceil(y × ΔPI / (x - ΔPI))
sell ΔPI: quote = floor(y × ΔPI / (x + ΔPI))
spot price = y / x
PI to seed at graduation = floor(R × x / y)

Only the actual raised R moves into LP. Virtual WBNB is a pricing parameter, never a treasury asset. Matching the terminal ratio avoids seeding all reserved PI at an unrelated lower price. Remaining unused launch inventory is sent to the burn address; it remains in ERC-20 totalSupply but is unspendable. Treasury buyback burns, in contrast, reduce totalSupply.

Local test fixture, not final launch parameters
Initial supply1,000,000,000 PI
Sale inventory800,000,000 PI
Virtual reserves1,000,000,000 PI / 100 WBNB
Curve-raised WBNB at full sale400 WBNB, excluding project and platform fees
Graduation LP160,000,000 PI + 400 WBNB
Unused inventory sent to burn address40,000,000 PI

The canonical PancakeSwap V2 pair is created and registered before the initial supply is minted. PI transfers to it are blocked until the permitted migration phase. Graduation requires the sale to be exhausted within a 1 PI dust tolerance. LP is minted to 0x000000000000000000000000000000000000dEaD. Acquisition ages and previously earned rewards stay in the same ledger.

A WBNB-only donation to the otherwise empty pair can increase its opening quote balance. The terminal-price equality assumes no such donation. This condition and the production Core's phase transitions must be covered in integration review.

(06) - ECONOMIC_LIMITS

Solvent accounting.
Variable demand.

For buy volume Vᵦ, sell volume Vₛ, and average sell tax r̄ₛ, a constant-price gross-fee scenario is G = 0.05Vᵦ + r̄ₛVₛ. If conversion losses are c, indicative received quote is R = G(1-c) and the holder budget is 0.70R.

Example: 100 BNB of gross notional volume, split evenly between buys and sells, a 4% average sell fee and 0.5% conversion loss gives 4.4775 BNB of receipts. The budgets are 3.13425 BNB to holders, 0.671625 to buybacks, 0.44775 to liquidity and 0.223875 to operations. This is arithmetic under assumptions, not a volume or yield forecast.

The entry and exit hurdle

Ignoring market moves and all non-project costs, 100 units spent through a DEX buy and immediate sell leave 100 × 0.95 × 0.90 = 85.50. A mature exit leaves 100 × 0.95 × 0.99 = 94.05. Bonding buy tax is added to quote instead: a 100-unit all-in budget before platform fees buys 100 / 1.05 of curve quote, and an immediate 10% exit leaves about 85.7143.

Rewards may or may not offset this hurdle. High taxes can reduce trading volume. Selling PI tax inventory produces market sell pressure; spending 15% of those proceeds on buybacks is not independent external buying demand. LP and burns do not guarantee price appreciation.

Batch by cost, not only by clock

The keeper's operating target is total processing gas at most 1% of the associated received fee budget, equivalent to 20% of the operations allocation. For estimated gas g and gas price p, the batch should satisfy fee budget ≥ g × p / 0.01. Gas must be estimated on the intended transactions and current network.

This is a keeper policy, not an on-chain prohibition on someone voluntarily paying for a smaller permissionless batch. The operations account receives its fixed budget; the contracts cannot verify how that account later spends it. No automatic keeper gas reimbursement is implemented.

Large holders can recapture part of their own trading fees through the common pot. A holder with 100% of eligible weight can reclaim the holder portion of a fee, but still bears the remaining budgets and trading costs. Short-term reward capture around a delayed allocation, custody wrappers and secondary market routing require economic assessment before launch.

(07) - VERIFICATION_AND_CONTROLS

Evidence you
can reproduce.

TEST REPORT LOADING

The supplied suite uses actual WBNB and PancakeSwap V2 router, factory and pair bytecode on a local BNB fork. The OpenFour Core is a clearly labelled local settlement harness. No PI contract was deployed publicly and no public-chain transaction was submitted.

Compiler: Solidity 0.8.24, optimizer 200 runs, viaIR. OpenZeppelin: 4.9.6. Fork block: 133771470. The package includes exact dependency locks, source, ABIs, measured gas, tests and upstream source hashes.

Measured local-fork gas units, not a global worst-case proof
OperationGas units
Loading verified report...
View individual test results

    Read the machine-readable test report →

    Control boundaries

    • The PI implementation has no fee setter, general treasury withdrawal or arbitrary router call. Operations can withdraw only their 5% bucket to the configured account.
    • OpenFour's registry, beacon upgrades, Core, vault and phase controls remain external trust dependencies. Fixed rates in this source do not remove a platform-controlled upgrade path.
    • The canonical pool is the supported route. An ERC-20 cannot identify an unknown transfer as a buy, nor see the beneficial owners inside a centralized exchange or wrapper. Unknown pools can have different entry-fee behavior; outgoing wallet fees and fresh receipt age still apply.
    • Providing or removing personal liquidity is not granted a special tax exemption. Any additional pool or route needs an explicit compatibility review.
    • BNB backing is held as canonical WBNB. The treasury and reward ledger do not lend it or invest it. Unsolicited assets sent directly to these contracts have no general recovery function.

    This is implementation and local verification evidence, not an independent security audit, formal verification, OpenFour approval or a production-readiness certificate.

    (08) - REVIEW_SOURCE

    Read it.
    Build it. Test it.

    The review archive contains the recovered frontend, updated brandbook, economic specification, Solidity source, upstream interfaces, deterministic tests, fork tests, ABIs and verification reports. Its README includes reproducible commands and the precise remaining integration work.

    Download file ↓
    Loading review source...

    Reproduce the verification

    cd contracts
    npm ci
    npm run compile
    PI_FORK_URL=https://bsc-rpc.publicnode.com \
    PI_FORK_BLOCK=133771470 npm test
    
    # From the repository root:
    node --test tests/economics.test.cjs
    node scripts/serve.mjs

    Use an archive-capable BNB RPC for the pinned block. Tests execute on an ephemeral local Hardhat chain. src/test/CoreHarness.sol is test infrastructure and is not part of the production preset. No private key or deployment script is included.

    OpenFour source basis: developer documentation at commit 8ca5554 →. The vendored subset retains its original MIT notices and hashes. The archive also retains the recovered website's original fonts and their licenses.

    (09) - OPENFOUR_INTEGRATION

    What the platform
    needs to verify.

    1. Real settlement order: the actual trader and token amount used by TradeModule, caller of the token collection leg, WBNB fee destination, exact-output quotes and any forwarding or Permit2 paths. Confirm there is one project fee, not two.
    2. Registry composition: authorized implementation identifiers, token factory semantics, module initialization order, preset schema, validator binding, upgrade authority and fee cap. Pin the reviewed production versions and addresses.
    3. Graduation: Core and vault phase transitions, token/quote transfer permissions, migration return encoding, pre-created canonical pair acceptance, dust tolerance and every failure path. Verify actual post-graduation liquidity and LP custody.
    4. Frontend compatibility: age-aware quotes, separate platform/AMM costs, fee-on-transfer swaps, maximum slippage, no stale wallet-wide discount, WBNB/BNB claims and exact next-reduction timestamps for each acquisition.
    5. Adversarial review: reward accounting over long dormancy, rounding, all cohort bounds, reentrancy, gas limits, oracle manipulation, donation attacks, secondary pools, reward capture and keeper failure.
    6. Launch configuration: final sale allocation, virtual reserves, raise target, operations recipient, supported router and WBNB, keeper operations and independent audit findings resolved before signing deployment transactions.

    The requested core mechanics fit a custom OpenFour implementation. The remaining integration work concerns the real platform composition and release review, not whether an EVM can represent acquisition age or pay funded BNB rewards.