-
Notifications
You must be signed in to change notification settings - Fork 0
Reward Currency Design
O edited this page Dec 23, 2025
·
1 revision
Different types of rewards should be paid in different currencies based on their purpose:
- Measurement Rewards: Should be paid in the same O currency as the measurement (e.g., water price in EUR β pay in OEUR)
- Stabilization Mining Rewards: Should be paid in the same O currency being stabilized (e.g., stabilizing OEUR β pay in OEUR)
- Traditional Mining (PoW/PoB): Should be in a fixed currency since hardware costs are USD-based globally
- Current: Hardcoded as 2,800 OUSD per block
- Rationale: β Correct - Hardware costs are similar in USD worldwide
- Status: Already using OUSD β
-
Current: Uses generic
CAmount reward_amountwithout currency specification - Issue: Not currency-aware - all rewards likely paid in same currency
- Need: Should extract currency from measurement and pay in matching O currency
- Current: Creates rewards for unstable currencies but doesn't specify payment currency
-
Issue: Amount stored as
CAmount(generic), not currency-specific - Need: Should pay in the currency being stabilized (e.g., stabilizing OEUR β pay in OEUR)
Decision: Use OUSD
- Rationale: Hardware costs are similar in USD globally
- Implementation: Already correct β
- Block Reward: 2,800 OUSD per block
- PoB Reward: 2,240 OUSD per block
Decision: Pay in the submitter's birth currency (not the measurement currency)
- Rationale: Users from different countries are invited to submit measurements
- They may submit measurements for currencies different from their birth currency
- Users should be rewarded in their own birth currency for ease of use
- Example: User from Mexico (birth currency OMXN) submits EUR water price β Pay in OMXN
- Implementation: Extract birth currency from user's public key via BrightID database
Decision: Pay in the same O currency being stabilized
- Stabilizing OEUR β Pay recipients in OEUR
- Stabilizing OMXN β Pay recipients in OMXN
- Rationale: Recipients in that currency region can use the reward directly
- Implementation: Use the unstable currency code to create currency-specific rewards
-
Traditional Mining (
src/consensus/o_rewards.h):- β Already using OUSD
- β Documented rationale (hardware costs in USD globally)
-
Measurement Rewards (
src/consensus/measurement_rewards.h):- β
Added
reward_currencyfield toMeasurementRewardTransaction - β Updated serialization to include currency
- β³ TODO: Extract currency from measurement data when creating rewards
- β³ TODO: Convert fiat currency code (USD, EUR) to O currency code (OUSD, OEUR)
- β
Added
-
Stabilization Mining (
src/consensus/stabilization_helpers.cpp):- β
Currency already tracked in
unstable_currencyfield - β Added logging to indicate currency being paid
- β³ TODO: Extract currency from measurement data when creating rewards
- β³ TODO: Use multi-currency outputs when fully integrated
- β
Currency already tracked in
Multi-Currency Transaction Integration:
- Currently rewards use legacy
CTxOut(single currency) - When multi-currency transactions are fully integrated:
- Use
CMultiCurrencyTxOutfor measurement rewards - Use
CMultiCurrencyTxOutfor stabilization rewards - Convert currency codes to
CurrencyIdusingCurrencyRegistry::GetCurrencyId() - Create outputs with appropriate
MultiCurrencyAmountfor each currency
- Use
| Reward Type | Currency | Rationale |
|---|---|---|
| PoW Block Mining | OUSD | Hardware costs are USD-based globally |
| PoB Block Mining | OUSD | Hardware costs are USD-based globally |
| Measurement Rewards | Submitter's birth currency | Users from different countries submit measurements; reward them in their own currency |
| Stabilization Rewards | Same as unstable currency | Reward stabilization in the affected currency |
O Blockchain already has multi-currency support (CMultiCurrencyTxOut). We need to:
- Use multi-currency outputs for measurement and stabilization rewards
- Keep traditional mining rewards in single-currency (OUSD) for simplicity
- Ensure currency conversion is handled correctly
Β© O International
A Nonprofit Association Focused on the Creation of a Water Price-Based Stable Coin
Association de Loi 1901 β France NumΓ©ro de Siret (French SIREN): 924 014 467 00014