hypercall_signer/
types.rs1use hypercall_db::RsmSignerRequestRecord;
2use hypercall_types::WalletAddress;
3use serde::Serialize;
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
6#[serde(rename_all = "camelCase")]
7pub struct SignedDirective {
8 pub request_id: String,
9 pub account: WalletAddress,
10 pub nonce: u64,
11 pub directive: Vec<u8>,
12 pub signature: String,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, utoipa::ToSchema)]
16#[serde(rename_all = "camelCase")]
17pub struct RsmSignerStatus {
18 pub chain_id: u64,
19 pub signer_id: String,
20 pub relayer_paused: bool,
21 pub signer: WalletAddress,
22 pub next_nonce: String,
23}
24
25pub fn record_to_signed_directive(record: RsmSignerRequestRecord) -> SignedDirective {
26 let directive = record.directive.unwrap_or_else(|| {
27 panic!(
28 "STATE_CORRUPTION: completed RSM signer request {} is missing directive bytes",
29 record.request_id
30 )
31 });
32 let signature = record.signature.unwrap_or_else(|| {
33 panic!(
34 "STATE_CORRUPTION: completed RSM signer request {} is missing signature",
35 record.request_id
36 )
37 });
38 let nonce = u64::try_from(record.nonce).unwrap_or_else(|_| {
39 panic!(
40 "STATE_CORRUPTION: completed RSM signer request {} has negative nonce {}",
41 record.request_id, record.nonce
42 )
43 });
44
45 SignedDirective {
46 request_id: record.request_id,
47 account: record.account_address,
48 nonce,
49 directive,
50 signature,
51 }
52}