Bitcoin-Crypto

 view release on metacpan or  search on metacpan

t/Transaction/sign.t  view on Meta::CPAN


	$tx = btc_transaction->new;

	btc_utxo->new(
		txid => [hex => '9fb32a2b34f497274419102cfa8f79c21029e8a415936366b2b058b992f55fdf'],
		output_index => 2,
		output => {
			locking_script => [P2WSH => $redeem_script->get_segwit_address],
			value => 88888,
		},
	)->register;

	$tx->add_input(
		utxo => [[hex => '9fb32a2b34f497274419102cfa8f79c21029e8a415936366b2b058b992f55fdf'], 2],
	);

	$tx->add_output(
		value => 88800,
		locking_script => [P2PKH => '12s4mjQcz6rLpF8EyVGxFEFrgVKmNiPXxg'],
	);

	$prv->sign_transaction($tx, signing_index => 0, redeem_script => $redeem_script, multisig => [1, 2]);
	$other_prv->sign_transaction($tx, signing_index => 0, redeem_script => $redeem_script, multisig => [2, 2]);

	ok lives { $tx->verify }, 'input verification ok';
};

subtest 'should sign transactions (two inputs)' => sub {
	my $ex;
	$tx = btc_transaction->new;

	# NOTE: uses UTXOs from previous subtests

	$tx->add_input(
		utxo => [[hex => '5fb32a2b34f497274419100cfa8f79c21029e8a415936366b2b058b992f55fdf'], 5],
	);

	$tx->add_input(
		utxo => [[hex => '0437cd7f8525ceed2324359c2d0ba26006d92d856a9c20fa0241106ee5a597c9'], 0],
	);

	$tx->add_output(
		value => '50_00000000',
		locking_script => [
			P2SH => $prv->get_public_key->get_compat_address
		],
	);

	$ex = dies { $tx->verify };
	ok $ex, 'input verification failed ok (none signed)';
	isa_ok $ex, 'Bitcoin::Crypto::Exception::TransactionScript';

	$prv->sign_transaction($tx, signing_index => 0);

	$ex = dies { $tx->verify };
	ok $ex, 'input verification failed ok (one signed)';
	isa_ok $ex, 'Bitcoin::Crypto::Exception::TransactionScript';

	$prv->sign_transaction($tx, signing_index => 1);

	my $alive = lives { $tx->verify };
	ok $alive, 'input verification ok (two signed)';
};

done_testing;



( run in 2.301 seconds using v1.01-cache-2.11-cpan-d8267643d1d )