Skip to content
Snippets Groups Projects

wip: blockchain: local validation

Closed Éloïs requested to merge jawaka-146-dubp-local-validation into dev
2 files
+ 125
3
Compare changes
  • Side-by-side
  • Inline

Files

@@ -109,10 +109,40 @@ pub fn local_verify_tx_doc(tx_doc: &TransactionDocument) -> Result<(), Transacti
mod tests {
use super::*;
use dubp_user_docs_tests_tools::mocks::gen_mock_tx_doc;
use dubp_common_doc::traits::Document;
use dubp_common_doc::BlockNumber;
use dubp_user_docs::documents::transaction::TransactionInputUnlocks;
use dubp_user_docs::documents::transaction::TxBase;
use dubp_user_docs::documents::transaction::TxAmount;
use dubp_user_docs::documents::transaction::TransactionInput;
use dubp_user_docs::documents::transaction::TransactionUnlockProof;
use dubp_user_docs::documents::transaction::TransactionOutput;
use dubp_user_docs::documents::transaction::TransactionDocumentBuilder;
use dubp_common_doc::traits::DocumentBuilder;
use dup_crypto::hashs::Hash;
use dup_crypto::keys::*;
use dubp_common_doc::Blockstamp;
use std::str::FromStr;
use dubp_user_docs_tests_tools::mocks::gen_mock_tx_doc_wrong_version;
#[test]
fn local_verify_tx_doc_test() -> Result<(), TransactionDocumentError> {
// log au 15oct:
/*
missingInput : avec builder ok
version : builder non,
signatures_count : ?
signature_ok : ça devrait être easy (builder sans generate signature)
*/
// todo
/*
dans transaction.rs
/// Generate hash
pub fn generate_hash(&mut self) {
self.hash = Some(self.compute_hash());
}
*/
// où j'en suis :
/*
@@ -132,13 +162,86 @@ mod tests {
//tx.hash = Some(tx.compute_hash());
assert!(local_verify_tx_doc(&tx).is_ok());
// TooLong
let mut tx = gen_mock_tx_doc();
let expected = Err(TransactionDocumentError::TooLong {
let expected : Result<(),TransactionDocumentError> = Err(TransactionDocumentError::TooLong {
expected_max_length: 100,
actual_length: 14,
});
let actual = local_verify_tx_doc(&tx);
assert_eq!(expected, actual);
// assert_eq!(expected, actual);
// for mock TransactionDocumentBuilder
let keypair = ed25519::KeyPairFromSeed32Generator::generate(
Seed32::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV").unwrap(),
);
let pubkey = PubKey::Ed25519(keypair.public_key());
let signator =
SignatorEnum::Ed25519(keypair.generate_signator().expect("fail to gen signator"));
let sig = Sig::Ed25519(ed25519::Signature::from_base64(
"cq86RugQlqAEyS8zFkB9o0PlWPSb+a6D/MEnLe8j+okyFYf/WzI6pFiBkQ9PSOVn5I0dwzVXg7Q4N1apMWeGAg==",
).unwrap());
let block = Blockstamp::from_string(
"0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
)
.unwrap();
let inputs =
&vec![TransactionInput::D(
TxAmount(10),
TxBase(0),
PubKey::Ed25519(
ed25519::PublicKey::from_base58("DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV")
.unwrap(),
),
BlockNumber(0),
)];
// MissingInput
let mut builder = TransactionDocumentBuilder {
currency: "duniter_unit_test_currency",
blockstamp: &block,
locktime: &0,
issuers: &vec![pubkey],
inputs: &vec![],
unlocks: &vec![TransactionInputUnlocks {
index: 0,
unlocks: vec![TransactionUnlockProof::Sig(0)],
}],
outputs: &vec![TransactionOutput::from_str(
"10:0:SIG(FD9wujR7KABw88RyKEGBYRLz8PA6jzVCbcBAsrBXBqSa)",
)
.expect("fail to parse output !")],
comment: "test",
hash: None,
};
let empty_vec = &vec![];
builder.inputs = empty_vec;
let tx = builder.build_with_signature(vec![sig]);
let expected : Result<(),TransactionDocumentError> = Err(TransactionDocumentError::MissingInput );
let actual = local_verify_tx_doc(&tx);
assert_eq!(expected,actual);
// Version
let tx = gen_mock_tx_doc_wrong_version();
let expected : Result<(),TransactionDocumentError> = Err(TransactionDocumentError::TxVersion{
expected_version: 10,
actual_version: 12,
} );
let actual = local_verify_tx_doc(&tx);
assert_eq!(expected,actual);
Ok(())
}
Loading