Categorygithub.com/sCrypt-Inc/go-bt/v2
modulepackage
2.1.0-beta.9
Repository: https://github.com/scrypt-inc/go-bt.git
Documentation: pkg.go.dev

# README

go-bt

The go-to Bitcoin Transaction (BT) GoLang library

Release Build Status Report codecov Go Sponsor Donate Mergify Status


Table of Contents


Installation

go-bt requires a supported release of Go.

go get -u github.com/libsv/go-bt

Documentation

View the generated documentation

GoDoc

For more information around the technical aspects of Bitcoin, please see the updated Bitcoin Wiki


Features

  • Full featured Bitcoin transactions and transaction manipulation/functionality
  • Auto-fee calculations for change outputs
  • Transaction fee calculation and related checks
  • Interfaced signing/unlocking of transaction inputs for easy adaptation/custimisation and extendability for any use case
  • Bitcoin Transaction Script functionality
    • Bitcoin script engine (interpreter)
    • P2PKH (base58 addresses)
    • Data (OP_RETURN)
    • BIP276

Coming Soon! (18 monthsTM)

  • Complete SigHash Flag Capability
  • MultiSig functionality
Library Deployment

goreleaser for easy binary or library deployment to Github and can be installed via: brew install goreleaser.

The .goreleaser.yml file is used to configure goreleaser.

Use make release-snap to create a snapshot version of the release, and finally make release to ship to production.

Makefile Commands

View all makefile commands

make help

List of all current commands:

all                  Runs multiple commands
clean                Remove previous builds and any test cache data
clean-mods           Remove all the Go mod cache
coverage             Shows the test coverage
godocs               Sync the latest tag with GoDocs
help                 Show this help message
install              Install the application
install-go           Install the application (Using Native Go)
lint                 Run the golangci-lint application (install if not found)
release              Full production release (creates release in Github)
release              Runs common.release then runs godocs
release-snap         Test the full release (build binaries)
release-test         Full production test release (everything except deploy)
replace-version      Replaces the version in HTML/JS (pre-deploy)
tag                  Generate a new tag and push (tag version=0.0.0)
tag-remove           Remove a tag if found (tag-remove version=0.0.0)
tag-update           Update an existing tag to current commit (tag-update version=0.0.0)
test                 Runs vet, lint and ALL tests
test-ci              Runs all tests via CI (exports coverage)
test-ci-no-race      Runs all tests via CI (no race) (exports coverage)
test-ci-short        Runs unit tests via CI (exports coverage)
test-short           Runs vet, lint and tests (excludes integration tests)
uninstall            Uninstall the application (and remove files)
update-linter        Update the golangci-lint package (macOS only)
vet                  Run the Go vet application

Examples & Tests

All unit tests and examples run via Github Actions and uses Go version 1.16.x. View the configuration file.

Run all tests (including integration tests)

make test

Run tests (excluding integration tests)

make test-short

Benchmarks

Run the Go benchmarks:

make bench

Code Standards

Read more about this Go project's code standards.


Usage

View the examples


Contributing

View the contributing guidelines and please follow the code of conduct.

How can I help?

All kinds of contributions are welcome :raised_hands:! The most basic way to show your support is to star :star2: the project, or to raise issues :speech_balloon:. You can also support this project by becoming a sponsor on GitHub :clap: or by making a bitcoin donation to ensure this journey continues indefinitely! :rocket:

Stars


License

License

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

IsValidTxID will check that the txid bytes are valid.
LittleEndianBytes returns a byte array in little endian from an unsigned integer of 32 bytes.
NewFeeQuote will set up and return a new FeeQuotes struct which contains default fees when initially setup.
NewFeeQuotes will set up default feeQuotes for the minerName supplied, ie TAAL etc.
NewTx creates a new transaction object with default values.
NewTxFromBytes takes an array of bytes, constructs a Tx and returns it.
NewTxFromStream takes an array of bytes and constructs a Tx from it, returning the Tx and the bytes used.
NewTxFromString takes a toBytesHelper string representation of a bitcoin transaction and returns a Tx object.
NewVarIntFromBytes takes a byte array in VarInt format and returns the decoded unsigned integer value of the length, and it's size in bytes.
ReverseBytes reverses the bytes (little endian/big endian).

# Constants

DefaultSequenceNumber is the default starting sequence number.
DustLimit is the current minimum txo output accepted by miners.
FeeTypeData is the fee type for data tx parts.
FeeTypeStandard is the fee type for standard tx parts.
MaxPrevOutIndex is the maximum index the index field of a previous outpoint can be.
MaxTxInSequenceNum is the maximum sequence number the sequence field of a transaction input can be.
SequenceLockTimeDisabled is a flag that if set on a transaction input's sequence number, the sequence number will not be interpreted as a relative locktime.
SequenceLockTimeIsSeconds is a flag that if set on a transaction input's sequence number, the relative locktime has units of 512 seconds.
SequenceLockTimeMask is a mask that extracts the relative locktime when masked against the transaction input sequence number.

# Variables

Sentinal errors reported by signature hash.
Sentinal errors reported by signature hash.
General errors.
Sentinel errors reported by the fees.
Sentinel errors reported by the fees.
Sentinel errors reported by the fees.
Sentinal errors reported by inputs.
Sentinal errors reported by inputs.
ErrInsufficientFunds insufficient funds provided for funding.
Sentinal errors reported by change.
General errors.
General errors.
Sentinel errors reported by the fees.
General errors.
General errors.
ErrNoUTXO signals the UTXOGetterFunc has reached the end of its input.
Sentinal errors reported by outputs.
Sentinal errors reported by outputs.
General errors.
General errors.
Sentinel errors reported by the fees.
General errors.

# Structs

Fee displays the MiningFee as well as the RelayFee for a specific FeeType, for example 'standard' or 'data' see https://github.com/bitcoin-sv-specs/brfc-misc/tree/master/feespec.
FeeQuote contains a thread safe map of fees for standard and data fees as well as an expiry time for a specific miner.
FeeQuotes contains a list of miners and the current fees for each miner as well as their expiry.
FeeUnit displays the amount of Satoshis needed for a specific amount of Bytes in a transaction see https://github.com/bitcoin-sv-specs/brfc-misc/tree/master/feespec.
Input is a representation of a transaction input DO NOT CHANGE ORDER - Optimised for memory via maligned .
Output is a representation of a transaction output.
Tx wraps a bitcoin transaction DO NOT CHANGE ORDER - Optimised memory via malign .
TxFees is returned when CalculateFee is called and contains a breakdown of the fees including the total and the size breakdown of the tx in bytes.
TxSize contains the size breakdown of a transaction including the breakdown of data bytes vs standard bytes.
UnlockerParams params used for unlocking an input with a `bt.Unlocker`.
UTXO an unspent transaction output, used for creating inputs.

# Interfaces

Unlocker interface to allow custom implementations of different unlocking mechanisms.
UnlockerGetter interfaces getting an unlocker for a given output/locking script.

# Type aliases

FeeType is used to specify which type of fee is used depending on the type of tx data (eg: standard bytes or data bytes).
Txs a collection of *bt.Tx.
UTXOGetterFunc is used for tx.Fund(...).
UTXOs a collection of *bt.UTXO.
VarInt (variable integer) is a field used in transaction data to indicate the number of upcoming fields, or the length of an upcoming field.