mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-21 06:16:45 +00:00

* [NOD-1500] Added Domain type and Constructor * [NOD-1500] Replaced dag+txpool with domain in flowContext * [NOD-1500] Replaced dag+txpool with domain in flowContext * [NOD-1500] Converters: domain objects from/to appmessage * [NOD-1500] Convert hashes to DomainHashes in appmessages * [NOD-1500] Remove references to daghash in dagconfig * [NOD-1500] Fixed all appmessage usages of hashes * [NOD-1500] Update all RPC to use domain * [NOD-1500] Big chunk of protocol flows re-wired to domain * [NOD-1500] Finished re-wiring all protocol flows to new Domain * [NOD-1500] Fix some mempool and kaspaminer compilation errors * [NOD-1500] Deleted util/{block,tx,daghash} and dbaccess * [NOD-1500] util.CoinbaseTransactionIndex -> transactionhelper.CoinbaseTransactionIndex * [NOD-1500] Fix txsigner * [NOD-1500] Removed all references to util/subnetworkid * [NOD-1500] Update RpcGetBlock related messages * [NOD-1500] Many more compilation fixes * [NOD-1500] Return full list of missing blocks for orphan resolution * [NOD-1500] Fixed handshake * [NOD-1500] Fixed flowcontext compilation * [NOD-1500] Update users of StartIBDIfRequired to handle error * [NOD-1500] Removed some more fields from RPC * [NOD-1500] Fix the getBlockTemplate flow * [NOD-1500] Fix HandleGetCurrentNetwork * [NOD-1500] Remove redundant code * [NOD-1500] Remove obsolete notifications * [NOD-1500] Split MiningManager and Consensus to separate fields in Domain * [NOD-1500] Update two wrong references to location of txscript * [NOD-1500] Added comments * [NOD-1500] Fix some tests * [NOD-1500] Removed serialization logic from appmessage * [NOD-1500] Rename database/serialization/messages.proto to dbobjects.proto * [NOD-1500] Delete integration tests * [NOD-1500] Remove txsort * [NOD-1500] Fix tiny bug * [NOD-1500] Remove rogue dependancy on bchd * [NOD-1500] Some stylistic fixes
74 lines
3.8 KiB
Go
74 lines
3.8 KiB
Go
/*
|
|
Package mempool provides a policy-enforced pool of unmined kaspa transactions.
|
|
|
|
A key responsbility of the kaspa network is mining user-generated transactions
|
|
into blocks. In order to facilitate this, the mining process relies on having a
|
|
readily-available source of transactions to include in a block that is being
|
|
solved.
|
|
|
|
At a high level, this package satisfies that requirement by providing an
|
|
in-memory pool of fully validated transactions that can also optionally be
|
|
further filtered based upon a configurable policy.
|
|
|
|
One of the policy configuration options controls whether or not "standard"
|
|
transactions are accepted. In essence, a "standard" transaction is one that
|
|
satisfies a fairly strict set of requirements that are largely intended to help
|
|
provide fair use of the system to all users. It is important to note that what
|
|
is considered a "standard" transaction changes over time. For some insight, at
|
|
the time of this writing, an example of SOME of the criteria that are required
|
|
for a transaction to be considered standard are that it is of the most-recently
|
|
supported version, finalized, does not exceed a specific size, and only consists
|
|
of specific script forms.
|
|
|
|
Since this package does not deal with other kaspa specifics such as network
|
|
communication and transaction relay, it returns a list of transactions that were
|
|
accepted which gives the caller a high level of flexibility in how they want to
|
|
proceed. Typically, this will involve things such as relaying the transactions
|
|
to other peers on the network and notifying the mining process that new
|
|
transactions are available.
|
|
|
|
Feature Overview
|
|
|
|
The following is a quick overview of the major features. It is not intended to
|
|
be an exhaustive list.
|
|
|
|
- Maintain a pool of fully validated transactions
|
|
- Reject non-fully-spent duplicate transactions
|
|
- Reject coinbase transactions
|
|
- Reject double spends (both from the DAG and other transactions in pool)
|
|
- Reject invalid transactions according to the network consensus rules
|
|
- Full script execution and validation with signature cache support
|
|
- Individual transaction query support
|
|
- Orphan transaction support (transactions that spend from unknown outputs)
|
|
- Configurable limits (see transaction acceptance policy)
|
|
- Automatic addition of orphan transactions that are no longer orphans as new
|
|
transactions are added to the pool
|
|
- Individual orphan transaction query support
|
|
- Configurable transaction acceptance policy
|
|
- Option to accept or reject standard transactions
|
|
- Option to accept or reject transactions based on priority calculations
|
|
- Max signature operations per transaction
|
|
- Max number of orphan transactions allowed
|
|
- Additional metadata tracking for each transaction
|
|
- Timestamp when the transaction was added to the pool
|
|
- The fee the transaction pays
|
|
- The starting priority for the transaction
|
|
- Manual control of transaction removal
|
|
- Recursive removal of all dependent transactions
|
|
|
|
Errors
|
|
|
|
Errors returned by this package are either the raw errors provided by underlying
|
|
calls or of type mempool.RuleError. Since there are two classes of rules
|
|
(mempool acceptance rules and blockDAG (consensus) acceptance rules), the
|
|
mempool.RuleError type contains a single Err field which will, in turn, either
|
|
be a mempool.TxRuleError or a ruleerrors.RuleError. The first indicates a
|
|
violation of mempool acceptance rules while the latter indicates a violation of
|
|
consensus acceptance rules. This allows the caller to easily differentiate
|
|
between unexpected errors, such as database errors, versus errors due to rule
|
|
violations through type assertions. In addition, callers can programmatically
|
|
determine the specific rule violation by type asserting the Err field to one of
|
|
the aforementioned types and examining their underlying ErrorCode field.
|
|
*/
|
|
package mempool
|