1
+ use std:: path:: { Path , PathBuf } ;
2
+
1
3
use anyhow:: anyhow;
2
4
use mithril_common:: {
3
5
chain_observer:: { TxDatumBuilder , TxDatumFieldValue } ,
@@ -56,16 +58,41 @@ impl EraTools {
56
58
. build ( ) ?;
57
59
Ok ( tx_datum. 0 )
58
60
}
61
+
62
+ /// Export the era keypair to a folder and returns the paths to the files (secret key, verification_key)
63
+ pub fn create_and_save_era_keypair ( keypair_path : & Path ) -> StdResult < ( PathBuf , PathBuf ) > {
64
+ let era_signer = EraMarkersSigner :: create_non_deterministic_signer ( ) ;
65
+ let era_secret_key_path = keypair_path. join ( "era.sk" ) ;
66
+ era_signer
67
+ . secret_key ( )
68
+ . write_json_hex_to_file ( & era_secret_key_path) ?;
69
+ let era_verification_key_path = keypair_path. join ( "era.vk" ) ;
70
+ era_signer
71
+ . verification_key ( )
72
+ . write_json_hex_to_file ( & era_verification_key_path) ?;
73
+
74
+ Ok ( ( era_secret_key_path, era_verification_key_path) )
75
+ }
59
76
}
60
77
61
78
#[ cfg( test) ]
62
79
mod tests {
80
+ use mithril_common:: {
81
+ crypto_helper:: { EraMarkersVerifierSecretKey , EraMarkersVerifierVerificationKey } ,
82
+ test_utils:: TempDir ,
83
+ } ;
84
+ use std:: fs:: read_to_string;
85
+
63
86
use super :: * ;
64
87
65
88
fn build_tools ( ) -> EraTools {
66
89
EraTools { }
67
90
}
68
91
92
+ fn get_temp_dir ( dir_name : & str ) -> PathBuf {
93
+ TempDir :: create ( "era" , dir_name)
94
+ }
95
+
69
96
#[ test]
70
97
fn get_supported_eras_list ( ) {
71
98
let era_tools = build_tools ( ) ;
@@ -92,4 +119,25 @@ mod tests {
92
119
. generate_tx_datum ( Epoch ( 3 ) , Some ( Epoch ( 2 ) ) , & era_markers_signer)
93
120
. expect_err ( "generate_tx_datum should have failed" ) ;
94
121
}
122
+
123
+ #[ test]
124
+ fn test_create_and_save_era_keypair ( ) {
125
+ let temp_dir = get_temp_dir ( "test_create_and_save_era_keypair" ) ;
126
+ let ( era_secret_key_path, era_verification_key_path) =
127
+ EraTools :: create_and_save_era_keypair ( & temp_dir)
128
+ . expect ( "Failed to create and save era keypair" ) ;
129
+ let era_secret_key = EraMarkersVerifierSecretKey :: from_json_hex (
130
+ & read_to_string ( & era_secret_key_path) . expect ( "Failed to read era secret key file" ) ,
131
+ )
132
+ . expect ( "Failed to parse era secret key" ) ;
133
+ let era_verification_key = EraMarkersVerifierVerificationKey :: from_json_hex (
134
+ & read_to_string ( & era_verification_key_path)
135
+ . expect ( "Failed to read era verification key file" ) ,
136
+ )
137
+ . expect ( "Failed to parse era verification key" ) ;
138
+ let era_verifier = EraMarkersSigner :: from_secret_key ( era_secret_key) . create_verifier ( ) ;
139
+
140
+ let expected_era_verification_key = era_verifier. to_verification_key ( ) ;
141
+ assert_eq ! ( expected_era_verification_key, era_verification_key) ;
142
+ }
95
143
}
0 commit comments