ogmios_client/
transactions.rs1use crate::{ByNameParamsBuilder, OgmiosClient, OgmiosClientError, types::OgmiosTx};
4use serde::Deserialize;
5
6pub trait Transactions {
8 #[allow(async_fn_in_trait)]
15 async fn evaluate_transaction(
16 &self,
17 tx_bytes: &[u8],
18 ) -> Result<Vec<OgmiosEvaluateTransactionResponse>, OgmiosClientError>;
19
20 #[allow(async_fn_in_trait)]
25 async fn submit_transaction(
26 &self,
27 tx_bytes: &[u8],
28 ) -> Result<SubmitTransactionResponse, OgmiosClientError>;
29}
30
31impl<T: OgmiosClient> Transactions for T {
32 async fn evaluate_transaction(
33 &self,
34 tx_bytes: &[u8],
35 ) -> Result<Vec<OgmiosEvaluateTransactionResponse>, OgmiosClientError> {
36 let params = ByNameParamsBuilder::new()
37 .insert("transaction", serde_json::json!({"cbor": hex::encode(tx_bytes)}))?
38 .insert("additionalUtxo", serde_json::json!([]))?
39 .build();
40 self.request("evaluateTransaction", params).await
41 }
42
43 async fn submit_transaction(
44 &self,
45 tx_bytes: &[u8],
46 ) -> Result<SubmitTransactionResponse, OgmiosClientError> {
47 let params = ByNameParamsBuilder::new()
48 .insert("transaction", serde_json::json!({"cbor": hex::encode(tx_bytes)}))?
49 .build();
50 self.request("submitTransaction", params).await
51 }
52}
53
54#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Default)]
55#[serde(rename_all = "camelCase")]
56pub struct OgmiosEvaluateTransactionResponse {
58 pub validator: OgmiosValidatorIndex,
60 pub budget: OgmiosBudget,
62}
63
64#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Default)]
65pub struct OgmiosValidatorIndex {
67 pub index: u32,
69 pub purpose: String,
77}
78
79impl OgmiosValidatorIndex {
80 pub fn new(index: u32, purpose: &str) -> Self {
82 Self { index, purpose: purpose.into() }
83 }
84}
85
86#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Default)]
87pub struct OgmiosBudget {
89 pub memory: u64,
91 pub cpu: u64,
93}
94
95impl OgmiosBudget {
96 pub fn new(memory: u64, cpu: u64) -> Self {
98 Self { memory, cpu }
99 }
100}
101
102#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Default)]
103pub struct SubmitTransactionResponse {
105 pub transaction: OgmiosTx,
107}