1use ahash::HashMap;
5use cid::Cid;
6use std::sync::LazyLock;
7
8use crate::{eth::EthChainId, make_height, shim::version::NetworkVersion};
9
10use super::{
11 DrandPoint, Height, HeightInfo, NetworkChain, actors_bundle::ACTOR_BUNDLES_METADATA,
12 drand::DRAND_QUICKNET, get_upgrade_height_from_env,
13};
14
15pub const ETH_CHAIN_ID: EthChainId = 31415926;
17
18pub const BREEZE_GAS_TAMPING_DURATION: i64 = 0;
19
20pub static GENESIS_NETWORK_VERSION: LazyLock<NetworkVersion> = LazyLock::new(|| {
21 if let Ok(version) = std::env::var("FOREST_GENESIS_NETWORK_VERSION") {
22 NetworkVersion::from(
23 version
24 .parse::<u32>()
25 .expect("Invalid genesis network version"),
26 )
27 } else {
28 NetworkVersion::V21
29 }
30});
31
32pub static HEIGHT_INFOS: LazyLock<HashMap<Height, HeightInfo>> = LazyLock::new(|| {
36 HashMap::from_iter([
37 make_height!(
38 Breeze,
39 get_upgrade_height_from_env("FOREST_BREEZE_HEIGHT").unwrap_or(-50)
40 ),
41 make_height!(
42 Smoke,
43 get_upgrade_height_from_env("FOREST_SMOKE_HEIGHT").unwrap_or(-2)
44 ),
45 make_height!(
46 Ignition,
47 get_upgrade_height_from_env("FOREST_IGNITION_HEIGHT").unwrap_or(-3)
48 ),
49 make_height!(
50 Refuel,
51 get_upgrade_height_from_env("FOREST_REFUEL_HEIGHT").unwrap_or(-4)
52 ),
53 make_height!(
54 Assembly,
55 get_upgrade_height_from_env("FOREST_ASSEMBLY_HEIGHT").unwrap_or(-5)
56 ),
57 make_height!(
58 Tape,
59 get_upgrade_height_from_env("FOREST_TAPE_HEIGHT").unwrap_or(-6)
60 ),
61 make_height!(
62 Liftoff,
63 get_upgrade_height_from_env("FOREST_LIFTOFF_HEIGHT").unwrap_or(-7)
64 ),
65 make_height!(
66 Kumquat,
67 get_upgrade_height_from_env("FOREST_KUMQUAT_HEIGHT").unwrap_or(-8)
68 ),
69 make_height!(
70 Calico,
71 get_upgrade_height_from_env("FOREST_CALICO_HEIGHT").unwrap_or(-9)
72 ),
73 make_height!(
74 Persian,
75 get_upgrade_height_from_env("FOREST_PERSIAN_HEIGHT").unwrap_or(-10)
76 ),
77 make_height!(
78 Claus,
79 get_upgrade_height_from_env("FOREST_CLAUS_HEIGHT").unwrap_or(-11)
80 ),
81 make_height!(
82 Orange,
83 get_upgrade_height_from_env("FOREST_ORANGE_HEIGHT").unwrap_or(-12)
84 ),
85 make_height!(
86 Trust,
87 get_upgrade_height_from_env("FOREST_TRUST_HEIGHT").unwrap_or(-13)
88 ),
89 make_height!(
90 Norwegian,
91 get_upgrade_height_from_env("FOREST_NORWEGIAN_HEIGHT").unwrap_or(-14)
92 ),
93 make_height!(
94 Turbo,
95 get_upgrade_height_from_env("FOREST_TURBO_HEIGHT").unwrap_or(-15)
96 ),
97 make_height!(
98 Hyperdrive,
99 get_upgrade_height_from_env("FOREST_HYPERDRIVE_HEIGHT").unwrap_or(-16)
100 ),
101 make_height!(
102 Chocolate,
103 get_upgrade_height_from_env("FOREST_CHOCOLATE_HEIGHT").unwrap_or(-17)
104 ),
105 make_height!(
106 OhSnap,
107 get_upgrade_height_from_env("FOREST_OHSNAP_HEIGHT").unwrap_or(-18)
108 ),
109 make_height!(
110 Skyr,
111 get_upgrade_height_from_env("FOREST_SKYR_HEIGHT").unwrap_or(-19)
112 ),
113 make_height!(
114 Shark,
115 get_upgrade_height_from_env("FOREST_SHARK_HEIGHT").unwrap_or(-20),
116 get_bundle_cid("v9.0.3")
117 ),
118 make_height!(
119 Hygge,
120 get_upgrade_height_from_env("FOREST_HYGGE_HEIGHT").unwrap_or(-21),
121 get_bundle_cid("v10.0.0")
122 ),
123 make_height!(
124 Lightning,
125 get_upgrade_height_from_env("FOREST_LIGHTNING_HEIGHT").unwrap_or(-22),
126 get_bundle_cid("v11.0.0")
127 ),
128 make_height!(
129 Thunder,
130 get_upgrade_height_from_env("FOREST_THUNDER_HEIGHT").unwrap_or(-23)
131 ),
132 make_height!(
133 Watermelon,
134 get_upgrade_height_from_env("FOREST_WATERMELON_HEIGHT").unwrap_or(-1),
135 get_bundle_cid("v12.0.0")
136 ),
137 make_height!(
138 Dragon,
139 get_upgrade_height_from_env("FOREST_DRAGON_HEIGHT").unwrap_or(20),
140 get_bundle_cid("v13.0.0")
141 ),
142 make_height!(Phoenix, i64::MIN),
143 make_height!(
144 Waffle,
145 get_upgrade_height_from_env("FOREST_WAFFLE_HEIGHT").unwrap_or(9999999999),
146 get_bundle_cid("v14.0.0-rc.1")
147 ),
148 make_height!(
149 TukTuk,
150 get_upgrade_height_from_env("FOREST_TUKTUK_HEIGHT").unwrap_or(9999999999),
151 get_bundle_cid("v15.0.0-rc1")
152 ),
153 make_height!(
154 Teep,
155 get_upgrade_height_from_env("FOREST_TEEP_HEIGHT").unwrap_or(9999999999),
156 get_bundle_cid("v16.0.1")
157 ),
158 make_height!(
159 Tock,
160 get_upgrade_height_from_env("FOREST_TOCK_HEIGHT").unwrap_or(9999999999)
161 ),
162 make_height!(
163 GoldenWeek,
164 get_upgrade_height_from_env("FOREST_GOLDEN_WEEK_HEIGHT").unwrap_or(9999999999),
165 get_bundle_cid("v17.0.0")
166 ),
167 ])
168});
169
170fn get_bundle_cid(version: &str) -> Cid {
171 ACTOR_BUNDLES_METADATA
172 .get(&(NetworkChain::Devnet("devnet".into()), version.into()))
173 .expect("bundle must be defined")
174 .bundle_cid
175}
176
177pub(super) static DRAND_SCHEDULE: LazyLock<[DrandPoint<'static>; 1]> = LazyLock::new(|| {
178 [DrandPoint {
179 height: 0,
180 config: &DRAND_QUICKNET,
181 }]
182});
183
184#[macro_export]
187macro_rules! make_devnet_policy {
188 (v11) => {
189 fil_actors_shared::v11::runtime::Policy {
190 minimum_consensus_power: 2040.into(),
191 minimum_verified_allocation_size: 256.into(),
192 pre_commit_challenge_delay: 10,
193 valid_pre_commit_proof_type: {
194 use $crate::shim::sector::RegisteredSealProofV3;
195 let mut proofs = fil_actors_shared::v11::runtime::ProofSet::default();
196 proofs.insert(RegisteredSealProofV3::StackedDRG2KiBV1P1);
197 proofs.insert(RegisteredSealProofV3::StackedDRG8MiBV1P1);
198 proofs
199 },
200 valid_post_proof_type: {
201 use $crate::shim::sector::RegisteredPoStProofV3;
202 let mut proofs = fil_actors_shared::v11::runtime::ProofSet::default();
203 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow2KiBV1);
204 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow2KiBV1P1);
205 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow8MiBV1);
206 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow8MiBV1P1);
207 proofs
208 },
209 ..Default::default()
210 }
211 };
212 ($version:tt) => {
213 fil_actors_shared::$version::runtime::Policy {
214 minimum_consensus_power: 2040.into(),
215 minimum_verified_allocation_size: 256.into(),
216 pre_commit_challenge_delay: 10,
217 valid_pre_commit_proof_type: {
218 let mut proofs = fil_actors_shared::$version::runtime::ProofSet::default();
219 proofs.insert(RegisteredSealProofV3::StackedDRG2KiBV1P1);
220 proofs.insert(RegisteredSealProofV3::StackedDRG2KiBV1P1_Feat_SyntheticPoRep);
221 proofs.insert(RegisteredSealProofV3::StackedDRG8MiBV1P1);
222 proofs.insert(RegisteredSealProofV3::StackedDRG8MiBV1P1_Feat_SyntheticPoRep);
223 proofs
224 },
225 valid_post_proof_type: {
226 let mut proofs = fil_actors_shared::$version::runtime::ProofSet::default();
227 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow2KiBV1P1);
228 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow8MiBV1P1);
229 proofs
230 },
231 ..Default::default()
232 }
233 };
234}