Bitcoin-Crypto
view release on metacpan or search on metacpan
lib/Bitcoin/Crypto/Transaction.pm view on Meta::CPAN
Bitcoin::Crypto::Transaction - Bitcoin transaction instance
=head1 SYNOPSIS
use Bitcoin::Crypto qw(btc_utxo btc_transaction);
# extract unspent transaction outputs from the previous transaction
btc_utxo->extract([hex => $serialized_previous_tx]);
# create transaction from its serialized form
my $tx = btc_transaction->from_serialized([hex => $serialized_this_tx]);
# this will verify the transaction and throw an exception if it is not correct
$tx->verify;
# dump the transaction in readable format
print $tx->dump;
=head1 DESCRIPTION
Transaction support in Bitcoin::Crypto is provided on best-effort basis. The
goal is not to reimplement Bitcoin Core, which would most likely lead to
security issues, but rather to provide means to manipulate a set of well-known
standard transaction types. Widely used C<P2PKH>, C<P2SH>, their SegWit
counterparts, C<P2TR> and C<P2MS> are thoroughly tested and should be safe to
use. Still, keep L<Bitcoin::Crypto::Manual/DISCLAIMER> in mind.
See L<Bitcoin::Crypto::Manual/Transactions> for details and guidelines.
=head1 INTERFACE
=head2 Attributes
=head3 version
Integer containing version of the transaction. By default C<1>.
I<Available in the constructor>.
=head3 inputs
The array reference of transaction inputs (L<Bitcoin::Crypto::Transaction::Input>).
It's better to use L</add_input> instead of pushing directly to this array.
=head3 outputs
The array reference of transaction outputs (L<Bitcoin::Crypto::Transaction::Output>).
It's better to use L</add_output> instead of pushing directly to this array.
=head3 locktime
Integer containing locktime of the transaction. By default C<0>.
I<Available in the constructor>.
=head3 block
An optional instance of L<Bitcoin::Crypto::Block>. This reference is weakened.
Block may be required to do some validations when calling L</verify>.
I<Available in the constructor>.
I<writer:> C<set_block>
I<predicate:> C<has_block>
=head2 Methods
=head3 new
$tx = $class->new(%args)
This is a standard Moo constructor, which can be used to create the object. It
takes arguments specified in L</Attributes>.
Returns class instance.
=head3 add_input
$object = $object->add_input($input_object)
$object = $object->add_input(%args)
Adds a new input to the transaction.
If a single scalar is passed, it must be a constructed object of L<Bitcoin::Crypto::Transaction::Input>.
Otherwise expects a hash of arguments passed to L<Bitcoin::Crypto::Transaction::Input/new>.
Returns itself (for chaining).
=head3 add_output
$object = $object->add_output($output_object)
$object = $object->add_output(%args)
Same as L</add_input>, but adds an output (L<Bitcoin::Crypto::Transaction::Output>).
=head3 to_serialized
$serialized = $object->to_serialized(%params)
Serializes a transaction into a bytestring.
C<%params> can be any of:
=over
=item * C<witness>
Boolean, default C<1>. If C<0> is passed, forces serialization without witness
data. Note that this is a no-op in non-segwit transactions.
=back
=head3 from_serialized
$object = $class->from_serialized($data, %params)
( run in 0.703 second using v1.01-cache-2.11-cpan-39bf76dae61 )