Planet

[ whitepaper · v1.9 · complete edition · TON testnet ]

Planet — an on-chain commodity purchasing-power index.

Planet (PLT) aggregates the real prices of a basket of global commodities into a single on-chain purchasing-power index (PPI), expressed as a TEP-74 token on TON. This page is the complete whitepaper — mathematics, basket, stability, oracle, governance, tokenomics, worked simulation and technical appendix.

deep-linkable: #full · #light · your choice is remembered

This is the light summary. The complete edition — mathematics, basket table, worked simulation and technical appendix — is on the complete edition view.

1. Overview

Planet (PLT) aggregates the real prices of a basket of global commodities — energy, metals and agriculture — into an on-chain purchasing-power index (PPI), and expresses that index as a TEP-74 token on TON. A wallet can mint PLT by depositing value at the current PPI, and burn PLT to redeem against the basket.

Phase 1 status. Planet is a proof-of-concept synthetic index token. It holds no real commodity reserve and is not a fully-collateralised stablecoin. The full “1:1 commodity reserve” variant is a future phase that requires an RWA custodian and regulatory compliance.

2. Architecture

LayerComponentStatus
L4Fund — tokenised ETF shares (subscribe / redeem at NAV)implemented
L3Stability & risk — tiered fees, elastic curve, arbitrage, bonds, risk fund, circuit-breakersimplemented
L2CAM adapter — per-commodity standardisation (price / volatility / liquidity / risk)phase A
L1PlanetCore — basket, on-chain PPI, mint/burn, fees, redemption mirrorimplemented
L0Reserve / RWA — physical & ETF custody, proof-of-reservefuture

3. The index (PPI)

The owner configures a weighted basket — currently 14 commodities — and locks the base prices on-chain. A relayer submits signed per-asset prices; PlanetCore recomputes the PPI from the live basket. An asset flagged as frozen is excluded and the remaining weights are re-normalised; if nothing is active the index is undefined and minting is refused.

4. Mint / burn and fees

Minting deposits value and issues PLT at the current PPI, net of a tiered fee. Each fee is routed 30% burn · 50% reserve · 20% staking, less a 10% risk-fund carve-out. Burning goes through the TEP-74 jetton wallet and is mirrored back to core accounting so supply stays consistent.

5. Stability mechanisms

6. Oracle

Prices are sourced off-chain from two independent feeds, combined as a median, and signed with ed25519. PlanetCore verifies against an M-of-N signer set (distinct signers enforced) and applies guards: strictly increasing timestamps, a single-update price-jump limit, a freshness ceiling on minting, and automatic freeze on source divergence.

7. Governance

All privileged actions require the owner. Ownership is migrated to a timelock and routed through Propose → delay → Execute, giving holders a reaction window; the timelock’s owner should be a multisig for M-of-N plus delay. A staking token (PLTG) distributes fee revenue pro-rata and carries stake-weighted parameter signalling. The original DAO plan, and exactly what is live today, are set out in §9 of the complete edition.

8. Status & roadmap

9. Disclaimer

This is a technical proposal and a proof-of-concept, not investment advice. It is not audited. Commodity prices are volatile and an early-stage index token may diverge materially from its theoretical PPI. Do not use with value you cannot afford to lose.

0. Status, scope and honesty

This document describes Planet v1.9, a working proof-of-concept deployed on the TON testnet. It is written to be falsifiable: every mechanism is marked implemented · design · future.

Red lines. PLT is a synthetic index token. It has no physical reserve, is not a stablecoin, and is not “fully collateralised”. Market price may diverge materially from the theoretical index. Nothing here is investment advice.

1. Problem & design goals

2. Architecture & contracts

2.1 Layer map

L4  Fund           tokenised ETF shares; subscribe/redeem at NAV             [implemented]
L3  Stability      tiered fees · elastic curve · arbitrage · bonds ·
                   risk fund · circuit-breakers                            [implemented]
L2  CAM            per-commodity adapter: price/vol/liquidity/risk state    [phase A]
L1  Core           basket · on-chain PPI · mint/burn · fees · redemption
                   mirror · governance basket ops                          [implemented]
L0  Reserve/RWA    physical & ETF custody · proof-of-reserve               [future]
(no self-built DEX/AMM; trades happen on external venues)

2.2 Contracts

