darkfi_sdk/
blockchain.rs

1/* This file is part of DarkFi (https://dark.fi)
2 *
3 * Copyright (C) 2020-2025 Dyne.org foundation
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
17 */
18
19/// Auxiliary function to calculate provided block height block version.
20/// Currently, a single version(1) exists.
21pub fn block_version(_height: u32) -> u8 {
22    1
23}
24
25/// Auxiliary function to calculate provided block height epoch.
26/// Each epoch is defined by the fixed intervals rewards change.
27/// Genesis block is on epoch 0.
28pub fn block_epoch(height: u32) -> u8 {
29    match height {
30        0 => 0,
31        1..=1000 => 1,
32        1001..=2000 => 2,
33        2001..=3000 => 3,
34        3001..=4000 => 4,
35        4001..=5000 => 5,
36        5001..=6000 => 6,
37        6001..=7000 => 7,
38        7001..=8000 => 8,
39        8001..=9000 => 9,
40        9001..=10000 => 10,
41        10001.. => 11,
42    }
43}
44
45/// Auxiliary function to calculate provided block height expected reward value.
46///
47/// Genesis block always returns reward value 0. Rewards are halfed at fixed intervals,
48/// called epochs. After last epoch has started, reward value is based on DARK token-economics.
49pub fn expected_reward(height: u32) -> u64 {
50    // Grab block height epoch
51    let epoch = block_epoch(height);
52
53    // TODO (res) implement reward mechanism with accord to DRK, DARK token-economics.
54    // Configured block rewards (1 DRK == 1 * 10^8)
55    match epoch {
56        0 => 0,
57        1 => 2_000_000_000, // 20 DRK
58        2 => 1_800_000_000, // 18 DRK
59        3 => 1_600_000_000, // 16 DRK
60        4 => 1_400_000_000, // 14 DRK
61        5 => 1_200_000_000, // 12 DRK
62        6 => 1_000_000_000, // 10 DRK
63        7 => 800_000_000,   // 8 DRK
64        8 => 600_000_000,   // 6 DRK
65        9 => 400_000_000,   // 4 DRK
66        10 => 200_000_000,  // 2 DRK
67        _ => 100_000_000,   // 1 DRK
68    }
69}