Crates.io | coins-core |
lib.rs | coins-core |
version | 0.12.0 |
source | src |
created_at | 2021-04-04 18:12:06.175379 |
updated_at | 2024-07-27 13:04:52.387456 |
description | Core library for coins-bip32 and coins-bip39 |
homepage | https://github.com/summa-tx/coins |
repository | https://github.com/summa-tx/coins |
max_upload_size | |
id | 378894 |
size | 38,310 |
coins-core
is an abstract description of UTXO transactions. It provides a
collection of traits that provide consistent interfaces to UTXO transaction
construction. Coins's traits ensure that types are consistent across all
steps in the tx construction process, and allow for code reuse when building
transactions on multiple chains (e.g. Bitcoin Mainnet and Bitcoin Testnet).
Many concepts familiar to UTXO chain developers have been genericized.
Transactions are modeled as a collection of Input
s and Output
s. Rather than
addresses or scripts, the Output
trait has an associated
RecipientIdentifier
. Similarly, rather than an outpoint, the Input
trait
has an associated TXOIdentfier
.
Support for other chains may be added by implementing these traits, and
extending the implementations with network-specific functionality. We have
provided an implementation suitable for Bitcoin chains (mainnet, testnet, and
signet) in the bitcoins
crate.
The Ser
trait is a simple serialization API using std::io::{Read, Write}
.
Implementers define the binary serialization format of the type, as well as the
JSON serialization. The transaction type must implement Ser
, as the provided
txid
logic assumes access to the serialize
method.
Ser
has an associated Error
type. Most basic types can simply use the
provided SerError
. However, more complex (de)serialization will want to
implement a custom error type to handle (e.g.) invalid transactions. These
types must be easily instantiated from a SerError
or an std::io::Error
.
These describe the components of a transaction.
TXOIdentfier
uniquely identifies a transaction output. In Bitcoin, this
is an outpoint.Input
describes the input to a transaction. It has an associated
TXOIdentfier
that identifies the TXO being consumed, and can be extended
with ancillary information (e.g. Bitcoin's nSequence
field).RecipientIdentifier
identifies the recipient of a new TXO. In Bitcoin,
these are pubkey scripts.Output
describes the output to a transaction. It has an associated a
RecipientIdentifier
and a Value
type.Transaction
is a collection of Input
s to be consumed, and Output
s to
be created. Its associated Digest
type describes its transaction ID and
must be produced by its associated HashWriter
. This allows transactions
to specify the digest algorithm used to generate their sighash digest and
their TXID.The encoder translates between human-facing data and protocol-facing data.
Particularly between addresses and RecipientIdentifier
s
Address
is a type that describes the network's address semantics. For
Bitcoin this is an enum whose members wrap a String
.AddressEncoder
has associated Address
and RecipientIdentifier
types. It
exposes encode_address
, decode_address
, and string_to_address
it order to
enable conversion between them.The transaction builder provides a convenient interface for constructing
Transaction
objects. It has associated Transaction
and AddressEncoder
types, and ensures that they use the same RecipientIdentifier
. This allows us
to provide a simple pay(value, address)
interface on the builder.
The network type guarantees type consistency across a set of implementing
types, provides a unified interface to accessing them. This is intended to be
the primary entry point for the implementing libraries. It guarantees that the
Builder
, AddressEncoder
, and Transaction
types use the same Error
, the
same RecipientIdentifier
, the same TXOIdentfier
, and the same Address
type. It provides passthroughs to the AddressEncoder
's associated functions,
and a convenience method for instantiating a new builder.