ContractRoleStatus
PlanetCorebasket, on-chain PPI, mint/burn, fees, limits, oracle state, governance basket opsimplemented
JettonMinter / JettonWalletPLT — a TEP-74 jetton; the Core is the minter’s adminimplemented
PlanetTimelockowner of Core; Propose → delay → Executeimplemented
PlanetGovPLTG staking, pro-rata fee dividends, stake-weighted signallingimplemented
PlanetBondstabilisation bonds (subscribe / request / operator-settled redeem)implemented
PlanetFundtokenised ETF shares; custodian-signed NAV actions; trustless TEP-74 redemptionimplemented

2.3 Data, fixed point and the TVM

The TON Virtual Machine has no floating point. All arithmetic is integer fixed-point: the index uses a 1e6 scale (1e6 ≡ 1.0), the weight sum is 1e6, and reward accounting uses 1e12. Contract state lives in cells (≤1023 bits inline, ≤4 refs), so the asset map is stored in a dictionary reference. PLT is a TEP-74 jetton; the jetton minter is the single source of truth for supply.

2.4 Message flow

mint      user wallet ──Mint─────────────────────────▶ PlanetCore ──MintNewJettons─▶ PLT minter ─▶ wallet
burn      user wallet ──AskToBurn─▶ own jetton wallet ─▶ PLT minter ──BurnNotification─▶ PlanetCore (mirror)
prices    relayer ──SignedPriceUpdate(payload, sigs)─▶ PlanetCore   (anyone may relay; the signature is authority)
admin     owner ──TlPropose─▶ PlanetTimelock ──(wait delay)── operator ──TlExecute─▶ dest contract

3. The index: basket & PPI

3.1 The live basket (14 commodities)

The full design targets 20+ commodities, each class ≤15%, with global geographic spread. The live testnet basket holds 14; the futures column is the price reference and the ETF column the investable proxy for the future reserve phase.

#ClassCommodityFutures / indexETF proxyWeightPrice source
0EnergyWTI CrudeCL=F (NYMEX)USO14.0%Yahoo + Sina (median)
1EnergyBrent CrudeBZ=F (ICE)BNO11.0%Yahoo + Sina
2EnergyNatural GasNG=F (NYMEX)UNG8.0%Yahoo + Sina
3MetalsGoldGC=F (COMEX)GLD12.0%Yahoo + Sina
4MetalsSilverSI=F (COMEX)SLV7.0%Yahoo + Sina
5MetalsCopperHG=F (COMEX)CPER6.0%Yahoo + Sina (unit-scaled)
6AgricultureWheatZW=F (CBOT)WEAT9.0%Yahoo
7AgricultureCornZC=F (CBOT)CORN7.0%Yahoo
8AgricultureSoybeanZS=F (CBOT)SOYB6.0%Yahoo
9SoftsCoffeeKC=F (ICE)JO4.0%Yahoo
10IndustrialLumber / timber—WOOD4.0%Yahoo
11IndustrialLithium—LIT3.0%Yahoo
12WaterWater rights / utilitiesNQH2O (CME, design)PHO5.0%Yahoo
13CarbonCarbon creditsGEO (CME, design)KRBN4.0%Yahoo

Weights sum to exactly 100% and no single weight may exceed 15%; both are enforced on-chain on every price update. The v1 whitepaper listed an additional rubber (TSR20) line, which is not in the live basket.

3.2 Definition

Let assets be i = 1…n with weight wi, locked base price Pibase and current price Pi. Let A be the set of active (non-frozen) assets.

(1)PPI = Σi∈A wi · PiPibaseΣi∈A wi (2)PPI = 0  if  Σi∈A wi = 0  (no active asset ⇒ the index is undefined)

3.3 Worked example

Take three assets A, B, C with weights 0.5 / 0.3 / 0.2 (encoded 500000 / 300000 / 200000), base prices 100 / 50 / 80, current prices 110 / 47.5 / 84:

(1a)A ×1.10   B ×0.95   C ×1.05 (1b)PPI = 0.5(1.10) + 0.3(0.95) + 0.2(1.05) = 0.550 + 0.285 + 0.210 = 1.045 (1c)if B freezes: PPI = (0.5·1.10 + 0.2·1.05) / (0.5 + 0.2) = 0.76 / 0.70 = 1.0857… (1d)if A, B and C all freeze: PPI = 0 ⇒ minting refused (eq. 2)

