Repository: decred/dcrd
Pull request #2316 (2020-07-31 10:35:56)

docs: Document additional ws notifications.
This adds documentation for the following ws notifications:
  - notifywinningtickets
  - notifyspentandmissedtickets
  - notifynewtickets
  - notifystakedifficulty

Closes https://github.com/decred/dcrd/issues/2295


Patch:
diff --git a/blockchain/chain.go b/blockchain/chain.go
index c46365ee..2016fa53 100644
--- a/blockchain/chain.go
+++ b/blockchain/chain.go
@@ -1875,6 +1875,69 @@ func extractDeploymentIDVersions(params *chaincfg.Params) (map[string]uint32, er
 	return deploymentVers, nil
 }
 
+// stxosToScriptSource uses the provided block and spent txo information to
+// create a source of previous transaction scripts and versions spent by the
+// block.
+func stxosToScriptSource(block *dcrutil.Block, stxos []spentTxOut, compressionVersion uint32) scriptSource {
+	source := make(scriptSource)
+
+	// Loop through all of the transaction inputs in the stake transaction tree
+	// (except for the stakebases which have no inputs) and add the scripts and
+	// associated script versions from the referenced txos to the script source.
+	//
+	// Note that transactions in the stake tree are spent before transactions in
+	// the regular tree when originally creating the spend journal entry, thus
+	// the spent txous need to be processed in the same order.
+	var stxoIdx int
+	for _, tx := range block.MsgBlock().STransactions {
+		isVote := stake.IsSSGen(tx)
+		for txInIdx, txIn := range tx.TxIn {
+			// Ignore stakebase since it has no input.
+			if isVote && txInIdx == 0 {
+				continue
+			}
+
+			// Ensure the spent txout index is incremented to stay in sync with
+			// the transaction input.
+			stxo := &stxos[stxoIdx]
+			stxoIdx++
+
+			// Create an output for the referenced script and version using the
+			// stxo data from the spend journal if it doesn't already exist in
+			// the view.
+			prevOut := &txIn.PreviousOutPoint
+			source[*prevOut] = scriptSourceEntry{
+				version: stxo.scriptVersion,
+				script:  decompressScript(stxo.pkScript, compressionVersion),
+			}
+		}
+	}
+
+	// Loop through all of the transaction inputs in the regular transaction
+	// tree (except for the coinbase which has no inputs) and add the scripts
+	// and associated script versions from the referenced txos to the script
+	// source.
+	for _, tx := range block.MsgBlock().Transactions[1:] {
+		for _, txIn := range tx.TxIn {
+			// Ensure the spent txout index is incremented to stay in sync with
+			// the transaction input.
+			stxo := &stxos[stxoIdx]
+			stxoIdx++
+
+			// Create an output for the referenced script and version using the
+			// stxo data from the spend journal if it doesn't already exist in
+			// the view.
+			prevOut := &txIn.PreviousOutPoint
+			source[*prevOut] = scriptSourceEntry{
+				version: stxo.scriptVersion,
+				script:  decompressScript(stxo.pkScript, compressionVersion),
+			}
+		}
+	}
+
+	return source
+}
+
 // chainQueryerAdapter provides an adapter from a BlockChain instance to the
 // indexers.ChainQueryer interface.
 type chainQueryerAdapter struct {
diff --git a/blockchain/indexers/cfindex.go b/blockchain/indexers/cfindex.go
index afb2be71..0a1a5849 100644
--- a/blockchain/indexers/cfindex.go
+++ b/blockchain/indexers/cfindex.go
@@ -255,6 +255,9 @@ func (idx *CFIndex) DisconnectBlock(dbTx database.Tx, block, parent *dcrutil.Blo
 
 // FilterByBlockHash returns the serialized contents of a block's basic or
 // extended committed filter.
+//
+// Deprecated: This will be removed in the next major version.  Use
+// blockchain.FilterByBlockHash instead.
 func (idx *CFIndex) FilterByBlockHash(h *chainhash.Hash, filterType wire.FilterType) ([]byte, error) {
 	if uint8(filterType) > maxFilterType {
 		return nil, errors.New("unsupported filter type")
@@ -270,6 +273,9 @@ func (idx *CFIndex) FilterByBlockHash(h *chainhash.Hash, filterType wire.FilterT
 
 // FilterHeaderByBlockHash returns the serialized contents of a block's basic
 // or extended committed filter header.
+//
+// Deprecated: This will be removed in the next major version.  Use
+// blockchain.FilterByBlockHash instead.
 func (idx *CFIndex) FilterHeaderByBlockHash(h *chainhash.Hash, filterType wire.FilterType) ([]byte, error) {
 	if uint8(filterType) > maxFilterType {
 		return nil, errors.New("unsupported filter type")
diff --git a/blockchain/upgrade.go b/blockchain/upgrade.go
index 857d5b13..a368986c 100644
--- a/blockchain/upgrade.go
+++ b/blockchain/upgrade.go
@@ -742,69 +742,6 @@ func (s scriptSource) PrevScript(prevOut *wire.OutPoint) (uint16, []byte, bool)
 	return entry.version, entry.script, true
 }
 
-// stxosToScriptSource uses the provided block and spent txo information to
-// create a source of previous transaction scripts and versions spent by the
-// block.
-func stxosToScriptSource(block *dcrutil.Block, stxos []spentTxOut, compressionVersion uint32) scriptSource {
-	source := make(scriptSource)
-
-	// Loop through all of the transaction inputs in the stake transaction tree
-	// (except for the stakebases which have no inputs) and add the scripts and
-	// associated script versions from the referenced txos to the script source.
-	//
-	// Note that transactions in the stake tree are spent before transactions in
-	// the regular tree when originally creating the spend journal entry, thus
-	// the spent txous need to be processed in the same order.
-	var stxoIdx int
-	for _, tx := range block.MsgBlock().STransactions {
-		isVote := stake.IsSSGen(tx)
-		for txInIdx, txIn := range tx.TxIn {
-			// Ignore stakebase since it has no input.
-			if isVote && txInIdx == 0 {
-				continue
-			}
-
-			// Ensure the spent txout index is incremented to stay in sync with
-			// the transaction input.
-			stxo := &stxos[stxoIdx]
-			stxoIdx++
-
-			// Create an output for the referenced script and version using the
-			// stxo data from the spend journal if it doesn't already exist in
-			// the view.
-			prevOut := &txIn.PreviousOutPoint
-			source[*prevOut] = scriptSourceEntry{
-				version: stxo.scriptVersion,
-				script:  decompressScript(stxo.pkScript, compressionVersion),
-			}
-		}
-	}
-
-	// Loop through all of the transaction inputs in the regular transaction
-	// tree (except for the coinbase which has no inputs) and add the scripts
-	// and associated script versions from the referenced txos to the script
-	// source.
-	for _, tx := range block.MsgBlock().Transactions[1:] {
-		for _, txIn := range tx.TxIn {
-			// Ensure the spent txout index is incremented to stay in sync with
-			// the transaction input.
-			stxo := &stxos[stxoIdx]
-			stxoIdx++
-
-			// Create an output for the referenced script and version using the
-			// stxo data from the spend journal if it doesn't already exist in
-			// the view.
-			prevOut := &txIn.PreviousOutPoint
-			source[*prevOut] = scriptSourceEntry{
-				version: stxo.scriptVersion,
-				script:  decompressScript(stxo.pkScript, compressionVersion),
-			}
-		}
-	}
-
-	return source
-}
-
 // clearFailedBlockFlags unmarks all blocks previously marked failed so they are
 // eligible for validation again under new consensus rules.  This ensures
 // clients that did not update prior to new rules activating are able to
diff --git a/config.go b/config.go
index bc54829f..610d653c 100644
--- a/config.go
+++ b/config.go
@@ -174,8 +174,8 @@ type config struct {
 	DropAddrIndex        bool          `long:"dropaddrindex" description:"Deletes the address-based transaction index from the database on start up and then exits."`
 	NoExistsAddrIndex    bool          `long:"noexistsaddrindex" description:"Disable the exists address index, which tracks whether or not an address has even been used."`
 	DropExistsAddrIndex  bool          `long:"dropexistsaddrindex" description:"Deletes the exists address index from the database on start up and then exits."`
-	NoCFilters           bool          `long:"nocfilters" description:"Disable compact filtering (CF) support"`
-	DropCFIndex          bool          `long:"dropcfindex" description:"Deletes the index used for compact filtering (CF) support from the database on start up and then exits."`
+	NoCFilters           bool          `long:"nocfilters" description:"(Deprecated) Disable compact filtering (CF) support"`
+	DropCFIndex          bool          `long:"dropcfindex" description:"(Deprecated) Deletes the index used for compact filtering (CF) support from the database on start up and then exits."`
 	PipeRx               uint          `long:"piperx" description:"File descriptor of read end pipe to enable parent -> child process communication"`
 	PipeTx               uint          `long:"pipetx" description:"File descriptor of write end pipe to enable parent <- child process communication"`
 	LifetimeEvents       bool          `long:"lifetimeevents" description:"Send lifetime notifications over the TX pipe"`
diff --git a/contrib/README.md b/contrib/README.md
new file mode 100644
index 00000000..92b0b039
--- /dev/null
+++ b/contrib/README.md
@@ -0,0 +1,36 @@
+contrib
+=======
+
+## Overview
+
+This consists of extra optional tools which may be useful when working with dcrd
+and related software.
+
+## Contents
+
+### Example Service Configurations
+
+- [OpenBSD rc.d](services/rc.d/dcrd)  
+  Provides an example `rc.d` script for configuring dcrd as a background service
+  on OpenBSD.  It also serves as a good starting point for other operating
+  systems that use the rc.d system for service management.
+
+- [Service Management Facility](services/smf/dcrd.xml)  
+  Provides an example XML file for configuring dcrd as a background service on
+  illumos.  It also serves as a good starting point for other operating systems
+  that use use SMF for service management.
+
+- [systemd](services/systemd/dcrd.service)  
+  Provides an example service file for configuring dcrd as a background service
+  on operating systems that use systemd for service management.
+
+### Simulation Network (--simnet) Preconfigured Environment Setup Script
+
+The [dcr_tmux_simnet_setup.sh](./dcr_tmux_simnet_setup.sh) script provides a
+preconfigured `simnet` environment which facilitates testing with a private test
+network where the developer has full control since the difficulty levels are low
+enough to generate blocks on demand and the developer owns all of the tickets
+and votes on the private network.
+
+See the full [Simulation Network Reference](../docs/simnet_environment.mediawiki)
+for more details.
diff --git a/contrib/dcr_tmux_simnet_setup.sh b/contrib/dcr_tmux_simnet_setup.sh
new file mode 100755
index 00000000..da20ff82
--- /dev/null
+++ b/contrib/dcr_tmux_simnet_setup.sh
@@ -0,0 +1,284 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2020 The Decred developers
+# Use of this source code is governed by an ISC
+# license that can be found in the LICENSE file.
+#
+# Tmux script to create 2 dcrd nodes (named dcrd1 and dcrd2) connected in series
+# along with 2 wallets (named wallet1 and wallet2) configured such that wallet1
+# is connected via JSON-RPC to dcrd1 and, likewise, wallet2 to dcrd2.
+#
+# Both wallet1 and wallet2 use the same seed, however, wallet1 is configured to
+# automatically buy tickets and vote, while wallet2 is only configured to vote.
+#
+# The primary dcrd node (dcrd1) is configured as the primary mining node.
+#
+# Network layout:
+# dcrd1 (p2p: localhost:19555) <-> dcrd2 (p2p: localhost:19565)
+#
+# RPC layout:
+# dcrd1 (JSON-RPC: localhost:19556)
+#     ^--- wallet1 (JSON-RPC: locahost:19557, gRPC: localhost:19558)
+# dcrd2 (JSON-RPC: localhost:19566)
+#     ^--- wallet2 (JSON-RPC: locahost:19567, gRPC: None)
+
+set -e
+
+SESSION="dcrd-simnet-nodes"
+NODES_ROOT=~/dcrdsimnetnodes
+RPCUSER="USER"
+RPCPASS="PASS"
+WALLET_SEED="b280922d2cffda44648346412c5ec97f429938105003730414f10b01e1402eac"
+WALLET_MINING_ADDR="SspUvSyDGSzvPz2NfdZ5LW15uq6rmuGZyhL" # NOTE: This must be changed if the seed is changed.
+WALLET_XFER_ADDR="SsonWQK6xkLSYm7VttCddHWkWWhETFMdR4Y" # same as above
+
+if [ -d "${NODES_ROOT}" ] ; then
+  rm -R "${NODES_ROOT}"
+fi
+
+PRIMARY_DCRD_NAME=dcrd1
+SECONDARY_DCRD_NAME=dcrd2
+PRIMARY_WALLET_NAME=wallet1
+SECONDARY_WALLET_NAME=wallet2
+mkdir -p "${NODES_ROOT}/${PRIMARY_DCRD_NAME}"
+mkdir -p "${NODES_ROOT}/${SECONDARY_DCRD_NAME}"
+mkdir -p "${NODES_ROOT}/${PRIMARY_WALLET_NAME}"
+mkdir -p "${NODES_ROOT}/${SECONDARY_WALLET_NAME}"
+
+cat > "${NODES_ROOT}/dcrd.conf" <<EOF
+rpcuser=${RPCUSER}
+rpcpass=${RPCPASS}
+simnet=1
+logdir=./log
+datadir=./data
+debuglevel=TXMP=debug,MINR=debug
+txindex=1
+EOF
+
+cat > "${NODES_ROOT}/dcrctl.conf" <<EOF
+rpcuser=${RPCUSER}
+rpcpass=${RPCPASS}
+simnet=1
+EOF
+
+cat > "${NODES_ROOT}/wallet.conf" <<EOF
+username=${RPCUSER}
+password=${RPCPASS}
+simnet=1
+logdir=./log
+appdata=./data
+pass=123
+enablevoting=1
+EOF
+
+cd ${NODES_ROOT} && tmux -2 new-session -d -s $SESSION
+
+################################################################################
+# Setup the primary dcrd node
+################################################################################
+
+PRIMARY_DCRD_P2P=127.0.0.1:19555
+PRIMARY_DCRD_RPC=127.0.0.1:19556
+tmux rename-window -t $SESSION:0 "${PRIMARY_DCRD_NAME}"
+tmux split-window -v
+tmux select-pane -t 0
+tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_DCRD_NAME}" C-m
+tmux send-keys "dcrd -C ../dcrd.conf --listen ${PRIMARY_DCRD_P2P} --miningaddr=${WALLET_MINING_ADDR}" C-m
+tmux resize-pane -D 15
+tmux select-pane -t 1
+tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_DCRD_NAME}" C-m
+
+cat > "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/ctl" <<EOF
+#!/usr/bin/env bash
+dcrctl -C ../dcrctl.conf \$*
+EOF
+chmod +x "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/ctl"
+
+# Script to mine a specified number of blocks with a delay in between them
+# Defaults to 1 block
+cat > "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/mine" <<EOF
+#!/usr/bin/env bash
+NUM=1
+case \$1 in
+  ''|*[!0-9]*)  ;;
+  *) NUM=\$1 ;;
+esac
+
+for i in \$(seq \$NUM) ; do
+  ./ctl generate 1
+  sleep 1
+done
+EOF
+chmod +x "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/mine"
+sleep 3
+tmux send-keys "./ctl generate 32" C-m
+
+################################################################################
+# Setup the primary wallet
+################################################################################
+
+PRIMARY_WALLET_RPC=127.0.0.1:19557
+PRIMARY_WALLET_GRPC=127.0.0.1:19558
+tmux new-window -t $SESSION:1 -n "${PRIMARY_WALLET_NAME}"
+tmux split-window -v
+tmux select-pane -t 0
+tmux resize-pane -D 15
+tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_WALLET_NAME}" C-m
+tmux send-keys "dcrwallet -C ../wallet.conf --create" C-m
+sleep 2
+tmux send-keys "123" C-m "123" C-m "n" C-m "y" C-m
+sleep 1
+tmux send-keys "${WALLET_SEED}" C-m C-m
+tmux send-keys "dcrwallet -C ../wallet.conf --enableticketbuyer --ticketbuyer.limit=10" C-m
+tmux select-pane -t 1
+tmux send-keys "cd ${NODES_ROOT}/${PRIMARY_WALLET_NAME}" C-m
+
+cat > "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/ctl" <<EOF
+#!/usr/bin/env bash
+dcrctl -C ../dcrctl.conf --wallet -c ./data/rpc.cert \$*
+EOF
+chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/ctl"
+
+# Script to manually purchase tickets
+cat > "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/tickets" <<EOF
+#!/usr/bin/env bash
+NUM=1
+case \$1 in
+  ''|*[!0-9]*) ;;
+  *) NUM=\$1 ;;
+esac
+
+./ctl purchaseticket default 999999 1 \`./ctl getnewaddress\` \$NUM
+EOF
+chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/tickets"
+
+# Script to transfer funds with a specified fee rate
+# Defaults to a fee rate of 0.0001
+cat > "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/xfer" <<EOF
+#!/usr/bin/env bash
+DEFAULTFEE=0.0001
+FEE=\$DEFAULTFEE
+case \$1 in
+  ''|*[!0-9\.]*) ;;
+  *) FEE=\$1 ;;
+esac
+if [ "\$FEE" != "\$DEFAULTFEE" ]; then
+	./ctl settxfee \$FEE
+fi
+./ctl sendtoaddress ${WALLET_XFER_ADDR} 0.1
+if [ "\$FEE" != "\$DEFAULTFEE" ]; then
+	./ctl settxfee \$DEFAULTFEE
+fi
+EOF
+chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/xfer"
+
+################################################################################
+# Setup the serially connected secondary dcrd node
+################################################################################
+
+SECONDARY_DCRD_P2P=127.0.0.1:19565
+SECONDARY_DCRD_RPC=127.0.0.1:19566
+cat > "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/ctl" <<EOF
+#!/usr/bin/env bash
+dcrctl -C ../dcrctl.conf -s ${SECONDARY_DCRD_RPC} \$*
+EOF
+chmod +x "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/ctl"
+
+cp "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/mine" "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/"
+chmod +x "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/mine"
+
+# Script to force reorg
+cat > "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/reorg" <<EOF
+#!/usr/bin/env bash
+./ctl node remove ${PRIMARY_DCRD_P2P}
+./mine
+cd "${NODES_ROOT}/${PRIMARY_DCRD_NAME}"
+./mine 2
+cd "${NODES_ROOT}/${SECONDARY_DCRD_NAME}"
+./ctl node connect ${PRIMARY_DCRD_P2P} perm
+EOF
+chmod +x "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/reorg"
+
+tmux new-window -t $SESSION:2 -n "${SECONDARY_DCRD_NAME}"
+tmux split-window -v
+tmux select-pane -t 0
+tmux resize-pane -D 15
+tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_DCRD_NAME}" C-m
+tmux send-keys "dcrd -C ../dcrd.conf --listen ${SECONDARY_DCRD_P2P} --rpclisten ${SECONDARY_DCRD_RPC} --connect ${PRIMARY_DCRD_P2P}  --miningaddr=${WALLET_MINING_ADDR}" C-m
+tmux select-pane -t 1
+tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_DCRD_NAME}" C-m
+
+################################################################################
+# Setup the secondary wallet
+################################################################################
+
+SECONDARY_WALLET_RPC=127.0.0.1:19567
+tmux new-window -t $SESSION:3 -n "${SECONDARY_WALLET_NAME}"
+tmux split-window -v
+tmux select-pane -t 0
+tmux resize-pane -D 15
+tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_WALLET_NAME}" C-m
+tmux send-keys "dcrwallet -C ../wallet.conf --create" C-m
+sleep 2
+tmux send-keys "123" C-m "123" C-m "n" C-m "y" C-m
+sleep 1
+tmux send-keys "${WALLET_SEED}" C-m C-m
+tmux send-keys "dcrwallet -C ../wallet.conf --rpcconnect=${SECONDARY_DCRD_RPC} --rpclisten=${SECONDARY_WALLET_RPC} --nogrpc" C-m
+tmux select-pane -t 1
+tmux send-keys "cd ${NODES_ROOT}/${SECONDARY_WALLET_NAME}" C-m
+
+cat > "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/ctl" <<EOF
+#!/usr/bin/env bash
+dcrctl -C ../dcrctl.conf -c ./data/rpc.cert -s ${SECONDARY_WALLET_RPC} \$*
+EOF
+chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/ctl"
+
+cp "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/tickets" "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/"
+chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/tickets"
+
+cp "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/xfer" "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/"
+chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/xfer"
+
+################################################################################
+# Setup helper script to stop everything
+################################################################################
+
+cat > "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/stopall" <<EOF
+#!/usr/bin/env bash
+function countdown {
+  secs=\$1
+  msg=\$2
+  while [ \$secs -gt 0  ]; do
+    echo -ne "Seconds \$msg: \$secs\033[0K\r"
+    sleep 1
+    : \$((secs--))
+  done
+}
+
+cd "${NODES_ROOT}/${PRIMARY_DCRD_NAME}"
+./ctl stop 2>/dev/null
+cd "${NODES_ROOT}/${PRIMARY_WALLET_NAME}"
+./ctl stop 2>/dev/null
+cd "${NODES_ROOT}/${SECONDARY_DCRD_NAME}"
+./ctl stop 2>/dev/null
+cd "${NODES_ROOT}/${SECONDARY_WALLET_NAME}"
+./ctl stop 2>/dev/null
+
+DELAY=3
+countdown \$DELAY "until shutdown"
+tmux kill-session -t $SESSION
+EOF
+cp "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/stopall" "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/"
+cp "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/stopall" "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/"
+cp "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/stopall" "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/"
+chmod +x "${NODES_ROOT}/${PRIMARY_DCRD_NAME}/stopall"
+chmod +x "${NODES_ROOT}/${SECONDARY_DCRD_NAME}/stopall"
+chmod +x "${NODES_ROOT}/${PRIMARY_WALLET_NAME}/stopall"
+chmod +x "${NODES_ROOT}/${SECONDARY_WALLET_NAME}/stopall"
+
+################################################################################
+# Attach
+################################################################################
+
+tmux select-window -t $SESSION:0
+tmux attach-session -t $SESSION
diff --git a/release/services/rc.d/dcrd b/contrib/services/rc.d/dcrd
similarity index 100%
rename from release/services/rc.d/dcrd
rename to contrib/services/rc.d/dcrd
diff --git a/release/services/smf/dcrd.xml b/contrib/services/smf/dcrd.xml
similarity index 100%
rename from release/services/smf/dcrd.xml
rename to contrib/services/smf/dcrd.xml
diff --git a/release/services/systemd/dcrd.service b/contrib/services/systemd/dcrd.service
similarity index 100%
rename from release/services/systemd/dcrd.service
rename to contrib/services/systemd/dcrd.service
diff --git a/docs/README.md b/docs/README.md
index eec04d17..50932480 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -15,6 +15,7 @@
     2. [JSON-RPC Reference](#JSONRPCReference)
     3. [Go Modules](#GoModules)
     4. [Module Hierarchy](#ModuleHierarchy)
+6. [Simulation Network (--simnet) Reference](#SimnetReference)
 
 <a name="About" />
 
@@ -231,3 +232,22 @@ The following diagram shows an overview of the hierarchy for the modules
 provided by the dcrd repository.
 
 ![Module Hierarchy](./assets/module_hierarchy.svg)
+
+<a name="SimnetReference" />
+
+**6. Simulation Network (--simnet)**
+
+When developing Decred applications or testing potential changes, it is often
+extremely useful to have a test network where transactions are actually mined
+into blocks, difficulty levels are low enough to generate blocks on demand, it
+is possible to easily cause chain reorganizations for testing purposes, and
+otherwise have full control over the network.
+
+In order to facilitate these scenarios, `dcrd` provides a simulation network
+(`--simnet`), where the difficulty starts extremely low to enable fast CPU
+mining of blocks.  Simnet also has some modified functionality that helps
+developers avoid common issues early in development.
+
+See the full reference for more details:
+
+* [Simulation Network Reference](https://github.com/decred/dcrd/tree/master/docs/simnet_environment.mediawiki)
diff --git a/docs/json_rpc_api.mediawiki b/docs/json_rpc_api.mediawiki
index 2b90a754..7ed9ee89 100644
--- a/docs/json_rpc_api.mediawiki
+++ b/docs/json_rpc_api.mediawiki
@@ -230,6 +230,10 @@ the method name for further details such as parameter and return information.
 |Y
 |Returns the committed filter for a block.
 |-
+|[[#getcfilterheader|getcfilterheader]]
+|Y
+|Returns the committed filter header for a block.
+|-
 |[[#getcfilterv2|getcfilterv2]]
 |Y
 |Returns the version 2 block filter for the given block along with a proof that can be used to prove the filter is committed to by the block header.
@@ -1223,7 +1227,9 @@ of the best block.
 # <code>filtertype</code>: <code>(string, required)</code> The type of committed filter to return.
 |-
 !Description
-|Returns the committed filter for a block.
+|
+: Returns the committed filter for a block.
+: Deprecated: This will be removed in the next major version.  Use [[#getcfilterv2|getcfilterv2]] instead.
 |-
 !Returns
 |<code>string</code> The hex encoded committed filter.
@@ -1238,6 +1244,31 @@ of the best block.
 
 ----
 
+====getcfilterheader====
+{|
+!Method
+|getcfilterheader
+|-
+!Parameters
+|
+# <code>hash</code>: <code>(string, required)</code> The block hash of the filter header being queried.
+# <code>filtertype</code>: <code>(string, required)</code> The type of committed filter header to return.
+|-
+!Description
+|
+: Returns the committed filter header for a block.
+: Deprecated: This will be removed in the next major version.  Use [[#getcfilterv2|getcfilterv2]] instead.
+|-
+!Returns
+|<code>string</code> The hex encoded committed filter header.
+|-
+!Example Return
+|
+<code>bd60b439d72fad354acc4b47d374ec34b0cca3bb25994b459f01f6f84ad6b478</code>
+|}
+
+----
+
 ====getcfilterv2====
 {|
 !Method
@@ -2577,7 +2608,7 @@ user.  Click the method name for further details such as parameter and return in
 |[[#work|work]]
 |-
 |[[#stopnotifywork|stopnotifywork]]
-|Cancel registered notifications for whenever when a new block template is generated.
+|Cancel registered notifications for whenever a new block template is generated.
 |None
 |-
 |[[#notifyreceived|notifyreceived]]
@@ -2612,6 +2643,22 @@ user.  Click the method name for further details such as parameter and return in
 |Stop sending either a txaccepted or a txacceptedverbose notification when a new transaction is accepted into the mempool.
 |None
 |-
+|[[#notifywinningtickets|notifywinningtickets]]
+|Send notifications for all tickets that are chosen to vote.
+|[[#winningtickets|winningtickets]]
+|-
+|[[#notifyspentandmissedtickets|notifyspentandmissedtickets]]
+|Send notifications for all tickets that are spent or missed.
+|[[#spentandmissedtickets|spentandmissedtickets]]
+|-
+|[[#notifynewtickets|notifynewtickets]]
+|Send notifications for all new tickets that have matured.
+|[[#newtickets|newtickets]]
+|-
+|[[#notifystakedifficulty|notifystakedifficulty]]
+|Send notifications whenever the stake difficulty is updated.
+|[[#stakedifficulty|stakedifficulty]]
+|-
 |[[#session|session]]
 |Return details regarding a websocket client's current connection.
 |None
@@ -2912,6 +2959,86 @@ NOTE: This is only required if an HTTP Authorization header is not being used.
 
 ----
 
+====notifywinningtickets====
+{|
+!Method
+|notifywinningtickets
+|-
+!Notifications
+|[[#winningtickets|winningtickets]]
+|-
+!Parameters
+|None
+|-
+!Description
+|Send a winningtickets notification when tickets are chosen to vote.
+|-
+!Returns
+|Nothing
+|}
+
+----
+
+====notifyspentandmissedtickets====
+{|
+!Method
+|notifyspentandmissedtickets
+|-
+!Notifications
+|[[#spentandmissedtickets|spentandmissedtickets]]
+|-
+!Parameters
+|None
+|-
+!Description
+|Send a spentandmissedtickets notification when tickets are spent or missed.
+|-
+!Returns
+|Nothing
+|}
+
+----
+
+====notifynewtickets====
+{|
+!Method
+|notifynewtickets
+|-
+!Notifications
+|[[#newtickets|newtickets]]
+|-
+!Parameters
+|None
+|-
+!Description
+|Send a newtickets notification when new tickets have matured.
+|-
+!Returns
+|Nothing
+|}
+
+----
+
+====notifystakedifficulty====
+{|
+!Method
+|notifystakedifficulty
+|-
+!Notifications
+|[[#stakedifficulty|stakedifficulty]]
+|-
+!Parameters
+|None
+|-
+!Description
+|Send a stakedifficulty notification when the stake difficulty is updated.
+|-
+!Returns
+|Nothing
+|}
+
+----
+
 ====session====
 {|
 !Method
@@ -2978,6 +3105,22 @@ The following is an overview of the JSON-RPC notifications used for Websocket co
 |Received a new transaction after requesting verbose notifications of all new transactions accepted into the mempool.
 |[[#notifynewtransactions|notifynewtransactions]]
 |-
+|[[#winningtickets|winningtickets]]
+|Tickets were chosen to vote.
+|[[#notifywinningtickets|notifywinningtickets]]
+|-
+|[[#spentandmissedtickets|spentandmissedtickets]]
+|Tickets were spent or missed.
+|[[#notifyspentandmissedtickets|notifyspentandmissedtickets]]
+|-
+|[[#newtickets|newtickets]]
+|New tickets matured.
+|[[#notifynewtickets|notifynewtickets]]
+|-
+|[[#stakedifficulty|stakedifficulty]]
+|The stake difficulty was updated.
+|[[#notifystakedifficulty|notifystakedifficulty]]
+|-
 |[[#rescanprogress|rescanprogress]]
 |A rescan operation that is underway has made progress.
 |[[#rescan|rescan]]
@@ -3089,7 +3232,7 @@ The recvtx notification for the same txout, after the transaction was mined into
 : <code>newtxns</code> - New non-vote transactions are available and have potentially been included.
 |-
 !Example
-|Example work notification  on testnet:
+|Example work notification on testnet:
 
 : <code>{"jsonrpc":"1.0","method":"work","params":["06000000c9ee7cd5b14b72e41195891a9617f80049eaac06a0dfe063479523060000000088087dbb59923da4faf632a29777805a7632efbd680b86f3c6cbbe3fddf905d45045d61784ad0810749cc045d03a7b9d5e8f6b2ed3ed767c9827f1dad4925771010082ebc7097cf5050007003b1400003b84061cff2d333700000000322400003f10000070b67b5b3bc400803b057900c5575400000000000000000000000000000000000000000000000000060000008000000100000000000005a0","000000000000000000000000000000000000000000000000003b840600000000","newparent"],"id":null}</code>
 |}
@@ -3174,6 +3317,101 @@ The redeemingtx notification for the same txout, after the spending transaction
 
 ----
 
+====winningtickets====
+{|
+!Method
+|winningtickets
+|-
+!Request
+|[[#notifywinningtickets|notifywinningtickets]]
+|-
+!Parameters
+|
+# <code>BlockHash</code>: <code>(string)</code> the hash of the block.
+# <code>BlockHeight</code>: <code>(numeric)</code> the height of the block.
+# <code>Tickets</code>: <code>(object)</code> the tickets chosen to vote.
+|-
+!Description
+|Notifies a client when tickets are chosen to vote.
+|-
+!Example
+|Example notifywinningtickets notification for block 479903 on testnet:
+: <code>{"jsonrpc": "1.0", "method": "winningtickets", "params": ["00000044a6c0e2fb8f4feae2ac1133443859407abcf27d5d3a29d7d16eda8bc4", 479903, {"0": "37bb1218876ed8d11497130e253e98f7fd75546744aa9d209e40b97dd5ac735f", "1": "05ad6ce380d97f254c9c60669e9a33d044fccb5589789128abf7ca8c113159d3", "2": "0c43fa8b907acff3d35d81655b3c0a6ae41904ddd939f81b48e5df8d89c6283c", "3": "f2e544178e9e2a4473114b7bf0c383808eadf81f454fc11b835cd5083b0fae7e", "4": "c982fd8c7350df4781c0826c059e7675e6fb568cecee33d19f3a1b03aa41b1ce"}], "id": null}</code>
+|}
+----
+
+====spentandmissedtickets====
+{|
+!Method
+|spentandmissedtickets
+|-
+!Request
+|[[#notifyspentandmissedtickets|notifyspentandmissedtickets]]
+|-
+!Parameters
+|
+# <code>Hash</code>: <code>(string)</code> the hash of the block.
+# <code>Height</code>: <code>(numeric)</code> the height of the block.
+# <code>StakeDiff</code>: <code>(numeric)</code> the stake difficulty of the block.
+# <code>Tickets</code>: <code>(object)</code> the tickets that have been spent or missed.
+|-
+!Description
+|Notifies a client when tickets have been spent or missed.
+|-
+!Example
+|Example spentandmissedtickets notification for block 479903 on testnet:
+: <code>{"jsonrpc": "1.0", "method": "spentandmissedtickets", "params": ["00000044a6c0e2fb8f4feae2ac1133443859407abcf27d5d3a29d7d16eda8bc4", 479903, 9003800525, {"2911dbd36f0bf09e9e84d223b076413d34c39dea7a060c32e5271d0dbb64b332": "spent", "5edc39e2e5f2fccac6d3a10ae7b0cb51031472cc606d450bbf1d5680083f20a1": "spent", "67ec8b66c5bfc1277cc6c6fc00d1b9e9b1c4d61baed7774843ca86200876fe91": "spent", "c2ca81646dc7afb2165354bbe9fcbf8f3d1e97e4a8361934d43db8cdc7ffcdc0": "spent", "da5b300e1a05b9aad2323916cc4ec6eff98962fcb87787dbe24d25b8ea5b102c": "spent"}], "id": null}</code>
+|}
+----
+
+====newtickets====
+{|
+!Method
+|newtickets
+|-
+!Request
+|[[#notifynewtickets|notifynewtickets]]
+|-
+!Parameters
+|
+# <code>Hash</code>: <code>(string)</code> the hash of the block.
+# <code>Height</code>: <code>(numeric)</code> the height of the block.
+# <code>StakeDiff</code>: <code>(numeric)</code> the stake difficulty of the block.
+# <code>Tickets</code>: <code>(array of strings)</code> the new tickets that have matured.
+|-
+!Description
+|Notifies a client when new tickets have matured.
+|-
+!Example
+|Example newtickets notification for block 479903 on testnet:
+: <code>{"jsonrpc": "1.0", "method": "newtickets", "params": ["00000044a6c0e2fb8f4feae2ac1133443859407abcf27d5d3a29d7d16eda8bc4", 479903, 9003800525, ["5297d32d5178c464c279711e771250f4f80a15830dfb89ae6bf414ee22613c88", "237c15fe027797d72c1ffd5aa3b3f9069b50352855bda5a9e7d0fa13d2299e32", "cd11ab320a543c946a021b37d5339a7f0ea72a6baf46fda455edf302165e812b", "eb82dba288e7af4a02a44818376f7228929c89a4fd51cf07ebdd825acc1c039d"]], "id": null}</code>
+|}
+
+----
+
+====stakedifficulty====
+{|
+!Method
+|stakedifficulty
+|-
+!Request
+|[[#notifystakedifficulty|notifystakedifficulty]]
+|-
+!Parameters
+|
+# <code>BlockHash</code>: <code>(string)</code> the hash of the block.
+# <code>BlockHeight</code>: <code>(numeric)</code> the height of the block.
+# <code>StakeDiff</code>: <code>(numeric)</code> the stake difficulty of the block.
+|-
+!Description
+|Notifies a client when the stake difficulty has been updated.
+|-
+!Example
+|Example stakedifficulty notification for block 479903 on testnet:
+: <code>{"jsonrpc": "1.0", "method": "stakedifficulty", "params": ["00000044a6c0e2fb8f4feae2ac1133443859407abcf27d5d3a29d7d16eda8bc4", 479903, 9003800525], "id": null}</code>
+|}
+----
+
 ====rescanprogress====
 {|
 !Method
diff --git a/docs/release-notes/release-notes-1.0.7.md b/docs/release-notes/release-notes-1.0.7.md
new file mode 100644
index 00000000..295e93be
--- /dev/null
+++ b/docs/release-notes/release-notes-1.0.7.md
@@ -0,0 +1,152 @@
+## dcrd v1.0.7
+
+This release of dcrd primarily contains improvements to the infrastructure and
+other quality assurance changes that are bringing us closer to providing full
+support for Lightning Network.
+
+A lot of work required for Lightning Network support went into getting the
+required code merged into the upstream project, btcd, which now fully supports
+it.  These changes also must be synced and integrated with dcrd as well and
+therefore many of the changes in this release are related to that process.
+
+## Notable Changes
+
+### Dust check removed from stake transactions
+
+The standard policy for regular transactions is to reject any transactions that
+have outputs so small that they cost more to the network than their value.  This
+behavior is desirable for regular transactions, however it was also being
+applied to vote and revocation transactions which could lead to a situation
+where stake pools with low fees could result in votes and revocations having
+difficulty being mined.
+
+This check has been changed to only apply to regular transactions now in order
+to prevent any issues.  Stake transactions have several other checks that make
+this one unnecessary for them.
+
+### New `feefilter` peer-to-peer message
+
+A new optional peer-to-peer message named `feefilter` has been added that allows
+peers to inform others about the minimum transaction fee rate they are willing
+to accept.  This will enable peers to avoid notifying others about transactions
+they will not accept anyways and therefore can result in a significant bandwidth
+savings.
+
+### Bloom filter service bit enforcement
+
+Peers that are configured to disable bloom filter support will now disconnect
+remote peers that send bloom filter related commands rather than simply ignoring
+them.  This allows any light clients that do not observe the service bit to
+potentially find another peer that provides the service.  Additionally, remote
+peers that have negotiated a high enough protocol version to observe the service
+bit and still send bloom filter related commands anyways will now be banned.
+
+
+## Changelog
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/v1.0.5...v1.0.7).
+
+### Protocol and network:
+- Allow reorg of block one [decred/dcrd#745](https://github.com/decred/dcrd/pull/745)
+- blockchain: use the time source [decred/dcrd#747](https://github.com/decred/dcrd/pull/747)
+- peer: Strictly enforce bloom filter service bit [decred/dcrd#768](https://github.com/decred/dcrd/pull/768)
+- wire/peer: Implement feefilter p2p message [decred/dcrd#779](https://github.com/decred/dcrd/pull/779)
+- chaincfg: update checkpoints for 1.0.7 release  [decred/dcrd#816](https://github.com/decred/dcrd/pull/816)
+
+### Transaction relay (memory pool):
+- mempool: Break dependency on chain instance [decred/dcrd#754](https://github.com/decred/dcrd/pull/754)
+- mempool: unexport the mutex [decred/dcrd#755](https://github.com/decred/dcrd/pull/755)
+- mempool: Add basic test harness infrastructure [decred/dcrd#756](https://github.com/decred/dcrd/pull/756)
+- mempool: Improve tx input standard checks [decred/dcrd#758](https://github.com/decred/dcrd/pull/758)
+- mempool: Update comments for dust calcs [decred/dcrd#764](https://github.com/decred/dcrd/pull/764)
+- mempool: Only perform standard dust checks on regular transactions  [decred/dcrd#806](https://github.com/decred/dcrd/pull/806)
+
+### RPC:
+- Fix gettxout includemempool handling [decred/dcrd#738](https://github.com/decred/dcrd/pull/738)
+- Improve help text for getmininginfo [decred/dcrd#748](https://github.com/decred/dcrd/pull/748)
+- rpcserverhelp: update TicketFeeInfo help [decred/dcrd#801](https://github.com/decred/dcrd/pull/801)
+- blockchain: Improve getstakeversions efficiency [decred/dcrd#81](https://github.com/decred/dcrd/pull/813)
+
+### dcrd command-line flags:
+- config: introduce new flags to accept/reject non-std transactions [decred/dcrd#757](https://github.com/decred/dcrd/pull/757)
+- config: Add --whitelist option [decred/dcrd#352](https://github.com/decred/dcrd/pull/352)
+- config: Improve config file handling [decred/dcrd#802](https://github.com/decred/dcrd/pull/802)
+- config: Improve blockmaxsize check [decred/dcrd#810](https://github.com/decred/dcrd/pull/810)
+
+### dcrctl:
+- Add --walletrpcserver option [decred/dcrd#736](https://github.com/decred/dcrd/pull/736)
+
+### Documentation
+- docs: add commit prefix notes  [decred/dcrd#788](https://github.com/decred/dcrd/pull/788)
+
+### Developer-related package changes:
+- blockchain: check errors and remove ineffectual assignments [decred/dcrd#689](https://github.com/decred/dcrd/pull/689)
+- stake: less casting [decred/dcrd#705](https://github.com/decred/dcrd/pull/705)
+- blockchain: chainstate only needs prev block hash [decred/dcrd#706](https://github.com/decred/dcrd/pull/706)
+- remove dead code [decred/dcrd#715](https://github.com/decred/dcrd/pull/715)
+- Use btclog for determining valid log levels [decred/dcrd#738](https://github.com/decred/dcrd/pull/738)
+- indexers: Minimize differences with upstream code [decred/dcrd#742](https://github.com/decred/dcrd/pull/742)
+- blockchain: Add median time to state snapshot [decred/dcrd#753](https://github.com/decred/dcrd/pull/753)
+- blockmanager: remove unused GetBlockFromHash function [decred/dcrd#761](https://github.com/decred/dcrd/pull/761)
+- mining: call CheckConnectBlock directly [decred/dcrd#762](https://github.com/decred/dcrd/pull/762)
+- blockchain: add missing error code entries [decred/dcrd#763](https://github.com/decred/dcrd/pull/763)
+- blockchain: Sync main chain flag on ProcessBlock [decred/dcrd#767](https://github.com/decred/dcrd/pull/767)
+- blockchain: Remove exported CalcPastTimeMedian func [decred/dcrd#770](https://github.com/decred/dcrd/pull/770)
+- blockchain: check for error [decred/dcrd#772](https://github.com/decred/dcrd/pull/772)
+- multi: Optimize by removing defers [decred/dcrd#782](https://github.com/decred/dcrd/pull/782)
+- blockmanager: remove unused logBlockHeight [decred/dcrd#787](https://github.com/decred/dcrd/pull/787)
+- dcrutil: Replace DecodeNetworkAddress with DecodeAddress [decred/dcrd#746](https://github.com/decred/dcrd/pull/746)
+- txscript: Force extracted addrs to compressed [decred/dcrd#775](https://github.com/decred/dcrd/pull/775)
+- wire: Remove legacy transaction decoding [decred/dcrd#794](https://github.com/decred/dcrd/pull/794)
+- wire: Remove dead legacy tx decoding code [decred/dcrd#796](https://github.com/decred/dcrd/pull/796)
+- mempool/wire: Don't make policy decisions in wire [decred/dcrd#797](https://github.com/decred/dcrd/pull/797)
+- dcrjson: Remove unused cmds & types [decred/dcrd#795](https://github.com/decred/dcrd/pull/795)
+- dcrjson: move cmd types [decred/dcrd#799](https://github.com/decred/dcrd/pull/799)
+- multi: Separate tx serialization type from version [decred/dcrd#798](https://github.com/decred/dcrd/pull/798)
+- dcrjson: add Unconfirmed field to dcrjson.GetAccountBalanceResult [decred/dcrd#812](https://github.com/decred/dcrd/pull/812)
+- multi: Error descriptions should be lowercase [decred/dcrd#771](https://github.com/decred/dcrd/pull/771)
+- blockchain: cast to int64  [decred/dcrd#817](https://github.com/decred/dcrd/pull/817)
+
+### Testing and Quality Assurance:
+- rpcserver: Upstream sync to add basic RPC tests [decred/dcrd#750](https://github.com/decred/dcrd/pull/750)
+- rpctest: Correct several issues tests and joins [decred/dcrd#751](https://github.com/decred/dcrd/pull/751)
+- rpctest: prevent process leak due to panics [decred/dcrd#752](https://github.com/decred/dcrd/pull/752)
+- rpctest: Cleanup resources on failed setup [decred/dcrd#759](https://github.com/decred/dcrd/pull/759)
+- rpctest: Use ports based on the process id [decred/dcrd#760](https://github.com/decred/dcrd/pull/760)
+- rpctest/deps: Update dependencies and API [decred/dcrd#765](https://github.com/decred/dcrd/pull/765)
+- rpctest: Gate rpctest-based behind a build tag [decred/dcrd#766](https://github.com/decred/dcrd/pull/766)
+- mempool: Add test for max orphan entry eviction [decred/dcrd#769](https://github.com/decred/dcrd/pull/769)
+- fullblocktests: Add more consensus tests [decred/dcrd#77](https://github.com/decred/dcrd/pull/773)
+- fullblocktests: Sync upstream block validation [decred/dcrd#774](https://github.com/decred/dcrd/pull/774)
+- rpctest: fix a harness range bug in syncMempools [decred/dcrd#778](https://github.com/decred/dcrd/pull/778)
+- secp256k1: Add regression tests for field.go [decred/dcrd#781](https://github.com/decred/dcrd/pull/781)
+- secp256k1: Sync upstream test consolidation [decred/dcrd#783](https://github.com/decred/dcrd/pull/783)
+- txscript: Correct p2sh hashes in json test data  [decred/dcrd#785](https://github.com/decred/dcrd/pull/785)
+- txscript: Replace CODESEPARATOR json test data [decred/dcrd#786](https://github.com/decred/dcrd/pull/786)
+- txscript: Remove multisigdummy from json test data [decred/dcrd#789](https://github.com/decred/dcrd/pull/789)
+- txscript: Remove max money from json test data [decred/dcrd#790](https://github.com/decred/dcrd/pull/790)
+- txscript: Update signatures in json test data [decred/dcrd#791](https://github.com/decred/dcrd/pull/791)
+- txscript: Use native encoding in json test data [decred/dcrd#792](https://github.com/decred/dcrd/pull/792)
+- rpctest: Store logs and data in same path [decred/dcrd#780](https://github.com/decred/dcrd/pull/780)
+- txscript: Cleanup reference test code  [decred/dcrd#793](https://github.com/decred/dcrd/pull/793)
+
+### Misc:
+- Update deps to pull in additional logging changes [decred/dcrd#734](https://github.com/decred/dcrd/pull/734)
+- Update markdown files for GFM changes [decred/dcrd#744](https://github.com/decred/dcrd/pull/744)
+- blocklogger: Show votes, tickets, & revocations [decred/dcrd#784](https://github.com/decred/dcrd/pull/784)
+- blocklogger: Remove STransactions from transactions calculation [decred/dcrd#811](https://github.com/decred/dcrd/pull/811)
+
+### Contributors (alphabetical order):
+
+- Alex Yocomm-Piatt
+- Atri Viss
+- Chris Martin
+- Dave Collins
+- David Hill
+- Donald Adu-Poku
+- Jimmy Song
+- John C. Vernaleo
+- Jolan Luff
+- Josh Rickmar
+- Olaoluwa Osuntokun
+- Marco Peereboom
diff --git a/docs/release-notes/release-notes-1.1.0.md b/docs/release-notes/release-notes-1.1.0.md
new file mode 100644
index 00000000..7b9c220b
--- /dev/null
+++ b/docs/release-notes/release-notes-1.1.0.md
@@ -0,0 +1,122 @@
+# dcrd v1.1.0
+
+This release of dcrd primarily introduces a new consensus vote agenda which
+allows the stakeholders to decide whether or not to activate the features needed
+for providing full support for Lightning Network.  For those unfamiliar with the
+voting process in Decred, this means that all code in order to support these
+features is already included in this release, however its enforcement will
+remain dormant until the stakeholders vote to activate it.
+
+The following Decred Change Proposals (DCPs) describe the proposed changes in detail:
+- [DCP0002](https://github.com/decred/dcps/blob/master/dcp-0002/dcp-0002.mediawiki)
+- [DCP0003](https://github.com/decred/dcps/blob/master/dcp-0003/dcp-0003.mediawiki)
+
+It is important for everyone to upgrade their software to this latest release
+even if you don't intend to vote in favor of the agenda.
+
+## Notable Changes
+
+### Lightning Network Features Vote
+
+In order to fully support many of the benefits that the Lightning Network will
+bring, there are some primitives that involve changes to the current consensus
+that need to be enabled.  A new vote with the id `lnfeatures` is now available
+as of this release.  After upgrading, stakeholders may set their preferences
+through their wallet or stake pool's website.
+
+### Transaction Finality Policy
+
+The standard policy for transaction relay has been changed to use the median
+time of the past several blocks instead of the current network adjusted time
+when examining lock times to determine if a transaction is final.  This provides
+a more deterministic check across all peers and prevents the possibility of
+miners attempting to game the timestamps in order to include more transactions.
+
+Consensus enforcement of this change relies on the result of the aforementioned
+`lnfeatures` vote.
+
+### Relative Time Locks Policy
+
+The standard policy for transaction relay has been modified to enforce relative
+lock times for version 2 transactions via their sequence numbers and a new
+`OP_CHECKSEQUENCEVERIFY` opcode.
+
+Consensus enforcement of this change relies on the result of the aforementioned
+`lnfeatures` vote.
+
+### OP_SHA256 Opcode
+
+In order to better support cross-chain interoperability, a new opcode to compute
+the SHA-256 hash is being proposed.  Since this opcode is implemented as a hard
+fork, it will not be available for use in scripts unless the aforementioned
+`lnfeatures` vote passes.
+
+## Changelog
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/v1.0.7...v1.1.0).
+
+### Protocol and network:
+- chaincfg: update checkpoints for 1.1.0 release [decred/dcrd#850](https://github.com/decred/dcrd/pull/850)
+- chaincfg: Introduce agenda for v5 lnfeatures vote [decred/dcrd#848](https://github.com/decred/dcrd/pull/848)
+- txscript: Introduce OP_SHA256 [decred/dcrd#851](https://github.com/decred/dcrd/pull/851)
+- wire: Decrease num allocs when decoding headers [decred/dcrd#861](https://github.com/decred/dcrd/pull/861)
+- blockchain: Implement enforced relative seq locks [decred/dcrd#864](https://github.com/decred/dcrd/pull/864)
+- txscript: Implement CheckSequenceVerify [decred/dcrd#864](https://github.com/decred/dcrd/pull/864)
+- multi: Enable vote for DCP0002 and DCP0003 [decred/dcrd#855](https://github.com/decred/dcrd/pull/855)
+
+### Transaction relay (memory pool):
+- mempool: Use median time for tx finality checks [decred/dcrd#860](https://github.com/decred/dcrd/pull/860)
+- mempool: Enforce relative sequence locks [decred/dcrd#864](https://github.com/decred/dcrd/pull/864)
+- policy/mempool: Enforce CheckSequenceVerify opcode [decred/dcrd#864](https://github.com/decred/dcrd/pull/864)
+
+### RPC:
+- rpcserver: check whether ticketUtx was found [decred/dcrd#824](https://github.com/decred/dcrd/pull/824)
+- rpcserver: return rule error on rejected raw tx [decred/dcrd#808](https://github.com/decred/dcrd/pull/808)
+
+### dcrd command-line flags:
+- config: Extend --profile cmd line option to allow interface to be specified [decred/dcrd#838](https://github.com/decred/dcrd/pull/838)
+
+### Documentation
+- docs: rpcapi format update [decred/dcrd#807](https://github.com/decred/dcrd/pull/807)
+- config: export sampleconfig for use by dcrinstall [decred/dcrd#834](https://github.com/decred/dcrd/pull/834)
+- sampleconfig: Add package README and doc.go [decred/dcrd#835](https://github.com/decred/dcrd/pull/835)
+- docs: create entry for getstakeversions in rpcapi [decred/dcrd#819](https://github.com/decred/dcrd/pull/819)
+- docs: crosscheck and update all rpc doc entries [decred/dcrd#847](https://github.com/decred/dcrd/pull/847)
+- docs: update git commit messages section heading [decred/dcrd#863](https://github.com/decred/dcrd/pull/863)
+
+### Developer-related package changes:
+- Fix and regenerate precomputed secp256k1 curve [decred/dcrd#823](https://github.com/decred/dcrd/pull/823)
+- dcrec: use hardcoded datasets in tests [decred/dcrd#822](https://github.com/decred/dcrd/pull/822)
+- Use dchest/blake256  [decred/dcrd#827](https://github.com/decred/dcrd/pull/827)
+- glide: use jessevdk/go-flags for consistency [decred/dcrd#833](https://github.com/decred/dcrd/pull/833)
+- multi: Error descriptions are in lower case [decred/dcrd#842](https://github.com/decred/dcrd/pull/842)
+- txscript: Rename OP_SHA256 to OP_BLAKE256 [decred/dcrd#840](https://github.com/decred/dcrd/pull/840)
+- multi: Abstract standard verification flags [decred/dcrd#852](https://github.com/decred/dcrd/pull/852)
+- chain: Remove memory block node pruning [decred/dcrd#858](https://github.com/decred/dcrd/pull/858)
+- txscript: Add API to parse atomic swap contracts [decred/dcrd#862](https://github.com/decred/dcrd/pull/862)
+
+### Testing and Quality Assurance:
+- Test against go 1.9 [decred/dcrd#836](https://github.com/decred/dcrd/pull/836)
+- dcrec: remove testify dependency [decred/dcrd#829](https://github.com/decred/dcrd/pull/829)
+- mining_test: add edge conditions from btcd [decred/dcrd#831](https://github.com/decred/dcrd/pull/831)
+- stake: Modify ticket tests to use chaincfg params [decred/dcrd#844](https://github.com/decred/dcrd/pull/844)
+- blockchain: Modify tests to use chaincfg params [decred/dcrd#845](https://github.com/decred/dcrd/pull/845)
+- blockchain: Cleanup various tests [decred/dcrd#843](https://github.com/decred/dcrd/pull/843)
+- Ensure run_tests.sh local fails correctly when gometalinter errors [decred/dcrd#846](https://github.com/decred/dcrd/pull/846)
+- peer: fix logic race in peer connection test [decred/dcrd#865](https://github.com/decred/dcrd/pull/865)
+
+### Misc:
+- glide: sync deps [decred/dcrd#837](https://github.com/decred/dcrd/pull/837)
+- Update decred deps for v1.1.0 [decred/dcrd#868](https://github.com/decred/dcrd/pull/868)
+- Bump for v1.1.0 [decred/dcrd#867](https://github.com/decred/dcrd/pull/867)
+
+### Code Contributors (alphabetical order):
+
+- Alex Yocom-Piatt
+- Dave Collins
+- David Hill
+- Donald Adu-Poku
+- Jason Zavaglia
+- Jean-Christophe Mincke
+- Jolan Luff
+- Josh Rickmar
diff --git a/docs/release-notes/release-notes-1.1.2.md b/docs/release-notes/release-notes-1.1.2.md
new file mode 100644
index 00000000..4292d5e0
--- /dev/null
+++ b/docs/release-notes/release-notes-1.1.2.md
@@ -0,0 +1,127 @@
+# dcrd v1.1.2
+
+This release of dcrd primarily contains performance enhancements, infrastructure
+improvements, and other quality assurance changes.
+
+While it is not visible in this release, significant infrastructure work has
+also been done this release cycle towards porting the Lightning Network (LN)
+daemon which will ultimately allow LN payments to be backed by Decred.
+
+## Notable Changes
+
+### Faster Block Validation
+
+A significant portion of block validation involves handling the stake tickets
+which form an integral part of Decred's hybrid proof-of-work and proof-of-stake
+system.  The code which handles this portion of validation has been
+significantly optimized in this release such that overall block validation is
+up to approximately 3 times faster depending on the specific underlying hardware
+configuration.  This also has a noticeable impact on the speed of the initial
+block download process as well as how quickly votes for winning tickets are
+submitted to the network.
+
+### Data Carrier Transaction Standardness Policy
+
+The standard policy for transaction relay of data carrier transaction outputs
+has been modified to support canonically-encoded small data pushes.  These
+outputs are also known as `OP_RETURN` or `nulldata` outputs.  In particular,
+single byte small integers data pushes (0-16) are now supported.
+
+## Changelog
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/v1.1.0...v1.1.2).
+
+### Protocol and network:
+- chaincfg: update checkpoints for 1.1.2 release [decred/dcrd#946](https://github.com/decred/dcrd/pull/946)
+- chaincfg: Rename one of the testnet seeders [decred/dcrd#873](https://github.com/decred/dcrd/pull/873)
+- stake: treap index perf improvement [decred/dcrd#853](https://github.com/decred/dcrd/pull/853)
+- stake: ticket expiry perf improvement [decred/dcrd#853](https://github.com/decred/dcrd/pull/853)
+
+### Transaction relay (memory pool):
+
+- txscript: Correct nulldata standardness check [decred/dcrd#935](https://github.com/decred/dcrd/pull/935)
+
+### RPC:
+
+- rpcserver: searchrawtransactions skip first input for vote tx [decred/dcrd#859](https://github.com/decred/dcrd/pull/859)
+- multi: update stakebase tx vin[0] structure [decred/dcrd#859](https://github.com/decred/dcrd/pull/859)
+- rpcserver: Fix empty ssgen verbose results [decred/dcrd#871](https://github.com/decred/dcrd/pull/871)
+- rpcserver: check for error in getwork request [decred/dcrd#898](https://github.com/decred/dcrd/pull/898)
+- multi: Add NoSplitTransaction to purchaseticket [decred/dcrd#904](https://github.com/decred/dcrd/pull/904)
+- rpcserver: avoid nested decodescript p2sh addrs [decred/dcrd#929](https://github.com/decred/dcrd/pull/929)
+- rpcserver: skip generating certs when nolisten set [decred/dcrd#932](https://github.com/decred/dcrd/pull/932)
+- rpc: Add localaddr and relaytxes to getpeerinfo [decred/dcrd#933](https://github.com/decred/dcrd/pull/933)
+- rpcserver: update handleSendRawTransaction error handling [decred/dcrd#939](https://github.com/decred/dcrd/pull/939)
+
+### dcrd command-line flags:
+
+- config: add --nofilelogging option [decred/dcrd#872](https://github.com/decred/dcrd/pull/872)
+
+### Documentation:
+
+- rpcclient: Remove docker info from README.md [decred/dcrd#886](https://github.com/decred/dcrd/pull/886)
+- bloom: Fix link in README [decred/dcrd#922](https://github.com/decred/dcrd/pull/922)
+- doc: tiny fix url [decred/dcrd#928](https://github.com/decred/dcrd/pull/928)
+- doc: update go version for example test run in readme [decred/dcrd#936](https://github.com/decred/dcrd/pull/936)
+
+### Developer-related package changes:
+
+- multi: Drop glide, use dep [decred/dcrd#818](https://github.com/decred/dcrd/pull/818)
+- txsort: Implement stable tx sorting package  [decred/dcrd#940](https://github.com/decred/dcrd/pull/940)
+- coinset: Remove package [decred/dcrd#888](https://github.com/decred/dcrd/pull/888)
+- base58: Use new github.com/decred/base58 package [decred/dcrd#888](https://github.com/decred/dcrd/pull/888)
+- certgen: Move self signed certificate code into package [decred/dcrd#879](https://github.com/decred/dcrd/pull/879)
+- certgen: Add doc.go and README.md [decred/dcrd#883](https://github.com/decred/dcrd/pull/883)
+- rpcclient: Allow request-scoped cancellation during Connect [decred/dcrd#880](https://github.com/decred/dcrd/pull/880)
+- rpcclient: Import dcrrpcclient repo into rpcclient directory [decred/dcrd#880](https://github.com/decred/dcrd/pull/880)
+- rpcclient: json unmarshal into unexported embedded pointer  [decred/dcrd#941](https://github.com/decred/dcrd/pull/941)
+- bloom: Copy github.com/decred/dcrutil/bloom to bloom package [decred/dcrd#881](https://github.com/decred/dcrd/pull/881)
+- Improve gitignore [decred/dcrd#887](https://github.com/decred/dcrd/pull/887)
+- dcrutil: Import dcrutil repo under dcrutil directory [decred/dcrd#888](https://github.com/decred/dcrd/pull/888)
+- hdkeychain: Move to github.com/decred/dcrd/hdkeychain [decred/dcrd#892](https://github.com/decred/dcrd/pull/892)
+- stake: Add IsStakeSubmission [decred/dcrd#907](https://github.com/decred/dcrd/pull/907)
+- txscript: Require SHA256 secret hashes for atomic swaps [decred/dcrd#930](https://github.com/decred/dcrd/pull/930)
+
+### Testing and Quality Assurance:
+
+- gometalinter: run on subpkgs too [decred/dcrd#878](https://github.com/decred/dcrd/pull/878)
+- travis: test Gopkg.lock [decred/dcrd#889](https://github.com/decred/dcrd/pull/889)
+- hdkeychain: Work around go vet issue with examples [decred/dcrd#890](https://github.com/decred/dcrd/pull/890)
+- bloom: Add missing import to examples [decred/dcrd#891](https://github.com/decred/dcrd/pull/891)
+- bloom: workaround go vet issue in example [decred/dcrd#895](https://github.com/decred/dcrd/pull/895)
+- tests: make lockfile test work locally [decred/dcrd#894](https://github.com/decred/dcrd/pull/894)
+- peer: Avoid goroutine leaking during handshake timeout [decred/dcrd#909](https://github.com/decred/dcrd/pull/909)
+- travis: add gosimple linter [decred/dcrd#897](https://github.com/decred/dcrd/pull/897)
+- multi: Handle detected data race conditions [decred/dcrd#920](https://github.com/decred/dcrd/pull/920)
+- travis: add ineffassign linter [decred/dcrd#896](https://github.com/decred/dcrd/pull/896)
+- rpctest: Choose flags based on provided params [decred/dcrd#937](https://github.com/decred/dcrd/pull/937)
+
+### Misc:
+
+- gofmt [decred/dcrd#876](https://github.com/decred/dcrd/pull/876)
+- dep: sync third-party deps [decred/dcrd#877](https://github.com/decred/dcrd/pull/877)
+- Bump for v1.1.2 [decred/dcrd#916](https://github.com/decred/dcrd/pull/916)
+- dep: Use upstream jrick/bitset [decred/dcrd#899](https://github.com/decred/dcrd/pull/899)
+- blockchain: removed unused funcs and vars [decred/dcrd#900](https://github.com/decred/dcrd/pull/900)
+- blockchain: remove unused file [decred/dcrd#900](https://github.com/decred/dcrd/pull/900)
+- rpcserver: nil pointer dereference when submit orphan block [decred/dcrd#906](https://github.com/decred/dcrd/pull/906)
+- multi: remove unused funcs and vars [decred/dcrd#901](https://github.com/decred/dcrd/pull/901)
+
+### Code Contributors (alphabetical order):
+
+- Alex Yocom-Piatt
+- Dave Collins
+- David Hill
+- detailyang
+- Donald Adu-Poku
+- Federico Gimenez
+- Jason Zavaglia
+- John C. Vernaleo
+- Jonathan Chappelow
+- Jolan Luff
+- Josh Rickmar
+- Maninder Lall
+- Matheus Degiovani
+- Nicola Larosa
+- Samarth Hattangady
+- Ugwueze Onyekachi Michael
diff --git a/docs/release-notes/release-notes-1.2.0.md b/docs/release-notes/release-notes-1.2.0.md
new file mode 100644
index 00000000..773e26dc
--- /dev/null
+++ b/docs/release-notes/release-notes-1.2.0.md
@@ -0,0 +1,320 @@
+# dcrd v1.2.0
+
+This release of dcrd contains significant performance enhancements,
+infrastructure improvements, improved access to chain-related information for
+providing better SPV (Simplified Payment Verification) support, and other
+quality assurance changes.
+
+A significant amount of infrastructure work has also been done this release
+cycle towards being able to support several planned scalability optimizations.
+
+## Downgrade Warning
+
+The database format in v1.2.0 is not compatible with previous versions of the
+software.  This only affects downgrades as users upgrading from previous
+versions will see a one time database migration.
+
+Once this migration has been completed, it will no longer be possible to
+downgrade to a previous version of the software without having to delete the
+database and redownload the chain.
+
+## Notable Changes
+
+### Significantly Faster Startup
+
+The startup time has been improved by roughly 17x on slower hard disk drives
+(HDDs) and 8x on solid state drives (SSDs).
+
+In order to achieve these speedups, there is a one time database migration, as
+previously mentioned, that will likely take a while to complete (typically
+around 5 to 6 minutes on HDDs and 2 to 3 minutes on SSDs).
+
+### Support For DNS Seed Filtering
+
+In order to better support the forthcoming SPV wallets, support for finding
+other peers based upon their enabled services has been added.  This is useful
+for both SPV wallets and full nodes since SPV wallets will require access to
+full nodes in order to retrieve the necessary proofs and full nodes are
+generally not interested in making outgoing connections to SPV wallets.
+
+### Committed Filters
+
+With the intention of supporting light clients, such as SPV wallets, in a
+privacy-preserving way while still minimizing the amount of data that needs to
+be downloaded, this release adds support for committed filters.  A committed
+filter is a combination of a probalistic data structure that is used to test
+whether an element is a member of a set with a predetermined collision
+probability along with a commitment by consensus-validating full nodes to that
+data.
+
+A committed filter is created for every block which allows light clients to
+download the filters and match against them locally rather than uploading
+personal data to other nodes.
+
+A new service flag is also provided to allow clients to discover nodes that
+provide access to filters.
+
+There is a one time database update to build and store the filters for all
+existing historical blocks which will likely take a while to complete (typically
+around 2 to 3 minutes on HDDs and 1 to 1.5 minutes on SSDs).
+
+### Updated Atomic Swap Contracts
+
+The standard checks for atomic swap contracts have been updated to ensure the
+contracts enforce the secret size for safer support between chains with
+disparate script rules.
+
+### RPC Server Changes
+
+#### New `getchaintips` RPC
+
+A new RPC named `getchaintips` has been added which allows callers to query
+information about the status of known side chains and their branch lengths.
+It currently only provides support for side chains that have been seen while the
+current instance of the process is running.  This will be further improved in
+future releases.
+
+## Changelog
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/v1.1.2...v1.2.0).
+
+### Protocol and network:
+
+- chaincfg: Add checkpoints for 1.2.0 release ([decred/dcrd#1139](https://github.com/decred/dcrd/pull/1139))
+- chaincfg: Introduce new type DNSSeed ([decred/dcrd#961](https://github.com/decred/dcrd/pull/961))
+- blockmanager: sync with the most updated peer ([decred/dcrd#984](https://github.com/decred/dcrd/pull/984))
+- multi: remove MsgAlert ([decred/dcrd#1161](https://github.com/decred/dcrd/pull/1161))
+- multi: Add initial committed filter (CF) support ([decred/dcrd#1151](https://github.com/decred/dcrd/pull/1151))
+
+### Transaction relay (memory pool):
+
+- txscript: Correct nulldata standardness check ([decred/dcrd#935](https://github.com/decred/dcrd/pull/935))
+- mempool: Optimize orphan map limiting ([decred/dcrd#1117](https://github.com/decred/dcrd/pull/1117))
+- mining: Fix duplicate txns in the prio heap ([decred/dcrd#1108](https://github.com/decred/dcrd/pull/1108))
+- mining: Stop transactions losing their dependants ([decred/dcrd#1109](https://github.com/decred/dcrd/pull/1109))
+
+### RPC:
+
+- rpcserver: skip cert create when RPC is disabled ([decred/dcrd#949](https://github.com/decred/dcrd/pull/949))
+- rpcserver: remove redundant checks in blockTemplateResult ([decred/dcrd#826](https://github.com/decred/dcrd/pull/826))
+- rpcserver: assert network for validateaddress rpc ([decred/dcrd#963](https://github.com/decred/dcrd/pull/963))
+- rpcserver: Do not rebroadcast stake transactions ([decred/dcrd#973](https://github.com/decred/dcrd/pull/973))
+- dcrjson: add ticket fee field to PurchaseTicketCmd ([decred/dcrd#902](https://github.com/decred/dcrd/pull/902))
+- dcrwalletextcmds: remove getseed ([decred/dcrd#985](https://github.com/decred/dcrd/pull/985))
+- dcrjson: Add SweepAccountCmd & SweepAccountResult ([decred/dcrd#1027](https://github.com/decred/dcrd/pull/1027))
+- rpcserver: add sweepaccount to the wallet list of commands ([decred/dcrd#1028](https://github.com/decred/dcrd/pull/1028))
+- rpcserver: add batched request support (json 2.0) ([decred/dcrd#841](https://github.com/decred/dcrd/pull/841))
+- dcrjson: include summary totals in GetBalanceResult ([decred/dcrd#1062](https://github.com/decred/dcrd/pull/1062))
+- multi: Implement getchaintips JSON-RPC ([decred/dcrd#1098](https://github.com/decred/dcrd/pull/1098))
+- rpcserver: Add dcrd version info to getversion RPC ([decred/dcrd#1097](https://github.com/decred/dcrd/pull/1097))
+- rpcserver: Correct getblockheader result text ([decred/dcrd#1104](https://github.com/decred/dcrd/pull/1104))
+- dcrjson: add StartAutoBuyerCmd & StopAutoBuyerCmd ([decred/dcrd#903](https://github.com/decred/dcrd/pull/903))
+- dcrjson: fix typo for StartAutoBuyerCmd ([decred/dcrd#1146](https://github.com/decred/dcrd/pull/1146))
+- dcrjson: require passphrase for StartAutoBuyerCmd ([decred/dcrd#1147](https://github.com/decred/dcrd/pull/1147))
+- dcrjson: fix StopAutoBuyerCmd registration bug ([decred/dcrd#1148](https://github.com/decred/dcrd/pull/1148))
+- blockchain: Support testnet stake diff estimation ([decred/dcrd#1115](https://github.com/decred/dcrd/pull/1115))
+- rpcserver: fix jsonRPCRead data race ([decred/dcrd#1157](https://github.com/decred/dcrd/pull/1157))
+- dcrjson: Add VerifySeedCmd ([decred/dcrd#1160](https://github.com/decred/dcrd/pull/1160))
+
+### dcrd command-line flags and configuration:
+
+- mempool: Rename RelayNonStd config option ([decred/dcrd#1024](https://github.com/decred/dcrd/pull/1024))
+- sampleconfig: Update min relay fee ([decred/dcrd#959](https://github.com/decred/dcrd/pull/959))
+- sampleconfig: Correct comment ([decred/dcrd#1063](https://github.com/decred/dcrd/pull/1063))
+- multi: Expand ~ to correct home directory on all OSes ([decred/dcrd#1041](https://github.com/decred/dcrd/pull/1041))
+
+### checkdevpremine utility changes:
+
+- checkdevpremine: Remove --skipverify option ([decred/dcrd#969](https://github.com/decred/dcrd/pull/969))
+- checkdevpremine: Implement --notls option ([decred/dcrd#969](https://github.com/decred/dcrd/pull/969))
+- checkdevpremine: Make file naming consistent ([decred/dcrd#969](https://github.com/decred/dcrd/pull/969))
+- checkdevpremine: Fix comment ([decred/dcrd#969](https://github.com/decred/dcrd/pull/969))
+- checkdevpremine: Remove utility ([decred/dcrd#1068](https://github.com/decred/dcrd/pull/1068))
+
+### Documentation:
+
+- fullblocktests: Add missing doc.go file ([decred/dcrd#956](https://github.com/decred/dcrd/pull/956))
+- docs: Add fullblocktests entry and make consistent ([decred/dcrd#956](https://github.com/decred/dcrd/pull/956))
+- docs: Add mempool entry to developer tools section ([decred/dcrd#1058](https://github.com/decred/dcrd/pull/1058))
+- mempool: Add docs.go and flesh out README.md ([decred/dcrd#1058](https://github.com/decred/dcrd/pull/1058))
+- docs: document packages and fix typo  ([decred/dcrd#965](https://github.com/decred/dcrd/pull/965))
+- docs: rpcclient is now part of the main dcrd repo ([decred/dcrd#970](https://github.com/decred/dcrd/pull/970))
+- dcrjson: Update README.md ([decred/dcrd#982](https://github.com/decred/dcrd/pull/982))
+- docs: Remove carriage return ([decred/dcrd#1106](https://github.com/decred/dcrd/pull/1106))
+- Adjust README.md for new Go version ([decred/dcrd#1105](https://github.com/decred/dcrd/pull/1105))
+- docs: document how to use go test -coverprofile ([decred/dcrd#1107](https://github.com/decred/dcrd/pull/1107))
+- addrmgr: Improve documentation ([decred/dcrd#1125](https://github.com/decred/dcrd/pull/1125))
+- docs: Fix links for internal packages ([decred/dcrd#1144](https://github.com/decred/dcrd/pull/1144))
+
+### Developer-related package changes:
+
+- chaingen: Add revocation generation infrastructure ([decred/dcrd#1120](https://github.com/decred/dcrd/pull/1120))
+- txscript: Add null data script creator ([decred/dcrd#943](https://github.com/decred/dcrd/pull/943))
+- txscript: Cleanup and improve NullDataScript tests ([decred/dcrd#943](https://github.com/decred/dcrd/pull/943))
+- txscript: Allow external signature hash calc ([decred/dcrd#951](https://github.com/decred/dcrd/pull/951))
+- secp256k1: update func signatures ([decred/dcrd#934](https://github.com/decred/dcrd/pull/934))
+- txscript: enforce MaxDataCarrierSize for GenerateProvablyPruneableOut ([decred/dcrd#953](https://github.com/decred/dcrd/pull/953))
+- txscript: Remove OP_SMALLDATA ([decred/dcrd#954](https://github.com/decred/dcrd/pull/954))
+- blockchain: Accept header in CheckProofOfWork ([decred/dcrd#977](https://github.com/decred/dcrd/pull/977))
+- blockchain: Make func definition style consistent ([decred/dcrd#983](https://github.com/decred/dcrd/pull/983))
+- blockchain: only fetch the parent block in BFFastAdd ([decred/dcrd#972](https://github.com/decred/dcrd/pull/972))
+- blockchain: Switch to FindSpentTicketsInBlock ([decred/dcrd#915](https://github.com/decred/dcrd/pull/915))
+- stake: Add Hash256PRNG init vector support ([decred/dcrd#986](https://github.com/decred/dcrd/pull/986))
+- blockchain/stake: Use Hash256PRNG init vector ([decred/dcrd#987](https://github.com/decred/dcrd/pull/987))
+- blockchain: Don't store full header in block node ([decred/dcrd#988](https://github.com/decred/dcrd/pull/988))
+- blockchain: Reconstruct headers from block nodes ([decred/dcrd#989](https://github.com/decred/dcrd/pull/989))
+- stake/multi: Don't return errors for IsX functions ([decred/dcrd#995](https://github.com/decred/dcrd/pull/995))
+- blockchain: Rename block index to main chain index ([decred/dcrd#996](https://github.com/decred/dcrd/pull/996))
+- blockchain: Refactor main block index logic ([decred/dcrd#990](https://github.com/decred/dcrd/pull/990))
+- blockchain: Use hash values in structs ([decred/dcrd#992](https://github.com/decred/dcrd/pull/992))
+- blockchain: Remove unused dump function ([decred/dcrd#1001](https://github.com/decred/dcrd/pull/1001))
+- blockchain: Generalize and optimize chain reorg ([decred/dcrd#997](https://github.com/decred/dcrd/pull/997))
+- blockchain: Pass parent block in connection code ([decred/dcrd#998](https://github.com/decred/dcrd/pull/998))
+- blockchain: Explicit block fetch semanticss ([decred/dcrd#999](https://github.com/decred/dcrd/pull/999))
+- blockchain: Use next detach block in reorg chain ([decred/dcrd#1002](https://github.com/decred/dcrd/pull/1002))
+- blockchain: Limit header sanity check to header ([decred/dcrd#1003](https://github.com/decred/dcrd/pull/1003))
+- blockchain: Validate num votes in header sanity ([decred/dcrd#1005](https://github.com/decred/dcrd/pull/1005))
+- blockchain: Validate max votes in header sanity ([decred/dcrd#1006](https://github.com/decred/dcrd/pull/1006))
+- blockchain: Validate stake diff in header context ([decred/dcrd#1004](https://github.com/decred/dcrd/pull/1004))
+- blockchain: No votes/revocations in header sanity ([decred/dcrd#1007](https://github.com/decred/dcrd/pull/1007))
+- blockchain: Validate max purchases in header sanity ([decred/dcrd#1008](https://github.com/decred/dcrd/pull/1008))
+- blockchain: Validate early votebits in header sanity ([decred/dcrd#1009](https://github.com/decred/dcrd/pull/1009))
+- blockchain: Validate block height in header context ([decred/dcrd#1010](https://github.com/decred/dcrd/pull/1010))
+- blockchain: Move check block context func ([decred/dcrd#1011](https://github.com/decred/dcrd/pull/1011))
+- blockchain: Block sanity cleanup and consistency ([decred/dcrd#1012](https://github.com/decred/dcrd/pull/1012))
+- blockchain: Remove dup ticket purchase value check ([decred/dcrd#1013](https://github.com/decred/dcrd/pull/1013))
+- blockchain: Only tickets before SVH in block sanity ([decred/dcrd#1014](https://github.com/decred/dcrd/pull/1014))
+- blockchain: Remove unused vote bits function ([decred/dcrd#1015](https://github.com/decred/dcrd/pull/1015))
+- blockchain: Move upgrade-only code to upgrade.go ([decred/dcrd#1016](https://github.com/decred/dcrd/pull/1016))
+- stake: Static assert of vote commitment ([decred/dcrd#1020](https://github.com/decred/dcrd/pull/1020))
+- blockchain: Remove unused error code ([decred/dcrd#1021](https://github.com/decred/dcrd/pull/1021))
+- blockchain: Improve readability of parent approval ([decred/dcrd#1022](https://github.com/decred/dcrd/pull/1022))
+- peer: rename mruinvmap, mrunoncemap to lruinvmap, lrunoncemap ([decred/dcrd#976](https://github.com/decred/dcrd/pull/976))
+- peer: rename noncemap to noncecache ([decred/dcrd#976](https://github.com/decred/dcrd/pull/976))
+- peer: rename inventorymap to inventorycache ([decred/dcrd#976](https://github.com/decred/dcrd/pull/976))
+- connmgr: convert state to atomic ([decred/dcrd#1025](https://github.com/decred/dcrd/pull/1025))
+- blockchain/mining: Full checks in CCB ([decred/dcrd#1017](https://github.com/decred/dcrd/pull/1017))
+- blockchain: Validate pool size in header context ([decred/dcrd#1018](https://github.com/decred/dcrd/pull/1018))
+- blockchain: Vote commitments in block sanity ([decred/dcrd#1023](https://github.com/decred/dcrd/pull/1023))
+- blockchain: Validate early final state is zero ([decred/dcrd#1031](https://github.com/decred/dcrd/pull/1031))
+- blockchain: Validate final state in header context ([decred/dcrd#1034](https://github.com/decred/dcrd/pull/1033))
+- blockchain: Max revocations in block sanity ([decred/dcrd#1034](https://github.com/decred/dcrd/pull/1034))
+- blockchain: Allowed stake txns in block sanity ([decred/dcrd#1035](https://github.com/decred/dcrd/pull/1035))
+- blockchain: Validate allowed votes in block context ([decred/dcrd#1036](https://github.com/decred/dcrd/pull/1036))
+- blockchain: Validate allowed revokes in blk contxt ([decred/dcrd#1037](https://github.com/decred/dcrd/pull/1037))
+- blockchain/stake: Rename tix spent to tix voted ([decred/dcrd#1038](https://github.com/decred/dcrd/pull/1038))
+- txscript: Require atomic swap contracts to specify the secret size ([decred/dcrd#1039](https://github.com/decred/dcrd/pull/1039))
+- blockchain: Remove unused struct ([decred/dcrd#1043](https://github.com/decred/dcrd/pull/1043))
+- blockchain: Store side chain blocks in database ([decred/dcrd#1000](https://github.com/decred/dcrd/pull/1000))
+- blockchain: Simplify initial chain state ([decred/dcrd#1045](https://github.com/decred/dcrd/pull/1045))
+- blockchain: Rework database versioning ([decred/dcrd#1047](https://github.com/decred/dcrd/pull/1047))
+- blockchain: Don't require chain for db upgrades ([decred/dcrd#1051](https://github.com/decred/dcrd/pull/1051))
+- blockchain/indexers: Allow interrupts ([decred/dcrd#1052](https://github.com/decred/dcrd/pull/1052))
+- blockchain: Remove old version information ([decred/dcrd#1055](https://github.com/decred/dcrd/pull/1055))
+- stake: optimize FindSpentTicketsInBlock slightly ([decred/dcrd#1049](https://github.com/decred/dcrd/pull/1049))
+- blockchain: Do not accept orphans/genesis block ([decred/dcrd#1057](https://github.com/decred/dcrd/pull/1057))
+- blockchain: Separate node ticket info population ([decred/dcrd#1056](https://github.com/decred/dcrd/pull/1056))
+- blockchain: Accept parent in blockNode constructor ([decred/dcrd#1056](https://github.com/decred/dcrd/pull/1056))
+- blockchain: Combine ErrDoubleSpend & ErrMissingTx ([decred/dcrd#1064](https://github.com/decred/dcrd/pull/1064))
+- blockchain: Calculate the lottery IV on demand ([decred/dcrd#1065](https://github.com/decred/dcrd/pull/1065))
+- blockchain: Simplify add/remove node logic ([decred/dcrd#1067](https://github.com/decred/dcrd/pull/1067))
+- blockchain: Infrastructure to manage block index ([decred/dcrd#1044](https://github.com/decred/dcrd/pull/1044))
+- blockchain: Add block validation status to index ([decred/dcrd#1044](https://github.com/decred/dcrd/pull/1044))
+- blockchain: Migrate to new block indexuse it ([decred/dcrd#1044](https://github.com/decred/dcrd/pull/1044))
+- blockchain: Lookup child in force head reorg ([decred/dcrd#1070](https://github.com/decred/dcrd/pull/1070))
+- blockchain: Refactor block idx entry serialization ([decred/dcrd#1069](https://github.com/decred/dcrd/pull/1069))
+- blockchain: Limit GetStakeVersions count ([decred/dcrd#1071](https://github.com/decred/dcrd/pull/1071))
+- blockchain: Remove dry run flag ([decred/dcrd#1073](https://github.com/decred/dcrd/pull/1073))
+- blockchain: Remove redundant stake ver calc func ([decred/dcrd#1087](https://github.com/decred/dcrd/pull/1087))
+- blockchain: Reduce GetGeneration to TipGeneration ([decred/dcrd#1083](https://github.com/decred/dcrd/pull/1083))
+- blockchain: Add chain tip tracking ([decred/dcrd#1084](https://github.com/decred/dcrd/pull/1084))
+- blockchain: Switch tip generation to chain tips ([decred/dcrd#1085](https://github.com/decred/dcrd/pull/1085))
+- blockchain: Simplify voter version calculation ([decred/dcrd#1088](https://github.com/decred/dcrd/pull/1088))
+- blockchain: Remove unused threshold serialization ([decred/dcrd#1092](https://github.com/decred/dcrd/pull/1092))
+- blockchain: Simplify chain tip tracking ([decred/dcrd#1092](https://github.com/decred/dcrd/pull/1092))
+- blockchain: Cache tip and parent at init ([decred/dcrd#1100](https://github.com/decred/dcrd/pull/1100))
+- mining: Obtain block by hash instead of top block ([decred/dcrd#1094](https://github.com/decred/dcrd/pull/1094))
+- blockchain: Remove unused GetTopBlock function ([decred/dcrd#1094](https://github.com/decred/dcrd/pull/1094))
+- multi: Rename BIP0111Version to NodeBloomVersion ([decred/dcrd#1112](https://github.com/decred/dcrd/pull/1112))
+- mining/mempool: Move priority code to mining pkg ([decred/dcrd#1110](https://github.com/decred/dcrd/pull/1110))
+- mining: Use single uint64 coinbase extra nonce ([decred/dcrd#1116](https://github.com/decred/dcrd/pull/1116))
+- mempool/mining: Clarify tree validity semantics ([decred/dcrd#1118](https://github.com/decred/dcrd/pull/1118))
+- mempool/mining: TxSource separation ([decred/dcrd#1119](https://github.com/decred/dcrd/pull/1119))
+- connmgr: Use same Dial func signature as net.Dial ([decred/dcrd#1113](https://github.com/decred/dcrd/pull/1113))
+- addrmgr: Declutter package API ([decred/dcrd#1124](https://github.com/decred/dcrd/pull/1124))
+- mining: Correct initial template generation ([decred/dcrd#1122](https://github.com/decred/dcrd/pull/1122))
+- cpuminer: Use header for extra nonce ([decred/dcrd#1123](https://github.com/decred/dcrd/pull/1123))
+- addrmgr: Make writing of peers file safer ([decred/dcrd#1126](https://github.com/decred/dcrd/pull/1126))
+- addrmgr: Save peers file only if necessary ([decred/dcrd#1127](https://github.com/decred/dcrd/pull/1127))
+- addrmgr: Factor out common code ([decred/dcrd#1138](https://github.com/decred/dcrd/pull/1138))
+- addrmgr: Improve isBad() performance ([decred/dcrd#1134](https://github.com/decred/dcrd/pull/1134))
+- dcrutil: Disallow creation of hybrid P2PK addrs ([decred/dcrd#1154](https://github.com/decred/dcrd/pull/1154))
+- chainec/dcrec: Remove hybrid pubkey support ([decred/dcrd#1155](https://github.com/decred/dcrd/pull/1155))
+- blockchain: Only fetch inputs once in connect txns ([decred/dcrd#1152](https://github.com/decred/dcrd/pull/1152))
+- indexers: Provide interface for index removal ([decred/dcrd#1158](https://github.com/decred/dcrd/pull/1158))
+
+### Testing and Quality Assurance:
+
+- travis: set GOVERSION environment properly ([decred/dcrd#958](https://github.com/decred/dcrd/pull/958))
+- stake: Override false positive vet error ([decred/dcrd#960](https://github.com/decred/dcrd/pull/960))
+- docs: make example code compile ([decred/dcrd#970](https://github.com/decred/dcrd/pull/970))
+- blockchain: Add median time tests ([decred/dcrd#991](https://github.com/decred/dcrd/pull/991))
+- chaingen: Update vote commitments on hdr updates ([decred/dcrd#1023](https://github.com/decred/dcrd/pull/1023))
+- fullblocktests: Add tests for early final state ([decred/dcrd#1031](https://github.com/decred/dcrd/pull/1031))
+- travis: test in docker container ([decred/dcrd#1053](https://github.com/decred/dcrd/pull/1053))
+- blockchain: Correct error stringer tests ([decred/dcrd#1066](https://github.com/decred/dcrd/pull/1066))
+- blockchain: Remove superfluous reorg tests ([decred/dcrd#1072](https://github.com/decred/dcrd/pull/1072))
+- blockchain: Use chaingen for forced reorg tests ([decred/dcrd#1074](https://github.com/decred/dcrd/pull/1074))
+- blockchain: Remove superfluous test checks ([decred/dcrd#1075](https://github.com/decred/dcrd/pull/1075))
+- blockchain: move block validation rule tests into fullblocktests ([decred/dcrd#1060](https://github.com/decred/dcrd/pull/1060))
+- fullblocktests: Cleanup after refactor ([decred/dcrd#1080](https://github.com/decred/dcrd/pull/1080))
+- chaingen: Prevent dup block names in NextBlock ([decred/dcrd#1079](https://github.com/decred/dcrd/pull/1079))
+- blockchain: Remove duplicate val tests ([decred/dcrd#1082](https://github.com/decred/dcrd/pull/1082))
+- chaingen: Break dependency on blockchain ([decred/dcrd#1076](https://github.com/decred/dcrd/pull/1076))
+- blockchain: Consolidate tests into the main package ([decred/dcrd#1077](https://github.com/decred/dcrd/pull/1077))
+- chaingen: Export vote commitment script function ([decred/dcrd#1081](https://github.com/decred/dcrd/pull/1081))
+- fullblocktests: Improve vote on wrong block tests ([decred/dcrd#1081](https://github.com/decred/dcrd/pull/1081))
+- chaingen: Export func to check if block is solved ([decred/dcrd#1089](https://github.com/decred/dcrd/pull/1089))
+- fullblocktests: Use new exported IsSolved func ([decred/dcrd#1089](https://github.com/decred/dcrd/pull/1089))
+- chaingen: Accept mungers for create premine block ([decred/dcrd#1090](https://github.com/decred/dcrd/pull/1090))
+- blockchain: Add tests for chain tip tracking ([decred/dcrd#1096](https://github.com/decred/dcrd/pull/1096))
+- blockchain: move block validation rule tests into fullblocktests (2/x) ([decred/dcrd#1095](https://github.com/decred/dcrd/pull/1095))
+- addrmgr: Remove obsolete coverage script ([decred/dcrd#1103](https://github.com/decred/dcrd/pull/1103))
+- chaingen: Track expected blk heights separately ([decred/dcrd#1101](https://github.com/decred/dcrd/pull/1101))
+- addrmgr: Improve test coverage ([decred/dcrd#1111](https://github.com/decred/dcrd/pull/1111))
+- chaingen: Add revocation generation infrastructure ([decred/dcrd#1120](https://github.com/decred/dcrd/pull/1120))
+- fullblocktests: Add some basic revocation tests ([decred/dcrd#1121](https://github.com/decred/dcrd/pull/1121))
+- addrmgr: Test removal of corrupt peers file ([decred/dcrd#1129](https://github.com/decred/dcrd/pull/1129))
+
+### Misc:
+
+- release: Bump for v1.2.0 ([decred/dcrd#1140](https://github.com/decred/dcrd/pull/1140))
+- goimports -w . ([decred/dcrd#968](https://github.com/decred/dcrd/pull/968))
+- dep: sync ([decred/dcrd#980](https://github.com/decred/dcrd/pull/980))
+- multi: Simplify code per gosimple linter ([decred/dcrd#993](https://github.com/decred/dcrd/pull/993))
+- multi: various cleanups ([decred/dcrd#1019](https://github.com/decred/dcrd/pull/1019))
+- multi: release the mutex earlier ([decred/dcrd#1026](https://github.com/decred/dcrd/pull/1026))
+- multi: fix some maligned linter warnings ([decred/dcrd#1025](https://github.com/decred/dcrd/pull/1025))
+- blockchain: Correct a few log statements ([decred/dcrd#1042](https://github.com/decred/dcrd/pull/1042))
+- mempool: cleaner ([decred/dcrd#1050](https://github.com/decred/dcrd/pull/1050))
+- multi: fix misspell linter warnings ([decred/dcrd#1054](https://github.com/decred/dcrd/pull/1054))
+- dep: sync ([decred/dcrd#1091](https://github.com/decred/dcrd/pull/1091))
+- multi: Properly capitalize Decred ([decred/dcrd#1102](https://github.com/decred/dcrd/pull/1102))
+- build: Correct semver build handling ([decred/dcrd#1097](https://github.com/decred/dcrd/pull/1097))
+- main: Make func definition style consistent ([decred/dcrd#1114](https://github.com/decred/dcrd/pull/1114))
+- main: Allow semver prerel via linker flags ([decred/dcrd#1128](https://github.com/decred/dcrd/pull/1128))
+
+### Code Contributors (alphabetical order):
+
+- Andrew Chiw
+- Daniel Krawsiz
+- Dave Collins
+- David Hill
+- Donald Adu-Poku
+- Javed Khan
+- Jolan Luff
+- Jon Gillham
+- Josh Rickmar
+- Markus Richter
+- Matheus Degiovani
+- Ryan Vacek
diff --git a/docs/release-notes/release-notes-1.3.0.md b/docs/release-notes/release-notes-1.3.0.md
new file mode 100644
index 00000000..c8d0041e
--- /dev/null
+++ b/docs/release-notes/release-notes-1.3.0.md
@@ -0,0 +1,333 @@
+# dcrd v1.3.0
+
+This release of dcrd contains significant performance enhancements for startup
+speed, validation, and network operations that directly benefit lightweight
+clients, such as SPV (Simplified Payment Verification) wallets, a policy change
+to reduce the default minimum transaction fee rate, a new public test network
+version, removal of bloom filter support, infrastructure improvements, and other
+quality assurance changes.
+
+**It is highly recommended that everyone upgrade to this latest release as it
+contains many important scalability improvements and is required to be able to
+use the new public test network.**
+
+## Downgrade Warning
+
+The database format in v1.3.0 is not compatible with previous versions of the
+software.  This only affects downgrades as users upgrading from previous
+versions will see a one time database migration.
+
+Once this migration has been completed, it will no longer be possible to
+downgrade to a previous version of the software without having to delete the
+database and redownload the chain.
+
+## Notable Changes
+
+### Reduction of Default Minimum Transaction Fee Rate Policy
+
+The default setting for the policy which specifies the minimum transaction fee
+rate that will be accepted and relayed to the rest of the network has been
+reduced to 0.0001 DCR/kB (10,000 atoms/kB) from the previous value of 0.001
+DCR/kB (100,000 atoms/kB).
+
+Transactions should not attempt to use the reduced fee rate until the majority
+of the network has upgraded to this release as otherwise the transactions will
+likely have issues relaying through the network since old nodes that have not
+updated their policy will reject them due to not paying a high enough fee.
+
+### Several Speed Optimizations
+
+This release contains several enhancements to improve speed for startup,
+the initial sync process, validation, and network operations.
+
+In order to achieve these speedups, there is a one time database migration, as
+previously mentioned, that typically only takes a few seconds to complete on
+most hardware.
+
+#### Further Improved Startup Speed
+
+The startup time has been improved by roughly 2x on both slower hard disk drives
+(HDDs) and solid state drives (SSDs) as compared to v1.2.0.
+
+#### Significantly Faster Network Operations
+
+The ability to serve information to other peers on the network has received
+several optimizations which, in addition to generally improving the overall
+scalability and throughput of the network, also directly benefits SPV
+(Simplified Payment Verification) clients by delivering the block headers they
+require roughly 3x to 4x faster.
+
+#### Signature Hash Calculation Optimization
+
+Part of validating that transactions are only spending coins that the owner has
+authorized involves ensuring the validity of cryptographic signatures.  This
+release provides a speedup of about 75% to a key portion of that validation
+which results in a roughly 20% faster initial sync process.
+
+### Bloom Filters Removal
+
+Bloom filters were deprecated as of the last release in favor of the more recent
+privacy-preserving GCS committed filters.  Consequently, this release removes
+support for bloom filters completely.  There are no known clients which use
+bloom filters, however, if there are any unknown clients which use them, those
+clients will need to be updated to use the GCS committed filters accordingly.
+
+### Public Test Network Version 3
+
+The public test network has been reset and bumped to version 3.  All of the new
+consensus rules voted in by version 2 of the public test network have been
+retained and are therefore active on the new version 3 test network without
+having to vote them in again.
+
+## Changelog
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/release-v1.2.0...release-v1.3.0).
+
+### Protocol and network:
+
+- chaincfg: Add checkpoints for 1.3.0 release ([decred/dcrd#1385](https://github.com/decred/dcrd/pull/1385))
+- multi: Remove everything to do about bloom filters ([decred/dcrd#1162](https://github.com/decred/dcrd/pull/1162))
+- wire: Remove TxSerializeWitnessSigning ([decred/dcrd#1180](https://github.com/decred/dcrd/pull/1180))
+- addrmgr: Skip low quality addresses for getaddr ([decred/dcrd#1135](https://github.com/decred/dcrd/pull/1135))
+- addrmgr: Fix race in save peers ([decred/dcrd#1259](https://github.com/decred/dcrd/pull/1259))
+- server: Only respond to getaddr once per conn ([decred/dcrd#1257](https://github.com/decred/dcrd/pull/1257))
+- peer: Rework version negotiation ([decred/dcrd#1250](https://github.com/decred/dcrd/pull/1250))
+- peer: Allow OnVersion callback to reject peer ([decred/dcrd#1251](https://github.com/decred/dcrd/pull/1251))
+- server: Reject outbound conns to non-full nodes ([decred/dcrd#1252](https://github.com/decred/dcrd/pull/1252))
+- peer: Improve net address service adverts ([decred/dcrd#1253](https://github.com/decred/dcrd/pull/1253))
+- addrmgr: Expose method to update services ([decred/dcrd#1254](https://github.com/decred/dcrd/pull/1254))
+- server: Update addrmgr services on outbound conns ([decred/dcrd#1254](https://github.com/decred/dcrd/pull/1254))
+- server: Use local inbound var in version handler ([decred/dcrd#1255](https://github.com/decred/dcrd/pull/1255))
+- server: Only advertise local addr when current ([decred/dcrd#1256](https://github.com/decred/dcrd/pull/1256))
+- server: Use local addr var in version handler ([decred/dcrd#1258](https://github.com/decred/dcrd/pull/1258))
+- chaincfg: split params into per-network files ([decred/dcrd#1265](https://github.com/decred/dcrd/pull/1265))
+- server: Always reply to getheaders with headers ([decred/dcrd#1295](https://github.com/decred/dcrd/pull/1295))
+- addrmgr: skip never-successful addresses ([decred/dcrd#1313](https://github.com/decred/dcrd/pull/1313))
+- multi: Introduce default coin type for SLIP0044 ([decred/dcrd#1293](https://github.com/decred/dcrd/pull/1293))
+- blockchain: Modify diff redux logic for testnet ([decred/dcrd#1387](https://github.com/decred/dcrd/pull/1387))
+- multi: Reset testnet and bump to version 3 ([decred/dcrd#1387](https://github.com/decred/dcrd/pull/1387))
+- multi: Remove testnet version 2 defs and refs ([decred/dcrd#1387](https://github.com/decred/dcrd/pull/1387))
+
+### Transaction relay (memory pool):
+
+- policy: Lower default relay fee to 0.0001/kB ([decred/dcrd#1202](https://github.com/decred/dcrd/pull/1202))
+- mempool: Use blockchain for tx expiry check ([decred/dcrd#1199](https://github.com/decred/dcrd/pull/1199))
+- mempool: use secp256k1 functions directly ([decred/dcrd#1213](https://github.com/decred/dcrd/pull/1213))
+- mempool: Make expiry pruning self contained ([decred/dcrd#1378](https://github.com/decred/dcrd/pull/1378))
+- mempool: Stricter orphan evaluation and eviction ([decred/dcrd#1207](https://github.com/decred/dcrd/pull/1207))
+- mempool: use secp256k1 functions directly ([decred/dcrd#1213](https://github.com/decred/dcrd/pull/1213))
+- multi: add specialized rebroadcast handling for stake txs ([decred/dcrd#979](https://github.com/decred/dcrd/pull/979))
+- mempool: Make expiry pruning self contained ([decred/dcrd#1378](https://github.com/decred/dcrd/pull/1378))
+
+### RPC:
+
+- rpcserver: Improve JSON-RPC compatibility ([decred/dcrd#1150](https://github.com/decred/dcrd/pull/1150))
+- rpcserver: Correct rebroadcastwinners handler ([decred/dcrd#1234](https://github.com/decred/dcrd/pull/1234))
+- dcrjson: Add Expiry field to CreateRawTransactionCmd ([decred/dcrd#1149](https://github.com/decred/dcrd/pull/1149))
+- dcrjson: add estimatesmartfee ([decred/dcrd#1201](https://github.com/decred/dcrd/pull/1201))
+- rpc: Use upstream gorilla/websocket ([decred/dcrd#1218](https://github.com/decred/dcrd/pull/1218))
+- dcrjson: add createvotingaccount and dropvotingaccount rpc methods ([decred/dcrd#1217](https://github.com/decred/dcrd/pull/1217))
+- multi: Change NoSplitTransaction param to SplitTx ([decred/dcrd#1231](https://github.com/decred/dcrd/pull/1231))
+- rpcclient: pass default value for NewPurchaseTicketCmd's comment param ([decred/dcrd#1232](https://github.com/decred/dcrd/pull/1232))
+- multi: No winning ticket ntfns for big reorg depth ([decred/dcrd#1235](https://github.com/decred/dcrd/pull/1235))
+- multi: modify PurchaseTicketCmd ([decred/dcrd#1241](https://github.com/decred/dcrd/pull/1241))
+- multi: move extension commands into associated normal command files ([decred/dcrd#1238](https://github.com/decred/dcrd/pull/1238))
+- dcrjson: Fix NewCreateRawTransactionCmd comment ([decred/dcrd#1262](https://github.com/decred/dcrd/pull/1262))
+- multi: revert TicketChange addition to PurchaseTicketCmd ([decred/dcrd#1278](https://github.com/decred/dcrd/pull/1278))
+- rpcclient: Implement fmt.Stringer for Client ([decred/dcrd#1298](https://github.com/decred/dcrd/pull/1298))
+- multi: add amount field to TransactionInput ([decred/dcrd#1297](https://github.com/decred/dcrd/pull/1297))
+- dcrjson: Ready GetStakeInfoResult for SPV wallets ([decred/dcrd#1333](https://github.com/decred/dcrd/pull/1333))
+- dcrjson: add fundrawtransaction command ([decred/dcrd#1316](https://github.com/decred/dcrd/pull/1316))
+- dcrjson: Make linter happy by renaming Id to ID ([decred/dcrd#1374](https://github.com/decred/dcrd/pull/1374))
+- dcrjson: Remove unused vote bit concat codec funcs ([decred/dcrd#1384](https://github.com/decred/dcrd/pull/1384))
+- rpcserver: Cleanup cfilter handling ([decred/dcrd#1398](https://github.com/decred/dcrd/pull/1398))
+
+### dcrd command-line flags and configuration:
+
+- multi: Correct clean and expand path handling ([decred/dcrd#1186](https://github.com/decred/dcrd/pull/1186))
+
+### dcrctl utility changes:
+
+- dcrctl: Fix --skipverify failing if rpc.cert not found ([decred/dcrd#1163](https://github.com/decred/dcrd/pull/1163))
+
+### Documentation:
+
+- hdkeychain: Correct hash algorithm in comment ([decred/dcrd#1171](https://github.com/decred/dcrd/pull/1171))
+- Fix typo in blockchain ([decred/dcrd#1185](https://github.com/decred/dcrd/pull/1185))
+- docs: Update node.js example for v8.11.1 LTS ([decred/dcrd#1209](https://github.com/decred/dcrd/pull/1209))
+- docs: Update txaccepted method in json_rpc_api.md ([decred/dcrd#1242](https://github.com/decred/dcrd/pull/1242))
+- docs: Correct blockmaxsize and blockprioritysize ([decred/dcrd#1339](https://github.com/decred/dcrd/pull/1339))
+- server: Correct comment in getblocks handler ([decred/dcrd#1269](https://github.com/decred/dcrd/pull/1269))
+- config: Fix typo ([decred/dcrd#1274](https://github.com/decred/dcrd/pull/1274))
+- multi: Fix badges in README ([decred/dcrd#1277](https://github.com/decred/dcrd/pull/1277))
+- stake: Correct comment in connectNode ([decred/dcrd#1325](https://github.com/decred/dcrd/pull/1325))
+- txscript: Update comments for removal of flags ([decred/dcrd#1336](https://github.com/decred/dcrd/pull/1336))
+- docs: Update docs for versioned modules ([decred/dcrd#1391](https://github.com/decred/dcrd/pull/1391))
+- mempool: Correct min relay tx fee comment to DCR ([decred/dcrd#1396](https://github.com/decred/dcrd/pull/1396))
+
+### Developer-related package and module changes:
+
+- blockchain: CheckConnectBlockTemplate with tests ([decred/dcrd#1086](https://github.com/decred/dcrd/pull/1086))
+- addrmgr: Simplify package API ([decred/dcrd#1136](https://github.com/decred/dcrd/pull/1136))
+- txscript: Remove unused strict multisig flag ([decred/dcrd#1203](https://github.com/decred/dcrd/pull/1203))
+- txscript: Move sig hash logic to separate file ([decred/dcrd#1174](https://github.com/decred/dcrd/pull/1174))
+- txscript: Remove SigHashAllValue ([decred/dcrd#1175](https://github.com/decred/dcrd/pull/1175))
+- txscript: Decouple and optimize sighash calc ([decred/dcrd#1179](https://github.com/decred/dcrd/pull/1179))
+- wire: Remove TxSerializeWitnessValueSigning ([decred/dcrd#1176](https://github.com/decred/dcrd/pull/1176))
+- hdkeychain: Satisfy fmt.Stringer interface ([decred/dcrd#1168](https://github.com/decred/dcrd/pull/1168))
+- blockchain: Validate tx expiry in block context ([decred/dcrd#1187](https://github.com/decred/dcrd/pull/1187))
+- blockchain: rename ErrRegTxSpendStakeOut to ErrRegTxCreateStakeOut ([decred/dcrd#1195](https://github.com/decred/dcrd/pull/1195))
+- multi: Break coinbase dep on standardness rules ([decred/dcrd#1196](https://github.com/decred/dcrd/pull/1196))
+- txscript: Cleanup code for the substr opcode ([decred/dcrd#1206](https://github.com/decred/dcrd/pull/1206))
+- multi: use secp256k1 types and fields directly ([decred/dcrd#1211](https://github.com/decred/dcrd/pull/1211))
+- dcrec: add Pubkey func to secp256k1 and edwards elliptic curves ([decred/dcrd#1214](https://github.com/decred/dcrd/pull/1214))
+- blockchain: use secp256k1 functions directly ([decred/dcrd#1212](https://github.com/decred/dcrd/pull/1212))
+- multi: Replace btclog with slog ([decred/dcrd#1216](https://github.com/decred/dcrd/pull/1216))
+- multi: Define vgo modules ([decred/dcrd#1223](https://github.com/decred/dcrd/pull/1223))
+- chainhash: Define vgo module ([decred/dcrd#1224](https://github.com/decred/dcrd/pull/1224))
+- wire: Refine vgo deps ([decred/dcrd#1225](https://github.com/decred/dcrd/pull/1225))
+- addrmrg: Refine vgo deps ([decred/dcrd#1226](https://github.com/decred/dcrd/pull/1226))
+- chaincfg: Refine vgo deps ([decred/dcrd#1227](https://github.com/decred/dcrd/pull/1227))
+- multi: Return fork len from ProcessBlock ([decred/dcrd#1233](https://github.com/decred/dcrd/pull/1233))
+- blockchain: Panic on fatal assertions ([decred/dcrd#1243](https://github.com/decred/dcrd/pull/1243))
+- blockchain: Convert to full block index in mem ([decred/dcrd#1229](https://github.com/decred/dcrd/pull/1229))
+- blockchain: Optimize checkpoint handling ([decred/dcrd#1230](https://github.com/decred/dcrd/pull/1230))
+- blockchain: Optimize block locator generation ([decred/dcrd#1237](https://github.com/decred/dcrd/pull/1237))
+- multi: Refactor and optimize inv discovery ([decred/dcrd#1239](https://github.com/decred/dcrd/pull/1239))
+- peer: Minor function definition order cleanup ([decred/dcrd#1247](https://github.com/decred/dcrd/pull/1247))
+- peer: Remove superfluous dup version check ([decred/dcrd#1248](https://github.com/decred/dcrd/pull/1248))
+- txscript: export canonicalDataSize ([decred/dcrd#1266](https://github.com/decred/dcrd/pull/1266))
+- blockchain: Add BuildMerkleTreeStore alternative for MsgTx ([decred/dcrd#1268](https://github.com/decred/dcrd/pull/1268))
+- blockchain: Optimize exported header access ([decred/dcrd#1273](https://github.com/decred/dcrd/pull/1273))
+- txscript: Cleanup P2SH and stake opcode handling ([decred/dcrd#1318](https://github.com/decred/dcrd/pull/1318))
+- txscript: Significantly improve errors ([decred/dcrd#1319](https://github.com/decred/dcrd/pull/1319))
+- txscript: Remove pay-to-script-hash flag ([decred/dcrd#1321](https://github.com/decred/dcrd/pull/1321))
+- txscript: Remove DER signature verification flag ([decred/dcrd#1323](https://github.com/decred/dcrd/pull/1323))
+- txscript: Remove verify minimal data flag ([decred/dcrd#1326](https://github.com/decred/dcrd/pull/1326))
+- txscript: Remove script num require minimal flag ([decred/dcrd#1328](https://github.com/decred/dcrd/pull/1328))
+- txscript: Make PeekInt consistent with PopInt ([decred/dcrd#1329](https://github.com/decred/dcrd/pull/1329))
+- build: Add experimental support for vgo ([decred/dcrd#1215](https://github.com/decred/dcrd/pull/1215))
+- build: Update some vgo dependencies to use tags ([decred/dcrd#1219](https://github.com/decred/dcrd/pull/1219))
+- stake: add ExpiredByBlock to stake.Node ([decred/dcrd#1221](https://github.com/decred/dcrd/pull/1221))
+- server: Minor function definition order cleanup ([decred/dcrd#1271](https://github.com/decred/dcrd/pull/1271))
+- server: Convert CF code to use new inv discovery ([decred/dcrd#1272](https://github.com/decred/dcrd/pull/1272))
+- multi: add valueIn parameter to wire.NewTxIn ([decred/dcrd#1287](https://github.com/decred/dcrd/pull/1287))
+- txscript: Remove low S verification flag ([decred/dcrd#1308](https://github.com/decred/dcrd/pull/1308))
+- txscript: Remove unused old sig hash type ([decred/dcrd#1309](https://github.com/decred/dcrd/pull/1309))
+- txscript: Remove strict encoding verification flag ([decred/dcrd#1310](https://github.com/decred/dcrd/pull/1310))
+- blockchain: Combine block by hash functions ([decred/dcrd#1330](https://github.com/decred/dcrd/pull/1330))
+- multi: Continue conversion from chainec to dcrec ([decred/dcrd#1304](https://github.com/decred/dcrd/pull/1304))
+- multi: Remove unused secp256k1 sig parse parameter ([decred/dcrd#1335](https://github.com/decred/dcrd/pull/1335))
+- blockchain: Refactor db main chain idx to blk idx ([decred/dcrd#1332](https://github.com/decred/dcrd/pull/1332))
+- blockchain: Remove main chain index from db ([decred/dcrd#1334](https://github.com/decred/dcrd/pull/1334))
+- blockchain: Implement new chain view ([decred/dcrd#1337](https://github.com/decred/dcrd/pull/1337))
+- blockmanager: remove unused Pause() API ([decred/dcrd#1340](https://github.com/decred/dcrd/pull/1340))
+- chainhash: Remove dup code from hash funcs ([decred/dcrd#1342](https://github.com/decred/dcrd/pull/1342))
+- connmgr: Fix the ConnReq print out causing panic ([decred/dcrd#1345](https://github.com/decred/dcrd/pull/1345))
+- gcs: Pool MatchAny data allocations ([decred/dcrd#1348](https://github.com/decred/dcrd/pull/1348))
+- blockchain: Faster chain view block locator ([decred/dcrd#1338](https://github.com/decred/dcrd/pull/1338))
+- blockchain: Refactor to use new chain view ([decred/dcrd#1344](https://github.com/decred/dcrd/pull/1344))
+- blockchain: Remove unnecessary genesis block check ([decred/dcrd#1368](https://github.com/decred/dcrd/pull/1368))
+- chainhash: Update go build module support ([decred/dcrd#1358](https://github.com/decred/dcrd/pull/1358))
+- wire: Update go build module support ([decred/dcrd#1359](https://github.com/decred/dcrd/pull/1359))
+- addrmgr: Update go build module support ([decred/dcrd#1360](https://github.com/decred/dcrd/pull/1360))
+- chaincfg: Update go build module support ([decred/dcrd#1361](https://github.com/decred/dcrd/pull/1361))
+- connmgr: Refine go build module support ([decred/dcrd#1363](https://github.com/decred/dcrd/pull/1363))
+- secp256k1: Refine go build module support ([decred/dcrd#1362](https://github.com/decred/dcrd/pull/1362))
+- dcrec: Refine go build module support ([decred/dcrd#1364](https://github.com/decred/dcrd/pull/1364))
+- certgen: Update go build module support ([decred/dcrd#1365](https://github.com/decred/dcrd/pull/1365))
+- dcrutil: Refine go build module support ([decred/dcrd#1366](https://github.com/decred/dcrd/pull/1366))
+- hdkeychain: Refine go build module support ([decred/dcrd#1369](https://github.com/decred/dcrd/pull/1369))
+- txscript: Refine go build module support ([decred/dcrd#1370](https://github.com/decred/dcrd/pull/1370))
+- multi: Remove go modules that do not build ([decred/dcrd#1371](https://github.com/decred/dcrd/pull/1371))
+- database: Refine go build module support ([decred/dcrd#1372](https://github.com/decred/dcrd/pull/1372))
+- build: Refine build module support ([decred/dcrd#1384](https://github.com/decred/dcrd/pull/1384))
+- blockmanager: make pruning transactions consistent ([decred/dcrd#1376](https://github.com/decred/dcrd/pull/1376))
+- blockchain: Optimize reorg to use known status ([decred/dcrd#1367](https://github.com/decred/dcrd/pull/1367))
+- blockchain: Make block index flushable ([decred/dcrd#1375](https://github.com/decred/dcrd/pull/1375))
+- blockchain: Mark fastadd block valid ([decred/dcrd#1392](https://github.com/decred/dcrd/pull/1392))
+- release: Bump module versions and deps ([decred/dcrd#1390](https://github.com/decred/dcrd/pull/1390))
+- blockchain: Mark fastadd block valid ([decred/dcrd#1392](https://github.com/decred/dcrd/pull/1392))
+- gcs: use dchest/siphash ([decred/dcrd#1395](https://github.com/decred/dcrd/pull/1395))
+- dcrec: Make function defs more consistent ([decred/dcrd#1432](https://github.com/decred/dcrd/pull/1432))
+
+### Testing and Quality Assurance:
+
+- addrmgr: Simplify tests for KnownAddress ([decred/dcrd#1133](https://github.com/decred/dcrd/pull/1133))
+- blockchain: move block validation rule tests into fullblocktests ([decred/dcrd#1141](https://github.com/decred/dcrd/pull/1141))
+- addrmgr: Test timestamp update during AddAddress ([decred/dcrd#1137](https://github.com/decred/dcrd/pull/1137))
+- txscript: Consolidate tests into txscript package ([decred/dcrd#1177](https://github.com/decred/dcrd/pull/1177))
+- txscript: Add JSON-based signature hash tests ([decred/dcrd#1178](https://github.com/decred/dcrd/pull/1178))
+- txscript: Correct JSON-based signature hash tests ([decred/dcrd#1181](https://github.com/decred/dcrd/pull/1181))
+- txscript: Add benchmark for sighash calculation ([decred/dcrd#1179](https://github.com/decred/dcrd/pull/1179))
+- mempool: Refactor pool membership test logic ([decred/dcrd#1188](https://github.com/decred/dcrd/pull/1188))
+- blockchain: utilize CalcNextReqStakeDifficulty in fullblocktests ([decred/dcrd#1189](https://github.com/decred/dcrd/pull/1189))
+- fullblocktests: add additional premine and malformed tests ([decred/dcrd#1190](https://github.com/decred/dcrd/pull/1190))
+- txscript: Improve substr opcode test coverage ([decred/dcrd#1205](https://github.com/decred/dcrd/pull/1205))
+- txscript: Convert reference tests to new format ([decred/dcrd#1320](https://github.com/decred/dcrd/pull/1320))
+- txscript: Remove P2SH flag from test data ([decred/dcrd#1322](https://github.com/decred/dcrd/pull/1322))
+- txscript: Remove DERSIG flag from test data ([decred/dcrd#1324](https://github.com/decred/dcrd/pull/1324))
+- txscript: Remove MINIMALDATA flag from test data ([decred/dcrd#1327](https://github.com/decred/dcrd/pull/1327))
+- fullblocktests: Add expired stake tx test ([decred/dcrd#1184](https://github.com/decred/dcrd/pull/1184))
+- travis: simplify Docker files ([decred/dcrd#1275](https://github.com/decred/dcrd/pull/1275))
+- docker: Add dockerfiles for running dcrd nodes ([decred/dcrd#1317](https://github.com/decred/dcrd/pull/1317))
+- blockchain: Improve spend journal tests ([decred/dcrd#1246](https://github.com/decred/dcrd/pull/1246))
+- txscript: Cleanup and add tests for left opcode ([decred/dcrd#1281](https://github.com/decred/dcrd/pull/1281))
+- txscript: Cleanup and add tests for right opcode ([decred/dcrd#1282](https://github.com/decred/dcrd/pull/1282))
+- txscript: Cleanup and add tests for the cat opcode ([decred/dcrd#1283](https://github.com/decred/dcrd/pull/1283))
+- txscript: Cleanup and add tests for rotr opcode ([decred/dcrd#1285](https://github.com/decred/dcrd/pull/1285))
+- txscript: Cleanup and add tests for rotl opcode ([decred/dcrd#1286](https://github.com/decred/dcrd/pull/1286))
+- txscript: Cleanup and add tests for lshift opcode ([decred/dcrd#1288](https://github.com/decred/dcrd/pull/1288))
+- txscript: Cleanup and add tests for rshift opcode ([decred/dcrd#1289](https://github.com/decred/dcrd/pull/1289))
+- txscript: Cleanup and add tests for div opcode ([decred/dcrd#1290](https://github.com/decred/dcrd/pull/1290))
+- txscript: Cleanup and add tests for mod opcode ([decred/dcrd#1291](https://github.com/decred/dcrd/pull/1291))
+- txscript: Update CSV to match tests in DCP0003 ([decred/dcrd#1292](https://github.com/decred/dcrd/pull/1292))
+- txscript: Introduce repeated syntax to test data ([decred/dcrd#1299](https://github.com/decred/dcrd/pull/1299))
+- txscript: Allow multi opcode test data repeat ([decred/dcrd#1300](https://github.com/decred/dcrd/pull/1300))
+- txscript: Improve and correct some script tests ([decred/dcrd#1303](https://github.com/decred/dcrd/pull/1303))
+- main: verify network pow limits ([decred/dcrd#1302](https://github.com/decred/dcrd/pull/1302))
+- txscript: Remove STRICTENC flag from test data ([decred/dcrd#1311](https://github.com/decred/dcrd/pull/1311))
+- txscript: Cleanup plus tests for checksig opcodes ([decred/dcrd#1315](https://github.com/decred/dcrd/pull/1315))
+- blockchain: Add negative tests for forced reorg ([decred/dcrd#1341](https://github.com/decred/dcrd/pull/1341))
+- dcrjson: Consolidate tests into dcrjson package ([decred/dcrd#1373](https://github.com/decred/dcrd/pull/1373))
+- txscript: add additional data push op code tests ([decred/dcrd#1346](https://github.com/decred/dcrd/pull/1346))
+- txscript: add/group control op code tests ([decred/dcrd#1349](https://github.com/decred/dcrd/pull/1349))
+- txscript: add/group stack op code tests ([decred/dcrd#1350](https://github.com/decred/dcrd/pull/1350))
+- txscript: group splice opcode tests ([decred/dcrd#1351](https://github.com/decred/dcrd/pull/1351))
+- txscript: add/group bitwise logic, comparison & rotation op code tests ([decred/dcrd#1352](https://github.com/decred/dcrd/pull/1352))
+- txscript: add/group numeric related opcode tests ([decred/dcrd#1353](https://github.com/decred/dcrd/pull/1353))
+- txscript: group reserved op code tests ([decred/dcrd#1355](https://github.com/decred/dcrd/pull/1355))
+- txscript: add/group crypto related op code tests ([decred/dcrd#1354](https://github.com/decred/dcrd/pull/1354))
+- multi: Reduce testnet2 refs in unit tests ([decred/dcrd#1387](https://github.com/decred/dcrd/pull/1387))
+- blockchain: Avoid deployment expiration in tests ([decred/dcrd#1450](https://github.com/decred/dcrd/pull/1450))
+
+### Misc:
+
+- release: Bump for v1.3.0 ([decred/dcrd#1388](https://github.com/decred/dcrd/pull/1388))
+- multi: Correct typos found by misspell ([decred/dcrd#1197](https://github.com/decred/dcrd/pull/1197))
+- main: Correct mem profile error message ([decred/dcrd#1183](https://github.com/decred/dcrd/pull/1183))
+- multi: Use saner permissions saving certs ([decred/dcrd#1263](https://github.com/decred/dcrd/pull/1263))
+- server: only call time.Now() once ([decred/dcrd#1313](https://github.com/decred/dcrd/pull/1313))
+- multi: linter cleanup ([decred/dcrd#1305](https://github.com/decred/dcrd/pull/1305))
+- multi: Remove unnecessary network name funcs ([decred/dcrd#1387](https://github.com/decred/dcrd/pull/1387))
+- config: Warn if testnet2 database exists ([decred/dcrd#1389](https://github.com/decred/dcrd/pull/1389))
+
+### Code Contributors (alphabetical order):
+
+- Dave Collins
+- David Hill
+- Dmitry Fedorov
+- Donald Adu-Poku
+- harzo
+- hypernoob
+- J Fixby
+- Jonathan Chappelow
+- Josh Rickmar
+- Markus Richter
+- matadormel
+- Matheus Degiovani
+- Michael Eze
+- Orthomind
+- Shuai Qi
+- Tibor Bősze
+- Victor Oliveira
diff --git a/docs/release-notes/release-notes-1.4.0.md b/docs/release-notes/release-notes-1.4.0.md
new file mode 100644
index 00000000..018aeb73
--- /dev/null
+++ b/docs/release-notes/release-notes-1.4.0.md
@@ -0,0 +1,284 @@
+# dcrd v1.4.0
+
+This release of dcrd introduces a new consensus vote agenda which allows the
+stakeholders to decide whether or not to activate changes needed to modify the
+sequence lock handling which is required for providing full support for the
+Lightning Network.  For those unfamiliar with the voting process in Decred, this
+means that all code in order to make the necessary changes is already included
+in this release, however its enforcement will remain dormant until the
+stakeholders vote to activate it.
+
+It also contains smart fee estimation, performance enhancements for block relay
+and processing, a major internal restructuring of how unspent transaction
+outputs are handled, support for whitelisting inbound peers to ensure service
+for your own SPV (Simplified Payment Verification) wallets, various updates to
+the RPC server such as a new method to query the state of the chain and more
+easily supporting external RPC connections over TLS, infrastructure
+improvements, and other quality assurance changes.
+
+The following Decred Change Proposals (DCP) describes the proposed changes in detail:
+- [DCP0004](https://github.com/decred/dcps/blob/master/dcp-0004/dcp-0004.mediawiki)
+
+**It is important for everyone to upgrade their software to this latest release
+even if you don't intend to vote in favor of the agenda.**
+
+## Downgrade Warning
+
+The database format in v1.4.0 is not compatible with previous versions of the
+software.  This only affects downgrades as users upgrading from previous
+versions will see a lengthy one time database migration.
+
+Once this migration has been completed, it will no longer be possible to
+downgrade to a previous version of the software without having to delete the
+database and redownload the chain.
+
+## Notable Changes
+
+### Fix Lightning Network Sequence Locks Vote
+
+In order to fully support the Lightning Network, the current sequence lock
+consensus rules need to be modified.  A new vote with the id `fixlnseqlocks` is
+now available as of this release.  After upgrading, stakeholders may set their
+preferences through their wallet or Voting Service Provider's (VSP) website.
+
+### Smart Fee Estimation (`estimatesmartfee`)
+
+A new RPC named `estimatesmartfee` is now available which returns a suitable
+fee rate for transactions to use in order to have a high probability of them
+being mined within a specified number of confirmations.  The estimation is based
+on actual network usage and thus varies according to supply and demand.
+
+This is important in the context of the Lightning Network (LN) and, more
+generally, it provides services and users with a mechanism to choose how to
+handle network congestion.  For example, payments that are high priority might
+be willing to pay a higher fee to help ensure the transaction is mined more
+quickly, while lower priority payments might be willing to wait longer in
+exchange for paying a lower fee.  This estimation capability provides a way to
+obtain a fee that will achieve the desired result with a high probability.
+
+### Support for Whitelisting Inbound Peers
+
+When peers are whitelisted via the `--whitelist` option, they will now be
+allowed to connect even when they would otherwise exceed the maximum number of
+peers.  This is highly useful in cases where users have configured their wallet
+to use SPV mode and only connect to dcrd instances that they control for
+increased privacy and guaranteed service.
+
+### Several Speed Optimizations
+
+Similar to previous releases, this release also contains several enhancements to
+improve speed for the initial sync process, validation, and network operations.
+
+In order to achieve these speedups, there is a lengthy one time database
+migration, as previously mentioned, that typically takes anywhere from 30
+minutes to an hour to complete depending on hardware.
+
+#### Faster Tip Block Relay
+
+Blocks that extend the current best chain are now relayed to the network
+immediately after they pass the initial sanity and contextual checks, most
+notably valid proof of work.  This allows blocks to propagate more quickly
+throughout the network, which in turn improves vote times.
+
+#### UTXO Set Restructuring
+
+The way the unspent transaction outputs are handled internally has been
+overhauled to significantly decrease the time it takes to validate blocks and
+transactions.  While this has many benefits, probably the most important one
+for most stakeholders is that votes can be cast more quickly which helps reduce
+the number of missed votes.
+
+### RPC Server Changes
+
+#### New Chain State Query RPC (`getblockchaininfo`)
+
+A new RPC named `getblockchaininfo` is now available which can be used to query
+the state of the chain including details such as its overall verification
+progress during initial sync, the maximum supported block size, and that status
+of consensus changes (deployments) which require stakeholder votes.  See the
+[JSON-RPC API Documentation](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.mediawiki#getblockchaininfo)
+for API details.
+
+#### Removal of Vote Creation RPC (`createrawssgen`)
+
+The deprecated `createrawssgen`, which was previously used to allow creating a
+vote via RPC is no longer available.  Votes are time sensitive and thus it does
+not make sense to create them offline.
+
+#### Updates to Block and Transaction RPCs
+
+The `getblock`, `getblockheader`, `getrawtransaction`, and
+`searchrawtransactions` RPCs now contain additional information such as the
+`extradata` field in the header, the `expiry` field in transactions, and the
+`blockheight` and `blockindex` of  the block that contains a transaction if it
+has been mined.  See the [JSON-RPC API Documentation](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.md)
+for API details.
+
+#### Built-in Support for Enabling External TLS RPC Connections
+
+A new command line parameter (`--altdnsnames`) and environment variable
+(`DCRD_ALT_DNSNAMES`) can now be used before the first launch of drcd to specify
+additional external IP addresses and DNS names to add during the certificate
+creation that are permitted to connect to the RPC server via TLS.  Previously,
+a separate tool was required to accomplish this configuration.
+
+## Changelog
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/release-v1.3.0...release-v1.4.0).
+
+### Protocol and network:
+
+- chaincfg: Add checkpoints for 1.4.0 release ([decred/dcrd#1547](https://github.com/decred/dcrd/pull/1547))
+- chaincfg: Introduce agenda for fixlnseqlocks vote ([decred/dcrd#1578](https://github.com/decred/dcrd/pull/1578))
+- multi: Enable vote for DCP0004 ([decred/dcrd#1579](https://github.com/decred/dcrd/pull/1579))
+- peer: Add support for specifying ua comments ([decred/dcrd#1413](https://github.com/decred/dcrd/pull/1413))
+- blockmanager: Fast relay checked tip blocks ([decred/dcrd#1443](https://github.com/decred/dcrd/pull/1443))
+- multi: Latest consensus active from simnet genesis ([decred/dcrd#1482](https://github.com/decred/dcrd/pull/1482))
+- server: Always allow whitelisted inbound peers ([decred/dcrd#1516](https://github.com/decred/dcrd/pull/1516))
+
+### Transaction relay (memory pool):
+
+- blockmanager: handle txs in invalid blocks ([decred/dcrd#1430](https://github.com/decred/dcrd/pull/1430))
+- mempool: Remove potential negative locktime check ([decred/dcrd#1455](https://github.com/decred/dcrd/pull/1455))
+- mempool: Stake-related readability improvements ([decred/dcrd#1456](https://github.com/decred/dcrd/pull/1456))
+
+### RPC:
+
+- multi: Include additional fields on RPC tx results ([decred/dcrd#1441](https://github.com/decred/dcrd/pull/1441))
+- rpcserver: Allow scripthash addrs in createrawsstx ([decred/dcrd#1444](https://github.com/decred/dcrd/pull/1444))
+- rpcserver: Remove createrawssgen RPC ([decred/dcrd#1448](https://github.com/decred/dcrd/pull/1448))
+- rpcclient: support getchaintips RPC ([decred/dcrd#1469](https://github.com/decred/dcrd/pull/1469))
+- multi: Add getblockchaininfo rpc ([decred/dcrd#1479](https://github.com/decred/dcrd/pull/1479))
+- rpcserver: Adds ability to allow alternative dns names for TLS ([decred/dcrd#1476](https://github.com/decred/dcrd/pull/1476))
+- multi: Cleanup recent alt DNS names additions ([decred/dcrd#1493](https://github.com/decred/dcrd/pull/1493))
+- multi: Cleanup getblock and getblockheader RPCs ([decred/dcrd#1497](https://github.com/decred/dcrd/pull/1497))
+- multi: Return total chain work in RPC results ([decred/dcrd#1498](https://github.com/decred/dcrd/pull/1498))
+- rpcserver: Improve GenerateNBlocks error message ([decred/dcrd#1507](https://github.com/decred/dcrd/pull/1507))
+- rpcserver: Fix verify progress calculation ([decred/dcrd#1508](https://github.com/decred/dcrd/pull/1508))
+- rpcserver: Fix sendrawtransaction error code ([decred/dcrd#1512](https://github.com/decred/dcrd/pull/1512))
+- blockchain: Notify stake states after connected block ([decred/dcrd#1515](https://github.com/decred/dcrd/pull/1515))
+- rpcserver: bump version to 5.0. ([decred/dcrd#1531](https://github.com/decred/dcrd/pull/1531))
+- rpcclient: support getblockchaininfo RPC ([decred/dcrd#1539](https://github.com/decred/dcrd/pull/1539))
+- rpcserver: update block template reconstruction ([decred/dcrd#1567](https://github.com/decred/dcrd/pull/1567))
+
+### dcrd command-line flags and configuration:
+
+- config: add --maxsameip to limit # of conns to same IP ([decred/dcrd#1517](https://github.com/decred/dcrd/pull/1517))
+
+### Documentation:
+
+- docs: Update docs for versioned modules ([decred/dcrd#1391](https://github.com/decred/dcrd/pull/1391))
+- docs: Update for fees package ([decred/dcrd#1540](https://github.com/decred/dcrd/pull/1540))
+- docs: Revamp main README.md and update docs ([decred/dcrd#1447](https://github.com/decred/dcrd/pull/1447))
+- docs: Use relative versions in contrib checklist ([decred/dcrd#1451](https://github.com/decred/dcrd/pull/1451))
+- docs: Use the correct binary name ([decred/dcrd#1461](https://github.com/decred/dcrd/pull/1461))
+- docs: Add github pull request template ([decred/dcrd#1474](https://github.com/decred/dcrd/pull/1474))
+- docs: Use unix line ending in mod hierarchy gv ([decred/dcrd#1487](https://github.com/decred/dcrd/pull/1487))
+- docs: Add README badge and link for goreportcard ([decred/dcrd#1492](https://github.com/decred/dcrd/pull/1492))
+- sampleconfig: Fix proxy typo ([decred/dcrd#1513](https://github.com/decred/dcrd/pull/1513))
+
+### Developer-related package and module changes:
+
+- release: Bump module versions and deps ([decred/dcrd#1541](https://github.com/decred/dcrd/pull/1541))
+- build: Tidy module sums with go mod tidy ([decred/dcrd#1408](https://github.com/decred/dcrd/pull/1408))
+- blockchain: update BestState ([decred/dcrd#1416](https://github.com/decred/dcrd/pull/1416))
+- mempool: tweak trace logs ([decred/dcrd#1429](https://github.com/decred/dcrd/pull/1429))
+- blockchain: Correct best pool size on disconnect ([decred/dcrd#1431](https://github.com/decred/dcrd/pull/1431))
+- multi: Make use of new internal version package ([decred/dcrd#1435](https://github.com/decred/dcrd/pull/1435))
+- peer: Protect handlePongMsg with p.statsMtx ([decred/dcrd#1438](https://github.com/decred/dcrd/pull/1438))
+- limits: Make limits package internal ([decred/dcrd#1436](https://github.com/decred/dcrd/pull/1436))
+- indexers: Remove unneeded existsaddrindex iface ([decred/dcrd#1439](https://github.com/decred/dcrd/pull/1439))
+- blockchain: Reduce block availability assumptions ([decred/dcrd#1442](https://github.com/decred/dcrd/pull/1442))
+- peer: Provide immediate queue inventory func ([decred/dcrd#1443](https://github.com/decred/dcrd/pull/1443))
+- server: Add infrastruct for immediate inv relay ([decred/dcrd#1443](https://github.com/decred/dcrd/pull/1443))
+- blockchain: Add new tip block checked notification ([decred/dcrd#1443](https://github.com/decred/dcrd/pull/1443))
+- multi: remove chainState dependency in rpcserver ([decred/dcrd#1417](https://github.com/decred/dcrd/pull/1417))
+- mining: remove chainState dependency ([decred/dcrd#1418](https://github.com/decred/dcrd/pull/1418))
+- multi: remove chainState deps in server & cpuminer ([decred/dcrd#1419](https://github.com/decred/dcrd/pull/1419))
+- blockmanager: remove block manager chain state ([decred/dcrd#1420](https://github.com/decred/dcrd/pull/1420))
+- multi: move MinHighPriority into mining package ([decred/dcrd#1421](https://github.com/decred/dcrd/pull/1421))
+- multi: add BlkTmplGenerator ([decred/dcrd#1422](https://github.com/decred/dcrd/pull/1422))
+- multi: add cpuminerConfig ([decred/dcrd#1423](https://github.com/decred/dcrd/pull/1423))
+- multi: Move update blk time to blk templ generator ([decred/dcrd#1454](https://github.com/decred/dcrd/pull/1454))
+- multi: No stake height checks in check tx inputs ([decred/dcrd#1457](https://github.com/decred/dcrd/pull/1457))
+- blockchain: Separate tx input stake checks ([decred/dcrd#1452](https://github.com/decred/dcrd/pull/1452))
+- blockchain: Ensure no stake opcodes in tx sanity ([decred/dcrd#1453](https://github.com/decred/dcrd/pull/1453))
+- blockchain: Move finalized tx func to validation ([decred/dcrd#1465](https://github.com/decred/dcrd/pull/1465))
+- blockchain: Move unique coinbase func to validate ([decred/dcrd#1466](https://github.com/decred/dcrd/pull/1466))
+- blockchain: Store interrupt channel with state ([decred/dcrd#1467](https://github.com/decred/dcrd/pull/1467))
+- multi: Cleanup and optimize tx input check code ([decred/dcrd#1468](https://github.com/decred/dcrd/pull/1468))
+- blockmanager: Avoid duplicate header announcements ([decred/dcrd#1473](https://github.com/decred/dcrd/pull/1473))
+- dcrjson: additions for pay to contract hash ([decred/dcrd#1260](https://github.com/decred/dcrd/pull/1260))
+- multi: Break blockchain dependency on dcrjson ([decred/dcrd#1488](https://github.com/decred/dcrd/pull/1488))
+- chaincfg: Unexport internal errors ([decred/dcrd#1489](https://github.com/decred/dcrd/pull/1489))
+- multi: Cleanup the unsupported dcrwallet commands ([decred/dcrd#1478](https://github.com/decred/dcrd/pull/1478))
+- multi: Rename ThresholdState to NextThresholdState ([decred/dcrd#1494](https://github.com/decred/dcrd/pull/1494))
+- dcrjson: Add listtickets command ([decred/dcrd#1267](https://github.com/decred/dcrd/pull/1267))
+- multi: Add started and done reorg notifications ([decred/dcrd#1495](https://github.com/decred/dcrd/pull/1495))
+- blockchain: Remove unused CheckWorklessBlockSanity ([decred/dcrd#1496](https://github.com/decred/dcrd/pull/1496))
+- blockchain: Simplify block template checking ([decred/dcrd#1499](https://github.com/decred/dcrd/pull/1499))
+- blockchain: Only mark nodes modified when modified ([decred/dcrd#1503](https://github.com/decred/dcrd/pull/1503))
+- blockchain: Cleanup and optimize stake node logic ([decred/dcrd#1504](https://github.com/decred/dcrd/pull/1504))
+- blockchain: Separate full data context checks ([decred/dcrd#1509](https://github.com/decred/dcrd/pull/1509))
+- blockchain: Reverse utxo set semantics ([decred/dcrd#1471](https://github.com/decred/dcrd/pull/1471))
+- blockchain: Convert to direct single-step reorgs ([decred/dcrd#1500](https://github.com/decred/dcrd/pull/1500))
+- multi: Migration for utxo set semantics reversal ([decred/dcrd#1520](https://github.com/decred/dcrd/pull/1520))
+- blockchain: Make version 5 update atomic ([decred/dcrd#1529](https://github.com/decred/dcrd/pull/1529))
+- blockchain: Simplify force head reorgs ([decred/dcrd#1526](https://github.com/decred/dcrd/pull/1526))
+- secp256k1: Correct edge case in deterministic sign ([decred/dcrd#1533](https://github.com/decred/dcrd/pull/1533))
+- dcrjson: Add gettransaction txtype/ticketstatus ([decred/dcrd#1276](https://github.com/decred/dcrd/pull/1276))
+- txscript: Use ScriptBuilder more ([decred/dcrd#1519](https://github.com/decred/dcrd/pull/1519))
+- fees: Add estimator package ([decred/dcrd#1434](https://github.com/decred/dcrd/pull/1434))
+- multi: Integrate fee estimation ([decred/dcrd#1434](https://github.com/decred/dcrd/pull/1434))
+
+### Testing and Quality Assurance:
+
+- multi: Use temp directories for database tests ([decred/dcrd#1404](https://github.com/decred/dcrd/pull/1404))
+- multi: Only use module-scoped data in tests ([decred/dcrd#1405](https://github.com/decred/dcrd/pull/1405))
+- blockchain: Use temp dirs for fullblocks test ([decred/dcrd#1406](https://github.com/decred/dcrd/pull/1406))
+- database: Use module-scoped data in iface tests ([decred/dcrd#1407](https://github.com/decred/dcrd/pull/1407))
+- travis: Update for Go1.11 and module builds ([decred/dcrd#1415](https://github.com/decred/dcrd/pull/1415))
+- indexers: Use testable bucket for existsaddrindex ([decred/dcrd#1440](https://github.com/decred/dcrd/pull/1440))
+- txscript: group numeric encoding tests with their opcodes ([decred/dcrd#1382](https://github.com/decred/dcrd/pull/1382))
+- txscript: add p2sh opcode tests ([decred/dcrd#1381](https://github.com/decred/dcrd/pull/1381))
+- txscript: add stake opcode tests ([decred/dcrd#1383](https://github.com/decred/dcrd/pull/1383))
+- main: add address encoding magic constants test ([decred/dcrd#1458](https://github.com/decred/dcrd/pull/1458))
+- chaingen: Only revoke missed tickets once ([decred/dcrd#1484](https://github.com/decred/dcrd/pull/1484))
+- chaingen/fullblocktests: Add disapproval tests ([decred/dcrd#1485](https://github.com/decred/dcrd/pull/1485))
+- multi: Resurrect regression network ([decred/dcrd#1480](https://github.com/decred/dcrd/pull/1480))
+- multi: Use regression test network in unit tests ([decred/dcrd#1481](https://github.com/decred/dcrd/pull/1481))
+- main: move cert tests to a separated file ([decred/dcrd#1502](https://github.com/decred/dcrd/pull/1502))
+- mempool: Accept test mungers for create signed tx ([decred/dcrd#1576](https://github.com/decred/dcrd/pull/1576))
+- mempool: Implement test harness seq lock calc ([decred/dcrd#1577](https://github.com/decred/dcrd/pull/1577))
+
+### Misc:
+
+- release: Bump for 1.4 release cycle ([decred/dcrd#1414](https://github.com/decred/dcrd/pull/1414))
+- multi: Make changes suggested by Go 1.11 gofmt -s ([decred/dcrd#1415](https://github.com/decred/dcrd/pull/1415))
+- build: Remove dep toml and lock file ([decred/dcrd#1460](https://github.com/decred/dcrd/pull/1460))
+- docker: Update to go 1.11 ([decred/dcrd#1463](https://github.com/decred/dcrd/pull/1463))
+- build: Support MacOS sed for obtaining module list ([decred/dcrd#1483](https://github.com/decred/dcrd/pull/1483))
+- multi: Correct a few typos found by misspell ([decred/dcrd#1490](https://github.com/decred/dcrd/pull/1490))
+- multi: Address some golint complaints ([decred/dcrd#1491](https://github.com/decred/dcrd/pull/1491))
+- multi: Remove unused code ([decred/dcrd#1505](https://github.com/decred/dcrd/pull/1505))
+- release: Bump siphash version to v1.2.1 ([decred/dcrd#1538](https://github.com/decred/dcrd/pull/1538))
+- release: Bump module versions and deps ([decred/dcrd#1541](https://github.com/decred/dcrd/pull/1541))
+- Fix required version of stake module ([decred/dcrd#1549](https://github.com/decred/dcrd/pull/1549))
+- release: Tidy module files with published versions ([decred/dcrd#1543](https://github.com/decred/dcrd/pull/1543))
+- mempool: Fix required version of mining module ([decred/dcrd#1551](https://github.com/decred/dcrd/pull/1551))
+
+### Code Contributors (alphabetical order):
+
+- Corey Osman
+- Dave Collins
+- David Hill
+- Dmitry Fedorov
+- Donald Adu-Poku
+- ggoranov
+- githubsands
+- J Fixby
+- Jonathan Chappelow
+- Josh Rickmar
+- Matheus Degiovani
+- Sarlor
+- zhizhongzhiwai
\ No newline at end of file
diff --git a/docs/release-notes/release-notes-1.5.0.md b/docs/release-notes/release-notes-1.5.0.md
new file mode 100644
index 00000000..cac3618d
--- /dev/null
+++ b/docs/release-notes/release-notes-1.5.0.md
@@ -0,0 +1,839 @@
+# dcrd v1.5.0
+
+This release of dcrd introduces a large number of updates.  Some of the key highlights are:
+
+* A new consensus vote agenda which allows the stakeholders to decide whether or not to activate support for block header commitments
+* More efficient block filters
+* Significant improvements to the mining infrastructure including asynchronous work notifications
+* Major performance enhancements for transaction script validation
+* Automatic external IP address discovery
+* Support for IPv6 over Tor
+* Various updates to the RPC server such as:
+  * A new method to query information about the network
+  * A method to retrieve the new version 2 block filters
+  * More calls available to limited access users
+* Infrastructure improvements
+* Quality assurance changes
+
+For those unfamiliar with the voting process in Decred, all code in order to support block header commitments is already included in this release, however its enforcement will remain dormant until the stakeholders vote to activate it.
+
+For reference, block header commitments were originally proposed and approved for initial implementation via the following Politeia proposal:
+- [Block Header Commitments Consensus Change](https://proposals.decred.org/proposals/0a1ff846ec271184ea4e3a921a3ccd8d478f69948b984445ee1852f272d54c58)
+
+
+The following Decred Change Proposal (DCP) describes the proposed changes in detail and provides a full technical specification:
+- [DCP0005](https://github.com/decred/dcps/blob/master/dcp-0005/dcp-0005.mediawiki)
+
+**It is important for everyone to upgrade their software to this latest release even if you don't intend to vote in favor of the agenda.**
+
+## Downgrade Warning
+
+The database format in v1.5.0 is not compatible with previous versions of the software.  This only affects downgrades as users upgrading from previous versions will see a one time database migration.
+
+Once this migration has been completed, it will no longer be possible to downgrade to a previous version of the software without having to delete the database and redownload the chain.
+
+## Notable Changes
+
+### Block Header Commitments Vote
+
+A new vote with the id `headercommitments` is now available as of this release.  After upgrading, stakeholders may set their preferences through their wallet or Voting Service Provider's (VSP) website.
+
+The primary goal of this change is to increase the security and efficiency of lightweight clients, such as Decrediton in its lightweight mode and the dcrandroid/dcrios mobile wallets, as well as add infrastructure that paves the
+way for several future scalability enhancements.
+
+A high level overview aimed at a general audience including a cost benefit analysis can be found in the  [Politeia proposal](https://proposals.decred.org/proposals/0a1ff846ec271184ea4e3a921a3ccd8d478f69948b984445ee1852f272d54c58).
+
+In addition, a much more in-depth treatment can be found in the [motivation section of DCP0005](https://github.com/decred/dcps/blob/master/dcp-0005/dcp-0005.mediawiki#motivation).
+
+### Version 2 Block Filters
+
+The block filters used by lightweight clients, such as SPV (Simplified Payment Verification) wallets, have been updated to improve their efficiency, ergonomics, and include additional information such as the full ticket
+commitment script.  The new block filters are version 2.  The older version 1 filters are now deprecated and scheduled to be removed in the next release, so consumers should update to the new filters as soon as possible.
+
+An overview of block filters can be found in the [block filters section of DCP0005](https://github.com/decred/dcps/blob/master/dcp-0005/dcp-0005.mediawiki#block-filters).
+
+Also, the specific contents and technical specification of the new version 2 block filters is available in the
+[version 2 block filters section of DCP0005](https://github.com/decred/dcps/blob/master/dcp-0005/dcp-0005.mediawiki#version-2-block-filters).
+
+Finally, there is a one time database update to build and store the new filters for all existing historical blocks which will likely take a while to complete (typically around 8 to 10 minutes on HDDs and 4 to 5 minutes on SSDs).
+
+### Mining Infrastructure Overhaul
+
+The mining infrastructure for building block templates and delivering the work to miners has been significantly overhauled to improve several aspects as follows:
+
+* Support asynchronous background template generation with intelligent vote propagation handling
+* Improved handling of chain reorganizations necessary when the current tip is unable to obtain enough votes
+* Current state synchronization
+* Near elimination of stale templates when new blocks and votes are received
+* Subscriptions for streaming template updates
+
+The standard [getwork RPC](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.mediawiki#getwork) that PoW miners currently use to perform the mining process has been updated to make use of this new infrastructure, so existing PoW miners will seamlessly get the vast majority of benefits without requiring any updates.
+
+However, in addition, a new [notifywork RPC](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.mediawiki#notifywork) is now available that allows miners to register for work to be delivered
+asynchronously as it becomes available via a WebSockets [work notification](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.mediawiki#work).  These notifications include the same information that `getwork` provides along with an additional `reason` parameter which allows the miners to make better decisions about when they should instruct workers to discard the current template immediately or should be allowed to finish their current round before being provided with the new template.
+
+Miners are highly encouraged to update their software to make use of the new asynchronous notification infrastructure since it is more robust, efficient, and faster than polling `getwork` to manually determine the aforementioned conditions.
+
+The following is a non-exhaustive overview that highlights the major benefits of the changes for both cases:
+
+- Requests for updated templates during the normal mining process in between tip   changes will now be nearly instant instead of potentially taking several seconds to build the new template on the spot
+- When the chain tip changes, requesting a template will now attempt to wait until either all votes have been received or a timeout occurs prior to handing out a template which is beneficial for PoW miners, PoS miners, and the network as a whole
+- PoW miners are much less likely to end up with template with less than the max number of votes which means they are less likely to receive a reduced subsidy
+- PoW miners will be much less likely to receive stale templates during chain tip changes due to vote propagation
+- PoS voters whose votes end up arriving to the miner slightly slower than the minimum number required are much less likely to have their votes excluded despite having voted simply due to propagation delay
+
+PoW miners who choose to update their software, pool or otherwise, to make use of the asynchronous work notifications will receive additional benefits such as:
+
+- Ability to start mining a new block sooner due to receiving updated work as soon as it becomes available
+- Immediate notification with new work that includes any votes that arrive late
+- Periodic notifications with new work that include new transactions only when there have actually been new transaction
+- Simplified interface code due to removal of the need for polling and manually checking the work bytes for special cases such as the number of votes
+
+**NOTE: Miners that are not rolling the timestamp field as they mine should ensure their software is upgraded to roll the timestamp to the latest timestamp each time they hand work out to a miner.  This helps ensure the block timestamps are as accurate as possible.**
+
+### Transaction Script Validation Optimizations
+
+Transaction script validation has been almost completely rewritten to significantly improve its speed and reduce the number of memory allocations. While this has many more benefits than enumerated here, probably the most
+important ones for most stakeholders are:
+
+- Votes can be cast more quickly which helps reduce the number of missed votes
+- Blocks are able to propagate more quickly throughout the network, which in turn further improves votes times
+- The initial sync process is around 20-25% faster
+
+### Automatic External IP Address Discovery
+
+In order for nodes to fully participate in the peer-to-peer network, they must be publicly accessible and made discoverable by advertising their external IP address.  This is typically made slightly more complicated since most users run their nodes on networks behind Network Address Translation (NAT).
+
+Previously, in addition to configuring the network firewall and/or router to allow inbound connections to port 9108 and forwarding the port to the internal IP address running dcrd, it was also required to manually set the public external IP address via the `--externalip` CLI option.
+
+This release will now make use of other nodes on the network in a decentralized fashion to automatically discover the external IP address, so it is no longer necessary to manually set CLI option for the vast majority of users.
+
+### Tor IPv6 Support
+
+It is now possible to resolve and connect to IPv6 peers over Tor in addition to the existing IPv4 support.
+
+### RPC Server Changes
+
+#### New Version 2 Block Filter Query RPC (`getcfilterv2`)
+
+A new RPC named `getcfilterv2` is now available which can be used to retrieve the version 2 [block filter](https://github.com/decred/dcps/blob/master/dcp-0005/dcp-0005.mediawiki#Block_Filters)
+for a given block along with its associated inclusion proof.  See the [getcfilterv2 JSON-RPC API Documentation](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.mediawiki#getcfilterv2)
+for API details.
+
+#### New Network Information Query RPC (`getnetworkinfo`)
+
+A new RPC named `getnetworkinfo` is now available which can be used to query information related to the peer-to-peer network such as the protocol version, the local time offset, the number of current connections, the supported network protocols, the current transaction relay fee, and the external IP addresses for
+the local interfaces.  See the [getnetworkinfo JSON-RPC API Documentation](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.mediawiki#getnetworkinfo) for API details.
+
+#### Updates to Chain State Query RPC (`getblockchaininfo`)
+
+The `difficulty` field of the `getblockchaininfo` RPC is now deprecated in favor of a new field named `difficultyratio` which matches the result returned by the `getdifficulty` RPC.
+
+See the [getblockchaininfo JSON-RPC API Documentation](https://github.com/decred/dcrd/blob/master/docs/json_rpc_api.mediawiki#getblockchaininfo) for API details.
+
+#### New Optional Version Parameter on Script Decode RPC (`decodescript`)
+
+The `decodescript` RPC now accepts an additional optional parameter to specify the script version.  The only currently supported script version in Decred is version 0 which means decoding scripts with versions other than 0 will be seen as non standard.
+
+#### Removal of Deprecated Block Template RPC (`getblocktemplate`)
+
+The previously deprecated `getblocktemplate` RPC is no longer available.  All known miners are already using the preferred `getwork` RPC since Decred's block header supports more than enough nonce space to keep mining hardware busy without needing to resort to building custom templates with less efficient extra nonce coinbase workarounds.
+
+#### Additional RPCs Available To Limited Access Users
+
+The following RPCs that were previously unavailable to the limited access RPC user are now available to it:
+
+- `estimatefee`
+- `estimatesmartfee`
+- `estimatestakediff`
+- `existsaddress`
+- `existsaddresses`
+- `existsexpiredtickets`
+- `existsliveticket`
+- `existslivetickets`
+- `existsmempoltxs`
+- `existsmissedtickets`
+- `getblocksubsidy`
+- `getcfilter`
+- `getcoinsupply`
+- `getheaders`
+- `getstakedifficulty`
+- `getstakeversioninfo`
+- `getstakeversions`
+- `getvoteinfo`
+- `livetickets`
+- `missedtickets`
+- `rebroadcastmissed`
+- `rebroadcastwinners`
+- `ticketfeeinfo`
+- `ticketsforaddress`
+- `ticketvwap`
+- `txfeeinfo`
+
+### Single Mining State Request
+
+The peer-to-peer protocol message to request the current mining state (`getminings`) is used when peers first connect to retrieve all known votes for the current tip block.  This is only useful when the peer first connects because all future votes will be relayed once the connection has been established.  Consequently, nodes will now only respond to a single mining state request.  Subsequent requests are ignored.
+
+### Developer Go Modules
+
+A full suite of versioned Go modules (essentially code libraries) are now available for use by applications written in Go that wish to create robust software with reproducible, verifiable, and verified builds.
+
+These modules are used to build dcrd itself and are therefore well maintained, tested, documented, and relatively efficient.
+
+## Changelog
+
+This release consists of 600 commits from 17 contributors which total to 537 files changed, 41494 additional lines of code, and 29215 deleted lines of code.
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/release-v1.4.0...release-v1.5.0).
+
+### Protocol and network:
+
+- chaincfg: Add checkpoints for 1.5.0 release ([decred/dcrd#1924](https://github.com/decred/dcrd/pull/1924))
+- chaincfg: Introduce agenda for header cmtmts vote ([decred/dcrd#1904](https://github.com/decred/dcrd/pull/1904))
+- multi: Implement combined merkle root and vote ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- blockchain: Implement v2 block filter storage ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- gcs/blockcf2: Implement v2 block filter creation ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- wire: Implement getcfilterv2/cfilterv2 messages ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- peer: Implement getcfilterv2/cfilterv2 listeners ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- server: Implement getcfilterv2 ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- multi: Implement header commitments and vote ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- server: Remove instead of disconnect node ([decred/dcrd#1644](https://github.com/decred/dcrd/pull/1644))
+- server: limit getminingstate requests ([decred/dcrd#1678](https://github.com/decred/dcrd/pull/1678))
+- peer: Prevent last block height going backwards ([decred/dcrd#1747](https://github.com/decred/dcrd/pull/1747))
+- connmgr: Add ability to remove pending connections ([decred/dcrd#1724](https://github.com/decred/dcrd/pull/1724))
+- connmgr: Add cancellation of pending requests ([decred/dcrd#1724](https://github.com/decred/dcrd/pull/1724))
+- connmgr: Check for canceled connection before connect ([decred/dcrd#1724](https://github.com/decred/dcrd/pull/1724))
+- multi: add automatic network address discovery ([decred/dcrd#1522](https://github.com/decred/dcrd/pull/1522))
+- connmgr: add TorLookupIPContext, deprecate TorLookupIP ([decred/dcrd#1849](https://github.com/decred/dcrd/pull/1849))
+- connmgr: support resolving ipv6 hosts over Tor ([decred/dcrd#1908](https://github.com/decred/dcrd/pull/1908))
+
+### Transaction relay (memory pool):
+
+- mempool: Reject same block vote double spends ([decred/dcrd#1597](https://github.com/decred/dcrd/pull/1597))
+- mempool: Limit max vote double spends exactly ([decred/dcrd#1596](https://github.com/decred/dcrd/pull/1596))
+- mempool: Optimize pool double spend check ([decred/dcrd#1561](https://github.com/decred/dcrd/pull/1561))
+- txscript: Tighten standardness pubkey checks ([decred/dcrd#1649](https://github.com/decred/dcrd/pull/1649))
+- mempool: drop container/list for simple FIFO ([decred/dcrd#1681](https://github.com/decred/dcrd/pull/1681))
+- mempool: remove unused error return value ([decred/dcrd#1785](https://github.com/decred/dcrd/pull/1785))
+- mempool: Add ErrorCode to returned TxRuleErrors ([decred/dcrd#1901](https://github.com/decred/dcrd/pull/1901))
+
+### Mining:
+
+- mining: Optimize get the block's votes tx ([decred/dcrd#1563](https://github.com/decred/dcrd/pull/1563))
+- multi: add BgBlkTmplGenerator ([decred/dcrd#1424](https://github.com/decred/dcrd/pull/1424))
+- mining: Remove unnecessary notify goroutine ([decred/dcrd#1708](https://github.com/decred/dcrd/pull/1708))
+- mining: Improve template key handling ([decred/dcrd#1709](https://github.com/decred/dcrd/pull/1709))
+- mining:  fix scheduled template regen ([decred/dcrd#1717](https://github.com/decred/dcrd/pull/1717))
+- miner: Improve background generator lifecycle ([decred/dcrd#1715](https://github.com/decred/dcrd/pull/1715))
+- cpuminer: No speed monitor on discrete mining ([decred/dcrd#1716](https://github.com/decred/dcrd/pull/1716))
+- mining: Run vote ntfn in a separate goroutine ([decred/dcrd#1718](https://github.com/decred/dcrd/pull/1718))
+- mining: Overhaul background template generator ([decred/dcrd#1748](https://github.com/decred/dcrd/pull/1748))
+- mining: Remove unused error return value ([decred/dcrd#1859](https://github.com/decred/dcrd/pull/1859))
+- cpuminer: Fix off-by-one issues in nonce handling ([decred/dcrd#1865](https://github.com/decred/dcrd/pull/1865))
+- mining: Remove dead code ([decred/dcrd#1882](https://github.com/decred/dcrd/pull/1882))
+- mining: Remove unused extra nonce update code ([decred/dcrd#1883](https://github.com/decred/dcrd/pull/1883))
+- mining: Minor cleanup of aggressive mining path ([decred/dcrd#1888](https://github.com/decred/dcrd/pull/1888))
+- mining: Remove unused error codes ([decred/dcrd#1889](https://github.com/decred/dcrd/pull/1889))
+- mining: fix data race ([decred/dcrd#1894](https://github.com/decred/dcrd/pull/1894))
+- mining: fix data race ([decred/dcrd#1896](https://github.com/decred/dcrd/pull/1896))
+- cpuminer: fix race ([decred/dcrd#1899](https://github.com/decred/dcrd/pull/1899))
+- cpuminer: Improve speed stat tracking ([decred/dcrd#1921](https://github.com/decred/dcrd/pull/1921))
+- rpcserver/mining: Use bg tpl generator for getwork ([decred/dcrd#1922](https://github.com/decred/dcrd/pull/1922))
+- mining: Export TemplateUpdateReason ([decred/dcrd#1923](https://github.com/decred/dcrd/pull/1923))
+- multi: Add tpl update reason to work ntfns ([decred/dcrd#1923](https://github.com/decred/dcrd/pull/1923))
+- mining: Store block templates given by notifywork ([decred/dcrd#1949](https://github.com/decred/dcrd/pull/1949))
+
+### RPC:
+
+- dcrjson: add cointype to WalletInfoResult ([decred/dcrd#1606](https://github.com/decred/dcrd/pull/1606))
+- rpcclient: Introduce v2 module using wallet types ([decred/dcrd#1608](https://github.com/decred/dcrd/pull/1608))
+- rpcserver: Update for dcrjson/v2 ([decred/dcrd#1612](https://github.com/decred/dcrd/pull/1612))
+- rpcclient: Add EstimateSmartFee ([decred/dcrd#1641](https://github.com/decred/dcrd/pull/1641))
+- rpcserver: remove unused quit chan ([decred/dcrd#1629](https://github.com/decred/dcrd/pull/1629))
+- rpcserver: Undeprecate getwork ([decred/dcrd#1635](https://github.com/decred/dcrd/pull/1635))
+- rpcserver: Add difficultyratio to getblockchaininfo ([decred/dcrd#1630](https://github.com/decred/dcrd/pull/1630))
+- multi:  add version arg to decodescript rpc ([decred/dcrd#1731](https://github.com/decred/dcrd/pull/1731))
+- dcrjson: Remove API breaking change ([decred/dcrd#1778](https://github.com/decred/dcrd/pull/1778))
+- rpcclient: Add GetMasterPubkey ([decred/dcrd#1777](https://github.com/decred/dcrd/pull/1777))
+- multi: add getnetworkinfo rpc ([decred/dcrd#1536](https://github.com/decred/dcrd/pull/1536))
+- rpcserver: Better error message ([decred/dcrd#1861](https://github.com/decred/dcrd/pull/1861))
+- multi: update limited user rpcs ([decred/dcrd#1870](https://github.com/decred/dcrd/pull/1870))
+- multi: make rebroadcast winners & missed ws only ([decred/dcrd#1872](https://github.com/decred/dcrd/pull/1872))
+- multi: remove getblocktemplate ([decred/dcrd#1736](https://github.com/decred/dcrd/pull/1736))
+- rpcserver: Match tx filter on ticket commitments ([decred/dcrd#1881](https://github.com/decred/dcrd/pull/1881))
+- rpcserver: don't use activeNetParams ([decred/dcrd#1733](https://github.com/decred/dcrd/pull/1733))
+- rpcserver: update rpcAskWallet rpc set ([decred/dcrd#1892](https://github.com/decred/dcrd/pull/1892))
+- rpcclient: close the unused response body ([decred/dcrd#1905](https://github.com/decred/dcrd/pull/1905))
+- rpcclient: Support getcfilterv2 JSON-RPC ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+- multi: add notifywork rpc ([decred/dcrd#1410](https://github.com/decred/dcrd/pull/1410))
+- rpcserver: Cleanup getvoteinfo RPC ([decred/dcrd#2005](https://github.com/decred/dcrd/pull/2005))
+
+### dcrd command-line flags and configuration:
+
+- config: Remove deprecated getworkkey option ([decred/dcrd#1594](https://github.com/decred/dcrd/pull/1594))
+
+### certgen utility changes:
+
+- certgen: Support Ed25519 cert generation on Go 1.13 ([decred/dcrd#1757](https://github.com/decred/dcrd/pull/1757))
+
+### dcrctl utility changes:
+
+- dcrctl: Make version string consistent ([decred/dcrd#1598](https://github.com/decred/dcrd/pull/1598))
+- dcrctl: Update for dcrjson/v2 and wallet types ([decred/dcrd#1609](https://github.com/decred/dcrd/pull/1609))
+- sampleconfig: add export dcrctl sample config ([decred/dcrd#2006](https://github.com/decred/dcrd/pull/2006))
+
+### promptsecret utility changes:
+
+- promptsecret: Add -n flag to prompt multiple times ([decred/dcrd#1705](https://github.com/decred/dcrd/pull/1705))
+
+### Documentation:
+
+- docs: Update for secp256k1 v2 module ([decred/dcrd#1919](https://github.com/decred/dcrd/pull/1919))
+- docs: document module breaking changes process ([decred/dcrd#1891](https://github.com/decred/dcrd/pull/1891))
+- docs: Link to btc whitepaper on decred.org ([decred/dcrd#1885](https://github.com/decred/dcrd/pull/1885))
+- docs: Update for mempool v3 module ([decred/dcrd#1835](https://github.com/decred/dcrd/pull/1835))
+- docs: Update for peer v2 module ([decred/dcrd#1834](https://github.com/decred/dcrd/pull/1834))
+- docs: Update for connmgr v2 module ([decred/dcrd#1833](https://github.com/decred/dcrd/pull/1833))
+- docs: Update for mining v2 module ([decred/dcrd#1831](https://github.com/decred/dcrd/pull/1831))
+- docs: Update for blockchain v2 module ([decred/dcrd#1823](https://github.com/decred/dcrd/pull/1823))
+- docs: Update for rpcclient v4 module ([decred/dcrd#1807](https://github.com/decred/dcrd/pull/1807))
+- docs: Update for blockchain/stake v2 module ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- docs: Update for database v2 module ([decred/dcrd#1799](https://github.com/decred/dcrd/pull/1799))
+- docs: Update for rpcclient v3 module ([decred/dcrd#1793](https://github.com/decred/dcrd/pull/1793))
+- docs: Update for dcrjson/v3 module ([decred/dcrd#1792](https://github.com/decred/dcrd/pull/1792))
+- docs: Update for txscript v2 module ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- docs: Update for dcrutil v2 module ([decred/dcrd#1770](https://github.com/decred/dcrd/pull/1770))
+- docs: Update for dcrec/edwards v2 module ([decred/dcrd#1765](https://github.com/decred/dcrd/pull/1765))
+- docs: Update for chaincfg v2 module ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- docs: Update for hdkeychain v2 module ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Correct docs key examples ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- docs: allowHighFees arg has been implemented ([decred/dcrd#1695](https://github.com/decred/dcrd/pull/1695))
+- docs: move json rpc docs to mediawiki ([decred/dcrd#1687](https://github.com/decred/dcrd/pull/1687))
+- docs: Update for lru module ([decred/dcrd#1683](https://github.com/decred/dcrd/pull/1683))
+- docs: fix formatting in json rpc doc ([decred/dcrd#1633](https://github.com/decred/dcrd/pull/1633))
+- docs: Update for mempool v2 module ([decred/dcrd#1613](https://github.com/decred/dcrd/pull/1613))
+- docs: Update for rpcclient v2 module ([decred/dcrd#1608](https://github.com/decred/dcrd/pull/1608))
+- docs: Update for dcrjson v2 module ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- jsonrpc/types: Add README.md and doc.go ([decred/dcrd#1794](https://github.com/decred/dcrd/pull/1794))
+- dcrjson: Update README.md ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- dcrec/secp256k1: Update README.md broken link ([decred/dcrd#1631](https://github.com/decred/dcrd/pull/1631))
+- bech32: Correct README build badge reference ([decred/dcrd#1689](https://github.com/decred/dcrd/pull/1689))
+- hdkeychain: Update README.md ([decred/dcrd#1686](https://github.com/decred/dcrd/pull/1686))
+- bech32: Correct README links ([decred/dcrd#1691](https://github.com/decred/dcrd/pull/1691))
+- stake: Remove unnecessary language in comment ([decred/dcrd#1752](https://github.com/decred/dcrd/pull/1752))
+- multi: Use https links where available ([decred/dcrd#1771](https://github.com/decred/dcrd/pull/1771))
+- stake: Make doc.go formatting consistent ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- blockchain: Update doc.go to reflect reality ([decred/dcrd#1823](https://github.com/decred/dcrd/pull/1823))
+- multi: update rpc documentation ([decred/dcrd#1867](https://github.com/decred/dcrd/pull/1867))
+- dcrec: fix examples links ([decred/dcrd#1914](https://github.com/decred/dcrd/pull/1914))
+- gcs: Improve package documentation ([decred/dcrd#1915](https://github.com/decred/dcrd/pull/1915))
+
+### Developer-related package and module changes:
+
+- dcrutil: Return deep copied tx in NewTxDeepTxIns ([decred/dcrd#1545](https://github.com/decred/dcrd/pull/1545))
+- mining: Remove superfluous error check ([decred/dcrd#1552](https://github.com/decred/dcrd/pull/1552))
+- dcrutil: Block does not cache the header bytes ([decred/dcrd#1571](https://github.com/decred/dcrd/pull/1571))
+- blockchain: Remove superfluous GetVoteInfo check ([decred/dcrd#1574](https://github.com/decred/dcrd/pull/1574))
+- blockchain: Make consensus votes network agnostic ([decred/dcrd#1590](https://github.com/decred/dcrd/pull/1590))
+- blockchain: Optimize skip stakebase input ([decred/dcrd#1565](https://github.com/decred/dcrd/pull/1565))
+- txscript: code cleanup ([decred/dcrd#1591](https://github.com/decred/dcrd/pull/1591))
+- dcrjson: Move estimate fee test to matching file ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- dcrjson: Move raw stake tx cmds to correct file ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- dcrjson: Move best block result to correct file ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- dcrjson: Move winning tickets ntfn to correct file ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- dcrjson: Move spent tickets ntfn to correct file ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- dcrjson: Move stake diff ntfn to correct file ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- dcrjson: Move new tickets ntfn to correct file ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- txscript: Rename p2sh indicator to isP2SH ([decred/dcrd#1605](https://github.com/decred/dcrd/pull/1605))
+- mempool: Remove deprecated min high prio constant ([decred/dcrd#1613](https://github.com/decred/dcrd/pull/1613))
+- mempool: Remove tight coupling with dcrjson ([decred/dcrd#1613](https://github.com/decred/dcrd/pull/1613))
+- blockmanager: only check if current once handling inv's ([decred/dcrd#1621](https://github.com/decred/dcrd/pull/1621))
+- connmngr: Add DialAddr config option ([decred/dcrd#1642](https://github.com/decred/dcrd/pull/1642))
+- txscript: Consistent checksigaltverify handling ([decred/dcrd#1647](https://github.com/decred/dcrd/pull/1647))
+- multi: preallocate memory ([decred/dcrd#1646](https://github.com/decred/dcrd/pull/1646))
+- wire: Fix maximum payload length of MsgAddr ([decred/dcrd#1638](https://github.com/decred/dcrd/pull/1638))
+- blockmanager: remove unused requestedEverTxns ([decred/dcrd#1624](https://github.com/decred/dcrd/pull/1624))
+- blockmanager: remove useless requestedEverBlocks ([decred/dcrd#1624](https://github.com/decred/dcrd/pull/1624))
+- txscript: Introduce constant for max CLTV bytes ([decred/dcrd#1650](https://github.com/decred/dcrd/pull/1650))
+- txscript: Introduce constant for max CSV bytes ([decred/dcrd#1651](https://github.com/decred/dcrd/pull/1651))
+- chaincfg: Remove unused definition ([decred/dcrd#1661](https://github.com/decred/dcrd/pull/1661))
+- chaincfg: Use expected regnet merkle root var ([decred/dcrd#1662](https://github.com/decred/dcrd/pull/1662))
+- blockchain: Deprecate BlockOneCoinbasePaysTokens ([decred/dcrd#1657](https://github.com/decred/dcrd/pull/1657))
+- blockchain: Explicit script ver in coinbase checks ([decred/dcrd#1658](https://github.com/decred/dcrd/pull/1658))
+- chaincfg: Explicit unique net addr prefix ([decred/dcrd#1663](https://github.com/decred/dcrd/pull/1663))
+- chaincfg: Introduce params lookup by addr prefix ([decred/dcrd#1664](https://github.com/decred/dcrd/pull/1664))
+- dcrutil: Lookup params by addr prefix in chaincfg ([decred/dcrd#1665](https://github.com/decred/dcrd/pull/1665))
+- peer: Deprecate dependency on chaincfg ([decred/dcrd#1671](https://github.com/decred/dcrd/pull/1671))
+- server: Update for deprecated peer chaincfg ([decred/dcrd#1671](https://github.com/decred/dcrd/pull/1671))
+- fees: drop unused chaincfg ([decred/dcrd#1675](https://github.com/decred/dcrd/pull/1675))
+- lru: Implement a new module with generic LRU cache ([decred/dcrd#1683](https://github.com/decred/dcrd/pull/1683))
+- peer: Use lru cache module for inventory ([decred/dcrd#1683](https://github.com/decred/dcrd/pull/1683))
+- peer: Use lru cache module for nonces ([decred/dcrd#1683](https://github.com/decred/dcrd/pull/1683))
+- server: Use lru cache module for addresses ([decred/dcrd#1683](https://github.com/decred/dcrd/pull/1683))
+- multi: drop init and just set default log ([decred/dcrd#1676](https://github.com/decred/dcrd/pull/1676))
+- multi: deprecate DisableLog ([decred/dcrd#1676](https://github.com/decred/dcrd/pull/1676))
+- blockchain: Remove unused params from block index ([decred/dcrd#1674](https://github.com/decred/dcrd/pull/1674))
+- bech32: Initial Version ([decred/dcrd#1646](https://github.com/decred/dcrd/pull/1646))
+- chaincfg: Add extended key accessor funcs ([decred/dcrd#1694](https://github.com/decred/dcrd/pull/1694))
+- chaincfg: Rename extended key accessor funcs ([decred/dcrd#1699](https://github.com/decred/dcrd/pull/1699))
+- wire: Accurate calculations of maximum length ([decred/dcrd#1672](https://github.com/decred/dcrd/pull/1672))
+- wire: Fix MsgCFTypes maximum payload length ([decred/dcrd#1673](https://github.com/decred/dcrd/pull/1673))
+- txscript: Deprecate HasP2SHScriptSigStakeOpCodes ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Deprecate IsStakeOutput ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Deprecate GetMultisigMandN ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Introduce zero-alloc script tokenizer ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize script disasm ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Introduce raw script sighash calc func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize CalcSignatureHash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make isSmallInt accept raw opcode ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make asSmallInt accept raw opcode ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make isStakeOpcode accept raw opcode ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize IsPayToScriptHash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize IsMultisigScript ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize IsMultisigSigScript ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize GetSigOpCount ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize isAnyKindOfScriptHash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize IsPushOnlyScript ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize new engine push only script ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Check p2sh push before parsing scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize GetPreciseSigOpCount ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make typeOfScript accept raw script ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript pay-to-script-hash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isScriptHash function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript multisig ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isMultiSig function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript pay-to-pubkey ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isPubkey function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript pay-to-alt-pubkey ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript pay-to-pubkey-hash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isPubkeyHash function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript pay-to-alt-pk-hash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript nulldata detection ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isNullData function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript stakesub detection ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isStakeSubmission function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript stakegen detection ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isStakeGen function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript stakerev detection ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isStakeRevocation function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize typeOfScript stakechange detect ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isSStxChange function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ContainsStakeOpCodes ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractCoinbaseNullData ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Convert CalcScriptInfo ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isPushOnly function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused getSigOpCount function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize CalcMultiSigStats ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize multi sig redeem script func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Convert GetScriptHashFromP2SHScript ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize PushedData ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize IsUnspendable ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make canonicalPush accept raw opcode ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractAtomicSwapDataPushes ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs scripthash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs pubkeyhash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs altpubkeyhash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs pubkey ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs altpubkey ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs multisig ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs stakesub ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs stakegen ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs stakerev ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs stakechange ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAddrs nulldata ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Optimize ExtractPkScriptAltSigType ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused extractOneBytePush func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isPubkeyAlt function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isPubkeyHashAlt function ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused isOneByteMaxDataPush func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: mergeMultiSig function def order cleanup ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Use raw scripts in RawTxInSignature ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Use raw scripts in RawTxInSignatureAlt ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Correct p2pkSignatureScriptAlt comment ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Use raw scripts in SignTxOutput ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Implement efficient opcode data removal ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make isDisabled accept raw opcode ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make alwaysIllegal accept raw opcode ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make isConditional accept raw opcode ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make min push accept raw opcode and data ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Convert to use non-parsed opcode disasm ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Refactor engine to use raw scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused removeOpcodeByData func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Rename removeOpcodeByDataRaw func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused calcSignatureHash func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Rename calcSignatureHashRaw func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused parseScript func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused unparseScript func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused parsedOpcode.bytes func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Remove unused parseScriptTemplate func ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make executeOpcode take opcode and data ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Make op callbacks take opcode and data ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- dcrutil: Fix NewTxDeepTxIns implementation ([decred/dcrd#1685](https://github.com/decred/dcrd/pull/1685))
+- stake: drop txscript.DefaultScriptVersion usage ([decred/dcrd#1704](https://github.com/decred/dcrd/pull/1704))
+- peer: invSendQueue is a FIFO ([decred/dcrd#1680](https://github.com/decred/dcrd/pull/1680))
+- peer: pendingMsgs is a FIFO ([decred/dcrd#1680](https://github.com/decred/dcrd/pull/1680))
+- blockchain: drop container/list ([decred/dcrd#1682](https://github.com/decred/dcrd/pull/1682))
+- blockmanager: use local var for the request queue ([decred/dcrd#1622](https://github.com/decred/dcrd/pull/1622))
+- server: return on outbound peer creation error ([decred/dcrd#1637](https://github.com/decred/dcrd/pull/1637))
+- hdkeychain: Remove Address method ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Remove SetNet method ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Require network on decode extended key ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Don't rely on global state ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Introduce NetworkParams interface ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- server: Remove unused ScheduleShutdown func ([decred/dcrd#1711](https://github.com/decred/dcrd/pull/1711))
+- server: Remove unused dynamicTickDuration func ([decred/dcrd#1711](https://github.com/decred/dcrd/pull/1711))
+- main: Convert signal handling to use context ([decred/dcrd#1712](https://github.com/decred/dcrd/pull/1712))
+- txscript: Remove checks for impossible conditions ([decred/dcrd#1713](https://github.com/decred/dcrd/pull/1713))
+- indexers: Remove unused func ([decred/dcrd#1714](https://github.com/decred/dcrd/pull/1714))
+- multi: fix onVoteReceivedHandler shutdown ([decred/dcrd#1721](https://github.com/decred/dcrd/pull/1721))
+- wire: Rename extended errors to malformed errors ([decred/dcrd#1742](https://github.com/decred/dcrd/pull/1742))
+- rpcwebsocket: convert from list to simple FIFO ([decred/dcrd#1726](https://github.com/decred/dcrd/pull/1726))
+- dcrec: implement GenerateKey ([decred/dcrd#1652](https://github.com/decred/dcrd/pull/1652))
+- txscript: Remove SigHashOptimization constant ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- txscript: Remove CheckForDuplicateHashes constant ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- txscript: Remove CPUMinerThreads constant ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Move DNSSeed stringer next to type def ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Remove all registration capabilities ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Move mainnet code to mainnet files ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Move testnet3 code to testnet files ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Move simnet code to testnet files ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Move regnet code to regnet files ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Concrete genesis hash in Params struct ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Use scripts in block one token payouts ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Convert global param defs to funcs ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- edwards: remove curve param ([decred/dcrd#1762](https://github.com/decred/dcrd/pull/1762))
+- edwards: unexport EncodedBytesToBigIntPoint ([decred/dcrd#1762](https://github.com/decred/dcrd/pull/1762))
+- edwards: unexport a slew of funcs ([decred/dcrd#1762](https://github.com/decred/dcrd/pull/1762))
+- edwards: add signature IsEqual and Verify methods ([decred/dcrd#1762](https://github.com/decred/dcrd/pull/1762))
+- edwards: add Sign method to PrivateKey ([decred/dcrd#1762](https://github.com/decred/dcrd/pull/1762))
+- chaincfg: Add addr params accessor funcs ([decred/dcrd#1766](https://github.com/decred/dcrd/pull/1766))
+- schnorr: remove curve param ([decred/dcrd#1764](https://github.com/decred/dcrd/pull/1764))
+- schnorr: unexport functions ([decred/dcrd#1764](https://github.com/decred/dcrd/pull/1764))
+- schnorr: add signature IsEqual and Verify methods ([decred/dcrd#1764](https://github.com/decred/dcrd/pull/1764))
+- secp256k1: unexport NAF ([decred/dcrd#1764](https://github.com/decred/dcrd/pull/1764))
+- addrmgr: drop container/list ([decred/dcrd#1679](https://github.com/decred/dcrd/pull/1679))
+- dcrutil: Remove unused ErrAddressCollision ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcurtil: Remove unused ErrMissingDefaultNet ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Require network on address decode ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Remove IsForNet from Address interface ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Remove DSA from Address interface ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Remove Net from Address interface ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Rename EncodeAddress to Address ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Don't store net ref in addr impls ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Require network on WIF decode ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Accept magic bytes directly in NewWIF ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Introduce AddressParams interface ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- blockchain: Do coinbase nulldata check locally ([decred/dcrd#1770](https://github.com/decred/dcrd/pull/1770))
+- blockchain: update CalcBlockSubsidy ([decred/dcrd#1750](https://github.com/decred/dcrd/pull/1750))
+- txscript: Use const for sighashall optimization ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove DisableLog ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Unexport HasP2SHScriptSigStakeOpCodes ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove third GetPreciseSigOpCount param ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove IsMultisigScript err return ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Unexport IsStakeOutput ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove CalcScriptInfo ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove multisig redeem script err return ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove GetScriptHashFromP2SHScript ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove GetMultisigMandN ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Remove DefaultScriptVersion ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Use secp256k1 types in sig cache ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- multi: decouple BlockManager from server ([decred/dcrd#1728](https://github.com/decred/dcrd/pull/1728))
+- database: Introduce BlockSerializer interface ([decred/dcrd#1799](https://github.com/decred/dcrd/pull/1799))
+- hdkeychain: Add ChildNum and Depth methods ([decred/dcrd#1800](https://github.com/decred/dcrd/pull/1800))
+- chaincfg: Avoid block 1 subsidy codegen explosion ([decred/dcrd#1801](https://github.com/decred/dcrd/pull/1801))
+- chaincfg: Add stake params accessor funcs ([decred/dcrd#1802](https://github.com/decred/dcrd/pull/1802))
+- stake: Remove DisableLog ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- stake: Remove unused TxSSGenStakeOutputInfo ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- stake: Remove unused TxSSRtxStakeOutputInfo ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- stake: Remove unused SetTxTree ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- stake: Introduce StakeParams interface ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- stake: Accept AddressParams for ticket commit addr ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- gcs: Optimize AddSigScript ([decred/dcrd#1804](https://github.com/decred/dcrd/pull/1804))
+- chaincfg: Add subsidy params accessor funcs ([decred/dcrd#1813](https://github.com/decred/dcrd/pull/1813))
+- blockchain/standalone: Implement a new module ([decred/dcrd#1808](https://github.com/decred/dcrd/pull/1808))
+- blockchain/standalone: Add merkle root calc funcs ([decred/dcrd#1809](https://github.com/decred/dcrd/pull/1809))
+- blockchain/standalone: Add subsidy calc funcs ([decred/dcrd#1812](https://github.com/decred/dcrd/pull/1812))
+- blockchain/standalone: Add IsCoinBaseTx ([decred/dcrd#1815](https://github.com/decred/dcrd/pull/1815))
+- crypto/blake256: Add module with zero alloc funcs ([decred/dcrd#1811](https://github.com/decred/dcrd/pull/1811))
+- stake: Check minimum req outputs for votes earlier ([decred/dcrd#1819](https://github.com/decred/dcrd/pull/1819))
+- blockchain: Use standalone module for merkle calcs ([decred/dcrd#1816](https://github.com/decred/dcrd/pull/1816))
+- blockchain: Use standalone for coinbase checks ([decred/dcrd#1816](https://github.com/decred/dcrd/pull/1816))
+- blockchain: Use standalone module subsidy calcs ([decred/dcrd#1816](https://github.com/decred/dcrd/pull/1816))
+- blockchain: Use standalone module for work funcs ([decred/dcrd#1816](https://github.com/decred/dcrd/pull/1816))
+- blockchain: Remove deprecated code ([decred/dcrd#1823](https://github.com/decred/dcrd/pull/1823))
+- blockchain: Accept subsidy cache in config ([decred/dcrd#1823](https://github.com/decred/dcrd/pull/1823))
+- mining: Use lastest major version deps ([decred/dcrd#1831](https://github.com/decred/dcrd/pull/1831))
+- connmgr: Accept DNS seeds as string slice ([decred/dcrd#1833](https://github.com/decred/dcrd/pull/1833))
+- peer: Remove deprecated Config.ChainParams field ([decred/dcrd#1834](https://github.com/decred/dcrd/pull/1834))
+- peer: Accept hash slice for block locators ([decred/dcrd#1834](https://github.com/decred/dcrd/pull/1834))
+- peer: Use latest major version deps ([decred/dcrd#1834](https://github.com/decred/dcrd/pull/1834))
+- mempool: Use latest major version deps ([decred/dcrd#1835](https://github.com/decred/dcrd/pull/1835))
+- main: Update to use all new major module versions ([decred/dcrd#1837](https://github.com/decred/dcrd/pull/1837))
+- blockchain: Implement stricter bounds checking ([decred/dcrd#1825](https://github.com/decred/dcrd/pull/1825))
+- gcs: Start v2 module dev cycle ([decred/dcrd#1843](https://github.com/decred/dcrd/pull/1843))
+- gcs: Support empty filters ([decred/dcrd#1844](https://github.com/decred/dcrd/pull/1844))
+- gcs: Make error consistent with rest of codebase ([decred/dcrd#1846](https://github.com/decred/dcrd/pull/1846))
+- gcs: Add filter version support ([decred/dcrd#1848](https://github.com/decred/dcrd/pull/1848))
+- gcs: Correct zero hash filter matches ([decred/dcrd#1857](https://github.com/decred/dcrd/pull/1857))
+- gcs: Standardize serialization on a single format ([decred/dcrd#1851](https://github.com/decred/dcrd/pull/1851))
+- gcs: Optimize Hash ([decred/dcrd#1853](https://github.com/decred/dcrd/pull/1853))
+- gcs: Group V1 filter funcs after filter defs ([decred/dcrd#1854](https://github.com/decred/dcrd/pull/1854))
+- gcs: Support independent fp rate and bin size ([decred/dcrd#1854](https://github.com/decred/dcrd/pull/1854))
+- blockchain: Refactor best chain state init ([decred/dcrd#1871](https://github.com/decred/dcrd/pull/1871))
+- gcs: Implement version 2 filters ([decred/dcrd#1856](https://github.com/decred/dcrd/pull/1856))
+- blockchain: Cleanup subsidy cache init order ([decred/dcrd#1873](https://github.com/decred/dcrd/pull/1873))
+- multi: use chain ref. from blockmanager config ([decred/dcrd#1879](https://github.com/decred/dcrd/pull/1879))
+- multi: remove unused funcs and vars ([decred/dcrd#1880](https://github.com/decred/dcrd/pull/1880))
+- gcs: Prevent empty data elements in v2 filters ([decred/dcrd#1911](https://github.com/decred/dcrd/pull/1911))
+- crypto: import ripemd160 ([decred/dcrd#1907](https://github.com/decred/dcrd/pull/1907))
+- multi: Use secp256k1/v2 module ([decred/dcrd#1919](https://github.com/decred/dcrd/pull/1919))
+- multi: Use crypto/ripemd160 module ([decred/dcrd#1918](https://github.com/decred/dcrd/pull/1918))
+- multi: Use dcrec/edwards/v2 module ([decred/dcrd#1920](https://github.com/decred/dcrd/pull/1920))
+- gcs: Prevent empty data elements fp matches ([decred/dcrd#1940](https://github.com/decred/dcrd/pull/1940))
+- main: Update to use all new module versions ([decred/dcrd#1946](https://github.com/decred/dcrd/pull/1946))
+- blockchain/standalone: Add inclusion proof funcs ([decred/dcrd#1906](https://github.com/decred/dcrd/pull/1906))
+
+### Developer-related module management:
+
+- build: Require dcrjson v1.2.0 ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- multi: Remove non-root module replacements ([decred/dcrd#1599](https://github.com/decred/dcrd/pull/1599))
+- dcrjson: Introduce v2 module without wallet types ([decred/dcrd#1607](https://github.com/decred/dcrd/pull/1607))
+- release: Freeze version 1 mempool module ([decred/dcrd#1613](https://github.com/decred/dcrd/pull/1613))
+- release: Introduce mempool v2 module ([decred/dcrd#1613](https://github.com/decred/dcrd/pull/1613))
+- main: Tidy module to latest ([decred/dcrd#1613](https://github.com/decred/dcrd/pull/1613))
+- main: Update for mempool/v2 ([decred/dcrd#1616](https://github.com/decred/dcrd/pull/1616))
+- multi: Add go 1.11 directive to all modules ([decred/dcrd#1677](https://github.com/decred/dcrd/pull/1677))
+- build: Tidy module sums (go mod tidy) ([decred/dcrd#1692](https://github.com/decred/dcrd/pull/1692))
+- release: Freeze version 1 hdkeychain module ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- release: Introduce hdkeychain v2 module ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- release: Freeze version 1 chaincfg module ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Introduce chaincfg v2 module ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- chaincfg: Use dcrec/edwards/v1.0.0 ([decred/dcrd#1758](https://github.com/decred/dcrd/pull/1758))
+- dcrutil: Prepare v1.3.0 ([decred/dcrd#1761](https://github.com/decred/dcrd/pull/1761))
+- release: freeze version 1 dcrec/edwards module ([decred/dcrd#1762](https://github.com/decred/dcrd/pull/1762))
+- edwards: Introduce v2 module ([decred/dcrd#1762](https://github.com/decred/dcrd/pull/1762))
+- release: freeze version 1 dcrec/secp256k1 module ([decred/dcrd#1764](https://github.com/decred/dcrd/pull/1764))
+- secp256k1: Introduce v2 module ([decred/dcrd#1764](https://github.com/decred/dcrd/pull/1764))
+- multi: Update all modules for chaincfg v1.5.1 ([decred/dcrd#1768](https://github.com/decred/dcrd/pull/1768))
+- release: Freeze version 1 dcrutil module ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Update to use chaincfg/v2 module ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- release: Introduce dcrutil v2 module ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- database: Use chaincfg/v2 ([decred/dcrd#1772](https://github.com/decred/dcrd/pull/1772))
+- txscript: Prepare v1.1.0 ([decred/dcrd#1773](https://github.com/decred/dcrd/pull/1773))
+- stake: Prepare v1.2.0 ([decred/dcrd#1775](https://github.com/decred/dcrd/pull/1775))
+- release: Freeze version 1 txscript module ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- txscript: Use dcrutil/v2 ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- release: Introduce txscript v2 module ([decred/dcrd#1774](https://github.com/decred/dcrd/pull/1774))
+- main: Add requires for new version modules ([decred/dcrd#1776](https://github.com/decred/dcrd/pull/1776))
+- dcrjson: Introduce v3 and move types to module ([decred/dcrd#1779](https://github.com/decred/dcrd/pull/1779))
+- jsonrpc/types: Prepare 1.0.0 ([decred/dcrd#1787](https://github.com/decred/dcrd/pull/1787))
+- main: Use latest JSON-RPC types ([decred/dcrd#1789](https://github.com/decred/dcrd/pull/1789))
+- multi: Use decred fork of go-socks ([decred/dcrd#1790](https://github.com/decred/dcrd/pull/1790))
+- rpcclient: Prepare v2.1.0 ([decred/dcrd#1791](https://github.com/decred/dcrd/pull/1791))
+- release: Freeze version 2 rpcclient module ([decred/dcrd#1793](https://github.com/decred/dcrd/pull/1793))
+- rpcclient: Use dcrjson/v3 ([decred/dcrd#1793](https://github.com/decred/dcrd/pull/1793))
+- release: Introduce rpcclient v3 module ([decred/dcrd#1793](https://github.com/decred/dcrd/pull/1793))
+- main: Use rpcclient/v3 ([decred/dcrd#1795](https://github.com/decred/dcrd/pull/1795))
+- hdkeychain: Prepare v2.0.1 ([decred/dcrd#1798](https://github.com/decred/dcrd/pull/1798))
+- release: Freeze version 1 database module ([decred/dcrd#1799](https://github.com/decred/dcrd/pull/1799))
+- database: Use dcrutil/v2 ([decred/dcrd#1799](https://github.com/decred/dcrd/pull/1799))
+- release: Introduce database v2 module ([decred/dcrd#1799](https://github.com/decred/dcrd/pull/1799))
+- release: Freeze version 1 blockchain/stake module ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- stake: Use dcrutil/v2 and chaincfg/v2 ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- Use txscript/v2 ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- stake: Use database/v2 ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- release: Introduce blockchain/stake v2 module ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- gcs: Use txscript/v2 ([decred/dcrd#1804](https://github.com/decred/dcrd/pull/1804))
+- gcs: Prepare v1.1.0 ([decred/dcrd#1804](https://github.com/decred/dcrd/pull/1804))
+- release: Freeze version 3 rpcclient module ([decred/dcrd#1807](https://github.com/decred/dcrd/pull/1807))
+- rpcclient: Use dcrutil/v2 and chaincfg/v2 ([decred/dcrd#1807](https://github.com/decred/dcrd/pull/1807))
+- release: Introduce rpcclient v4 module ([decred/dcrd#1807](https://github.com/decred/dcrd/pull/1807))
+- blockchain/standalone: Prepare v1.0.0 ([decred/dcrd#1817](https://github.com/decred/dcrd/pull/1817))
+- multi: Use crypto/blake256 ([decred/dcrd#1818](https://github.com/decred/dcrd/pull/1818))
+- main: Consume latest module minors and patches ([decred/dcrd#1822](https://github.com/decred/dcrd/pull/1822))
+- blockchain: Prepare v1.2.0 ([decred/dcrd#1820](https://github.com/decred/dcrd/pull/1820))
+- mining: Prepare v1.1.1 ([decred/dcrd#1826](https://github.com/decred/dcrd/pull/1826))
+- release: Freeze version 1 blockchain module use ([decred/dcrd#1823](https://github.com/decred/dcrd/pull/1823))
+- blockchain: Use lastest major version deps ([decred/dcrd#1823](https://github.com/decred/dcrd/pull/1823))
+- release: Introduce blockchain v2 module ([decred/dcrd#1823](https://github.com/decred/dcrd/pull/1823))
+- connmgr: Prepare v1.1.0 ([decred/dcrd#1828](https://github.com/decred/dcrd/pull/1828))
+- peer: Prepare v1.2.0 ([decred/dcrd#1830](https://github.com/decred/dcrd/pull/1830))
+- release: Freeze version 1 mining module use ([decred/dcrd#1831](https://github.com/decred/dcrd/pull/1831))
+- release: Introduce mining v2 module ([decred/dcrd#1831](https://github.com/decred/dcrd/pull/1831))
+- mempool: Prepare v2.1.0 ([decred/dcrd#1832](https://github.com/decred/dcrd/pull/1832))
+- release: Freeze version 1 connmgr module use ([decred/dcrd#1833](https://github.com/decred/dcrd/pull/1833))
+- release: Introduce connmgr v2 module ([decred/dcrd#1833](https://github.com/decred/dcrd/pull/1833))
+- release: Freeze version 1 peer module use ([decred/dcrd#1834](https://github.com/decred/dcrd/pull/1834))
+- release: Introduce peer v2 module ([decred/dcrd#1834](https://github.com/decred/dcrd/pull/1834))
+- blockchain: Prepare v2.0.1 ([decred/dcrd#1836](https://github.com/decred/dcrd/pull/1836))
+- release: Freeze version 2 mempool module use ([decred/dcrd#1835](https://github.com/decred/dcrd/pull/1835))
+- release: Introduce mempool v3 module ([decred/dcrd#1835](https://github.com/decred/dcrd/pull/1835))
+- go.mod: sync ([decred/dcrd#1913](https://github.com/decred/dcrd/pull/1913))
+- secp256k1: Prepare v2.0.0 ([decred/dcrd#1916](https://github.com/decred/dcrd/pull/1916))
+- wire: Prepare v1.3.0 ([decred/dcrd#1925](https://github.com/decred/dcrd/pull/1925))
+- chaincfg: Prepare v2.3.0 ([decred/dcrd#1926](https://github.com/decred/dcrd/pull/1926))
+- dcrjson: Prepare v3.0.1 ([decred/dcrd#1927](https://github.com/decred/dcrd/pull/1927))
+- rpc/jsonrpc/types: Prepare v2.0.0 ([decred/dcrd#1928](https://github.com/decred/dcrd/pull/1928))
+- dcrutil: Prepare v2.0.1 ([decred/dcrd#1929](https://github.com/decred/dcrd/pull/1929))
+- blockchain/standalone: Prepare v1.1.0 ([decred/dcrd#1930](https://github.com/decred/dcrd/pull/1930))
+- txscript: Prepare v2.1.0 ([decred/dcrd#1931](https://github.com/decred/dcrd/pull/1931))
+- database: Prepare v2.0.1 ([decred/dcrd#1932](https://github.com/decred/dcrd/pull/1932))
+- blockchain/stake: Prepare v2.0.2 ([decred/dcrd#1933](https://github.com/decred/dcrd/pull/1933))
+- gcs: Prepare v2.0.0 ([decred/dcrd#1934](https://github.com/decred/dcrd/pull/1934))
+- blockchain: Prepare v2.1.0 ([decred/dcrd#1935](https://github.com/decred/dcrd/pull/1935))
+- addrmgr: Prepare v1.1.0 ([decred/dcrd#1936](https://github.com/decred/dcrd/pull/1936))
+- connmgr: Prepare v2.1.0 ([decred/dcrd#1937](https://github.com/decred/dcrd/pull/1937))
+- hdkeychain: Prepare v2.1.0 ([decred/dcrd#1938](https://github.com/decred/dcrd/pull/1938))
+- peer: Prepare v2.1.0 ([decred/dcrd#1939](https://github.com/decred/dcrd/pull/1939))
+- fees: Prepare v2.0.0 ([decred/dcrd#1941](https://github.com/decred/dcrd/pull/1941))
+- rpcclient: Prepare v4.1.0 ([decred/dcrd#1943](https://github.com/decred/dcrd/pull/1943))
+- mining: Prepare v2.0.1 ([decred/dcrd#1944](https://github.com/decred/dcrd/pull/1944))
+- mempool: Prepare v3.1.0 ([decred/dcrd#1945](https://github.com/decred/dcrd/pull/1945))
+
+### Testing and Quality Assurance:
+
+- mempool: Accept test mungers for vote tx ([decred/dcrd#1595](https://github.com/decred/dcrd/pull/1595))
+- build: Replace TravisCI with CI via Github actions ([decred/dcrd#1903](https://github.com/decred/dcrd/pull/1903))
+- build: Setup github actions for CI ([decred/dcrd#1902](https://github.com/decred/dcrd/pull/1902))
+- TravisCI: Recommended install for golangci-lint ([decred/dcrd#1808](https://github.com/decred/dcrd/pull/1808))
+- TravisCI: Use more portable module ver stripping ([decred/dcrd#1784](https://github.com/decred/dcrd/pull/1784))
+- TravisCI: Test and lint latest version modules ([decred/dcrd#1776](https://github.com/decred/dcrd/pull/1776))
+- TravisCI: Disable race detector ([decred/dcrd#1749](https://github.com/decred/dcrd/pull/1749))
+- TravisCI: Set ./run_tests.sh executable perms ([decred/dcrd#1648](https://github.com/decred/dcrd/pull/1648))
+- travis: bump golangci-lint to v1.18.0 ([decred/dcrd#1890](https://github.com/decred/dcrd/pull/1890))
+- travis: Test go1.13 and drop go1.11 ([decred/dcrd#1875](https://github.com/decred/dcrd/pull/1875))
+- travis: Allow staged builds with build cache ([decred/dcrd#1797](https://github.com/decred/dcrd/pull/1797))
+- travis: drop docker and test directly ([decred/dcrd#1783](https://github.com/decred/dcrd/pull/1783))
+- travis: test go1.12 ([decred/dcrd#1627](https://github.com/decred/dcrd/pull/1627))
+- travis: Add misspell linter ([decred/dcrd#1618](https://github.com/decred/dcrd/pull/1618))
+- travis: run linters in each module ([decred/dcrd#1601](https://github.com/decred/dcrd/pull/1601))
+- multi: switch to golangci-lint ([decred/dcrd#1575](https://github.com/decred/dcrd/pull/1575))
+- blockchain: Consistent legacy seq lock tests ([decred/dcrd#1580](https://github.com/decred/dcrd/pull/1580))
+- blockchain: Add test logic to find deployments ([decred/dcrd#1581](https://github.com/decred/dcrd/pull/1581))
+- blockchain: Introduce chaingen test harness ([decred/dcrd#1583](https://github.com/decred/dcrd/pull/1583))
+- blockchain: Use harness in force head reorg tests ([decred/dcrd#1584](https://github.com/decred/dcrd/pull/1584))
+- blockchain: Use harness in stake version tests ([decred/dcrd#1585](https://github.com/decred/dcrd/pull/1585))
+- blockchain: Use harness in checkblktemplate tests ([decred/dcrd#1586](https://github.com/decred/dcrd/pull/1586))
+- blockchain: Use harness in threshold state tests ([decred/dcrd#1587](https://github.com/decred/dcrd/pull/1587))
+- blockchain: Use harness in legacy seqlock tests ([decred/dcrd#1588](https://github.com/decred/dcrd/pull/1588))
+- blockchain: Use harness in fixed seqlock tests ([decred/dcrd#1589](https://github.com/decred/dcrd/pull/1589))
+- multi: cleanup linter warnings ([decred/dcrd#1601](https://github.com/decred/dcrd/pull/1601))
+- txscript: Add remove signature reference test ([decred/dcrd#1604](https://github.com/decred/dcrd/pull/1604))
+- rpctest: Update for rpccclient/v2 and dcrjson/v2 ([decred/dcrd#1610](https://github.com/decred/dcrd/pull/1610))
+- wire: Add tests for MsgCFTypes ([decred/dcrd#1619](https://github.com/decred/dcrd/pull/1619))
+- chaincfg: Move a test to chainhash package ([decred/dcrd#1632](https://github.com/decred/dcrd/pull/1632))
+- rpctest: Add RemoveNode ([decred/dcrd#1643](https://github.com/decred/dcrd/pull/1643))
+- rpctest: Add NodesConnected ([decred/dcrd#1643](https://github.com/decred/dcrd/pull/1643))
+- dcrutil: Reduce global refs in addr unit tests ([decred/dcrd#1666](https://github.com/decred/dcrd/pull/1666))
+- dcrutil: Consolidate tests into package ([decred/dcrd#1669](https://github.com/decred/dcrd/pull/1669))
+- peer: Consolidate tests into package ([decred/dcrd#1670](https://github.com/decred/dcrd/pull/1670))
+- wire: Add tests for BlockHeader (From)Bytes ([decred/dcrd#1600](https://github.com/decred/dcrd/pull/1600))
+- wire: Add tests for MsgGetCFilter ([decred/dcrd#1628](https://github.com/decred/dcrd/pull/1628))
+- dcrutil: Add tests for NewTxDeep ([decred/dcrd#1684](https://github.com/decred/dcrd/pull/1684))
+- rpctest: Introduce VotingWallet ([decred/dcrd#1668](https://github.com/decred/dcrd/pull/1668))
+- txscript: Add stake tx remove opcode tests ([decred/dcrd#1210](https://github.com/decred/dcrd/pull/1210))
+- txscript: Move init func in benchmarks to top ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for script parsing ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for DisasmString ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Convert sighash calc tests ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for IsPayToScriptHash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmarks for IsMutlsigScript ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmarks for IsMutlsigSigScript ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for GetSigOpCount ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add tests for stake-tagged script hash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for isAnyKindOfScriptHash ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for IsPushOnlyScript ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for GetPreciseSigOpCount ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for GetScriptClass ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for pay-to-pubkey scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for pay-to-alt-pubkey scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for pay-to-pubkey-hash scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for pay-to-alt-pubkey-hash scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for null scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for stake submission scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for stake generation scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for stake revocation scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add bench for stake change scripts ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for ContainsStakeOpCodes ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for ExtractCoinbaseNullData ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add CalcMultiSigStats benchmark ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add multisig redeem script extract bench ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for PushedData ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add benchmark for IsUnspendable ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add tests for atomic swap extraction ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add ExtractAtomicSwapDataPushes benches ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add ExtractPkScriptAddrs benchmarks ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- txscript: Add ExtractPkScriptAltSigType benchmark ([decred/dcrd#1656](https://github.com/decred/dcrd/pull/1656))
+- wire: Add tests for MsgGetCFTypes ([decred/dcrd#1703](https://github.com/decred/dcrd/pull/1703))
+- blockchain: Allow named blocks in chaingen harness ([decred/dcrd#1701](https://github.com/decred/dcrd/pull/1701))
+- txscript: Cleanup opcode removal by data tests ([decred/dcrd#1702](https://github.com/decred/dcrd/pull/1702))
+- hdkeychain: Correct benchmark extended key ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Consolidate tests into package ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Use locally-scoped netparams in tests ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- hdkeychain: Use mock net params in tests ([decred/dcrd#1696](https://github.com/decred/dcrd/pull/1696))
+- wire: Add tests for MsgGetCFHeaders ([decred/dcrd#1720](https://github.com/decred/dcrd/pull/1720))
+- wire: Add tests for MsgCFHeaders ([decred/dcrd#1732](https://github.com/decred/dcrd/pull/1732))
+- main/rpctest: Update for hdkeychain/v2 ([decred/dcrd#1707](https://github.com/decred/dcrd/pull/1707))
+- rpctest: Allow custom miner on voting wallet ([decred/dcrd#1751](https://github.com/decred/dcrd/pull/1751))
+- wire: Add tests for MsgCFilter ([decred/dcrd#1741](https://github.com/decred/dcrd/pull/1741))
+- chaincfg; Add tests for required unique fields ([decred/dcrd#1698](https://github.com/decred/dcrd/pull/1698))
+- fullblocktests: Add coinbase nulldata tests ([decred/dcrd#1769](https://github.com/decred/dcrd/pull/1769))
+- dcrutil: Make docs example testable and correct it ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- dcrutil: Use mock addr params in tests ([decred/dcrd#1767](https://github.com/decred/dcrd/pull/1767))
+- wire: assert MaxMessagePayload limit in tests ([decred/dcrd#1755](https://github.com/decred/dcrd/pull/1755))
+- docker: use go 1.12 ([decred/dcrd#1782](https://github.com/decred/dcrd/pull/1782))
+- docker: update alpine and include notes ([decred/dcrd#1786](https://github.com/decred/dcrd/pull/1786))
+- hdkeychain: Correct a few comment typos ([decred/dcrd#1796](https://github.com/decred/dcrd/pull/1796))
+- database: Use unique test db names for v2 module ([decred/dcrd#1806](https://github.com/decred/dcrd/pull/1806))
+- main: Add database/v2 override for tests ([decred/dcrd#1806](https://github.com/decred/dcrd/pull/1806))
+- gcs: Add benchmark for AddSigScript ([decred/dcrd#1804](https://github.com/decred/dcrd/pull/1804))
+- txscript: Fix typo in script test data ([decred/dcrd#1821](https://github.com/decred/dcrd/pull/1821))
+- database: Separate dbs for concurrent db tests ([decred/dcrd#1824](https://github.com/decred/dcrd/pull/1824))
+- gcs: Overhaul tests and benchmarks ([decred/dcrd#1845](https://github.com/decred/dcrd/pull/1845))
+- rpctest: Remove leftover debug print ([decred/dcrd#1862](https://github.com/decred/dcrd/pull/1862))
+- txscript: Fix duplicate test name ([decred/dcrd#1863](https://github.com/decred/dcrd/pull/1863))
+- gcs: Add benchmark for filter hashing ([decred/dcrd#1853](https://github.com/decred/dcrd/pull/1853))
+- gcs: Add tests for bit reader/writer ([decred/dcrd#1855](https://github.com/decred/dcrd/pull/1855))
+- peer: Ensure listener tests sync with messages ([decred/dcrd#1874](https://github.com/decred/dcrd/pull/1874))
+- rpctest: remove always-nil error ([decred/dcrd#1913](https://github.com/decred/dcrd/pull/1913))
+- rpctest: use errgroup to catch errors from go routines ([decred/dcrd#1913](https://github.com/decred/dcrd/pull/1913))
+
+### Misc:
+
+- release: Bump for 1.5 release cycle ([decred/dcrd#1546](https://github.com/decred/dcrd/pull/1546))
+- mempool: Fix typo in fetchInputUtxos comment ([decred/dcrd#1562](https://github.com/decred/dcrd/pull/1562))
+- blockchain: Fix typos found by misspell ([decred/dcrd#1617](https://github.com/decred/dcrd/pull/1617))
+- dcrutil: Fix typos found by misspell ([decred/dcrd#1617](https://github.com/decred/dcrd/pull/1617))
+- main: Write memprofile on shutdown ([decred/dcrd#1655](https://github.com/decred/dcrd/pull/1655))
+- config: Parse network interfaces ([decred/dcrd#1514](https://github.com/decred/dcrd/pull/1514))
+- config: Cleanup and simplify network info parsing ([decred/dcrd#1706](https://github.com/decred/dcrd/pull/1706))
+- main: Rework windows service sod notification ([decred/dcrd#1710](https://github.com/decred/dcrd/pull/1710))
+- multi: fix recent govet findings ([decred/dcrd#1727](https://github.com/decred/dcrd/pull/1727))
+- rpcserver: Fix misspelling ([decred/dcrd#1763](https://github.com/decred/dcrd/pull/1763))
+- chaincfg: Run gofmt -s ([decred/dcrd#1776](https://github.com/decred/dcrd/pull/1776))
+- jsonrpc/types: Update copyright years ([decred/dcrd#1794](https://github.com/decred/dcrd/pull/1794))
+- stake: Correct comment typo on Hash256PRNG ([decred/dcrd#1803](https://github.com/decred/dcrd/pull/1803))
+- multi: Correct typos ([decred/dcrd#1839](https://github.com/decred/dcrd/pull/1839))
+- wire: Fix a few messageError string typos ([decred/dcrd#1840](https://github.com/decred/dcrd/pull/1840))
+- miningerror: Remove duplicate copyright ([decred/dcrd#1860](https://github.com/decred/dcrd/pull/1860))
+- multi: Correct typos ([decred/dcrd#1864](https://github.com/decred/dcrd/pull/1864))
+
+### Code Contributors (alphabetical order):
+
+- Aaron Campbell
+- Conner Fromknecht
+- Dave Collins
+- David Hill
+- Donald Adu-Poku
+- Hamid
+- J Fixby
+- Jamie Holdstock
+- JoeGruffins
+- Jonathan Chappelow
+- Josh Rickmar
+- Matheus Degiovani
+- Nicola Larosa
+- Olaoluwa Osuntokun
+- Roei Erez
+- Sarlor
+- Victor Oliveira
\ No newline at end of file
diff --git a/docs/release-notes/release-notes-1.5.1.md b/docs/release-notes/release-notes-1.5.1.md
new file mode 100644
index 00000000..f04d16f4
--- /dev/null
+++ b/docs/release-notes/release-notes-1.5.1.md
@@ -0,0 +1,28 @@
+# dcrd v1.5.1
+
+This is a patch release of dcrd to address a minor memory leak with authenticated RPC websocket clients on intermittent connections.   It also updates the `dcrctl` utility to include the new `auditreuse` dcrwallet command.
+
+## Changelog
+
+This patch release consists of 4 commits from 3 contributors which total to 4 files changed, 27 additional lines of code, and 6 deleted lines of code.
+
+All commits since the last release may be viewed on GitHub [here](https://github.com/decred/dcrd/compare/release-v1.5.0...release-v1.5.1).
+
+### RPC:
+
+- rpcwebsocket: Remove client from missed maps ([decred/dcrd#2049](https://github.com/decred/dcrd/pull/2049))
+- rpcwebsocket: Use nonblocking messages and ntfns ([decred/dcrd#2050](https://github.com/decred/dcrd/pull/2050))
+
+### dcrctl utility changes:
+
+- dcrctl: Update dcrwallet RPC types package ([decred/dcrd#2051](https://github.com/decred/dcrd/pull/2051))
+
+### Misc:
+
+- release: Bump for 1.5.1([decred/dcrd#2052](https://github.com/decred/dcrd/pull/2052))
+
+### Code Contributors (alphabetical order):
+
+- Dave Collins
+- Josh Rickmar
+- Matheus Degiovani
\ No newline at end of file
diff --git a/docs/simnet_environment.mediawiki b/docs/simnet_environment.mediawiki
new file mode 100644
index 00000000..eefc2b70
--- /dev/null
+++ b/docs/simnet_environment.mediawiki
@@ -0,0 +1,327 @@
+==1. Overview==
+
+When developing Decred applications or testing potential changes, it is often
+extremely useful to have a private test network where transactions are actually
+mined into blocks, difficulty levels are low enough to generate blocks on
+demand, it is possible to easily cause chain reorganizations for testing
+purposes, and otherwise have full control over the network.
+
+In order to facilitate these scenarios, <code>dcrd</code> provides a simulation
+network (<code>--simnet</code>), where the difficulty starts extremely low to
+enable fast CPU mining of blocks.  Simnet also has some modified functionality
+that helps developers avoid common issues early in development.
+
+Other components in the Decred ecosystem, such as <code>dcrwallet</code> and
+<code>dcrctl</code>, also support the simulation network to facilitate testing.
+
+As simnet is a temporary network for private use, there are no public block
+explorers or faucets available.
+
+===1.1 Distinguishing Properties===
+
+The following is an overview of the most important properties that distinguish
+it from the main network:
+
+* The difficulty starts extremely low to enable fast CPU mining of blocks
+* Networking changes:
+** All code related to peer discovery and IP address dissemination is disabled to help ensure the network remains private
+** The peer and RPC network ports are different
+** A unique network byte sequence is used in the peer-to-peer message protocol so the blocks can't accidentally be crossed with the main network
+* All chain and payment address parameters are unique to prevent confusion with the main network:
+** Different genesis block
+** Payment addresses start with different prefixes:
+*** Standard pay-to-pubkeyhash (P2PKH) starts with uppercase <code>S</code>
+*** Standard pay-to-scripthash (P2SH) starts with lowercase <code>s</code>
+** Exported hierarchical deterministic extended keys (BIP32) start with different prefixes:
+*** Public extended keys start with <code>spub</code>
+*** Private extended keys start with <code>sprv</code>
+** The BIP44 coin type used in HD key paths is lowercase <code>s</code>
+
+==2. Preconfigured Simnet Environment==
+
+The easiest way to get started using the simulation network is to make use of
+the preconfigured simnet environment setup shell script that is
+[[../contrib/dcr_tmux_simnet_setup.sh|provided in the repository at contrib/dcr_tmux_simnet_setup.sh]].
+
+This script makes use of [https://github.com/tmux/tmux tmux], which is
+typically readily available on Unix and Linux platforms, to setup a
+self-contained environment with several terminal-based windows and panes with
+<code>dcrd</code> and <code>dcrwallet</code> already configured.
+
+===2.1 Preconfigured Environment Overview===
+
+The following provides an overview of how the environment that is automatically
+setup by the aforementioned script is configured:
+
+* Multiple windows, each with two panes
+** The upper pane is either a <code>dcrd</code> instance or a <code>dcrwallet</code> instance
+** The lower pane provides a shell already in the directory associated with the process running in the upper pane
+* Two <code>dcrd</code> instances running simnet (named <code>dcrd1</code> and <code>dcrd2</code>)
+** The second connects to the first via a persistent/permanent connection
+* Two <code>dcrwallet</code> instances also running simnet (named <code>wallet1</code> and <code>wallet2</code>)
+** Both wallets are configured with the same seed
+** The <code>wallet1</code> instance:
+*** Connects to the <code>dcrd1</code> instance via JSON-RPC
+*** Automatically purchases tickets via the integrated ticket buyer
+*** Automatically votes
+** The <code> wallet2</code> instance:
+*** Connects to the <code>dcrd2</code> instance via JSON-RPC
+*** Automatically votes
+* Helper scripts accessible from the lower pane in each window that communicate with the associated process in the upper pane
+* Scripts available in the directories of all instances:
+** <code>ctl</code> - Invokes <code>dcrctl</code> communicating to the associated instance process
+** <code>stopall</code> - Stops all of the processes and closes the <code>tmux</code> session
+* Additional scripts for the <code>dcrd1</code> and <code>dcrd2</code> instances:
+** <code>mine</code> - Mines a specified number of blocks with a delay between
+* Additional scripts for the <code>dcrd2</code> instance:
+** <code>reorg</code> - Forces a chain reorganization in the instance
+* Additional scripts for the <code>wallet1</code> and <code>wallet2</code> instances:
+** <code>tickets</code> - Manually purchases the specified number of tickets with a default of 1
+** <code>xfer</code> - Creates a transaction that transfers (sends) funds to an address owned by the instance
+
+===2.2. Using the Preconfigured Environment===
+
+In order to get started, first ensure that the <code>dcrd</code>,
+<code>dcrwallet</code>, and <code>dcrctl</code> binaries you want to test with
+are available in your system path and that <code>tmux</code> is installed:
+
+  $ dcrd -V
+  dcrd version x.y.z (Go version <version> <os>)
+  $ dcrwallet -V
+  dcrwallet version x.y.z (Go version <version> <os>)
+  $ dcrctl -V
+  dcrctl version x.y.z (Go version <version> <os>)
+  $ tmux -V
+  tmux x.y.z
+
+Once that above has been verified, make the script executable and run it:
+
+  $ chmod +x dcr_tmux_simnet_setup.sh
+  $ ./dcr_tmux_simnet_setup.sh
+
+It will take a few seconds before the environment appears since it mines a bunch
+of initial blocks so that the environment has spendable coins immediately
+available.
+
+Once the environment launches, you will be in the bottom pane of the
+<code>dcrd1</code> window.  As the overview section describes, this lower pane
+provides convenience scripts for interacting with the <code>dcrd</code> instance
+running in the upper pane.
+
+At this point, everything is setup and ready to go.  Since it is running in a
+[https://github.com/tmux/tmux tmux] session, the various windows and panes can
+be accessed with normal <code>tmux</code> command sequences.  By default,
+<code>Ctrl+B</code> followed by a window number will switch to that number.  For
+example <code>Ctrl+B 1</code> will switch the window with the
+<code>dcrwallet1</code> instance and <code>Ctrl+B 0</code> will switch back to
+the window with the <code>dcrd1</code> instance.
+
+See the next sections for a quick tour of performing some basic tasks.
+
+====2.2.1 Basic Tasks - Interfacing with the <code>dcrd1</code> instance====
+
+Ensure the window that houses the <code>dcrd1</code> instance is active and the
+lower pane has focus.  This '''might''' require switching to the window with the
+tmux command sequence <code>Ctrl+B 0</code> and <code>Ctrl+B <down arrow></code>
+to switch to the pane.
+
+* Query the current best block of the private network:
+  $ ./ctl getbestblock
+  {
+    "hash": "this will be different each time the environment is launched",
+    "height": 32
+  }
+
+* To mine a couple of blocks:
+  $ ./mine 2
+  [
+    "block hash here"
+  ]
+  [
+    "different block hash here"
+  ]
+
+====2.2.2 Basic Tasks - Interfacing with the <code>wallet1</code> instance====
+
+Ensure the window that houses the <code>dcrwallet1</code> instance is active and
+the lower pane has focus.  This '''might''' require switching to the window with
+the tmux command sequence <code>Ctrl+B 1</code> and
+<code>Ctrl+B <down arrow></code> to switch to the pane.
+
+* Querying the wallet balance:
+  $ ./ctl getbalance
+  {
+    ...
+    "totalimmaturecoinbaserewards": 4800,
+    "totallockedbytickets": 0.0006894,
+    "totalspendable": 4800,
+    "cumulativetotal": 9899.9999675,
+    "totalunconfirmed": 299.9992781,
+    "totalvotingauthority": 0.0006
+  }
+
+* Manually buying tickets:
+  $ ./tickets 3
+  [
+    "first ticket hash here",
+    "second ticket hash here",
+    "third ticket hash here"
+  ]
+
+====2.2.3 Basic Tasks - Forcing a reorg via the <code>dcrd2</code> instance====
+
+Ensure the window that houses the <code>dcrd2</code> instance is active and the
+lower pane has focus.  This '''might''' require switching to the window with the
+tmux command sequence <code>Ctrl+B 2</code> and <code>Ctrl+B <down arrow></code>
+to switch to the pane.
+
+Force the reorg using the <code>reorg</code> convenience script:
+
+  $ ./reorg
+  [
+    "block hash mined in dcrd1 instance"
+  ]
+  [
+   "second block hash mined in dcrd1 instance"
+  ]
+  [
+    "block hash mined in dcrd2 instance"
+  ]
+
+The log file of <code>dcrd</code> in the upper pane will show something similar
+to:
+
+  [INF] CHAN: REORGANIZE: Chain forks at 012419307b328916facfce7120fdb526537b5f3faccd5039e1650deda87832fe (height 34)
+  [INF] CHAN: REORGANIZE: Old best chain tip was 0613b391b86d07a35c0c1ad09b2d14d0aaecc09e138b2646de4475996b9b24b7 (height 35)
+  [INF] CHAN: REORGANIZE: New best chain tip is 003af7ab2a8ec1708694ba96ad49038c3c20d5ac01da354125b67469d120f351 (height 36)
+
+====2.2.4 Basic Tasks - Shutting down the environment====
+
+From any instance command pane:
+
+  $ ./stopall
+  dcrd stopping.
+  dcrwallet stopping
+  dcrd stopping.
+  dcrwallet stopping
+  Seconds until shutdown: 3
+  ...
+
+<a name="CommonIssues" />
+
+===2.3. Common Issues===
+
+====2.3.1. Code changes don't seem to have any effect====
+
+The script runs the binaries from the system path.  Make sure you
+<code>go install</code> the changed binaries so the updated binaries are the
+ones that are being run.
+
+====2.3.2. Tickets aren't being purchased====
+
+This happens when too many blocks are mined too quickly and the wallet can't
+keep up.  The solution is to use the <code>./mine</code> script which adds a
+delay between each block to give the wallet a chance to purchase and send the
+tickets.
+
+====2.3.3. Rejected ticket purchases with errors similar to <code>rejected transaction X: transaction X expired at height Y</code>====
+
+This is caused by the same thing as the previous issue and has the same
+solution.
+
+====2.3.4. Errors similar to <code>list size too small: 0 < 5</code>====
+
+This happens if you stop buying tickets and mine enough blocks to the point the
+chain is unrecoverable due to the ticket pool becoming depleted.  The solution
+is to start over and ensure you are purchasing enough tickets.  A new chain is
+created every time the simnet environment setup script is run.
+
+Note that this error is temporary and will be replaced with a
+<code>chain continuity</code> error in the future.
+
+====2.3.5. Errors similar to <code>chain continuity not guaranteed after height X</code>====
+
+This happens if you stop buying tickets and mining the next block would cause
+the chain to become unrecoverable if no tickets are included due to depletion of
+the live ticket pool.  The solution is to purchase enough tickets so the block
+can be mined.
+
+==3. Manual Configuration==
+
+'''<p>
+It is _HIGHLY_ recommended to use the previously described preconfigured simnet
+environment instead of manually configuring things.  Not only does it greatly
+simplify things, it also provides a much more sophisticated setup than the
+basic one described here.
+</p>'''
+
+Running a single <code>dcrd</code> node on simnet is simply starting
+<code>dcrd</code> with the <code>--simnet</code> flag.  However, in order to be
+really useful, you'll typically want to be able to send coins amongst addresses
+which implies that blocks will need to be mined and interfacing with a wallet
+will be needed.
+
+In addition, since there are effectively no coins yet on the new private
+network, an initial series of blocks will need to be mined which pay to an
+address you own so there are usable coins to spend.
+
+As previously mentioned, simnet uses unique addresses to prevent confusion with
+the main network.  Thus, it means that a wallet which supports the address
+format must be used.  For this, <code>dcrwallet</code> with the
+<code>--simnet</code> flag can be used.
+
+The following is a command reference to get going:
+
+'''<p>
+NOTE: All of these commands can be simplified by creating config files and
+making use of them, however the commands here use all switches on the
+command line to show exactly what is needed for each.
+</p>'''
+
+* Create a new simnet wallet (this will be called the first window):
+  $ dcrwallet --simnet --create
+  Enter the private passphrase for your new wallet:
+  Confirm passphrase:
+  Do you want to add an additional layer of encryption for public data? (n/no/y/yes) [no]:
+  Do you have an existing wallet seed you want to use? (n/no/y/yes) [no]:
+  Your wallet generation seed is:
+  <seed here>
+  Hex: <seed in hex here>
+  ...
+  Once you have stored the seed in a safe and secure location, enter "OK" to continue: OK
+  Creating the wallet...
+  Mining address: S<rest of address here>     <---- Note this address
+  The wallet has been created successfully.
+
+* In a second window, start dcrd on simnet paying to the mining address from above:
+  $ dcrd --simnet --rpcuser=someuser --rpcpass=somepass --miningaddr=S<rest of address from above here>
+
+* In a third window, instruct dcrd to generate enough initial blocks for the first coinbase to mature and to have enough funds for purchasing tickets:
+  $ dcrctl --simnet --rpcuser=someuser --rpcpass=somepass generate 32
+
+* Back in the first window, start dcrwallet on simnet:
+'''<p>
+NOTE: It is important to perform this step AFTER the blocks have been mined
+above or the wallet will believe it's on an old coin type and will not see the
+balance properly.
+</p>'''
+
+  $ dcrwallet --simnet --username=someuser --password=somepass
+  ...
+  *** ATTENTION ***
+  Since this is your first time running we need to sync accounts. Please enter
+  the private wallet passphrase. This will complete syncing of the wallet
+  accounts and then leave your wallet unlocked. You may relock wallet after by
+  calling 'walletlock' through the RPC.
+  *****************
+  Enter private passphrase:
+  ...
+  [INF] SYNC: Blockchain sync completed, wallet ready for general usage.
+
+* Back in the third window, check the wallet balance to ensure spendable coins are available:
+  $ dcrctl --simnet --wallet --rpcuser=someuser --rpcpass=somepass getbalance
+
+At this point, there is a fully functional private simnet with coins available
+to send to other simnet addresses.  Any time one or more transactions are sent,
+a <code>generate 1</code> RPC must be issued to mine a new block with the
+transactions included.
diff --git a/internal/rpcserver/interface.go b/internal/rpcserver/interface.go
index 557faa4c..f79851fc 100644
--- a/internal/rpcserver/interface.go
+++ b/internal/rpcserver/interface.go
@@ -159,9 +159,6 @@ type SyncManager interface {
 	// ExistsAddrIndex returns the address index.
 	ExistsAddrIndex() *indexers.ExistsAddrIndex
 
-	// CFIndex returns the committed filter (cf) by hash index.
-	CFIndex() *indexers.CFIndex
-
 	// TipGeneration returns the entire generation of blocks stemming from the
 	// parent of the current tip.
 	TipGeneration() ([]chainhash.Hash, error)
@@ -318,14 +315,6 @@ type Chain interface {
 	// FetchUtxoStats returns statistics on the current utxo set.
 	FetchUtxoStats() (*blockchain.UtxoStats, error)
 
-	// FilterByBlockHash returns the version 2 GCS filter for the given block hash
-	// when it exists.  This function returns the filters regardless of whether or
-	// not their associated block is part of the main chain.
-	//
-	// An error of type blockchain.NoFilterError must be returned when the filter
-	// for the given block hash does not exist.
-	FilterByBlockHash(hash *chainhash.Hash) (*gcs.FilterV2, error)
-
 	// GetStakeVersions returns a cooked array of StakeVersions.  We do this in
 	// order to not bloat memory by returning raw blocks.
 	GetStakeVersions(hash *chainhash.Hash, count int32) ([]blockchain.StakeVersions, error)
@@ -516,3 +505,36 @@ type BlockTemplater interface {
 	// time while taking into account the consensus rules.
 	UpdateBlockTime(header *wire.BlockHeader) error
 }
+
+// Filterer provides an interface for retrieving a block's committed filter or
+// committed filter header.
+//
+// The interface contract requires that all of these methods are safe for
+// concurrent access.
+//
+// Deprecated: This will be removed in the next major version.  Use FiltererV2
+// instead.
+type Filterer interface {
+	// FilterByBlockHash returns the serialized contents of a block's regular or
+	// extended committed filter.
+	FilterByBlockHash(h *chainhash.Hash, filterType wire.FilterType) ([]byte, error)
+
+	// FilterHeaderByBlockHash returns the serialized contents of a block's regular
+	// or extended committed filter header.
+	FilterHeaderByBlockHash(h *chainhash.Hash, filterType wire.FilterType) ([]byte, error)
+}
+
+// FiltererV2 provides an interface for retrieving a block's version 2 GCS
+// filter.
+//
+// The interface contract requires that all of these methods are safe for
+// concurrent access.
+type FiltererV2 interface {
+	// FilterByBlockHash returns the version 2 GCS filter for the given block hash
+	// when it exists.  This function returns the filters regardless of whether or
+	// not their associated block is part of the main chain.
+	//
+	// An error of type blockchain.NoFilterError must be returned when the filter
+	// for the given block hash does not exist.
+	FilterByBlockHash(hash *chainhash.Hash) (*gcs.FilterV2, error)
+}
diff --git a/internal/rpcserver/rpcserver.go b/internal/rpcserver/rpcserver.go
index 91e62b19..29039819 100644
--- a/internal/rpcserver/rpcserver.go
+++ b/internal/rpcserver/rpcserver.go
@@ -2196,9 +2196,11 @@ func handleGetHashesPerSec(_ context.Context, s *Server, cmd interface{}) (inter
 }
 
 // handleGetCFilter implements the getcfilter command.
+//
+// Deprecated: This will be removed in the next major version.  Use
+// handleGetCFilterV2 instead.
 func handleGetCFilter(_ context.Context, s *Server, cmd interface{}) (interface{}, error) {
-	cfIndex := s.cfg.SyncMgr.CFIndex()
-	if cfIndex == nil {
+	if s.cfg.Filterer == nil {
 		return nil, &dcrjson.RPCError{
 			Code:    dcrjson.ErrRPCNoCFIndex,
 			Message: "Compact filters must be enabled for this command",
@@ -2221,7 +2223,7 @@ func handleGetCFilter(_ context.Context, s *Server, cmd interface{}) (interface{
 		return nil, rpcInvalidError("Unknown filter type %q", c.FilterType)
 	}
 
-	filterBytes, err := cfIndex.FilterByBlockHash(hash, filterType)
+	filterBytes, err := s.cfg.Filterer.FilterByBlockHash(hash, filterType)
 	if err != nil {
 		context := fmt.Sprintf("Failed to load %v filter for block %v",
 			filterType, hash)
@@ -2239,9 +2241,11 @@ func handleGetCFilter(_ context.Context, s *Server, cmd interface{}) (interface{
 }
 
 // handleGetCFilterHeader implements the getcfilterheader command.
+//
+// Deprecated: This will be removed in the next major version.  Use
+// handleGetCFilterV2 instead.
 func handleGetCFilterHeader(_ context.Context, s *Server, cmd interface{}) (interface{}, error) {
-	cfIndex := s.cfg.SyncMgr.CFIndex()
-	if cfIndex == nil {
+	if s.cfg.Filterer == nil {
 		return nil, &dcrjson.RPCError{
 			Code:    dcrjson.ErrRPCNoCFIndex,
 			Message: "The CF index must be enabled for this command",
@@ -2265,7 +2269,7 @@ func handleGetCFilterHeader(_ context.Context, s *Server, cmd interface{}) (inte
 			c.FilterType)
 	}
 
-	headerBytes, err := cfIndex.FilterHeaderByBlockHash(hash, filterType)
+	headerBytes, err := s.cfg.Filterer.FilterHeaderByBlockHash(hash, filterType)
 	if err != nil {
 		context := fmt.Sprintf("Failed to load %v filter header for block %v",
 			filterType, hash)
@@ -2337,7 +2341,7 @@ func handleGetCFilterV2(_ context.Context, s *Server, cmd interface{}) (interfac
 		return nil, rpcDecodeHexError(c.BlockHash)
 	}
 
-	filter, err := s.cfg.Chain.FilterByBlockHash(hash)
+	filter, err := s.cfg.FiltererV2.FilterByBlockHash(hash)
 	if err != nil {
 		var nErr blockchain.NoFilterError
 		if errors.As(err, &nErr) {
@@ -5674,6 +5678,12 @@ type Config struct {
 
 	// LogManager defines the log manager for the RPC server to use.
 	LogManager LogManager
+
+	// Filterer defines the filterer for the RPC server to use.
+	Filterer Filterer
+
+	// FiltererV2 defines the V2 filterer for the RPC server to use.
+	FiltererV2 FiltererV2
 }
 
 // New returns a new instance of the Server struct.
diff --git a/internal/rpcserver/rpcserverhelp.go b/internal/rpcserver/rpcserverhelp.go
index 324177b1..3359632b 100644
--- a/internal/rpcserver/rpcserverhelp.go
+++ b/internal/rpcserver/rpcserverhelp.go
@@ -310,7 +310,7 @@ var helpDescsEnUS = map[string]string{
 	"getblockverboseresult-chainwork":         "The total number of hashes expected to produce the chain up to the block in hex",
 	"getblockverboseresult-previousblockhash": "The hash of the previous block",
 	"getblockverboseresult-nextblockhash":     "The hash of the next block (only if there is one)",
-	"getblockverboseresult-sbits":             "The stake difficulty of theblock",
+	"getblockverboseresult-sbits":             "The stake difficulty of the block",
 	"getblockverboseresult-poolsize":          "The size of the live ticket pool",
 	"getblockverboseresult-revocations":       "The number of revocations in the block",
 	"getblockverboseresult-freshstake":        "The number of new tickets in the block",
@@ -377,13 +377,15 @@ var helpDescsEnUS = map[string]string{
 	"getblocksubsidyresult-total":     "The total subsidy",
 
 	// GetCFilterCmd help.
-	"getcfilter--synopsis":  "Returns the committed filter for a block",
+	"getcfilter--synopsis": "Returns the committed filter for a block.\n\n" +
+		"Deprecated: Use handleGetCFilterV2 instead.",
 	"getcfilter--result0":   "The committed filter serialized with the N value and encoded as a hex string",
 	"getcfilter-hash":       "The block hash of the filter being queried",
 	"getcfilter-filtertype": "The type of committed filter to return",
 
 	// GetCFilterHeaderCmd help.
-	"getcfilterheader--synopsis":  "Returns the filter header hash committing to all filters in the chain up through a block",
+	"getcfilterheader--synopsis": "Returns the filter header hash committing to all filters in the chain up through a block.\n\n" +
+		"Deprecated: Use handleGetCFilterV2 instead.",
 	"getcfilterheader--result0":   "The filter header commitment hash",
 	"getcfilterheader-hash":       "The block hash of the filter header being queried",
 	"getcfilterheader-filtertype": "The type of committed filter to return the header commitment for",
@@ -792,7 +794,7 @@ var helpDescsEnUS = map[string]string{
 	"notifystakedifficulty--synopsis": "Request notifications for whenever stake difficulty goes up.",
 
 	// NotifyWinningTicketsCmd help
-	"notifywinningtickets--synopsis": "Request notifications for whenever any tickets is chosen to vote.",
+	"notifywinningtickets--synopsis": "Request notifications for whenever any tickets are chosen to vote.",
 
 	// NotifyBlocksCmd help.
 	"notifyblocks--synopsis": "Request notifications for whenever a block is connected or disconnected from the main (best) chain.",
diff --git a/release/notes.sample b/release/notes.sample
deleted file mode 100644
index 86a79a61..00000000
--- a/release/notes.sample
+++ /dev/null
@@ -1,6 +0,0 @@
-- Each release note is preceded by a dash
-- Each release note must not exceed 74 characters per line
-- Release notes that require a longer explanation than will fit on a
-  single line should be wrapped with the text indented as in this line
-- No periods at the end of each release note
-- Other minor cleanup and bug fixes
diff --git a/release/prep_release.sh b/release/prep_release.sh
deleted file mode 100644
index be465052..00000000
--- a/release/prep_release.sh
+++ /dev/null
@@ -1,206 +0,0 @@
-#!/bin/sh
-#
-# Copyright (c) 2013 Conformal Systems LLC <info@conformal.com>
-# Copyright (c) 2016 The Decred Authors
-#
-# Permission to use, copy, modify, and distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#
-#
-# Prepares for a release:
-#   - Bumps version according to specified level (major, minor, or patch)
-#   - Updates all version files and package control files with new version
-#   - Performs some basic validation on specified release notes
-#   - Updates project changes file with release notes
-#
-
-PROJECT=dcrd
-PROJECT_UC=$(echo $PROJECT | tr '[:lower:]' '[:upper:]')
-SCRIPT=$(basename $0)
-VERFILE=../version.go
-VERFILES="$VERFILE ../cmd/dcrctl/version.go"
-PROJ_CHANGES=../CHANGES
-
-# verify params
-if [ $# -lt 2 ]; then
-	echo "usage: $SCRIPT {major | minor | patch} release-notes-file"
-	exit 1
-fi
-
-CUR_DIR=$(pwd)
-cd "$(dirname $0)"
-
-# verify version files exist
-for verfile in $VERFILES; do
-	if [ ! -f "$verfile" ]; then
-		echo "$SCRIPT: error: $verfile does not exist" 1>&2
-		exit 1
-	fi
-done
-
-# verify changes file exists
-if [ ! -f "$PROJ_CHANGES" ]; then
-	echo "$SCRIPT: error: $PROJ_CHANGES does not exist" 1>&2
-	exit 1
-fi
-
-RTYPE="$1"
-RELEASE_NOTES="$2"
-if [ $(echo $RELEASE_NOTES | cut -c1) != "/" ]; then
-	RELEASE_NOTES="$CUR_DIR/$RELEASE_NOTES"
-fi
-
-# verify valid release type
-if [ "$RTYPE" != "major" -a "$RTYPE" != "minor" -a "$RTYPE" != "patch" ]; then
-	echo "$SCRIPT: error: release type must be major, minor, or patch"
-	exit 1
-fi
-
-# verify release notes
-if [ ! -e "$RELEASE_NOTES" ]; then
-	echo "$SCRIPT: error: specified release notes file does not exist"
-	exit 1
-fi
-
-if [ ! -s "$RELEASE_NOTES" ]; then
-	echo "$SCRIPT: error: specified release notes file is empty"
-	exit 1
-fi
-
-# verify release notes format
-while IFS='' read line; do
-	if [ -z "$line" ]; then
-		echo "$SCRIPT: error: release notes must not have blank lines"
-		exit 1
-	fi
-	if [ ${#line} -gt 74 ]; then
-		echo -n "$SCRIPT: error: release notes must not contain lines "
-		echo    "with more than 74 characters"
-		exit 1
-	fi
-	if expr "$line" : ".*\.$" >/dev/null 2>&1 ; then
-		echo -n "$SCRIPT: error: release notes must not contain lines "
-		echo    "that end in a period"
-		exit 1
-	fi
-	if ! expr "$line" : "\-" >/dev/null 2>&1; then
-	if ! expr "$line" : "  " >/dev/null 2>&1; then
-		echo -n "$SCRIPT: error: release notes must not contain lines "
-		echo    "that do not begin with a dash and are not indented"
-		exit 1
-	fi
-	fi
-done <"$RELEASE_NOTES"
-
-# verify git is available
-if ! type git >/dev/null 2>&1; then
-	echo -n "$SCRIPT: error: Unable to find 'git' in the system path."
-	exit 1
-fi
-
-# verify the git repository is on the master branch
-BRANCH=$(git branch | grep '\*' | cut -c3-)
-if [ "$BRANCH" != "master" ]; then
-	echo "$SCRIPT: error: git repository must be on the master branch."
-	exit 1
-fi
-
-# verify there are no uncommitted modifications prior to release modifications
-NUM_MODIFIED=$(git diff 2>/dev/null | wc -l | sed 's/^[ \t]*//')
-NUM_STAGED=$(git diff --cached 2>/dev/null | wc -l | sed 's/^[ \t]*//')
-if [ "$NUM_MODIFIED" != "0" -o "$NUM_STAGED" != "0" ]; then
-	echo -n "$SCRIPT: error: the working directory contains uncommitted "
-	echo    "modifications"
-	exit 1
-fi
-
-# get version
-PAT_PREFIX="(^[[:space:]]+app"
-PAT_SUFFIX='[[:space:]]+uint[[:space:]]+=[[:space:]]+)[0-9]+$'
-MAJOR=$(egrep "${PAT_PREFIX}Major${PAT_SUFFIX}" $VERFILE | awk '{print $4}')
-MINOR=$(egrep "${PAT_PREFIX}Minor${PAT_SUFFIX}" $VERFILE | awk '{print $4}')
-PATCH=$(egrep "${PAT_PREFIX}Patch${PAT_SUFFIX}" $VERFILE | awk '{print $4}')
-if [ -z "$MAJOR" -o -z "$MINOR" -o -z "$PATCH" ]; then
-	echo "$SCRIPT: error: unable to get version from $VERFILE" 1>&2
-	exit 1
-fi
-
-# bump version according to level
-if [ "$RTYPE" = "major" ]; then
-	MAJOR=$(expr $MAJOR + 1)
-	MINOR=0
-	PATCH=0
-elif [ "$RTYPE" = "minor" ]; then
-	MINOR=$(expr $MINOR + 1)
-	PATCH=0
-elif [ "$RTYPE" = "patch" ]; then
-	PATCH=$(expr $PATCH + 1)
-fi
-PROJ_VER="$MAJOR.$MINOR.$PATCH"
-
-# update project changes with release notes
-DATE=$(date "+%a %b %d %Y")
-awk -v D="$DATE" -v VER="$PROJ_VER" '
-/=======/ && first_line==0 {
-	first_line=1
-	print $0
-	next
-}
-/=======/ && first_line==1 {
-	print $0
-	print ""
-	print "Changes in "VER" ("D")"
-	exit
-}
-{ print $0 }
-' <"$PROJ_CHANGES" >"${PROJ_CHANGES}.tmp"
-cat "$RELEASE_NOTES" | sed 's/^/  /' >>"${PROJ_CHANGES}.tmp"
-awk '
-/=======/ && first_line==0 {
-	first_line=1
-	next
-}
-/=======/ && first_line==1 {
-	second_line=1
-	next
-}
-second_line==1 { print $0 }
-' <"$PROJ_CHANGES" >>"${PROJ_CHANGES}.tmp"
-
-# update version filef with new version
-for verfile in $VERFILES; do
-	sed -E "
-	    s/${PAT_PREFIX}Major${PAT_SUFFIX}/\1${MAJOR}/;
-	    s/${PAT_PREFIX}Minor${PAT_SUFFIX}/\1${MINOR}/;
-	    s/${PAT_PREFIX}Patch${PAT_SUFFIX}/\1${PATCH}/;
-	" <"$verfile" >"${verfile}.tmp"
-done
-
-
-# Apply changes
-mv "${PROJ_CHANGES}.tmp" "$PROJ_CHANGES"
-for verfile in $VERFILES; do
-	mv "${verfile}.tmp" "$verfile"
-done
-
-echo "All files have been prepared for release."
-echo "Use the following commands to review the changes for accuracy:"
-echo "  git status"
-echo "  git diff"
-echo ""
-echo "If everything is accurate, use the following commands to commit, tag,"
-echo "and push the changes"
-echo "  git commit -am \"Prepare for release ${PROJ_VER}.\""
-echo -n "  git tag -a \"${PROJECT_UC}_${MAJOR}_${MINOR}_${PATCH}\" -m "
-echo    "\"Release ${PROJ_VER}\""
-echo "  git push"
-echo "  git push --tags"
diff --git a/rpcadaptors.go b/rpcadaptors.go
index ad643d7d..c7e97b1a 100644
--- a/rpcadaptors.go
+++ b/rpcadaptors.go
@@ -371,14 +371,6 @@ func (b *rpcSyncMgr) ExistsAddrIndex() *indexers.ExistsAddrIndex {
 	return b.server.existsAddrIndex
 }
 
-// CFIndex returns the committed filter (cf) by hash index.
-//
-// This function is safe for concurrent access and is part of the
-// rpcserver.SyncManager interface implementation.
-func (b *rpcSyncMgr) CFIndex() *indexers.CFIndex {
-	return b.server.cfIndex
-}
-
 // TipGeneration returns the entire generation of blocks stemming from the
 // parent of the current tip.
 func (b *rpcSyncMgr) TipGeneration() ([]chainhash.Hash, error) {
@@ -584,3 +576,24 @@ func (c *rpcCPUMiner) SetNumWorkers(numWorkers int32) {
 		c.miner.SetNumWorkers(numWorkers)
 	}
 }
+
+// rpcFilterer provides methods for retrieving a block's committed filter or
+// committed filter header and implements the rpcserver.Filterer interface.
+//
+// Deprecated: This will be removed in the next major version.  Use
+// rpcFiltererV2 instead.
+type rpcFilterer struct {
+	*indexers.CFIndex
+}
+
+// Ensure rpcFilterer implements the rpcserver.Filterer interface.
+var _ rpcserver.Filterer = (*rpcFilterer)(nil)
+
+// rpcFiltererV2 provides methods for retrieving a block's version 2 GCS filter
+// and implements the rpcserver.FiltererV2 interface.
+type rpcFiltererV2 struct {
+	*blockchain.BlockChain
+}
+
+// Ensure rpcFiltererV2 implements the rpcserver.FiltererV2 interface.
+var _ rpcserver.FiltererV2 = (*rpcFiltererV2)(nil)
diff --git a/rpcclient/notify.go b/rpcclient/notify.go
index 6c91fb03..e2250e84 100644
--- a/rpcclient/notify.go
+++ b/rpcclient/notify.go
@@ -29,7 +29,7 @@ var (
 )
 
 // notificationState is used to track the current state of successfully
-// registered notification so the state can be automatically re-established on
+// registered notifications so the state can be automatically re-established on
 // reconnect.
 type notificationState struct {
 	notifyBlocks                bool
@@ -906,8 +906,7 @@ func (c *Client) NotifyBlocks(ctx context.Context) error {
 // NotifyWork registers the client to receive notifications when a new block
 // template has been generated.
 //
-// The notifications delivered as a result of this call will be via one of
-// OnWork.
+// The notifications delivered as a result of this call will be via OnWork.
 //
 // NOTE: This is a dcrd extension and requires a websocket connection.
 func (c *Client) NotifyWork(ctx context.Context) error {
@@ -950,7 +949,7 @@ func (c *Client) NotifyWinningTicketsAsync(ctx context.Context) *FutureNotifyWin
 }
 
 // NotifyWinningTickets registers the client to receive notifications when
-// blocks are connected to the main chain and tickets are spent or missed.  The
+// blocks are connected to the main chain and tickets are chosen to vote.  The
 // notifications are delivered to the notification handlers associated with the
 // client.  Calling this function has no effect if there are no notification
 // handlers and will result in an error if the client is configured to run in HTTP
@@ -1127,7 +1126,7 @@ func (r *FutureNotifyNewTransactionsResult) Receive() error {
 // get the result of the RPC at some future time by invoking the Receive
 // function on the returned instance.
 //
-// See NotifyNewTransactionsAsync for the blocking version and more details.
+// See NotifyNewTransactions for the blocking version and more details.
 //
 // NOTE: This is a dcrd extension and requires a websocket connection.
 func (c *Client) NotifyNewTransactionsAsync(ctx context.Context, verbose bool) *FutureNotifyNewTransactionsResult {
diff --git a/server.go b/server.go
index bbe6b080..ce726750 100644
--- a/server.go
+++ b/server.go
@@ -3304,6 +3304,13 @@ func newServer(ctx context.Context, listenAddrs []string, db database.DB, chainP
 			MaxProtocolVersion:   maxProtocolVersion,
 			UserAgentVersion:     userAgentVersion,
 			LogManager:           &rpcLogManager{},
+			Filterer: func() rpcserver.Filterer {
+				if s.cfIndex == nil {
+					return nil
+				}
+				return &rpcFilterer{s.cfIndex}
+			}(),
+			FiltererV2: &rpcFiltererV2{s.chain},
 		})
 		if err != nil {
 			return nil, err


Test patch:
diff --git a/internal/rpcserver/rpcserverhandlers_test.go b/internal/rpcserver/rpcserverhandlers_test.go
index d00d9867..6cf8f250 100644
--- a/internal/rpcserver/rpcserverhandlers_test.go
+++ b/internal/rpcserver/rpcserverhandlers_test.go
@@ -32,6 +32,7 @@ import (
 	"github.com/decred/dcrd/dcrjson/v3"
 	"github.com/decred/dcrd/dcrutil/v3"
 	"github.com/decred/dcrd/gcs/v2"
+	"github.com/decred/dcrd/gcs/v2/blockcf2"
 	"github.com/decred/dcrd/internal/mempool"
 	"github.com/decred/dcrd/internal/version"
 	"github.com/decred/dcrd/peer/v2"
@@ -129,7 +130,6 @@ type testRPCChain struct {
 	estimateNextStakeDifficultyFn   func(newTickets int64, useMaxTickets bool) (diff int64, err error)
 	fetchUtxoEntry                  UtxoEntry
 	fetchUtxoStats                  *blockchain.UtxoStats
-	filterByBlockHash               *gcs.FilterV2
 	getStakeVersions                []blockchain.StakeVersions
 	getStakeVersionsErr             error
 	getVoteCounts                   blockchain.VoteCounts
@@ -256,12 +256,6 @@ func (c *testRPCChain) FetchUtxoStats() (*blockchain.UtxoStats, error) {
 	return c.fetchUtxoStats, nil
 }
 
-// FilterByBlockHash returns a mocked version 2 GCS filter for the given block
-// hash when it exists.
-func (c *testRPCChain) FilterByBlockHash(hash *chainhash.Hash) (*gcs.FilterV2, error) {
-	return c.filterByBlockHash, nil
-}
-
 // GetStakeVersions returns a mocked cooked array of StakeVersions.
 func (c *testRPCChain) GetStakeVersions(hash *chainhash.Hash, count int32) ([]blockchain.StakeVersions, error) {
 	return c.getStakeVersions, c.getStakeVersionsErr
@@ -450,7 +444,6 @@ type testSyncManager struct {
 	syncPeerID         int32
 	locateBlocks       []chainhash.Hash
 	existsAddrIndex    *indexers.ExistsAddrIndex
-	cfIndex            *indexers.CFIndex
 	tipGeneration      []chainhash.Hash
 	syncHeight         int64
 	processTransaction []*dcrutil.Tx
@@ -485,11 +478,6 @@ func (s *testSyncManager) ExistsAddrIndex() *indexers.ExistsAddrIndex {
 	return s.existsAddrIndex
 }
 
-// CFIndex returns a mocked committed filter (cf) by hash index.
-func (s *testSyncManager) CFIndex() *indexers.CFIndex {
-	return s.cfIndex
-}
-
 // TipGeneration returns a mocked entire generation of blocks stemming from the
 // parent of the current tip.
 func (s *testSyncManager) TipGeneration() ([]chainhash.Hash, error) {
@@ -655,6 +643,12 @@ func (l *testLogManager) SupportedSubsystems() []string {
 	return l.supportedSubsystems
 }
 
+// ParseAndSetDebugLevels provides a mock implementation for parsing the
+// specified debug level and setting the levels accordingly.
+func (l *testLogManager) ParseAndSetDebugLevels(debugLevel string) error {
+	return l.parseAndSetDebugLevelsErr
+}
+
 // testSanityChecker provides a mock implementation that checks the sanity
 // state of a block.
 type testSanityChecker struct {
@@ -666,10 +660,37 @@ func (s *testSanityChecker) CheckBlockSanity(block *dcrutil.Block) error {
 	return s.checkBlockSanityErr
 }
 
-// ParseAndSetDebugLevels provides a mock implementation for parsing the
-// specified debug level and setting the levels accordingly.
-func (l *testLogManager) ParseAndSetDebugLevels(debugLevel string) error {
-	return l.parseAndSetDebugLevelsErr
+// testFilterer provides a mock filterer by implementing the Filterer interface.
+type testFilterer struct {
+	filterByBlockHash          []byte
+	filterByBlockHashErr       error
+	filterHeaderByBlockHash    []byte
+	filterHeaderByBlockHashErr error
+}
+
+// FilterByBlockHash returns a mocked regular or extended committed filter for
+// the given block hash.
+func (f *testFilterer) FilterByBlockHash(h *chainhash.Hash, filterType wire.FilterType) ([]byte, error) {
+	return f.filterByBlockHash, f.filterByBlockHashErr
+}
+
+// FilterHeaderByBlockHash returns a mocked regular or extended committed filter
+// header for the given block hash.
+func (f *testFilterer) FilterHeaderByBlockHash(h *chainhash.Hash, filterType wire.FilterType) ([]byte, error) {
+	return f.filterHeaderByBlockHash, f.filterHeaderByBlockHashErr
+}
+
+// testFiltererV2 provides a mock V2 filterer by implementing the FiltererV2
+// interface.
+type testFiltererV2 struct {
+	filterByBlockHash    *gcs.FilterV2
+	filterByBlockHashErr error
+}
+
+// FilterByBlockHash returns a mocked version 2 GCS filter for the given block
+// hash.
+func (f *testFiltererV2) FilterByBlockHash(hash *chainhash.Hash) (*gcs.FilterV2, error) {
+	return f.filterByBlockHash, f.filterByBlockHashErr
 }
 
 // mustParseHash converts the passed big-endian hex string into a
@@ -743,6 +764,8 @@ type rpcTest struct {
 	mockConnManager   *testConnManager
 	mockClock         *testClock
 	mockLogManager    *testLogManager
+	mockFilterer      *testFilterer
+	mockFiltererV2    *testFiltererV2
 	result            interface{}
 	wantErr           bool
 	errCode           dcrjson.RPCErrorCode
@@ -787,6 +810,8 @@ var defaultChainParams = func() *chaincfg.Params {
 	}
 	testChainParams.PowLimitBits = 0x1d00ffff
 	testChainParams.StakeDiffWindowSize = 144
+	testChainParams.GenesisHash = *mustParseHash("298e5cc3d985bfe7f81dc135f360ab" +
+		"e089edd4396b86d2de66b0cef42b21d980")
 	return testChainParams
 }()
 
@@ -802,7 +827,6 @@ func defaultMockRPCChain() *testRPCChain {
 	blkHash := blk.Hash()
 	blkHeight := blk.Height()
 	chainWork, _ := new(big.Int).SetString("0e805fb85284503581c57c", 16)
-	filter, _ := gcs.FromBytesV2(20, 1<<20, nil)
 	return &testRPCChain{
 		bestSnapshot: &blockchain.BestState{
 			Hash:           *blkHash,
@@ -860,7 +884,6 @@ func defaultMockRPCChain() *testRPCChain {
 			Total:          1154067750680149,
 			SerializedHash: *mustParseHash("fe7b32aa188800f07268b17f3bead5f3d8a1b6d18654182066436efce6effa86"),
 		},
-		filterByBlockHash: filter,
 		getStakeVersions: []blockchain.StakeVersions{{
 			Hash:         *blkHash,
 			Height:       blkHeight,
@@ -1008,6 +1031,20 @@ func defaultMockLogManager() *testLogManager {
 	}
 }
 
+// defaultMockFiltererV2 provides a default mock V2 filterer to be used
+// throughout the tests. Tests can override these defaults by calling
+// defaultMockFiltererV2, updating fields as necessary on the returned
+// *testFiltererV2, and then setting rpcTest.mockFiltererV2 as that
+// *testFiltererV2.
+func defaultMockFiltererV2() *testFiltererV2 {
+	block432100Filter := hexToBytes("11cdaad289eb092b5fd6ad60c7f7f197c2234dcbc74" +
+		"b14e1a477b319eae9d189cfae45f06a225965c7e932fc7600")
+	filter, _ := gcs.FromBytesV2(blockcf2.B, blockcf2.M, block432100Filter)
+	return &testFiltererV2{
+		filterByBlockHash: filter,
+	}
+}
+
 // defaultMockConfig provides a default Config that is used throughout
 // the tests.  Defaults can be overridden by tests through the rpcTest struct.
 func defaultMockConfig(chainParams *chaincfg.Params) *Config {
@@ -1021,6 +1058,7 @@ func defaultMockConfig(chainParams *chaincfg.Params) *Config {
 		ConnMgr:       defaultMockConnManager(),
 		Clock:         &testClock{},
 		LogManager:    defaultMockLogManager(),
+		FiltererV2:    defaultMockFiltererV2(),
 		TimeSource:    blockchain.NewMedianTime(),
 		Services:      wire.SFNodeNetwork | wire.SFNodeCF,
 		SubsidyCache:  standalone.NewSubsidyCache(chainParams),
@@ -3119,6 +3157,260 @@ func TestHandleGetBlockSubsidy(t *testing.T) {
 	}})
 }
 
+func TestHandleGetCFilter(t *testing.T) {
+	t.Parallel()
+
+	blkHashString := block432100.BlockHash().String()
+	filterString := "000000112f2f7a8d1b6dd2170afadb2d5f9ae11085487a270d07ccdfb5e" +
+		"31796a6162379f000001d43f94851308c4a1534d8"
+	filter := hexToBytes(filterString)
+	extendedFilterString := "0000000dbd0b842aa0b9bbe14fb5df84cbb2143c32ba4710767" +
+		"02fbf52af819387b8216504c8d1"
+	extendedFilter := hexToBytes(extendedFilterString)
+	testRPCServerHandler(t, []rpcTest{{
+		name:    "handleGetCFilter: ok regular",
+		handler: handleGetCFilter,
+		cmd: &types.GetCFilterCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterByBlockHash: filter,
+		},
+		result: filterString,
+	}, {
+		name:    "handleGetCFilter: ok extended",
+		handler: handleGetCFilter,
+		cmd: &types.GetCFilterCmd{
+			Hash:       blkHashString,
+			FilterType: "extended",
+		},
+		mockFilterer: &testFilterer{
+			filterByBlockHash: extendedFilter,
+		},
+		result: extendedFilterString,
+	}, {
+		name:    "handleGetCFilter: compact filters not enabled",
+		handler: handleGetCFilter,
+		cmd: &types.GetCFilterCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCNoCFIndex,
+	}, {
+		name:    "handleGetCFilter: invalid hash",
+		handler: handleGetCFilter,
+		cmd: &types.GetCFilterCmd{
+			Hash:       "invalid",
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterByBlockHash: filter,
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCDecodeHexString,
+	}, {
+		name:    "handleGetCFilter: unknown filter type",
+		handler: handleGetCFilter,
+		cmd: &types.GetCFilterCmd{
+			Hash:       blkHashString,
+			FilterType: "unknown",
+		},
+		mockFilterer: &testFilterer{
+			filterByBlockHash: filter,
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCInvalidParameter,
+	}, {
+		name:    "handleGetCFilter: failed to load filter",
+		handler: handleGetCFilter,
+		cmd: &types.GetCFilterCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterByBlockHashErr: errors.New("failed to load filter"),
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCInternal.Code,
+	}, {
+		name:    "handleGetCFilter: block not found",
+		handler: handleGetCFilter,
+		cmd: &types.GetCFilterCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{},
+		wantErr:      true,
+		errCode:      dcrjson.ErrRPCBlockNotFound,
+	}})
+}
+
+func TestHandleGetCFilterHeader(t *testing.T) {
+	t.Parallel()
+
+	blkHashString := block432100.BlockHash().String()
+	filter := hexToBytes("bd60b439d72fad354acc4b47d374ec34b0cca3bb25994b459f01f6" +
+		"f84ad6b478")
+	filterHash, err := chainhash.NewHash(filter)
+	if err != nil {
+		t.Fatalf("error creating chainhash.Hash: %+v", err)
+	}
+	extendedFilter := hexToBytes("72109550799eb4cedaec527fea34a3a2fb42f1e9187da1" +
+		"bac1fd8d66274222bd")
+	extendedFilterHash, err := chainhash.NewHash(extendedFilter)
+	if err != nil {
+		t.Fatalf("error creating chainhash.Hash: %+v", err)
+	}
+	testRPCServerHandler(t, []rpcTest{{
+		name:    "handleGetCFilterHeader: ok regular",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterHeaderByBlockHash: filter,
+		},
+		result: filterHash.String(),
+	}, {
+		name:    "handleGetCFilterHeader: ok extended",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       blkHashString,
+			FilterType: "extended",
+		},
+		mockFilterer: &testFilterer{
+			filterHeaderByBlockHash: extendedFilter,
+		},
+		result: extendedFilterHash.String(),
+	}, {
+		name:    "handleGetCFilterHeader: ok genesis block",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       defaultChainParams.GenesisHash.String(),
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterHeaderByBlockHash: zeroHash[:],
+		},
+		result: zeroHash.String(),
+	}, {
+		name:    "handleGetCFilterHeader: compact filters not enabled",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCNoCFIndex,
+	}, {
+		name:    "handleGetCFilterHeader: invalid hash",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       "invalid",
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterHeaderByBlockHash: filter,
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCDecodeHexString,
+	}, {
+		name:    "handleGetCFilterHeader: unknown filter type",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       blkHashString,
+			FilterType: "unknown",
+		},
+		mockFilterer: &testFilterer{
+			filterHeaderByBlockHash: filter,
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCInvalidParameter,
+	}, {
+		name:    "handleGetCFilterHeader: failed to load filter",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterHeaderByBlockHashErr: errors.New("failed to load filter"),
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCInternal.Code,
+	}, {
+		name:    "handleGetCFilterHeader: block not found",
+		handler: handleGetCFilterHeader,
+		cmd: &types.GetCFilterHeaderCmd{
+			Hash:       blkHashString,
+			FilterType: "regular",
+		},
+		mockFilterer: &testFilterer{
+			filterHeaderByBlockHash: zeroHash[:],
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCBlockNotFound,
+	}})
+}
+
+func TestHandleGetCFilterV2(t *testing.T) {
+	t.Parallel()
+
+	blkHashString := block432100.BlockHash().String()
+	filter := hex.EncodeToString(defaultMockFiltererV2().filterByBlockHash.Bytes())
+	var noFilterErr blockchain.NoFilterError
+	testRPCServerHandler(t, []rpcTest{{
+		name:    "handleGetCFilterV2: ok",
+		handler: handleGetCFilterV2,
+		cmd: &types.GetCFilterV2Cmd{
+			BlockHash: blkHashString,
+		},
+		result: &types.GetCFilterV2Result{
+			BlockHash:   blkHashString,
+			Data:        filter,
+			ProofIndex:  blockchain.HeaderCmtFilterIndex,
+			ProofHashes: nil,
+		},
+	}, {
+		name:    "handleGetCFilterV2: invalid hash",
+		handler: handleGetCFilterV2,
+		cmd: &types.GetCFilterV2Cmd{
+			BlockHash: "invalid",
+		},
+		wantErr: true,
+		errCode: dcrjson.ErrRPCDecodeHexString,
+	}, {
+		name:    "handleGetCFilterV2: block not found",
+		handler: handleGetCFilterV2,
+		cmd: &types.GetCFilterV2Cmd{
+			BlockHash: blkHashString,
+		},
+		mockFiltererV2: func() *testFiltererV2 {
+			testFiltererV2 := defaultMockFiltererV2()
+			testFiltererV2.filterByBlockHashErr = noFilterErr
+			return testFiltererV2
+		}(),
+		wantErr: true,
+		errCode: dcrjson.ErrRPCBlockNotFound,
+	}, {
+		name:    "handleGetCFilterV2: failed to load filter",
+		handler: handleGetCFilterV2,
+		cmd: &types.GetCFilterV2Cmd{
+			BlockHash: blkHashString,
+		},
+		mockFiltererV2: func() *testFiltererV2 {
+			testFiltererV2 := defaultMockFiltererV2()
+			testFiltererV2.filterByBlockHashErr = errors.New("failed to load filter")
+			return testFiltererV2
+		}(),
+		wantErr: true,
+		errCode: dcrjson.ErrRPCInternal.Code,
+	}})
+}
+
 func TestHandleGetChainTips(t *testing.T) {
 	t.Parallel()
 
@@ -4012,6 +4304,12 @@ func testRPCServerHandler(t *testing.T, tests []rpcTest) {
 			if test.mockSanityChecker != nil {
 				rpcserverConfig.SanityChecker = test.mockSanityChecker
 			}
+			if test.mockFilterer != nil {
+				rpcserverConfig.Filterer = test.mockFilterer
+			}
+			if test.mockFiltererV2 != nil {
+				rpcserverConfig.FiltererV2 = test.mockFiltererV2
+			}
 
 			testServer := &Server{cfg: *rpcserverConfig}
 			result, err := test.handler(nil, testServer, test.cmd)