@@ -35,7 +35,9 @@ pub enum NetworkKind {
35
35
// ambiguous due to confusion caused by signet/testnet/regtest.
36
36
impl NetworkKind {
37
37
/// Returns true if this is real mainnet bitcoin.
38
- pub fn is_mainnet ( & self ) -> bool { * self == NetworkKind :: Main }
38
+ pub fn is_mainnet ( & self ) -> bool {
39
+ * self == NetworkKind :: Main
40
+ }
39
41
}
40
42
41
43
impl From < Network > for NetworkKind {
@@ -44,7 +46,7 @@ impl From<Network> for NetworkKind {
44
46
45
47
match n {
46
48
Bitcoin => NetworkKind :: Main ,
47
- Testnet ( _) | Signet | Regtest => NetworkKind :: Test ,
49
+ Testnet ( _) | Signet | Regtest | CPUNet => NetworkKind :: Test ,
48
50
}
49
51
}
50
52
}
@@ -71,6 +73,8 @@ pub enum Network {
71
73
Signet ,
72
74
/// Bitcoin's regtest network.
73
75
Regtest ,
76
+ /// Bitcoin's cpunet network.
77
+ CPUNet ,
74
78
}
75
79
76
80
#[ cfg( feature = "serde" ) ]
@@ -128,6 +132,7 @@ impl Network {
128
132
Network :: Testnet ( TestnetVersion :: V4 ) => "testnet4" ,
129
133
Network :: Signet => "signet" ,
130
134
Network :: Regtest => "regtest" ,
135
+ Network :: CPUNet => "cpunet" ,
131
136
}
132
137
}
133
138
@@ -149,6 +154,7 @@ impl Network {
149
154
"testnet4" => Testnet ( TestnetVersion :: V4 ) ,
150
155
"signet" => Signet ,
151
156
"regtest" => Regtest ,
157
+ "cpunet" => CPUNet ,
152
158
_ => return Err ( ParseNetworkError ( core_arg. to_owned ( ) ) ) ,
153
159
} ;
154
160
Ok ( network)
@@ -165,7 +171,9 @@ impl Network {
165
171
/// let network = Network::Bitcoin;
166
172
/// assert_eq!(network.chain_hash(), ChainHash::BITCOIN);
167
173
/// ```
168
- pub fn chain_hash ( self ) -> ChainHash { ChainHash :: using_genesis_block_const ( self ) }
174
+ pub fn chain_hash ( self ) -> ChainHash {
175
+ ChainHash :: using_genesis_block_const ( self )
176
+ }
169
177
170
178
/// Constructs a new `Network` from the chain hash (genesis block hash).
171
179
///
@@ -189,6 +197,7 @@ impl Network {
189
197
Network :: Testnet ( TestnetVersion :: V4 ) => & Params :: TESTNET4 ,
190
198
Network :: Signet => & Params :: SIGNET ,
191
199
Network :: Regtest => & Params :: REGTEST ,
200
+ Network :: CPUNet => & Params :: CPUNET ,
192
201
}
193
202
}
194
203
@@ -201,6 +210,7 @@ impl Network {
201
210
Network :: Testnet ( TestnetVersion :: V4 ) => "testnet4" ,
202
211
Network :: Signet => "signet" ,
203
212
Network :: Regtest => "regtest" ,
213
+ Network :: CPUNet => "cpunet" ,
204
214
}
205
215
}
206
216
}
@@ -232,15 +242,15 @@ pub mod as_core_arg {
232
242
Network :: from_core_arg ( s) . map_err ( |_| {
233
243
E :: invalid_value (
234
244
serde:: de:: Unexpected :: Str ( s) ,
235
- & "bitcoin network encoded as a string (either main, test, testnet4, signet or regtest )" ,
245
+ & "bitcoin network encoded as a string (either main, test, testnet4, signet, regtest, or cpunet )" ,
236
246
)
237
247
} )
238
248
}
239
249
240
250
fn expecting ( & self , formatter : & mut core:: fmt:: Formatter ) -> core:: fmt:: Result {
241
251
write ! (
242
252
formatter,
243
- "bitcoin network encoded as a string (either main, test, testnet4, signet or regtest )"
253
+ "bitcoin network encoded as a string (either main, test, testnet4, signet, regtest or cpunet )"
244
254
)
245
255
}
246
256
}
@@ -262,7 +272,9 @@ impl fmt::Display for ParseNetworkError {
262
272
263
273
#[ cfg( feature = "std" ) ]
264
274
impl std:: error:: Error for ParseNetworkError {
265
- fn source ( & self ) -> Option < & ( dyn std:: error:: Error + ' static ) > { None }
275
+ fn source ( & self ) -> Option < & ( dyn std:: error:: Error + ' static ) > {
276
+ None
277
+ }
266
278
}
267
279
268
280
impl FromStr for Network {
@@ -277,6 +289,7 @@ impl FromStr for Network {
277
289
"testnet4" => Ok ( Network :: Testnet ( TestnetVersion :: V4 ) ) ,
278
290
"signet" => Ok ( Network :: Signet ) ,
279
291
"regtest" => Ok ( Network :: Regtest ) ,
292
+ "cpunet" => Ok ( Network :: CPUNet ) ,
280
293
_ => Err ( ParseNetworkError ( s. to_owned ( ) ) ) ,
281
294
}
282
295
}
@@ -301,7 +314,9 @@ impl fmt::Display for UnknownChainHashError {
301
314
302
315
#[ cfg( feature = "std" ) ]
303
316
impl std:: error:: Error for UnknownChainHashError {
304
- fn source ( & self ) -> Option < & ( dyn std:: error:: Error + ' static ) > { None }
317
+ fn source ( & self ) -> Option < & ( dyn std:: error:: Error + ' static ) > {
318
+ None
319
+ }
305
320
}
306
321
307
322
impl TryFrom < ChainHash > for Network {
@@ -315,6 +330,7 @@ impl TryFrom<ChainHash> for Network {
315
330
ChainHash :: TESTNET4 => Ok ( Network :: Testnet ( TestnetVersion :: V4 ) ) ,
316
331
ChainHash :: SIGNET => Ok ( Network :: Signet ) ,
317
332
ChainHash :: REGTEST => Ok ( Network :: Regtest ) ,
333
+ ChainHash :: CPUNET => Ok ( Network :: CPUNet ) ,
318
334
_ => Err ( UnknownChainHashError ( chain_hash) ) ,
319
335
}
320
336
}
@@ -323,6 +339,35 @@ impl TryFrom<ChainHash> for Network {
323
339
#[ cfg( test) ]
324
340
mod tests {
325
341
use super :: { Network , TestnetVersion } ;
342
+ use crate :: consensus:: encode:: { deserialize, serialize} ;
343
+
344
+ #[ test]
345
+ fn serialize_deserialize ( ) {
346
+ assert_eq ! ( serialize( & Network :: Bitcoin . magic( ) ) , & [ 0xf9 , 0xbe , 0xb4 , 0xd9 ] ) ;
347
+ assert_eq ! (
348
+ serialize( & Network :: Testnet ( TestnetVersion :: V3 ) . magic( ) ) ,
349
+ & [ 0x0b , 0x11 , 0x09 , 0x07 ]
350
+ ) ;
351
+ assert_eq ! (
352
+ serialize( & Network :: Testnet ( TestnetVersion :: V4 ) . magic( ) ) ,
353
+ & [ 0x1c , 0x16 , 0x3f , 0x28 ]
354
+ ) ;
355
+ assert_eq ! ( serialize( & Network :: Signet . magic( ) ) , & [ 0x0a , 0x03 , 0xcf , 0x40 ] ) ;
356
+ assert_eq ! ( serialize( & Network :: Regtest . magic( ) ) , & [ 0xfa , 0xbf , 0xb5 , 0xda ] ) ;
357
+
358
+ assert_eq ! ( deserialize( & [ 0xf9 , 0xbe , 0xb4 , 0xd9 ] ) . ok( ) , Some ( Network :: Bitcoin . magic( ) ) ) ;
359
+ assert_eq ! (
360
+ deserialize( & [ 0x0b , 0x11 , 0x09 , 0x07 ] ) . ok( ) ,
361
+ Some ( Network :: Testnet ( TestnetVersion :: V3 ) . magic( ) )
362
+ ) ;
363
+ assert_eq ! (
364
+ deserialize( & [ 0x1c , 0x16 , 0x3f , 0x28 ] ) . ok( ) ,
365
+ Some ( Network :: Testnet ( TestnetVersion :: V4 ) . magic( ) )
366
+ ) ;
367
+ assert_eq ! ( deserialize( & [ 0x0a , 0x03 , 0xcf , 0x40 ] ) . ok( ) , Some ( Network :: Signet . magic( ) ) ) ;
368
+ assert_eq ! ( deserialize( & [ 0xfa , 0xbf , 0xb5 , 0xda ] ) . ok( ) , Some ( Network :: Regtest . magic( ) ) ) ;
369
+ assert_eq ! ( deserialize( & [ 0x63 , 0x70 , 0x75 , 0x6e ] ) . ok( ) , Some ( Network :: CPUNet . magic( ) ) ) ;
370
+ }
326
371
327
372
#[ test]
328
373
fn string ( ) {
@@ -331,12 +376,14 @@ mod tests {
331
376
assert_eq ! ( Network :: Testnet ( TestnetVersion :: V4 ) . to_string( ) , "testnet4" ) ;
332
377
assert_eq ! ( Network :: Regtest . to_string( ) , "regtest" ) ;
333
378
assert_eq ! ( Network :: Signet . to_string( ) , "signet" ) ;
379
+ assert_eq ! ( Network :: CPUNet . to_string( ) , "cpunet" ) ;
334
380
335
381
assert_eq ! ( "bitcoin" . parse:: <Network >( ) . unwrap( ) , Network :: Bitcoin ) ;
336
382
assert_eq ! ( "testnet" . parse:: <Network >( ) . unwrap( ) , Network :: Testnet ( TestnetVersion :: V3 ) ) ;
337
383
assert_eq ! ( "testnet4" . parse:: <Network >( ) . unwrap( ) , Network :: Testnet ( TestnetVersion :: V4 ) ) ;
338
384
assert_eq ! ( "regtest" . parse:: <Network >( ) . unwrap( ) , Network :: Regtest ) ;
339
385
assert_eq ! ( "signet" . parse:: <Network >( ) . unwrap( ) , Network :: Signet ) ;
386
+ assert_eq ! ( "cpunet" . parse:: <Network >( ) . unwrap( ) , Network :: CPUNet ) ;
340
387
assert ! ( "fakenet" . parse:: <Network >( ) . is_err( ) ) ;
341
388
}
342
389
@@ -350,6 +397,7 @@ mod tests {
350
397
( Testnet ( TestnetVersion :: V4 ) , "testnet4" ) ,
351
398
( Signet , "signet" ) ,
352
399
( Regtest , "regtest" ) ,
400
+ ( CPUNet , "cpunet" ) ,
353
401
] ;
354
402
355
403
for tc in tests {
@@ -372,6 +420,7 @@ mod tests {
372
420
( Network :: Testnet ( TestnetVersion :: V4 ) , "testnet4" ) ,
373
421
( Network :: Regtest , "regtest" ) ,
374
422
( Network :: Signet , "signet" ) ,
423
+ ( Network :: CPUNet , "cpunet" ) ,
375
424
] ;
376
425
377
426
for ( net, core_arg) in & expected_pairs {
0 commit comments