Add CommitMessage
This commit is contained in:
parent
bb82a0b760
commit
8d4238f531
@ -4,14 +4,16 @@ use anyhow::{Error, Result};
|
||||
use js_sys::Date;
|
||||
use rand::{thread_rng, RngCore};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde_json::Value;
|
||||
use serde_json::{Map, Value};
|
||||
use sp_client::bitcoin::consensus::serialize;
|
||||
use sp_client::bitcoin::hex::{DisplayHex, FromHex};
|
||||
use sp_client::bitcoin::OutPoint;
|
||||
use sp_client::bitcoin::{OutPoint, Transaction};
|
||||
use tsify::Tsify;
|
||||
|
||||
use crate::crypto::AAD;
|
||||
use crate::error::AnkError;
|
||||
use crate::pcd::Member;
|
||||
use crate::signature::Proof;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Tsify)]
|
||||
#[tsify(into_wasm_abi, from_wasm_abi)]
|
||||
@ -19,6 +21,7 @@ pub enum AnkFlag {
|
||||
NewTx,
|
||||
Faucet,
|
||||
Cipher,
|
||||
Commit,
|
||||
Unknown,
|
||||
}
|
||||
|
||||
@ -28,6 +31,7 @@ impl From<&str> for AnkFlag {
|
||||
"NewTx" => Self::NewTx,
|
||||
"Faucet" => Self::Faucet,
|
||||
"Cipher" => Self::Cipher,
|
||||
"Commit" => Self::Commit,
|
||||
_ => Self::Unknown,
|
||||
}
|
||||
}
|
||||
@ -45,6 +49,7 @@ impl AnkFlag {
|
||||
0 => Self::NewTx,
|
||||
1 => Self::Faucet,
|
||||
2 => Self::Cipher,
|
||||
3 => Self::Commit,
|
||||
_ => Self::Unknown,
|
||||
}
|
||||
}
|
||||
@ -54,11 +59,58 @@ impl AnkFlag {
|
||||
Self::NewTx => "NewTx",
|
||||
Self::Faucet => "Faucet",
|
||||
Self::Cipher => "Cipher",
|
||||
Self::Commit => "Commit",
|
||||
Self::Unknown => "Unknown",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Message sent to the server to commit some state in a transaction
|
||||
/// Client must first send a commit message with empty validation_tokens
|
||||
/// Relay will ignore a commit message for an update he's not aware of that also bears validation_tokens
|
||||
#[derive(Debug, PartialEq, Clone, Serialize, Deserialize, Tsify)]
|
||||
#[tsify(into_wasm_abi, from_wasm_abi)]
|
||||
pub struct CommitMessage {
|
||||
pub init_tx: String, // Can be tx or txid of the first transaction of the chain, which is maybe not ideal
|
||||
pub encrypted_pcd: Map<String, Value>,
|
||||
pub keys: Map<String, Value>,
|
||||
pub validation_tokens: Vec<Proof>,
|
||||
pub error: Option<AnkError>,
|
||||
}
|
||||
|
||||
impl CommitMessage {
|
||||
/// Create a new commitment message for the first transaction of the chain
|
||||
/// init_tx must be the hex string of the transaction
|
||||
/// validation_tokens must be empty
|
||||
pub fn new_first_commitment(transaction: Transaction, encrypted_pcd: Map<String, Value>, keys: Map<String, Value>) -> Self {
|
||||
Self {
|
||||
init_tx: serialize(&transaction).to_lower_hex_string(),
|
||||
encrypted_pcd,
|
||||
keys,
|
||||
validation_tokens: vec![],
|
||||
error: None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Create a new commitment message for an update transaction
|
||||
/// init_tx must be the hex string of the txid of the first commitment transaction
|
||||
/// validation_tokens must be empty
|
||||
pub fn new_update_commitment(init_tx: OutPoint, encrypted_pcd: Map<String, Value>, keys: Map<String, Value>) -> Self {
|
||||
Self {
|
||||
init_tx: init_tx.to_string(),
|
||||
encrypted_pcd,
|
||||
keys,
|
||||
validation_tokens: vec![],
|
||||
error: None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Set the validation tokens for a pending commitment
|
||||
pub fn set_validation_tokens(&mut self, validation_tokens: Vec<Proof>) {
|
||||
self.validation_tokens = validation_tokens;
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Tsify)]
|
||||
#[tsify(into_wasm_abi, from_wasm_abi)]
|
||||
pub struct FaucetMessage {
|
||||
|
Loading…
x
Reference in New Issue
Block a user