use blvm_node::network::protocol::PaymentMessage;
use blvm_protocol::payment::{Payment, PaymentOutput, PaymentProtocolServer, PaymentRequest};
use blvm_protocol::serialization::transaction::serialize_transaction;
use blvm_protocol::{OutPoint, Transaction, TransactionInput, TransactionOutput};
use secp256k1::{Secp256k1, SecretKey};
#[test]
#[ignore] fn test_payment_verification() {
let output = PaymentOutput {
script: vec![0x51], amount: Some(1000),
};
let payment_request = PaymentRequest::new("main".to_string(), vec![output.clone()], 1234567890);
let tx = Transaction {
version: 1,
inputs: blvm_protocol::tx_inputs![TransactionInput {
prevout: OutPoint {
hash: [0u8; 32],
index: 0,
},
script_sig: vec![],
sequence: 0xffffffff,
}],
outputs: blvm_protocol::tx_outputs![TransactionOutput {
value: 1000,
script_pubkey: vec![0x51], }],
lock_time: 0,
};
let tx_bytes = serialize_transaction(&tx);
let payment = Payment::new(vec![tx_bytes]);
let payment_msg = PaymentMessage {
payment,
payment_id: vec![1, 2, 3, 4],
customer_signature: None,
};
let result = PaymentProtocolServer::process_payment(
&payment_msg.payment,
&payment_request,
None, );
assert!(result.is_ok());
}
#[test]
#[ignore] fn test_payment_ack_signing() {
let secp = Secp256k1::new();
let merchant_key = SecretKey::from_slice(&[1; 32]).unwrap();
let output = PaymentOutput {
script: vec![0x51],
amount: Some(1000),
};
let mut payment_request = PaymentRequest::new("main".to_string(), vec![output], 1234567890);
let merchant_pubkey = secp256k1::PublicKey::from_secret_key(&secp, &merchant_key);
payment_request.merchant_pubkey = Some(merchant_pubkey.serialize().to_vec());
let tx = Transaction {
version: 1,
inputs: blvm_protocol::tx_inputs![TransactionInput {
prevout: OutPoint {
hash: [0u8; 32],
index: 0,
},
script_sig: vec![],
sequence: 0xffffffff,
}],
outputs: blvm_protocol::tx_outputs![TransactionOutput {
value: 1000,
script_pubkey: vec![0x51],
}],
lock_time: 0,
};
let tx_bytes = serialize_transaction(&tx);
let payment = Payment::new(vec![tx_bytes]);
let payment_msg = PaymentMessage {
payment,
payment_id: vec![1, 2, 3, 4],
customer_signature: None,
};
let result = PaymentProtocolServer::process_payment(
&payment_msg.payment,
&payment_request,
Some(&merchant_key),
);
assert!(result.is_ok());
let ack = result.unwrap();
assert!(ack.memo.is_some());
}