Skip to main content

kora_rpc/method/
sign_transaction.rs

1use kora_lib::{
2    config::ValidationConfig,
3    transaction::{
4        decode_b64_transaction, encode_b64_transaction, sign_transaction as lib_sign_transaction,
5    },
6    KoraError,
7};
8use serde::{Deserialize, Serialize};
9use solana_client::nonblocking::rpc_client::RpcClient;
10use std::sync::Arc;
11use utoipa::ToSchema;
12
13#[derive(Debug, Deserialize, ToSchema)]
14pub struct SignTransactionRequest {
15    pub transaction: String,
16}
17
18#[derive(Debug, Serialize, ToSchema)]
19pub struct SignTransactionResponse {
20    pub signature: String,
21    pub signed_transaction: String,
22}
23
24pub async fn sign_transaction(
25    rpc_client: &Arc<RpcClient>,
26    validation: &ValidationConfig,
27    request: SignTransactionRequest,
28) -> Result<SignTransactionResponse, KoraError> {
29    let transaction = decode_b64_transaction(&request.transaction)?;
30    let _signed_transaction =
31        lib_sign_transaction(rpc_client, validation, transaction.clone()).await?;
32
33    let encoded = encode_b64_transaction(&transaction)?;
34
35    Ok(SignTransactionResponse {
36        signature: transaction.signatures[0].to_string(),
37        signed_transaction: encoded,
38    })
39}