tx3-resolver 0.23.0

Infrastructure for resolving tx3 transactions
Documentation
// Generated by cargo xtask gen --lang rust
use serde::{Deserialize, Serialize};

use crate::interop::{BytesEnvelope, TirEnvelope};

pub type EnvMap = serde_json::Map<String, serde_json::Value>;
pub type JsonArgMap = serde_json::Map<String, serde_json::Value>;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubmitParams {
    #[serde(rename = "tx")]
    pub tx: BytesEnvelope,
    #[serde(rename = "witnesses")]
    pub witnesses: Vec<TxWitness>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxEnvelope {
    #[serde(rename = "hash")]
    pub hash: String,
    #[serde(rename = "tx")]
    pub tx: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SubmitResponse {
    #[serde(rename = "hash")]
    pub hash: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputQueryDiagnostic {
    #[serde(rename = "address")]
    pub address: Option<String>,
    #[serde(rename = "collateral")]
    pub collateral: bool,
    #[serde(rename = "min_amount")]
    pub min_amount: std::collections::HashMap<String, String>,
    #[serde(rename = "refs")]
    pub refs: Vec<String>,
    #[serde(rename = "support_many")]
    pub support_many: bool,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResolveParams {
    #[serde(rename = "args")]
    pub args: JsonArgMap,
    #[serde(rename = "tir")]
    pub tir: TirEnvelope,
    #[serde(rename = "env", skip_serializing_if = "Option::is_none")]
    pub env: Option<EnvMap>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxSignature {
    #[serde(rename = "key")]
    pub key: BytesEnvelope,
    #[serde(rename = "signature")]
    pub signature: BytesEnvelope,
    #[serde(rename = "type")]
    pub ty: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum TxWitness {
    Signature(TxSignature),
    RawWitness(BytesEnvelope),
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct UnsupportedTirDiagnostic {
    #[serde(rename = "expected")]
    pub expected: String,
    #[serde(rename = "provided")]
    pub provided: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchSpaceDiagnostic {
    #[serde(rename = "by_address_count")]
    pub by_address_count: Option<usize>,
    #[serde(rename = "by_asset_class_count")]
    pub by_asset_class_count: Option<usize>,
    #[serde(rename = "by_ref_count")]
    pub by_ref_count: Option<usize>,
    #[serde(rename = "matched")]
    pub matched: Vec<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InputNotResolvedDiagnostic {
    #[serde(rename = "name")]
    pub name: String,
    #[serde(rename = "query")]
    pub query: InputQueryDiagnostic,
    #[serde(rename = "search_space")]
    pub search_space: SearchSpaceDiagnostic,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MissingTxArgDiagnostic {
    #[serde(rename = "key")]
    pub key: String,
    #[serde(rename = "type")]
    pub ty: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxScriptFailureDiagnostic {
    #[serde(rename = "logs")]
    pub logs: Vec<String>,
}

// Additional types from OpenRPC spec

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ChainPoint {
    #[serde(rename = "slot")]
    pub slot: u64,
    #[serde(rename = "blockHash")]
    pub block_hash: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxStatus {
    #[serde(rename = "stage")]
    pub stage: String,
    #[serde(rename = "confirmations")]
    pub confirmations: u64,
    #[serde(rename = "nonConfirmations")]
    pub non_confirmations: u64,
    #[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
    pub confirmed_at: Option<ChainPoint>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckStatusResponse {
    #[serde(rename = "statuses")]
    pub statuses: std::collections::HashMap<String, TxStatus>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TxLog {
    #[serde(rename = "hash")]
    pub hash: String,
    #[serde(rename = "stage")]
    pub stage: String,
    #[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
    pub payload: Option<String>,
    #[serde(rename = "confirmations")]
    pub confirmations: u64,
    #[serde(rename = "nonConfirmations")]
    pub non_confirmations: u64,
    #[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
    pub confirmed_at: Option<ChainPoint>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DumpLogsResponse {
    #[serde(rename = "entries")]
    pub entries: Vec<TxLog>,
    #[serde(rename = "nextCursor", skip_serializing_if = "Option::is_none")]
    pub next_cursor: Option<u64>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PendingTx {
    #[serde(rename = "hash")]
    pub hash: String,
    #[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
    pub payload: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PeekPendingResponse {
    #[serde(rename = "entries")]
    pub entries: Vec<PendingTx>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InflightTx {
    #[serde(rename = "hash")]
    pub hash: String,
    #[serde(rename = "stage")]
    pub stage: String,
    #[serde(rename = "confirmations")]
    pub confirmations: u64,
    #[serde(rename = "nonConfirmations")]
    pub non_confirmations: u64,
    #[serde(rename = "confirmedAt", skip_serializing_if = "Option::is_none")]
    pub confirmed_at: Option<ChainPoint>,
    #[serde(rename = "payload", skip_serializing_if = "Option::is_none")]
    pub payload: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PeekInflightResponse {
    #[serde(rename = "entries")]
    pub entries: Vec<InflightTx>,
}