(1c) is the consequence readers should internalise: excluding a falling asset raises the index. That is arithmetically correct — the remaining basket really is worth more per active unit — and is exactly why the freeze state is a governed, observable action rather than an automatic one.

4. Mint, redeem & fees

Let D be the value deposited, B the PLT burned, and f the fee rate for the current band.

(3)M = D · (1 − f) / PPI   PLT minted (4)R = B · PPI · (1 − fburn)   value returned (5)F = D · f   fee collected

4.1 Mint gating

(6)tnow − tlastUpdate ≤ MAX_ORACLE_AGE = 6 h   freshness (7)PPI > 0   the index is defined (eq. 2)

(6) means the protocol never mints while the oracle is stale; (7) closes the frozen-basket hole. These are the only two “market” reasons a mint can be refused.

4.2 Fee routing

(8)F = Fburn + Freserve + Fstake + Frisk burn 30% · reserve 50% · staking 20%, then 10% of the fee is carved into the risk fund (net 30 / 40 / 20 / 10)

Why the reserve bucket is the largest: in the fully-backed future phase the reserve must grow at least as fast as the index, otherwise the collateral ratio decays. The v1 whitepaper used 45 / 30 / 25 (burn / reserve / staking); this is a deliberate re-weighting, not an oversight (§10.2).

4.3 The redemption path

Redemption is a jetton burn: the wallet sends AskToBurn to its own jetton wallet, which burns and notifies the PLT minter, which in turn notifies the Core so accounting stays mirrored. Supply is authoritative at the minter, never at the Core.

5. Stability mechanisms

5.1 Tiered fee and circuit-breakers

|PPI − 1|FeeBehaviour
≈ 0 (near peg)0.5%normal
3% – 5%1%dampened
> 5%2% + slopeelastic; the slope steepens with deviation
> 15%—mint refused
(9)f(x) = fbase + SLOPE · max(0, |x| − 0.05),   x = PPI − 1 (10)fburn ≤ MAX_BURN_FEE   so the payout R ≥ 0 always

5.2 Asymmetry and arbitrage

(11)fmint′ = fmint − arbRebateBps  when PPI > 1.03

Redemption is deliberately not symmetric with minting: exiting below peg carries an extra penalty (bounded by (10)), while minting below peg is what re-floats the index. When the index is rich the protocol pays a rebate so an external arbitrageur is rewarded for pushing price back toward PPI.

5.3 Risk fund

(12)Frisk += F · RISK_SHARE   funded on every fee (13)reserve += a  if  riskFund ≥ a   owner CoverDeficit

5.4 Stabilisation bonds

(14)face = principal · (1 + premiumBps/104)

Below peg, holders can subscribe at a discount to be repaid a premium. Bonds are requested by the holder and settled by the operator — asking to redeem can never destroy a claim before it has been paid. Owner-opened, owner-priced, bounded.

5.5 Dual-track anchoring

Scenariomarket < PPImarket > PPI
System responsediscount minting openspremium redemption opens
User incentivePLT is cheap relative to the index, so minting paysburning back toward PPI pays
Instrumentfee slope + bonds + risk fundarbitrage rebate (11) + elastic fee (9)

5.6 Hard limits

Per-transaction limits (SetLimits), a global pause (SetPaused), and the >15% mint refusal are hard circuit-breakers that do not depend on incentives.

6. CAM adapter layer — failure isolation

Each commodity has a CAM (Commodity Adapter Module) emitting a standardised tuple (price, volatility, liquidity, riskState) with riskState ∈ {normal, caution, frozen}.

(15)frozen ⇒ i ∉ A  ⇒ excluded from (1) and exempt from rebalancing

This is the core safety property: a single bad source, price or liquidity event is contained. The protocol propagates the state — raising fees, lowering limits, freezing one asset — rather than the error, so one commodity cannot poison the index. Adding or retiring a commodity does not require touching the core.

7. Oracle & price integrity

7.1 Sources

The relayer fetches each commodity from two independent sources (Yahoo Finance and Sina for the energy/metals complex), takes the median, and signs the result. If the two diverge beyond 2%, the asset is emitted as frozen rather than guessed.

7.2 Verification

(16)accept ⇔ |{ s ∈ S : verify(H, σs, pubs) }| ≥ threshold H = hash(payload); distinct signers enforced by a used-signer bitmask; the price domain is separated from other message domains

7.3 Guards

