mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-03 05:43:08 +00:00
add un/verified signed transaction structs
This commit is contained in:
parent
b49f38ca4b
commit
a174eb4b85
@ -1,5 +1,5 @@
|
||||
use log::info;
|
||||
use secp256k1_zkp::{PedersenCommitment, Tweak};
|
||||
use secp256k1_zkp::{PedersenCommitment, PublicKey, Scalar, Tweak};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sha2::{digest::FixedOutput, Digest};
|
||||
|
||||
@ -57,6 +57,25 @@ pub struct Transaction {
|
||||
pub state_changes: (serde_json::Value, usize),
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct TransactionSignature {}
|
||||
|
||||
/// A transaction with a signature.
|
||||
/// Meant to be sent through the network to the sequencer
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct UnverifiedSignedTransaction {
|
||||
transaction: Transaction,
|
||||
signature: TransactionSignature
|
||||
}
|
||||
|
||||
/// A transaction with a valid signature over its hash.
|
||||
/// Can only be constructed from an `UnverifiedSignedTransaction`
|
||||
/// if the signature is valid
|
||||
pub struct VerifiedSignedTransaction {
|
||||
transaction: Transaction,
|
||||
signature: TransactionSignature
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct MintMoneyPublicTx {
|
||||
pub acc: [u8; 32],
|
||||
@ -150,6 +169,9 @@ impl ActionData {
|
||||
}
|
||||
}
|
||||
|
||||
type SignaturePrivateKey = Scalar;
|
||||
type SignaturePublicKey = PublicKey;
|
||||
|
||||
impl Transaction {
|
||||
/// Computes and returns the SHA-256 hash of the JSON-serialized representation of `self`.
|
||||
pub fn hash(&self) -> TreeHashType {
|
||||
@ -162,6 +184,13 @@ impl Transaction {
|
||||
TreeHashType::from(hasher.finalize_fixed())
|
||||
}
|
||||
|
||||
pub fn sign(self, _private_key: SignaturePrivateKey) -> UnverifiedSignedTransaction {
|
||||
let _hash = self.hash();
|
||||
// Implement actual signature over `hash`
|
||||
let signature = TransactionSignature {};
|
||||
UnverifiedSignedTransaction { transaction: self, signature }
|
||||
}
|
||||
|
||||
pub fn log(&self) {
|
||||
info!("Transaction hash is {:?}", hex::encode(self.hash()));
|
||||
info!("Transaction tx_kind is {:?}", self.tx_kind);
|
||||
@ -214,6 +243,14 @@ impl Transaction {
|
||||
}
|
||||
}
|
||||
|
||||
impl UnverifiedSignedTransaction {
|
||||
pub fn into_verified(self) -> VerifiedSignedTransaction {
|
||||
let hash = self.transaction.hash();
|
||||
// Check signature over hash
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use secp256k1_zkp::{constants::SECRET_KEY_SIZE, Tweak};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user