github.com/btcsuite/btcd@v0.24.0/mempool/README.md (about) 1 mempool 2 ======= 3 4 [![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) 5 [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) 6 [![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/mempool) 7 8 Package mempool provides a policy-enforced pool of unmined bitcoin transactions. 9 10 A key responsbility of the bitcoin network is mining user-generated transactions 11 into blocks. In order to facilitate this, the mining process relies on having a 12 readily-available source of transactions to include in a block that is being 13 solved. 14 15 At a high level, this package satisfies that requirement by providing an 16 in-memory pool of fully validated transactions that can also optionally be 17 further filtered based upon a configurable policy. 18 19 One of the policy configuration options controls whether or not "standard" 20 transactions are accepted. In essence, a "standard" transaction is one that 21 satisfies a fairly strict set of requirements that are largely intended to help 22 provide fair use of the system to all users. It is important to note that what 23 is considered a "standard" transaction changes over time. For some insight, at 24 the time of this writing, an example of _some_ of the criteria that are required 25 for a transaction to be considered standard are that it is of the most-recently 26 supported version, finalized, does not exceed a specific size, and only consists 27 of specific script forms. 28 29 Since this package does not deal with other bitcoin specifics such as network 30 communication and transaction relay, it returns a list of transactions that were 31 accepted which gives the caller a high level of flexibility in how they want to 32 proceed. Typically, this will involve things such as relaying the transactions 33 to other peers on the network and notifying the mining process that new 34 transactions are available. 35 36 This package has intentionally been designed so it can be used as a standalone 37 package for any projects needing the ability create an in-memory pool of bitcoin 38 transactions that are not only valid by consensus rules, but also adhere to a 39 configurable policy. 40 41 ## Feature Overview 42 43 The following is a quick overview of the major features. It is not intended to 44 be an exhaustive list. 45 46 - Maintain a pool of fully validated transactions 47 - Reject non-fully-spent duplicate transactions 48 - Reject coinbase transactions 49 - Reject double spends (both from the chain and other transactions in pool) 50 - Reject invalid transactions according to the network consensus rules 51 - Full script execution and validation with signature cache support 52 - Individual transaction query support 53 - Orphan transaction support (transactions that spend from unknown outputs) 54 - Configurable limits (see transaction acceptance policy) 55 - Automatic addition of orphan transactions that are no longer orphans as new 56 transactions are added to the pool 57 - Individual orphan transaction query support 58 - Configurable transaction acceptance policy 59 - Option to accept or reject standard transactions 60 - Option to accept or reject transactions based on priority calculations 61 - Rate limiting of low-fee and free transactions 62 - Non-zero fee threshold 63 - Max signature operations per transaction 64 - Max orphan transaction size 65 - Max number of orphan transactions allowed 66 - Additional metadata tracking for each transaction 67 - Timestamp when the transaction was added to the pool 68 - Most recent block height when the transaction was added to the pool 69 - The fee the transaction pays 70 - The starting priority for the transaction 71 - Manual control of transaction removal 72 - Recursive removal of all dependent transactions 73 74 ## Installation and Updating 75 76 ```bash 77 $ go get -u github.com/btcsuite/btcd/mempool 78 ``` 79 80 ## License 81 82 Package mempool is licensed under the [copyfree](http://copyfree.org) ISC 83 License.