(17)tpayload > tlastUpdate  strictly increasing ⇒ replay is dead (18)|Pnew − Pold| / Pold ≤ 50%  single-update jump limit (19)spread(sources)/median > 2% ⇒ freeze  divergence guard

7.4 Freshness model (two different clocks)

ClockValueMeaning
On-chain mint guard6 hminting is refused on stale prices — a safety property (eq. 6)
API/monitor health SLA26 hwhen the feed is reported UNHEALTHY, i.e. “the scheduled push actually missed”

They are intentionally different. Stated plainly: with a daily push, minting is available within 6 h of a push.

7.5 Key management

Signer keys live in a set (SetSigner{index,key}); writing a slot revokes what was there, and SetThreshold{m} raises M. Rotation goes through the timelock, never directly. The price-signing key is deliberately separated from the owner key: a leak of the former can only submit guarded prices, never touch funds.

8. Rebalancing (RTRA)

(20)ΔAi = ( wi − Vi / Σj Vj ) · T

9. Governance & the DAO plan

9.1 What the original whitepaper (v1.0) planned

The first whitepaper specified a governance token PLTG, fixed at 1,000,000,000 units, with a published allocation and vesting schedule:

BucketShareVesting
Community incentives40%5-year linear (liquidity mining)
Protocol treasury25%DAO-controlled, ecosystem
Core team15%2-year lock + 3-year linear
Investors12%1-year lock + 2-year linear
Public sale8%fully released at TGE

The DAO was to control, by PLTG vote:

PLTG captured value two ways: staking dividends — a share of fees paid periodically in stable value — and voting power. Liquidity providers of the PLT/stable pool were to receive PLTG rewards. The roadmap scheduled DAO governance launch in Q2 2026. Anti-fragility commitments included spreading reserve assets across 10+ venues and a minimum collateral ratio of 105%.

The v1 fee split was 45 / 30 / 25 (buyback-burn / reserve / staking); the implemented split is 30 / 50 (+10 risk) / 20 — the reserve bucket was deliberately re-weighted upward.

9.2 What is live today

v1 DAO elementToday
PLTG token, fixed supply 1e9implemented — deployed; supply verified on-chain
PLTG stakingimplemented — stake/unstake, with a vote-lock so a voter cannot exit before the proposal closes
Staking dividends (fee revenue share)implemented — pro-rata reward-per-share, owner-notified
Stake-weighted parameter votingimplemented — but advisory: proposals record an outcome and do not execute on-chain
DAO actually controlling weights / fees / thresholdsdesign — parameter control is the owner (timelock); the vote signals
DAO choosing the reserve custodianfuture — no custodian exists yet
1e9 allocation & vesting (40/25/15/12/8)future — the full supply is currently held by the deployer

Honest summary. The economic layer of the DAO (PLTG staking and fee dividends) is implemented and tested. The decision layer is not: votes are advisory, and real parameter authority sits with the owner behind a 60-second timelock on testnet. Closing that gap — binding, executed proposals — is a deliberate design step, not a claim we make today.

9.3 Privileged actions and the timelock

(21)Execute ⇔ now ≥ eta = proposeTime + delay  ∧  ∃ pending (dest, body)

Owner-gated operations: basket weights / add-asset, fee parameters, limits, oracle signer set, pause, and ownership itself. Ownership changes must themselves go through Propose → delay → Execute; a direct owner call is rejected. The delay is the holders’ reaction window, and the timelock’s owner should be a multisig (M-of-N plus delay).

9.4 Staking dividend mathematics

(22)accRPS ← accRPS + ⌊ R · 1012 / S ⌋   R = reward, S = total staked (23)claimable = ⌊ si · accRPS / 1012 ⌋ − debti (24)debti ← ⌊ si · accRPS / 1012 ⌋   on every stake/unstake/claim

A classic reward-per-share accumulator. Note (22) floors: dust stays in the pool rather than being minted. Reconciling that dust is one of the things an auditor should check.

10. Tokenomics

10.1 Token system

TokenSymbolFunctionSupply
Index tokenPLTpayment / store / unit of account for the indexelastic (mint/burn)
Governance tokenPLTGparameter voting + fee dividendsfixed 1,000,000,000
(25)supplyPLT = Σ minted − Σ burned   the jetton minter is the source of truth (26)Mnew = D(1 − f) / PPI   mint equation (as (3)) (27)R = B · PPI · (1 − f)   redeem equation (as (4))

