oasis_core_runtime/consensus/
transaction.rs1use crate::common::{
2 crypto::signature::{signature_context_with_chain_separation, Signed},
3 quantity::Quantity,
4};
5
6pub const SIGNATURE_CONTEXT: &[u8] = b"oasis-core/consensus: tx";
7
8fn signature_context(chain_context: &String) -> Vec<u8> {
9 let context = SIGNATURE_CONTEXT.to_vec();
10 signature_context_with_chain_separation(context, chain_context)
11}
12
13#[derive(Debug, cbor::Encode, cbor::Decode)]
15#[cbor(no_default)]
16pub struct Transaction {
17 pub nonce: u64,
19 pub fee: Option<Fee>,
21
22 pub method: MethodName,
24 pub body: cbor::Value,
26}
27
28pub type SignedTransaction = Signed;
30
31impl SignedTransaction {
32 pub fn verify(&self, chain_context: &String) -> bool {
34 let context = signature_context(chain_context);
35 self.signature.verify(&context, &self.blob)
36 }
37}
38
39#[derive(Debug, Default, cbor::Encode, cbor::Decode)]
42pub struct Fee {
43 pub amount: Quantity,
45 pub gas: Gas,
47}
48
49pub type Gas = u64;
51
52pub type MethodName = String;
54
55#[derive(Debug, Default, cbor::Encode, cbor::Decode)]
57pub struct Proof {
58 pub height: u64,
60 pub raw_proof: Vec<u8>,
62}
63
64#[derive(Debug, Default, cbor::Encode, cbor::Decode)]
66pub struct SignedTransactionWithProof {
67 pub signed_tx: SignedTransaction,
69 pub proof: Proof,
71}