kora_rpc/method/
sign_transaction.rs1use 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}