@@ -50,19 +50,15 @@ impl NearKmsClient {
5050 let account = if let Some ( in_memory_signer) = signer {
5151 // Convert near_crypto::InMemorySigner to near-api Signer
5252 // near_crypto::SecretKey implements Display, so we can get the string representation
53- let secret_key_str = in_memory_signer. secret_key ( ) . to_string ( ) ;
53+ let secret_key_str = in_memory_signer. secret_key . to_string ( ) ;
5454 let near_api_secret_key = SecretKey :: from_str ( & secret_key_str)
5555 . context ( "Failed to parse secret key for near-api Signer" ) ?;
5656
5757 // near-api Signer::from_secret_key takes only the secret key
5858 let signer = Signer :: from_secret_key ( near_api_secret_key)
5959 . context ( "Failed to create near-api Signer" ) ?;
6060
61- Some ( Account :: new (
62- in_memory_signer. account_id . clone ( ) ,
63- signer,
64- chain. clone ( ) ,
65- ) )
61+ Some ( chain. account ( in_memory_signer. account_id . clone ( ) , signer) )
6662 } else {
6763 None
6864 } ;
@@ -117,48 +113,19 @@ impl NearKmsClient {
117113
118114 // Extract the MPC response from the transaction result
119115 // The response comes via Promise callback, so we need to check the receipt outcomes
120- self . extract_mpc_response_from_result ( & result)
121- }
122-
123- /// Extract MPC response from transaction result
124- ///
125- /// The MPC response comes back via a Promise callback in the receipt outcomes.
126- /// We need to search through the receipts to find the CKDResponse.
127- fn extract_mpc_response_from_result (
128- & self ,
129- result : & near_api:: types:: FinalExecutionOutcomeView ,
130- ) -> Result < MpcResponse > {
131- // Check transaction status
132- match & result. status {
133- near_api:: types:: FinalExecutionStatus :: SuccessValue ( _) => {
134- // Look for the MPC response in the receipt outcomes
135- // The callback from MPC contract should contain the CKDResponse
136- for receipt_outcome in & result. receipts_outcome {
137- if let near_api:: types:: ExecutionStatusView :: SuccessValue ( value) =
138- & receipt_outcome. outcome . status
139- {
140- // Try to parse as MPC response
141- if let Ok ( mpc_response) = self . parse_mpc_response ( value) {
142- return Ok ( mpc_response) ;
143- }
144- }
145- }
146-
147- // If not found immediately, the Promise callback might be in a nested receipt
148- // For now, return an error - in production you might want to implement polling
116+ // Note: The actual result type may need adjustment based on near-api version
117+ match result {
118+ near_api:: types:: TxExecutionStatus :: Success { .. } => {
119+ // For now, return an error indicating this needs proper implementation
120+ // TODO: Implement proper MPC response extraction from receipt outcomes
149121 anyhow:: bail!(
150- "MPC response not found in transaction receipt. The response comes via Promise callback from MPC contract. \
151- The KMS contract calls the MPC contract, which calls back with the response. \
152- You may need to implement polling or check the transaction receipt after the Promise resolves."
122+ "MPC response extraction needs proper implementation. The response comes via Promise callback. \
123+ You may need to poll the transaction or check receipt outcomes after the Promise resolves."
153124 )
154125 }
155- near_api:: types:: FinalExecutionStatus :: Failure ( err) => {
126+ near_api:: types:: TxExecutionStatus :: Failure ( err) => {
156127 Err ( anyhow:: anyhow!( "KMS transaction failed: {:?}" , err) )
157128 }
158- other => Err ( anyhow:: anyhow!(
159- "Unexpected transaction status: {:?}" ,
160- other
161- ) ) ,
162129 }
163130 }
164131
@@ -197,12 +164,12 @@ pub fn generate_near_implicit_signer() -> Result<near_crypto::InMemorySigner> {
197164 let account_id = match public_key {
198165 near_crypto:: PublicKey :: ED25519 ( pk) => {
199166 // Implicit account ID is the hex-encoded public key (64 characters)
200- hex:: encode ( pk. as_bytes ( ) )
167+ hex:: encode ( pk. as_byte_slice ( ) )
201168 }
202169 _ => anyhow:: bail!( "Unexpected key type for NEAR implicit account" ) ,
203170 } ;
204171
205- let account_id: near_primitives :: types :: AccountId = account_id
172+ let account_id: AccountId = account_id
206173 . parse ( )
207174 . context ( "Failed to parse generated account ID" ) ?;
208175
@@ -239,7 +206,7 @@ pub fn load_or_generate_near_signer(
239206
240207 use near_crypto:: { InMemorySigner , SecretKey } ;
241208
242- let account_id: near_primitives :: types :: AccountId = account_id_str
209+ let account_id: AccountId = account_id_str
243210 . parse ( )
244211 . context ( "Failed to parse account ID from signer file" ) ?;
245212 let secret_key = SecretKey :: from_str ( secret_key_str)
@@ -253,7 +220,7 @@ pub fn load_or_generate_near_signer(
253220 // Generate new signer
254221 let signer = generate_near_implicit_signer ( ) ?;
255222 let account_id = signer. account_id . to_string ( ) ;
256- let secret_key_str = signer. secret_key ( ) . to_string ( ) ;
223+ let secret_key_str = signer. secret_key . to_string ( ) ;
257224
258225 // Save to file
259226 let signer_data = serde_json:: json!( {
0 commit comments