10.2 Fee flow, v1 vs now

v145% buyback-and-burn · 30% reserve · 25% PLTG staking rewards now30% burn · 50% reserve · 20% staking, less a 10% risk-fund carve-out (net 30/40/20/10)

10.3 PLTG utility

10.4 Allocation & vesting

The v1 schedule (§9.1) stands as the intended distribution; it has not been executed, and the current supply sits with the deployer. It must be distributed before any binding governance, or the vote is meaningless.

11. Fund (tokenised ETF shares)

The Fund is the L4 wrapper: it issues shares against a basket of ETF positions at NAV, so holders get fund-style exposure rather than a purely synthetic index. Actions that move NAV (mint, custody changes) are custodian-signed under an M-of-N policy; redemption is trustless — the fund receives its own TEP-74 share tokens on a normal transfer notification and burns them, releasing the claim, without an operator having to co-operate.

12. Trust & threat model

ActorCanCannot
Usermint / redeem / stake / vote / transfer — always signing in their own wallet—
Hot signing keysubmit price payloads, bounded by eq. 16–19touch ownership, parameters or funds
Ownerchange parameters after the timelock delayact instantly; bypass Propose → delay → Execute
Custodian (future)attest NAV under an M-of-N policymove user assets unilaterally

13. Evidence

14. Roadmap

PhaseContentStatus
P0TON core — basket, on-chain PPI, mint/redeem, redemption mirrordone
P1Stability — fee tiers, elastic slope, arbitrage rebate, risk funddone
P2Front end — site, dashboard, Telegram Mini Appdone
P3Real feeds — dual source, median, freeze guard, M-of-N signingdone
P3bTokenised ETF fund with trustless redemptiondone
P4PLTG — allocation & vesting; binding, executed governancedesign
P5RWA — real reserve, custody, proof-of-reserve, compliance (the “1:1” variant)future
P6Cross-chain distributionfuture
—Third-party audit, multisig owner, bug bountypending

15. Risks & compliance

Appendix A — worked economic simulation

Reproducing the v1 simulation with the current mechanics. Scenario: the energy complex rallies and the composite index rises 4.5% — from 1.000 to 1.045 (per eq. 1b).

(A1)PPI: 1.000 → 1.045 ⇒ 4.5% off peg, so the fee band is 1% (table, §5.1) (A2)a participant deposits D = 1,000,000 (A3)fee F = 1,000,000 × 1% = 10,000 (A4)minted M = 1,000,000 × 0.99 / 1.045 = 947,368.4 PLT (A5)fee split: burn 3,000 · reserve 5,000 · staking 2,000; of the total fee, 1,000 funds the risk reserve (net 3,000/4,000/2,000/1,000) (A6)supply expands by 947,368.4 units at index 1.045 ⇒ buying pressure pushes market price back toward PPI

The v1 whitepaper’s own numbers (a 10% oil move, a 0.5% fee, 970,873 PLT for 1,000,000 in) have the same shape; what changed is the fee band and the routing. Note the fee is charged on the deposit, so the minted amount is monotonically decreasing in both the fee and the index — there is no path where a minter receives more than D/PPI.

Appendix B — API reference

EndpointMethodReturns
/api/v1/statusGETindex PPI, supply, reserve, fee buckets, the full 14-asset basket with weights and prices, signer threshold
/api/v1/oracleGEToracle health: freshness, age, maximum age, signer count/threshold, weights validity, frozen list, healthy
/api/v1/oracle?full=1GETthe above plus a full basket scan
/openapi.jsonGETOpenAPI 3.1 description of the above
/api/statusGET308 permanent redirect to /api/v1/status (with Deprecation/Sunset headers)

On-chain interactions (mint, burn, stake, vote) are not REST calls: they are TON messages signed in the user’s own wallet and constructed by the Mini App. The API is read-only.

Appendix C — code excerpts (Tolk)

The v1 appendix carried Solana/Rust snippets. These are the TON equivalents that actually run, abbreviated for readability.

C.1 The index (§3)

// Re-normalised weighted mean over ACTIVE (non-frozen) assets, 1e6 fixed point.
fun computePpi(assets, count) {
    var num = 0; var den = 0;
    for (i in 0..count) {
        val a = assets.mustGet(i);
        if (a.riskState == FROZEN) { continue; }              // eq. (15)
        num += a.weight * (a.currentPrice * SCALE / a.basePrice);
        den += a.weight;
    }
    if (den == 0) { return 0; }                                // eq. (2): undefined, not 1.0
    return num / den;
}

