ci: gofmt with go 1.19
Go 1.19 introduces various updates to gofmt.
This commit is contained in:
parent
66c8567a27
commit
e323751218
49 changed files with 685 additions and 647 deletions
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
Package addrmgr implements concurrency safe Bitcoin address manager.
|
||||
|
||||
Address Manager Overview
|
||||
# Address Manager Overview
|
||||
|
||||
In order maintain the peer-to-peer Bitcoin network, there needs to be a source
|
||||
of addresses to connect to as nodes come and go. The Bitcoin protocol provides
|
||||
|
|
|
@ -37,6 +37,7 @@ const (
|
|||
// from the block being located.
|
||||
//
|
||||
// For example, assume a block chain with a side chain as depicted below:
|
||||
//
|
||||
// genesis -> 1 -> 2 -> ... -> 15 -> 16 -> 17 -> 18
|
||||
// \-> 16a -> 17a
|
||||
//
|
||||
|
@ -488,7 +489,7 @@ func (b *BlockChain) calcSequenceLock(node *blockNode, tx *btcutil.Tx, utxoView
|
|||
// LockTimeToSequence converts the passed relative locktime to a sequence
|
||||
// number in accordance to BIP-68.
|
||||
// See: https://github.com/bitcoin/bips/blob/master/bip-0068.mediawiki
|
||||
// * (Compatibility)
|
||||
// - (Compatibility)
|
||||
func LockTimeToSequence(isSeconds bool, locktime uint32) uint32 {
|
||||
// If we're expressing the relative lock time in blocks, then the
|
||||
// corresponding sequence number is simply the desired input age.
|
||||
|
|
|
@ -36,10 +36,12 @@ func fastLog2Floor(n uint32) uint8 {
|
|||
// for comparing chains.
|
||||
//
|
||||
// For example, assume a block chain with a side chain as depicted below:
|
||||
//
|
||||
// genesis -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
|
||||
// \-> 4a -> 5a -> 6a
|
||||
//
|
||||
// The chain view for the branch ending in 6a consists of:
|
||||
//
|
||||
// genesis -> 1 -> 2 -> 3 -> 4a -> 5a -> 6a
|
||||
type chainView struct {
|
||||
mtx sync.Mutex
|
||||
|
@ -258,11 +260,13 @@ func (c *chainView) next(node *blockNode) *blockNode {
|
|||
// view.
|
||||
//
|
||||
// For example, assume a block chain with a side chain as depicted below:
|
||||
//
|
||||
// genesis -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
|
||||
// \-> 4a -> 5a -> 6a
|
||||
//
|
||||
// Further, assume the view is for the longer chain depicted above. That is to
|
||||
// say it consists of:
|
||||
//
|
||||
// genesis -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8
|
||||
//
|
||||
// Invoking this function with block node 5 would return block node 6 while
|
||||
|
@ -321,11 +325,13 @@ func (c *chainView) findFork(node *blockNode) *blockNode {
|
|||
// the chain view. It will return nil if there is no common block.
|
||||
//
|
||||
// For example, assume a block chain with a side chain as depicted below:
|
||||
//
|
||||
// genesis -> 1 -> 2 -> ... -> 5 -> 6 -> 7 -> 8
|
||||
// \-> 6a -> 7a
|
||||
//
|
||||
// Further, assume the view is for the longer chain depicted above. That is to
|
||||
// say it consists of:
|
||||
//
|
||||
// genesis -> 1 -> 2 -> ... -> 5 -> 6 -> 7 -> 8.
|
||||
//
|
||||
// Invoking this function with block node 7a would return block node 5 while
|
||||
|
|
|
@ -42,9 +42,11 @@ func HashToBig(hash *chainhash.Hash) *big.Int {
|
|||
// Like IEEE754 floating point, there are three basic components: the sign,
|
||||
// the exponent, and the mantissa. They are broken out as follows:
|
||||
//
|
||||
// * the most significant 8 bits represent the unsigned base 256 exponent
|
||||
// * bit 23 (the 24th bit) represents the sign bit
|
||||
// * the least significant 23 bits represent the mantissa
|
||||
// - the most significant 8 bits represent the unsigned base 256 exponent
|
||||
//
|
||||
// - bit 23 (the 24th bit) represents the sign bit
|
||||
//
|
||||
// - the least significant 23 bits represent the mantissa
|
||||
//
|
||||
// -------------------------------------------------
|
||||
// | Exponent | Sign | Mantissa |
|
||||
|
@ -53,6 +55,7 @@ func HashToBig(hash *chainhash.Hash) *big.Int {
|
|||
// -------------------------------------------------
|
||||
//
|
||||
// The formula to calculate N is:
|
||||
//
|
||||
// N = (-1^sign) * mantissa * 256^(exponent-3)
|
||||
//
|
||||
// This compact form is only used in bitcoin to encode unsigned 256-bit numbers
|
||||
|
|
|
@ -26,7 +26,7 @@ caller a high level of flexibility in how they want to react to certain events
|
|||
such as orphan blocks which need their parents requested and newly connected
|
||||
main chain blocks which might result in wallet updates.
|
||||
|
||||
Bitcoin Chain Processing Overview
|
||||
# Bitcoin Chain Processing Overview
|
||||
|
||||
Before a block is allowed into the block chain, it must go through an intensive
|
||||
series of validation rules. The following list serves as a general outline of
|
||||
|
@ -61,7 +61,7 @@ is by no means exhaustive:
|
|||
coins
|
||||
- Insert the block into the block database
|
||||
|
||||
Errors
|
||||
# Errors
|
||||
|
||||
Errors returned by this package are either the raw errors provided by underlying
|
||||
calls or of type blockchain.RuleError. This allows the caller to differentiate
|
||||
|
@ -70,7 +70,7 @@ violations through type assertions. In addition, callers can programmatically
|
|||
determine the specific rule violation by examining the ErrorCode field of the
|
||||
type asserted blockchain.RuleError.
|
||||
|
||||
Bitcoin Improvement Proposals
|
||||
# Bitcoin Improvement Proposals
|
||||
|
||||
This package includes spec changes outlined by the following BIPs:
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@ type blockProgressLogger struct {
|
|||
|
||||
// newBlockProgressLogger returns a new block progress logger.
|
||||
// The progress message is templated as follows:
|
||||
//
|
||||
// {progressAction} {numProcessed} {blocks|block} in the last {timePeriod}
|
||||
// ({numTxs}, height {lastBlockHeight}, {lastBlockTimeStamp})
|
||||
func newBlockProgressLogger(progressMessage string, logger btclog.Logger) *blockProgressLogger {
|
||||
|
|
|
@ -244,6 +244,7 @@ func determineMainChainBlocks(blocksMap map[chainhash.Hash]*blockChainContext, t
|
|||
// compressed script []byte variable
|
||||
//
|
||||
// The serialized header code format is:
|
||||
//
|
||||
// bit 0 - containing transaction is a coinbase
|
||||
// bit 1 - output zero is unspent
|
||||
// bit 2 - output one is unspent
|
||||
|
|
|
@ -125,6 +125,7 @@ var (
|
|||
// the arithmetic needed for elliptic curve operations.
|
||||
//
|
||||
// The following depicts the internal representation:
|
||||
//
|
||||
// -----------------------------------------------------------------
|
||||
// | n[9] | n[8] | ... | n[0] |
|
||||
// | 32 bits available | 32 bits available | ... | 32 bits available |
|
||||
|
@ -134,12 +135,14 @@ var (
|
|||
// -----------------------------------------------------------------
|
||||
//
|
||||
// For example, consider the number 2^49 + 1. It would be represented as:
|
||||
//
|
||||
// n[0] = 1
|
||||
// n[1] = 2^23
|
||||
// n[2..9] = 0
|
||||
//
|
||||
// The full 256-bit value is then calculated by looping i from 9..0 and
|
||||
// doing sum(n[i] * 2^(26i)) like so:
|
||||
//
|
||||
// n[9] * 2^(26*9) = 0 * 2^234 = 0
|
||||
// n[8] * 2^(26*8) = 0 * 2^208 = 0
|
||||
// ...
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
Package btcjson provides primitives for working with the bitcoin JSON-RPC API.
|
||||
|
||||
Overview
|
||||
# Overview
|
||||
|
||||
When communicating via the JSON-RPC protocol, all of the commands need to be
|
||||
marshalled to and from the the wire in the appropriate format. This package
|
||||
|
@ -14,7 +14,7 @@ provides data structures and primitives to ease this process.
|
|||
In addition, it also provides some additional features such as custom command
|
||||
registration, command categorization, and reflection-based help generation.
|
||||
|
||||
JSON-RPC Protocol Overview
|
||||
# JSON-RPC Protocol Overview
|
||||
|
||||
This information is not necessary in order to use this package, but it does
|
||||
provide some intuition into what the marshalling and unmarshalling that is
|
||||
|
@ -47,7 +47,7 @@ with it) doesn't always follow the spec and will sometimes return an error
|
|||
string in the result field with a null error for certain commands. However,
|
||||
for the most part, the error field will be set as described on failure.
|
||||
|
||||
Marshalling and Unmarshalling
|
||||
# Marshalling and Unmarshalling
|
||||
|
||||
Based upon the discussion above, it should be easy to see how the types of this
|
||||
package map into the required parts of the protocol
|
||||
|
@ -63,8 +63,8 @@ MarshalResponse functions are provided. They return the raw bytes ready to be
|
|||
sent across the wire.
|
||||
|
||||
Unmarshalling a received Request object is a two step process:
|
||||
1) Unmarshal the raw bytes into a Request struct instance via json.Unmarshal
|
||||
2) Use UnmarshalCmd on the Result field of the unmarshalled Request to create
|
||||
1. Unmarshal the raw bytes into a Request struct instance via json.Unmarshal
|
||||
2. Use UnmarshalCmd on the Result field of the unmarshalled Request to create
|
||||
a concrete command or notification instance with all struct fields set
|
||||
accordingly
|
||||
|
||||
|
@ -72,14 +72,14 @@ This approach is used since it provides the caller with access to the additional
|
|||
fields in the request that are not part of the command such as the ID.
|
||||
|
||||
Unmarshalling a received Response object is also a two step process:
|
||||
1) Unmarhsal the raw bytes into a Response struct instance via json.Unmarshal
|
||||
2) Depending on the ID, unmarshal the Result field of the unmarshalled
|
||||
1. Unmarhsal the raw bytes into a Response struct instance via json.Unmarshal
|
||||
2. Depending on the ID, unmarshal the Result field of the unmarshalled
|
||||
Response to create a concrete type instance
|
||||
|
||||
As above, this approach is used since it provides the caller with access to the
|
||||
fields in the response such as the ID and Error.
|
||||
|
||||
Command Creation
|
||||
# Command Creation
|
||||
|
||||
This package provides two approaches for creating a new command. This first,
|
||||
and preferred, method is to use one of the New<Foo>Cmd functions. This allows
|
||||
|
@ -93,7 +93,7 @@ obviously, run-time which means any mistakes won't be found until the code is
|
|||
actually executed. However, it is quite useful for user-supplied commands
|
||||
that are intentionally dynamic.
|
||||
|
||||
Custom Command Registration
|
||||
# Custom Command Registration
|
||||
|
||||
The command handling of this package is built around the concept of registered
|
||||
commands. This is true for the wide variety of commands already provided by the
|
||||
|
@ -104,7 +104,7 @@ function for this purpose.
|
|||
A list of all registered methods can be obtained with the RegisteredCmdMethods
|
||||
function.
|
||||
|
||||
Command Inspection
|
||||
# Command Inspection
|
||||
|
||||
All registered commands are registered with flags that identify information such
|
||||
as whether the command applies to a chain server, wallet server, or is a
|
||||
|
@ -112,7 +112,7 @@ notification along with the method name to use. These flags can be obtained
|
|||
with the MethodUsageFlags flags, and the method can be obtained with the
|
||||
CmdMethod function.
|
||||
|
||||
Help Generation
|
||||
# Help Generation
|
||||
|
||||
To facilitate providing consistent help to users of the RPC server, this package
|
||||
exposes the GenerateHelp and function which uses reflection on registered
|
||||
|
@ -122,7 +122,7 @@ generate the final help text.
|
|||
In addition, the MethodUsageText function is provided to generate consistent
|
||||
one-line usage for registered commands and notifications using reflection.
|
||||
|
||||
Errors
|
||||
# Errors
|
||||
|
||||
There are 2 distinct type of errors supported by this package:
|
||||
|
||||
|
|
|
@ -476,6 +476,7 @@ func isValidResultType(kind reflect.Kind) bool {
|
|||
// an error will use the key in place of the description.
|
||||
//
|
||||
// The following outlines the required keys:
|
||||
//
|
||||
// "<method>--synopsis" Synopsis for the command
|
||||
// "<method>-<lowerfieldname>" Description for each command argument
|
||||
// "<typename>-<lowerfieldname>" Description for each object field
|
||||
|
@ -492,6 +493,7 @@ func isValidResultType(kind reflect.Kind) bool {
|
|||
// For example, consider the 'help' command itself. There are two possible
|
||||
// returns depending on the provided parameters. So, the help would be
|
||||
// generated by calling the function as follows:
|
||||
//
|
||||
// GenerateHelp("help", descs, (*string)(nil), (*string)(nil)).
|
||||
//
|
||||
// The following keys would then be required in the provided descriptions map:
|
||||
|
|
|
@ -833,6 +833,7 @@ func (s *ScriptPubKey) UnmarshalJSON(data []byte) error {
|
|||
//
|
||||
// Descriptors are typically ranged when specified in the form of generic HD
|
||||
// chain paths.
|
||||
//
|
||||
// Example of a ranged descriptor: pkh(tpub.../*)
|
||||
//
|
||||
// The value can be an int to specify the end of the range, or the range
|
||||
|
|
|
@ -794,6 +794,7 @@ func IsBech32SegwitPrefix(prefix string) bool {
|
|||
// ErrInvalidHDKeyID error will be returned.
|
||||
//
|
||||
// Reference:
|
||||
//
|
||||
// SLIP-0132 : Registered HD version bytes for BIP-0032
|
||||
// https://github.com/satoshilabs/slips/blob/master/slip-0132.md
|
||||
func RegisterHDKeyID(hdPublicKeyID []byte, hdPrivateKeyID []byte) error {
|
||||
|
|
|
@ -26,6 +26,7 @@ type claimProgressLogger struct {
|
|||
|
||||
// newClaimProgressLogger returns a new name progress logger.
|
||||
// The progress message is templated as follows:
|
||||
//
|
||||
// {progressAction} {numProcessed} {names|name} in the last {timePeriod} (total {totalProcessed})
|
||||
func newClaimProgressLogger(progressMessage string, logger btclog.Logger) *claimProgressLogger {
|
||||
return &claimProgressLogger{
|
||||
|
|
|
@ -17,6 +17,7 @@ func newVertex(hash *chainhash.Hash) *vertex {
|
|||
// TODO: more professional to use msgpack here?
|
||||
|
||||
// nbuf decodes the on-disk format of a node, which has the following form:
|
||||
//
|
||||
// ch(1B) hash(32B)
|
||||
// ...
|
||||
// ch(1B) hash(32B)
|
||||
|
|
|
@ -175,10 +175,10 @@ func cleanAndExpandPath(path string) string {
|
|||
// line options.
|
||||
//
|
||||
// The configuration proceeds as follows:
|
||||
// 1) Start with a default config with sane settings
|
||||
// 2) Pre-parse the command line to check for an alternative config file
|
||||
// 3) Load configuration file overwriting defaults with any specified options
|
||||
// 4) Parse CLI options and overwrite/add any specified options
|
||||
// 1. Start with a default config with sane settings
|
||||
// 2. Pre-parse the command line to check for an alternative config file
|
||||
// 3. Load configuration file overwriting defaults with any specified options
|
||||
// 4. Parse CLI options and overwrite/add any specified options
|
||||
//
|
||||
// The above results in functioning properly without any config settings
|
||||
// while still allowing the user to override settings with config files and
|
||||
|
|
|
@ -409,10 +409,10 @@ func newConfigParser(cfg *config, so *serviceOptions, options flags.Options) *fl
|
|||
// line options.
|
||||
//
|
||||
// The configuration proceeds as follows:
|
||||
// 1) Start with a default config with sane settings
|
||||
// 2) Pre-parse the command line to check for an alternative config file
|
||||
// 3) Load configuration file overwriting defaults with any specified options
|
||||
// 4) Parse CLI options and overwrite/add any specified options
|
||||
// 1. Start with a default config with sane settings
|
||||
// 2. Pre-parse the command line to check for an alternative config file
|
||||
// 3. Load configuration file overwriting defaults with any specified options
|
||||
// 4. Parse CLI options and overwrite/add any specified options
|
||||
//
|
||||
// The above results in lbcd functioning properly without any config settings
|
||||
// while still allowing the user to override settings with config files and
|
||||
|
|
|
@ -20,7 +20,6 @@ var (
|
|||
// parameters which are command-line only. These fields are copied line-by-line
|
||||
// from "config" struct in "config.go", and the field names, types, and tags must
|
||||
// match for the test to work.
|
||||
//
|
||||
type configCmdLineOnly struct {
|
||||
ConfigFile string `short:"C" long:"configfile" description:"Path to configuration file"`
|
||||
DbType string `long:"dbtype" description:"Database backend to use for the Block Chain"`
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
Package connmgr implements a generic Bitcoin network connection manager.
|
||||
|
||||
Connection Manager Overview
|
||||
# Connection Manager Overview
|
||||
|
||||
Connection Manager handles all the general connection concerns such as
|
||||
maintaining a set number of outbound connections, sourcing peers, banning,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
Package database provides a block and metadata storage database.
|
||||
|
||||
Overview
|
||||
# Overview
|
||||
|
||||
As of Feb 2016, there are over 400,000 blocks in the Bitcoin block chain and
|
||||
and over 112 million transactions (which turns out to be over 60GB of data).
|
||||
|
@ -26,7 +26,7 @@ A quick overview of the features database provides are as follows:
|
|||
- Supports registration of backend databases
|
||||
- Comprehensive test coverage
|
||||
|
||||
Database
|
||||
# Database
|
||||
|
||||
The main entry point is the DB interface. It exposes functionality for
|
||||
transactional-based access and storage of metadata and block data. It is
|
||||
|
@ -43,14 +43,14 @@ The Begin function provides an unmanaged transaction while the View and Update
|
|||
functions provide a managed transaction. These are described in more detail
|
||||
below.
|
||||
|
||||
Transactions
|
||||
# Transactions
|
||||
|
||||
The Tx interface provides facilities for rolling back or committing changes that
|
||||
took place while the transaction was active. It also provides the root metadata
|
||||
bucket under which all keys, values, and nested buckets are stored. A
|
||||
transaction can either be read-only or read-write and managed or unmanaged.
|
||||
|
||||
Managed versus Unmanaged Transactions
|
||||
# Managed versus Unmanaged Transactions
|
||||
|
||||
A managed transaction is one where the caller provides a function to execute
|
||||
within the context of the transaction and the commit or rollback is handled
|
||||
|
@ -63,7 +63,7 @@ call Commit or Rollback when they are finished with it. Leaving transactions
|
|||
open for long periods of time can have several adverse effects, so it is
|
||||
recommended that managed transactions are used instead.
|
||||
|
||||
Buckets
|
||||
# Buckets
|
||||
|
||||
The Bucket interface provides the ability to manipulate key/value pairs and
|
||||
nested buckets as well as iterate through them.
|
||||
|
@ -73,7 +73,7 @@ CreateBucket, CreateBucketIfNotExists, and DeleteBucket functions work with
|
|||
buckets. The ForEach function allows the caller to provide a function to be
|
||||
called with each key/value pair and nested bucket in the current bucket.
|
||||
|
||||
Metadata Bucket
|
||||
# Metadata Bucket
|
||||
|
||||
As discussed above, all of the functions which are used to manipulate key/value
|
||||
pairs and nested buckets exist on the Bucket interface. The root metadata
|
||||
|
@ -81,7 +81,7 @@ bucket is the upper-most bucket in which data is stored and is created at the
|
|||
same time as the database. Use the Metadata function on the Tx interface
|
||||
to retrieve it.
|
||||
|
||||
Nested Buckets
|
||||
# Nested Buckets
|
||||
|
||||
The CreateBucket and CreateBucketIfNotExists functions on the Bucket interface
|
||||
provide the ability to create an arbitrary number of nested buckets. It is
|
||||
|
|
|
@ -622,8 +622,8 @@ func (s *blockStore) syncBlocks() error {
|
|||
// were partially written.
|
||||
//
|
||||
// There are effectively two scenarios to consider here:
|
||||
// 1) Transient write failures from which recovery is possible
|
||||
// 2) More permanent failures such as hard disk death and/or removal
|
||||
// 1. Transient write failures from which recovery is possible
|
||||
// 2. More permanent failures such as hard disk death and/or removal
|
||||
//
|
||||
// In either case, the write cursor will be repositioned to the old block file
|
||||
// offset regardless of any other errors that occur while attempting to undo
|
||||
|
|
|
@ -10,7 +10,7 @@ This driver is the recommended driver for use with lbcd. It makes use leveldb
|
|||
for the metadata, flat files for block storage, and checksums in key areas to
|
||||
ensure data integrity.
|
||||
|
||||
Usage
|
||||
# Usage
|
||||
|
||||
This package is a driver to the database package and provides the database type
|
||||
of "ffldb". The parameters the Open and Create functions take are the
|
||||
|
|
|
@ -318,6 +318,7 @@ func (iter *Iterator) ForceReseek() {
|
|||
// unexpected keys and/or values.
|
||||
//
|
||||
// For example:
|
||||
//
|
||||
// iter := t.Iterator(nil, nil)
|
||||
// for iter.Next() {
|
||||
// if someCondition {
|
||||
|
|
4
doc.go
4
doc.go
|
@ -18,9 +18,11 @@ on Windows. The -C (--configfile) flag, as shown below, can be used to override
|
|||
this location.
|
||||
|
||||
Usage:
|
||||
|
||||
lbcd [OPTIONS]
|
||||
|
||||
Application Options:
|
||||
|
||||
--addcheckpoint= Add a custom checkpoint. Format:
|
||||
'<height>:<hash>'
|
||||
-a, --addpeer= Add a peer to connect with at startup
|
||||
|
@ -153,7 +155,7 @@ Application Options:
|
|||
(eg. 192.168.1.0/24 or ::1)
|
||||
|
||||
Help Options:
|
||||
-h, --help Show this help message
|
||||
|
||||
-h, --help Show this help message
|
||||
*/
|
||||
package main
|
||||
|
|
|
@ -11,7 +11,7 @@ two main goals:
|
|||
(expressed in blocks);
|
||||
- Attempting to minimize fees while maintaining be above restriction.
|
||||
|
||||
Preliminaries
|
||||
# Preliminaries
|
||||
|
||||
There are two main regimes against which fee estimation needs to be evaluated
|
||||
according to how full blocks being mined are (and consequently how important fee
|
||||
|
@ -39,7 +39,7 @@ The current approach to implement this estimation is based on bitcoin core's
|
|||
algorithm. References [1] and [2] provide a high level description of how it
|
||||
works there. Actual code is linked in references [3] and [4].
|
||||
|
||||
Outline of the Algorithm
|
||||
# Outline of the Algorithm
|
||||
|
||||
The algorithm is currently based in fee estimation as used in v0.14 of bitcoin
|
||||
core (which is also the basis for the v0.15+ method). A more comprehensive
|
||||
|
@ -72,13 +72,13 @@ Estimation stage:
|
|||
confirmation within the desired confirmation window is > 95%
|
||||
- Average all such buckets to get the estimated fee rate
|
||||
|
||||
Simulation
|
||||
# Simulation
|
||||
|
||||
Development of the estimator was originally performed and simulated using the
|
||||
code in [5]. Simulation of the current code can be performed by using the
|
||||
dcrfeesim tool available in [6].
|
||||
|
||||
Acknowledgements
|
||||
# Acknowledgements
|
||||
|
||||
Thanks to @davecgh for providing the initial review of the results and the
|
||||
original developers of the bitcoin core code (the brunt of which seems to have
|
||||
|
|
|
@ -282,6 +282,7 @@ func testBIP0009(t *testing.T, forkKey string, deploymentID uint32) {
|
|||
// - Assert the chain height is 0 and the state is ThresholdDefined
|
||||
// - Generate 1 fewer blocks than needed to reach the first state transition
|
||||
// - Assert chain height is expected and state is still ThresholdDefined
|
||||
//
|
||||
// - Generate 1 more block to reach the first state transition
|
||||
// - Assert chain height is expected and state moved to ThresholdStarted
|
||||
// - Generate enough blocks to reach the next state transition window, but only
|
||||
|
@ -309,11 +310,14 @@ func TestBIP0009(t *testing.T) {
|
|||
// Overview:
|
||||
// - Generate block 1
|
||||
// - Assert bit is NOT set (ThresholdDefined)
|
||||
//
|
||||
// - Generate enough blocks to reach first state transition
|
||||
// - Assert bit is NOT set for block prior to state transition
|
||||
// - Assert bit is set for block at state transition (ThresholdStarted)
|
||||
//
|
||||
// - Generate enough blocks to reach second state transition
|
||||
// - Assert bit is set for block at state transition (ThresholdLockedIn)
|
||||
//
|
||||
// - Generate enough blocks to reach third state transition
|
||||
// - Assert bit is set for block prior to state transition (ThresholdLockedIn)
|
||||
// - Assert bit is NOT set for block at state transition (ThresholdActive)
|
||||
|
|
|
@ -95,15 +95,20 @@ func makeTestOutput(r *rpctest.Harness, t *testing.T,
|
|||
// them.
|
||||
//
|
||||
// Overview:
|
||||
//
|
||||
// - Pre soft-fork:
|
||||
//
|
||||
// - Transactions with non-final lock-times from the PoV of MTP should be
|
||||
// rejected from the mempool.
|
||||
//
|
||||
// - Transactions within non-final MTP based lock-times should be accepted
|
||||
// in valid blocks.
|
||||
//
|
||||
// - Post soft-fork:
|
||||
//
|
||||
// - Transactions with non-final lock-times from the PoV of MTP should be
|
||||
// rejected from the mempool and when found within otherwise valid blocks.
|
||||
//
|
||||
// - Transactions with final lock-times from the PoV of MTP should be
|
||||
// accepted to the mempool and mined in future block.
|
||||
func TestBIP0113Activation(t *testing.T) {
|
||||
|
|
|
@ -31,7 +31,7 @@ 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
|
||||
# Feature Overview
|
||||
|
||||
The following is a quick overview of the major features. It is not intended to
|
||||
be an exhaustive list.
|
||||
|
@ -64,7 +64,7 @@ be an exhaustive list.
|
|||
- Manual control of transaction removal
|
||||
- Recursive removal of all dependent transactions
|
||||
|
||||
Errors
|
||||
# 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
|
||||
|
|
|
@ -27,6 +27,7 @@ type blockProgressLogger struct {
|
|||
|
||||
// newBlockProgressLogger returns a new block progress logger.
|
||||
// The progress message is templated as follows:
|
||||
//
|
||||
// {progressAction} {numProcessed} {blocks|block} in the last {timePeriod}
|
||||
// ({numTxs}, height {lastBlockHeight}, {lastBlockTimeStamp})
|
||||
func newBlockProgressLogger(progressMessage string, logger btclog.Logger) *blockProgressLogger {
|
||||
|
|
18
peer/doc.go
18
peer/doc.go
|
@ -6,7 +6,7 @@
|
|||
Package peer provides a common base for creating and managing Bitcoin network
|
||||
peers.
|
||||
|
||||
Overview
|
||||
# Overview
|
||||
|
||||
This package builds upon the wire package, which provides the fundamental
|
||||
primitives necessary to speak the bitcoin wire protocol, in order to simplify
|
||||
|
@ -50,7 +50,7 @@ A quick overview of the major features peer provides are as follows:
|
|||
- Ability to wait for shutdown/disconnect
|
||||
- Comprehensive test coverage
|
||||
|
||||
Peer Configuration
|
||||
# Peer Configuration
|
||||
|
||||
All peer configuration is handled with the Config struct. This allows the
|
||||
caller to specify things such as the user agent name and version, the bitcoin
|
||||
|
@ -58,7 +58,7 @@ network to use, which services it supports, and callbacks to invoke when bitcoin
|
|||
messages are received. See the documentation for each field of the Config
|
||||
struct for more details.
|
||||
|
||||
Inbound and Outbound Peers
|
||||
# Inbound and Outbound Peers
|
||||
|
||||
A peer can either be inbound or outbound. The caller is responsible for
|
||||
establishing the connection to remote peers and listening for incoming peers.
|
||||
|
@ -73,7 +73,7 @@ Disconnect to disconnect from the peer and clean up all resources.
|
|||
WaitForDisconnect can be used to block until peer disconnection and resource
|
||||
cleanup has completed.
|
||||
|
||||
Callbacks
|
||||
# Callbacks
|
||||
|
||||
In order to do anything useful with a peer, it is necessary to react to bitcoin
|
||||
messages. This is accomplished by creating an instance of the MessageListeners
|
||||
|
@ -92,7 +92,7 @@ It is often useful to use closures which encapsulate state when specifying the
|
|||
callback handlers. This provides a clean method for accessing that state when
|
||||
callbacks are invoked.
|
||||
|
||||
Queuing Messages and Inventory
|
||||
# Queuing Messages and Inventory
|
||||
|
||||
The QueueMessage function provides the fundamental means to send messages to the
|
||||
remote peer. As the name implies, this employs a non-blocking queue. A done
|
||||
|
@ -106,7 +106,7 @@ QueueInventory function. It employs batching and trickling along with
|
|||
intelligent known remote peer inventory detection and avoidance through the use
|
||||
of a most-recently used algorithm.
|
||||
|
||||
Message Sending Helper Functions
|
||||
# Message Sending Helper Functions
|
||||
|
||||
In addition to the bare QueueMessage function previously described, the
|
||||
PushAddrMsg, PushGetBlocksMsg, PushGetHeadersMsg, and PushRejectMsg functions
|
||||
|
@ -128,13 +128,13 @@ appropriate reject message based on the provided parameters as well as
|
|||
optionally provides a flag to cause it to block until the message is actually
|
||||
sent.
|
||||
|
||||
Peer Statistics
|
||||
# Peer Statistics
|
||||
|
||||
A snapshot of the current peer statistics can be obtained with the StatsSnapshot
|
||||
function. This includes statistics such as the total number of bytes read and
|
||||
written, the remote address, user agent, and negotiated protocol version.
|
||||
|
||||
Logging
|
||||
# Logging
|
||||
|
||||
This package provides extensive logging capabilities through the UseLogger
|
||||
function which allows a btclog.Logger to be specified. For example, logging at
|
||||
|
@ -142,7 +142,7 @@ the debug level provides summaries of every message sent and received, and
|
|||
logging at the trace level provides full dumps of parsed messages as well as the
|
||||
raw message bytes using a format similar to hexdump -C.
|
||||
|
||||
Bitcoin Improvement Proposals
|
||||
# Bitcoin Improvement Proposals
|
||||
|
||||
This package supports all BIPS supported by the wire package.
|
||||
(https://pkg.go.dev/github.com/lbryio/lbcd/wire#hdr-Bitcoin_Improvement_Proposals)
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
/*
|
||||
Package rpcclient implements a websocket-enabled Bitcoin JSON-RPC client.
|
||||
|
||||
Overview
|
||||
# Overview
|
||||
|
||||
This client provides a robust and easy to use client for interfacing with a
|
||||
Bitcoin RPC server that uses a btcd/bitcoin core compatible Bitcoin JSON-RPC
|
||||
|
@ -24,7 +24,7 @@ btcd or btcwallet by default. However, configuration options are provided to
|
|||
fall back to HTTP POST and disable TLS to support talking with inferior bitcoin
|
||||
core style RPC servers.
|
||||
|
||||
Websockets vs HTTP POST
|
||||
# Websockets vs HTTP POST
|
||||
|
||||
In HTTP POST-based JSON-RPC, every request creates a new HTTP connection,
|
||||
issues the call, waits for the response, and closes the connection. This adds
|
||||
|
@ -40,7 +40,7 @@ can be invoked without having to go through a connect/disconnect cycle for every
|
|||
call. In addition, the websocket interface provides other nice features such as
|
||||
the ability to register for asynchronous notifications of various events.
|
||||
|
||||
Synchronous vs Asynchronous API
|
||||
# Synchronous vs Asynchronous API
|
||||
|
||||
The client provides both a synchronous (blocking) and asynchronous API.
|
||||
|
||||
|
@ -57,7 +57,7 @@ the Receive method on the returned instance will either return the result
|
|||
immediately if it has already arrived, or block until it has. This is useful
|
||||
since it provides the caller with greater control over concurrency.
|
||||
|
||||
Notifications
|
||||
# Notifications
|
||||
|
||||
The first important part of notifications is to realize that they will only
|
||||
work when connected via websockets. This should intuitively make sense
|
||||
|
@ -67,7 +67,7 @@ All notifications provided by btcd require registration to opt-in. For example,
|
|||
if you want to be notified when funds are received by a set of addresses, you
|
||||
register the addresses via the NotifyReceived (or NotifyReceivedAsync) function.
|
||||
|
||||
Notification Handlers
|
||||
# Notification Handlers
|
||||
|
||||
Notifications are exposed by the client through the use of callback handlers
|
||||
which are setup via a NotificationHandlers instance that is specified by the
|
||||
|
@ -83,7 +83,7 @@ will cause a deadlock as more server responses won't be read until the callback
|
|||
returns, but the callback would be waiting for a response. Thus, any
|
||||
additional RPCs must be issued an a completely decoupled manner.
|
||||
|
||||
Automatic Reconnection
|
||||
# Automatic Reconnection
|
||||
|
||||
By default, when running in websockets mode, this client will automatically
|
||||
keep trying to reconnect to the RPC server should the connection be lost. There
|
||||
|
@ -116,7 +116,7 @@ chain services will be available. Depending on your application, you might only
|
|||
need chain-related RPCs. In contrast, btcwallet provides pass through treatment
|
||||
for chain-related RPCs, so it supports them in addition to wallet-related RPCs.
|
||||
|
||||
Errors
|
||||
# Errors
|
||||
|
||||
There are 3 categories of errors that will be returned throughout this package:
|
||||
|
||||
|
@ -159,7 +159,7 @@ detect if a command is unimplemented by the remote RPC server:
|
|||
// from the remote RPC server.
|
||||
}
|
||||
|
||||
Example Usage
|
||||
# Example Usage
|
||||
|
||||
The following full-blown client examples are in the examples directory:
|
||||
|
||||
|
|
|
@ -56,6 +56,7 @@ func (c *Client) DebugLevelAsync(levelSpec string) FutureDebugLevelResult {
|
|||
// specification.
|
||||
//
|
||||
// The levelspec can be either a debug level or of the form:
|
||||
//
|
||||
// <subsystem>=<level>,<subsystem2>=<level2>,...
|
||||
//
|
||||
// Additionally, the special keyword 'show' can be used to get a list of the
|
||||
|
|
|
@ -1016,10 +1016,10 @@ func (c *Client) CreateWalletAsync(name string, opts ...CreateWalletOpt) FutureC
|
|||
//
|
||||
// Optional parameters can be specified using functional-options pattern. The
|
||||
// following functions are available:
|
||||
// * WithCreateWalletDisablePrivateKeys
|
||||
// * WithCreateWalletBlank
|
||||
// * WithCreateWalletPassphrase
|
||||
// * WithCreateWalletAvoidReuse
|
||||
// - WithCreateWalletDisablePrivateKeys
|
||||
// - WithCreateWalletBlank
|
||||
// - WithCreateWalletPassphrase
|
||||
// - WithCreateWalletAvoidReuse
|
||||
func (c *Client) CreateWallet(name string, opts ...CreateWalletOpt) (*btcjson.CreateWalletResult, error) {
|
||||
return c.CreateWalletAsync(name, opts...).Receive()
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ overview to provide information on how to use the package.
|
|||
This package provides data structures and functions to parse and execute
|
||||
bitcoin transaction scripts.
|
||||
|
||||
Script Overview
|
||||
# Script Overview
|
||||
|
||||
Bitcoin transaction scripts are written in a stack-base, FORTH-like language.
|
||||
|
||||
|
@ -30,7 +30,7 @@ is used to prove the the spender is authorized to perform the transaction.
|
|||
One benefit of using a scripting language is added flexibility in specifying
|
||||
what conditions must be met in order to spend bitcoins.
|
||||
|
||||
Errors
|
||||
# Errors
|
||||
|
||||
Errors returned by this package are of type txscript.Error. This allows the
|
||||
caller to programmatically determine the specific error by examining the
|
||||
|
|
|
@ -427,10 +427,10 @@ func (e ErrorCode) String() string {
|
|||
|
||||
// Error identifies a script-related error. It is used to indicate three
|
||||
// classes of errors:
|
||||
// 1) Script execution failures due to violating one of the many requirements
|
||||
// 1. Script execution failures due to violating one of the many requirements
|
||||
// imposed by the script engine or evaluating to false
|
||||
// 2) Improper API usage by callers
|
||||
// 3) Internal consistency check failures
|
||||
// 2. Improper API usage by callers
|
||||
// 3. Internal consistency check failures
|
||||
//
|
||||
// The caller can use type assertions on the returned errors to access the
|
||||
// ErrorCode field to ascertain the specific reason for the error. As an
|
||||
|
|
|
@ -37,6 +37,7 @@ func (e ErrScriptNotCanonical) Error() string {
|
|||
// For example, the following would build a 2-of-3 multisig script for usage in
|
||||
// a pay-to-script-hash (although in this situation MultiSigScript() would be a
|
||||
// better choice to generate the script):
|
||||
//
|
||||
// builder := txscript.NewScriptBuilder()
|
||||
// builder.AddOp(txscript.OP_2).AddData(pubKey1).AddData(pubKey2)
|
||||
// builder.AddData(pubKey3).AddOp(txscript.OP_3)
|
||||
|
|
|
@ -89,6 +89,7 @@ func checkMinimalDataEncoding(v []byte) error {
|
|||
// Bytes returns the number serialized as a little endian with a sign bit.
|
||||
//
|
||||
// Example encodings:
|
||||
//
|
||||
// 127 -> [0x7f]
|
||||
// -127 -> [0xff]
|
||||
// 128 -> [0x80 0x00]
|
||||
|
|
20
wire/doc.go
20
wire/doc.go
|
@ -14,7 +14,7 @@ supported bitcoin messages to and from the wire. This package does not deal
|
|||
with the specifics of message handling such as what to do when a message is
|
||||
received. This provides the caller with a high level of flexibility.
|
||||
|
||||
Bitcoin Message Overview
|
||||
# Bitcoin Message Overview
|
||||
|
||||
The bitcoin protocol consists of exchanging messages between peers. Each
|
||||
message is preceded by a header which identifies information about it such as
|
||||
|
@ -30,7 +30,7 @@ messages, all of the details of marshalling and unmarshalling to and from the
|
|||
wire using bitcoin encoding are handled so the caller doesn't have to concern
|
||||
themselves with the specifics.
|
||||
|
||||
Message Interaction
|
||||
# Message Interaction
|
||||
|
||||
The following provides a quick summary of how the bitcoin messages are intended
|
||||
to interact with one another. As stated above, these interactions are not
|
||||
|
@ -62,13 +62,13 @@ interactions in no particular order.
|
|||
in BIP0031. The BIP0031Version constant can be used to detect a recent
|
||||
enough protocol version for this purpose (version > BIP0031Version).
|
||||
|
||||
Common Parameters
|
||||
# Common Parameters
|
||||
|
||||
There are several common parameters that arise when using this package to read
|
||||
and write bitcoin messages. The following sections provide a quick overview of
|
||||
these parameters so the next sections can build on them.
|
||||
|
||||
Protocol Version
|
||||
# Protocol Version
|
||||
|
||||
The protocol version should be negotiated with the remote peer at a higher
|
||||
level than this package via the version (MsgVersion) message exchange, however,
|
||||
|
@ -77,7 +77,7 @@ latest protocol version this package supports and is typically the value to use
|
|||
for all outbound connections before a potentially lower protocol version is
|
||||
negotiated.
|
||||
|
||||
Bitcoin Network
|
||||
# Bitcoin Network
|
||||
|
||||
The bitcoin network is a magic number which is used to identify the start of a
|
||||
message and which bitcoin network the message applies to. This package provides
|
||||
|
@ -88,7 +88,7 @@ the following constants:
|
|||
wire.TestNet3 (Test network version 3)
|
||||
wire.SimNet (Simulation test network)
|
||||
|
||||
Determining Message Type
|
||||
# Determining Message Type
|
||||
|
||||
As discussed in the bitcoin message overview section, this package reads
|
||||
and writes bitcoin messages using a generic interface named Message. In
|
||||
|
@ -106,7 +106,7 @@ switch or type assertion. An example of a type switch follows:
|
|||
fmt.Printf("Number of tx in block: %v", msg.Header.TxnCount)
|
||||
}
|
||||
|
||||
Reading Messages
|
||||
# Reading Messages
|
||||
|
||||
In order to unmarshall bitcoin messages from the wire, use the ReadMessage
|
||||
function. It accepts any io.Reader, but typically this will be a net.Conn to
|
||||
|
@ -121,7 +121,7 @@ a remote node running a bitcoin peer. Example syntax is:
|
|||
// Log and handle the error
|
||||
}
|
||||
|
||||
Writing Messages
|
||||
# Writing Messages
|
||||
|
||||
In order to marshall bitcoin messages to the wire, use the WriteMessage
|
||||
function. It accepts any io.Writer, but typically this will be a net.Conn to
|
||||
|
@ -139,7 +139,7 @@ from a remote peer is:
|
|||
// Log and handle the error
|
||||
}
|
||||
|
||||
Errors
|
||||
# Errors
|
||||
|
||||
Errors returned by this package are either the raw errors provided by underlying
|
||||
calls to read/write from streams such as io.EOF, io.ErrUnexpectedEOF, and
|
||||
|
@ -147,7 +147,7 @@ io.ErrShortWrite, or of type wire.MessageError. This allows the caller to
|
|||
differentiate between general IO errors and malformed messages through type
|
||||
assertions.
|
||||
|
||||
Bitcoin Improvement Proposals
|
||||
# Bitcoin Improvement Proposals
|
||||
|
||||
This package includes spec changes outlined by the following BIPs:
|
||||
|
||||
|
|
|
@ -114,12 +114,14 @@ const (
|
|||
// transaction from one that would require a different parsing logic.
|
||||
//
|
||||
// Position of FLAG in a bitcoin tx message:
|
||||
//
|
||||
// ┌─────────┬────────────────────┬─────────────┬─────┐
|
||||
// │ VERSION │ FLAG │ TX-IN-COUNT │ ... │
|
||||
// │ 4 bytes │ 2 bytes (optional) │ varint │ │
|
||||
// └─────────┴────────────────────┴─────────────┴─────┘
|
||||
//
|
||||
// Zooming into the FLAG field:
|
||||
//
|
||||
// ┌── FLAG ─────────────┬────────┐
|
||||
// │ TxFlagMarker (0x00) │ TxFlag │
|
||||
// │ 1 byte │ 1 byte │
|
||||
|
|
Loading…
Add table
Reference in a new issue