Skip to content

Commit

Permalink
Return witness set instead of full transaction
Browse files Browse the repository at this point in the history
  • Loading branch information
SupernaviX committed Aug 27, 2024
1 parent c5cd215 commit e4f9071
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions firefly-cardanosigner/src/routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use anyhow::Context;
use axum::{extract::State, Json};
use firefly_server::error::{ApiError, ApiResult};
use pallas_crypto::{hash::Hasher, key::ed25519::PublicKey};
use pallas_primitives::conway::{Tx, VKeyWitness};
use pallas_primitives::conway::{Tx, VKeyWitness, WitnessSet};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};

Expand All @@ -18,8 +18,8 @@ pub struct SignTransactionRequest {

#[derive(Serialize, JsonSchema)]
pub struct SignTransactionResponse {
/// The CBOR-encoded signed transaction.
transaction: String,
/// The CBOR-encoded transaction witness set.
transaction_witness_set: String,
}

pub async fn sign_transaction(
Expand All @@ -31,7 +31,7 @@ pub async fn sign_transaction(
};

let tx_bytes = hex::decode(&req.transaction).context("invalid transaction cbor")?;
let mut tx: Tx = minicbor::decode(&tx_bytes).context("Invalid transaction")?;
let tx: Tx = minicbor::decode(&tx_bytes).context("Invalid transaction")?;

let b2b = Hasher::<256>::hash_cbor(&tx.transaction_body);
let signature = private_key.sign(b2b);
Expand All @@ -44,22 +44,26 @@ pub async fn sign_transaction(
signature: signature_bytes.into(),
};

let mut vkey_witnesses = tx
.transaction_witness_set
.vkeywitness
.map(|set| set.to_vec())
.unwrap_or_default();
vkey_witnesses.push(vkey_witness);
let vkey_witnesses = vec![vkey_witness];
let vkey_witness_set = vkey_witnesses.try_into().unwrap();
tx.transaction_witness_set.vkeywitness = Some(vkey_witness_set);
let transaction_witness_set = WitnessSet {
vkeywitness: Some(vkey_witness_set),
native_script: None,
bootstrap_witness: None,
plutus_v1_script: None,
plutus_data: None,
redeemer: None,
plutus_v2_script: None,
plutus_v3_script: None,
};

let serialized_tx = {
let serialized_witness_set = {
let mut bytes = vec![];
minicbor::encode(tx, &mut bytes)?;
minicbor::encode(transaction_witness_set, &mut bytes)?;
bytes
};

Ok(Json(SignTransactionResponse {
transaction: hex::encode(serialized_tx),
transaction_witness_set: hex::encode(serialized_witness_set),
}))
}

0 comments on commit e4f9071

Please sign in to comment.