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 make_height!(
168 FireHorse,
169 get_upgrade_height_from_env("FOREST_FIREHORSE_HEIGHT").unwrap_or(9999999999),
170 get_bundle_cid("v18.0.0")
171 ),
172 ])
173});
174
175fn get_bundle_cid(version: &str) -> Cid {
176 ACTOR_BUNDLES_METADATA
177 .get(&(NetworkChain::Devnet("devnet".into()), version.into()))
178 .expect("bundle must be defined")
179 .bundle_cid
180}
181
182pub(super) static DRAND_SCHEDULE: LazyLock<[DrandPoint<'static>; 1]> = LazyLock::new(|| {
183 [DrandPoint {
184 height: 0,
185 config: &DRAND_QUICKNET,
186 }]
187});
188
189#[macro_export]
192macro_rules! make_devnet_policy {
193 (v11) => {
194 fil_actors_shared::v11::runtime::Policy {
195 minimum_consensus_power: 2040.into(),
196 minimum_verified_allocation_size: 256.into(),
197 pre_commit_challenge_delay: 10,
198 valid_pre_commit_proof_type: {
199 use $crate::shim::sector::RegisteredSealProofV3;
200 let mut proofs = fil_actors_shared::v11::runtime::ProofSet::default();
201 proofs.insert(RegisteredSealProofV3::StackedDRG2KiBV1P1);
202 proofs.insert(RegisteredSealProofV3::StackedDRG8MiBV1P1);
203 proofs
204 },
205 valid_post_proof_type: {
206 use $crate::shim::sector::RegisteredPoStProofV3;
207 let mut proofs = fil_actors_shared::v11::runtime::ProofSet::default();
208 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow2KiBV1);
209 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow2KiBV1P1);
210 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow8MiBV1);
211 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow8MiBV1P1);
212 proofs
213 },
214 ..Default::default()
215 }
216 };
217 ($version:tt) => {
218 fil_actors_shared::$version::runtime::Policy {
219 minimum_consensus_power: 2040.into(),
220 minimum_verified_allocation_size: 256.into(),
221 pre_commit_challenge_delay: 10,
222 valid_pre_commit_proof_type: {
223 let mut proofs = fil_actors_shared::$version::runtime::ProofSet::default();
224 proofs.insert(RegisteredSealProofV3::StackedDRG2KiBV1P1);
225 proofs.insert(RegisteredSealProofV3::StackedDRG2KiBV1P1_Feat_SyntheticPoRep);
226 proofs.insert(RegisteredSealProofV3::StackedDRG8MiBV1P1);
227 proofs.insert(RegisteredSealProofV3::StackedDRG8MiBV1P1_Feat_SyntheticPoRep);
228 proofs
229 },
230 valid_post_proof_type: {
231 let mut proofs = fil_actors_shared::$version::runtime::ProofSet::default();
232 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow2KiBV1P1);
233 proofs.insert(RegisteredPoStProofV3::StackedDRGWindow8MiBV1P1);
234 proofs
235 },
236 ..Default::default()
237 }
238 };
239}