use bsv_rs::primitives::PrivateKey;
use bsv_rs::script::templates::P2PKH;
use bsv_rs::script::SignOutputs;
use bsv_rs::transaction::{MockChainTracker, Transaction, TransactionInput, TransactionOutput};
fn main() {
let key = PrivateKey::random();
let address = key.public_key().to_address();
let mut funding = Transaction::new();
funding
.add_output(TransactionOutput::new(
10_000,
P2PKH::lock_from_address(&address).unwrap(),
))
.unwrap();
let mut spend = Transaction::new();
let mut input = TransactionInput::with_source_transaction(funding, 0);
input.set_unlocking_script_template(P2PKH::unlock(&key, SignOutputs::All, false));
spend.add_input(input).unwrap();
spend.add_p2pkh_output(&address, Some(9_900)).unwrap();
futures::executor::block_on(spend.sign()).unwrap();
println!("txid {}", spend.id());
println!("size {} bytes", spend.to_binary().len());
let tracker = MockChainTracker::new(0);
let ok = futures::executor::block_on(spend.verify(&tracker, None)).unwrap();
assert!(ok);
println!("verified {ok}");
}