C.2 Fee band (§5.1)

// Tiered fee + elastic slope; >15% is refused elsewhere as a hard breaker.
fun feeBpsForPpi(ppi) {
    val d = abs(ppi - SCALE);
    var f = BASE_FEE;                                          // 0.5%
    if (d > SCALE * 3 / 100) { f = 100; }                      // 1% at 3-5%
    if (d > SCALE * 5 / 100) { f = 200 + SLOPE * (d - SCALE*5/100) / SCALE; }   // eq. (9)
    return f;
}

C.3 Oracle verification (§7.2)

// Anyone may relay; the signature is the authority. Distinct signers via a bitmask.
fun handleSignedPriceUpdateN(msg) {
    val os = OracleState.fromCell(storage.oracleState);
    val h  = priceHash(msg.payload);
    var used = 0; var matched = 0;
    for (k in 0..n) {
        val sig = ...;
        for (j in 0..os.signerCount) {
            if (!((used >> j) & 1) && isSignatureValid(h, sig, os.signers.get(j))) {
                used = used | (1 << j); matched += 1; break;
            }
        }
    }
    assert (matched >= os.threshold);                          // eq. (16)
    applyOraclePayload(msg.payload);                           // eqs. (17)-(18)
}

C.4 Rebalancing (§8)

// Target trade per asset; execution happens on external venues, never in-protocol.
fun rebalanceDrift(assets, count, totalReserve) {
    for (i in 0..count) {
        val a = assets.mustGet(i);
        if (a.riskState == FROZEN) { continue; }               // never trade a frozen asset
        val delta = (a.weight - a.value * SCALE / totalReserve) * totalReserve / SCALE;   // eq. (20)
    }
}

C.5 Staking dividends (§9.4)

// Reward-per-share accumulator, 1e12 fixed point.
fun notifyRewards(r) {
    assert (sender == storage.owner && storage.totalStaked > 0);
    storage.accRewardPerShare += r * RPS_SCALE / storage.totalStaked;   // eq. (22)
    storage.accRewards += r;
}
fun pending(s) { return s.amount * storage.accRewardPerShare / RPS_SCALE - s.rewardDebt; }  // eq. (23)

Appendix D — security & audit appendix

D.1 TVM-specific properties

D.2 The review register

A first-party review found and fixed 10 issues, each with a regression test: an undefined index returned 1.0 and permitted minting; timelock ownership could bypass the delay; a failed executed action could fail silently; a voter could unstake immediately; proposal spam; bond redemption could destroy a claim without payment; the bond premium was unbounded; and a supply underflow. Three further items are documented as by design (mirror freshness asymmetry, accounting-only burn bucket, advisory proposals) and four as hardening for the next version (per-asset staleness, sweeping parked TON, enabling M>1 threshold, wiring the fund).

D.3 What an auditor should attack

  1. Manipulating the freeze state to profit from re-normalisation (eq. 1c).
  2. Fee accounting: do the buckets reconcile with the actual token balance?
  3. Payload encoding / domain separation: any ambiguity or cross-class replay?
  4. Timelock: can dest/body be swapped between propose and execute?
  5. Reward-per-share rounding: extractable dust, or a griefing path?
  6. Supply identity (eq. 25) under adversarial ordering of mint/burn/mirror messages.

Appendix E — off-chain services

Appendix F — deployment & monitoring

ConcernMechanism
Build & testCI on every push: compile, unit tests, coverage gate (>90, ratchet up only)
Deploy safetyan emulation dry-run job validates the deploy scripts before any TON is spent; a documented runbook covers the address set
Price feeda scheduled push job; a gas-balance guard that fails loudly rather than silently halting
Healthan oracle monitor alerts on state transitions (stale feed, invalid weights, signer mismatch)
Reportinga monthly basket report generated from chain state and published
Key handlingthe price key is a dedicated hot key funded minimally; the owner key is separate and the owner is a timelock (multisig is the production target)

Disclaimer. This document is a technical proposal and a proof-of-concept, not investment advice. It is unaudited. PLT is a synthetic index token with no physical backing; its market price may diverge materially from the theoretical PPI. Do not use it with value you cannot afford to lose.