Commit Graph

54 Commits

Author SHA1 Message Date
Josh Rickmar
8e4b78998e Version the JSON-RPC API with semantic versioning. (#387)
Start at version 1.0.0.
2016-10-05 18:46:06 -04:00
Jonathan Chappelow
1c9d038acd Add address argument to consolidate. (#317) 2016-08-24 10:10:02 -05:00
Dave Collins
3740feb673 database: Replace with new version.
This commit removes the old database package, moves the new package into
its place, and updates all imports accordingly.
2016-08-23 17:40:38 -04:00
Dave Collins
8e71bcf41a indexers: Implement optional tx/address indexes.
This introduces a new indexing infrastructure for supporting optional
indexes using the new database and blockchain infrastructure along with
two concrete indexer implementations which provide both a
transaction-by-hash and a transaction-by-address index.

The new infrastructure is mostly separated into a package named indexers
which is housed under the blockchain package.  In order to support this,
a new interface named IndexManager has been introduced in the blockchain
package which provides methods to be notified when the chain has been
initialized and when blocks are connected and disconnected from the main
chain.  A concrete implementation of an index manager is provided by the
new indexers package.

The new indexers package also provides a new interface named Indexer
which allows the index manager to manage concrete index implementations
which conform to the interface.

The following is high level overview of the main index infrastructure
changes:

- Define a new IndexManager interface in the blockchain package and
  modify the package to make use of the interface when specified
- Create a new indexers package
  - Provides an Index interface which allows concrete indexes to plugin
    to an index manager
  - Provides a concrete IndexManager implementation
    - Handles the lifecycle of all indexes it manages
    - Tracks the index tips
    - Handles catching up disabled indexes that have been reenabled
    - Handles reorgs while the index was disabled
    - Invokes the appropriate methods for all managed indexes to allow
      them to index and deindex the blocks and transactions
  - Implement a transaction-by-hash index
    - Makes use of internal block IDs to save a significant amount of
      space and indexing costs over the old transaction index format
  - Implement a transaction-by-address index
    - Makes use of a leveling scheme in order to provide a good tradeoff
      between space required and indexing costs
- Supports enabling and disabling indexes at will
- Support the ability to drop indexes if they are no longer desired

The following is an overview of the btcd changes:

- Add a new index logging subsystem
- Add new options --txindex and --addrindex in order to enable the
  optional indexes
  - NOTE: The transaction index will automatically be enabled when the
    address index is enabled because it depends on it
- Add new options --droptxindex and --dropaddrindex to allow the indexes
  to be removed
  - NOTE: The address index will also be removed when the transaction
    index is dropped because it depends on it
- Update getrawtransactions RPC to make use of the transaction index
- Reimplement the searchrawtransaction RPC that makes use of the address
  index
- Update sample-btcd.conf to include sample usage for the new optional
  index flags
2016-08-18 15:42:18 -04:00
Dave Collins
b6d426241d blockchain: Rework to use new db interface.
This commit is the first stage of several that are planned to convert
the blockchain package into a concurrent safe package that will
ultimately allow support for multi-peer download and concurrent chain
processing.  The goal is to update btcd proper after each step so it can
take advantage of the enhancements as they are developed.

In addition to the aforementioned benefit, this staged approach has been
chosen since it is absolutely critical to maintain consensus.
Separating the changes into several stages makes it easier for reviewers
to logically follow what is happening and therefore helps prevent
consensus bugs.  Naturally there are significant automated tests to help
prevent consensus issues as well.

The main focus of this stage is to convert the blockchain package to use
the new database interface and implement the chain-related functionality
which it no longer handles.  It also aims to improve efficiency in
various areas by making use of the new database and chain capabilities.

The following is an overview of the chain changes:

- Update to use the new database interface
- Add chain-related functionality that the old database used to handle
  - Main chain structure and state
  - Transaction spend tracking
- Implement a new pruned unspent transaction output (utxo) set
  - Provides efficient direct access to the unspent transaction outputs
  - Uses a domain specific compression algorithm that understands the
    standard transaction scripts in order to significantly compress them
  - Removes reliance on the transaction index and paves the way toward
    eventually enabling block pruning
- Modify the New function to accept a Config struct instead of
  inidividual parameters
- Replace the old TxStore type with a new UtxoViewpoint type that makes
  use of the new pruned utxo set
- Convert code to treat the new UtxoViewpoint as a rolling view that is
  used between connects and disconnects to improve efficiency
- Make best chain state always set when the chain instance is created
  - Remove now unnecessary logic for dealing with unset best state
- Make all exported functions concurrent safe
  - Currently using a single chain state lock as it provides a straight
    forward and easy to review path forward however this can be improved
    with more fine grained locking
- Optimize various cases where full blocks were being loaded when only
  the header is needed to help reduce the I/O load
- Add the ability for callers to get a snapshot of the current best
  chain stats in a concurrent safe fashion
  - Does not block callers while new blocks are being processed
- Make error messages that reference transaction outputs consistently
  use <transaction hash>:<output index>
- Introduce a new AssertError type an convert internal consistency
  checks to use it
- Update tests and examples to reflect the changes
- Add a full suite of tests to ensure correct functionality of the new
  code

The following is an overview of the btcd changes:

- Update to use the new database and chain interfaces
- Temporarily remove all code related to the transaction index
- Temporarily remove all code related to the address index
- Convert all code that uses transaction stores to use the new utxo
  view
- Rework several calls that required the block manager for safe
  concurrency to use the chain package directly now that it is
  concurrent safe
- Change all calls to obtain the best hash to use the new best state
  snapshot capability from the chain package
- Remove workaround for limits on fetching height ranges since the new
  database interface no longer imposes them
- Correct the gettxout RPC handler to return the best chain hash as
  opposed the hash the txout was found in
- Optimize various RPC handlers:
  - Change several of the RPC handlers to use the new chain snapshot
    capability to avoid needlessly loading data
  - Update several handlers to use new functionality to avoid accessing
    the block manager so they are able to return the data without
    blocking when the server is busy processing blocks
  - Update non-verbose getblock to avoid deserialization and
    serialization overhead
  - Update getblockheader to request the block height directly from
    chain and only load the header
  - Update getdifficulty to use the new cached data from chain
  - Update getmininginfo to use the new cached data from chain
  - Update non-verbose getrawtransaction to avoid deserialization and
    serialization overhead
  - Update gettxout to use the new utxo store versus loading
    full transactions using the transaction index

The following is an overview of the utility changes:
- Update addblock to use the new database and chain interfaces
- Update findcheckpoint to use the new database and chain interfaces
- Remove the dropafter utility which is no longer supported

NOTE: The transaction index and address index will be reimplemented in
another commit.
2016-08-18 15:42:18 -04:00
Javed Khan
7401db6098 rpcserver: searchrawtx - update coinbase output (#299) 2016-08-10 11:53:00 -05:00
Alex Yocom-Piatt
3d6d9f1da0 Add BlockHeight field to getstakeinfo (#274) 2016-06-28 10:14:48 -05:00
C Jepson
63fc4e7991 Add rescan and scanfrom options to importprivkey and importscript (#267) 2016-06-03 15:05:09 -05:00
Alex Yocom-Piatt
164f67787b Change Vin field AmountIn to display coins not int64 (#238)
Fixes #184
2016-06-01 16:04:10 -05:00
Dave Collins
2030b4d057 multi: Fix several misspellings in the comments.
Contains the following upstream commits:
- ef9c50be57
- eb882f39f8

In addition to merging the fixes in the commits, this also fixes a few
more misspellings that were introduced in the new Decred code.
2016-05-30 12:24:21 -05:00
Dave Collins
18e35febe5 dcrjson/txscript: Merge arm-specific test updates.
Contains the following upstream commits:
- 3c2c858888
- c7e6c1e88f
2016-05-27 09:48:01 -05:00
Dave Collins
3799575c9c rpcserver: Add filteraddrs param to srt API.
Contains the following upstream commits:
- 365b1bd156
  - Previously cherry-picked so it is a NOOP
- b691a222d5
  - Reverted because Decred uses a different signature algorithm
- c7eaee6020

In addition to the normal required changes for syncing, the following
changes have been made in order to facilitate integration into Decred:

- Rework the code which extracts stake submission outputs a bit to be a
  little more efficient and to better fit with the code being merged
2016-05-25 11:47:19 -05:00
Dave Collins
19873768b6 dcrjson: Add optional locktime to createrawtransaction
Upstream commit 4b7206b54f
2016-05-20 22:08:14 -05:00
Dave Collins
40d778dd2d docs: Make various README.md files consistent.
Upstream commit 3942a116e4

This merge also includes a few Decred specific modifications and
corrects some old btcjson references that should have been updated to
dcrjson.
2016-05-20 16:00:12 -05:00
Dave Collins
577f33c2df dcrjson: Add errors to InfoChainResult
Upstream commit f862536929
2016-05-18 14:53:24 -05:00
Dave Collins
718f0f4942 Add reverse order option to searchrawtransactions rpc
Upstream commit 0190c349aa
2016-05-17 17:26:53 -05:00
cjepson
ac0d8fb13a Fix VinPrevOut fields for Decred
The VinPrevOut fields in Decred did not correspond to the
contents of Decred TxIns. This was modified so that these
are included.

Fixes #173.
2016-05-17 17:41:03 -04:00
cjepson
bee3c25021 Sync upstream through Aug 23, 2015
Requires dcrrpcclient#20.
2016-05-16 15:49:57 -04:00
C Jepson
d293c9bd30 Adjust getblockheader result for Decred (#170)
Fixes #167.
2016-05-16 11:57:15 -05:00
David Hill
c53142d5d1 Implement getblockheader RPC. 2016-05-12 14:43:04 -05:00
David Hill
83f42be247 Support getmempoolinfo. 2016-05-11 12:27:37 -05:00
C Jepson
b3b20f55bb Fix createrawssrtx command and logic (#159)
The createrawssrtx could not produce correctly formed revocations.
The code has been corrected to call the correct internal API. A
new 'fee' option was added to the JSON command to add a fee to the
revocation.
2016-05-09 11:28:37 -05:00
C Jepson
3001a66ad0 Add transaction type to listtransactions result (#158) 2016-05-09 10:41:38 -05:00
C Jepson
084edf8e8b Add the constructor for AddTicketCmd (#148) 2016-05-03 13:41:21 -05:00
C Jepson
f1796b045d Add stakepooluserinfo and addticket RPC handling (#144)
JSON handling for two new legacy RPC functions designed to aid wallets
running stake pools, stakepooluserinfo and addticket, have been added.
2016-05-02 13:58:51 -05:00
C Jepson
29f116c5da Add ticketvwap and txfeeinfo RPC server commands (#145)
Two new commands were added to the daemon RPC server. They are:

ticketvwap: Calculate the volume weighted average price of tickets.
txfeeinfo: Get the transaction fee information for regular transactions
  in blocks, the mempool, and a height range

The previous "ticketfeeinfo" command logic was also refactored for
portability.
2016-04-29 17:13:47 -05:00
C Jepson
7fd213b993 Add estimatestakediff RPC command (#143)
The new RPC command estimatestakediff was added. It estimates the
minimum, maximum, and expected next stake difficulty. The caller can
also estimate a new difficulty given a passed number of tickets to be
mined in the remaining difficulty period.
2016-04-28 21:19:12 -05:00
Alex Yocom-Piatt
8207e4d228 Add GetStakeDifficultyResult so we can have current and next returned 2016-04-28 11:43:57 -05:00
C Jepson
41abd20335 Add ticketfeeinfo command (#132)
* Add ticketfeeinfo command

The new RPC command ticketfeeinfo has been added. It provides
statistical information about ticket fees per kilobyte for the
mempool, recent blocks, and recent difficulty windows.
2016-04-21 15:37:16 -05:00
C Jepson
ca8935f753 Modify the purchaseticket RPC command (#121)
The purchaseticket RPC command has been modified to add the new fields
now used by wallet.
2016-04-18 16:04:01 -04:00
cjepson
678b454ede Display ticket commitments in getrawtransaction
Ticket commitments (address and amount) are not properly displayed
by getrawtransaction verbose requests. Now they are part of the
pkScript JSON object.
2016-04-14 13:55:50 -04:00
cjepson
0119cd6b1e Fix the constructors for new RPC account commands 2016-04-07 11:24:18 -04:00
cjepson
5658c503c3 Add new JSON handling for RPC commands and livetickets command
New JSON handling has been added for the following wallet commands:
  accountaddressindex
  accountfetchaddresses
  accountsyncaddressindex
  getwalletinfo

getmasterpubkey has been modified to take an account argument.

The new daemon command livetickets has been added. This command dumps
the hashes for all the live tickets in the live ticket stake database.

The new daemon command existsaddresses has been added. This command
takes a JSON array of addresses represented as strings and returns a
bitset indicating whether or not the addresses are used on the block
chain or mempool.
2016-04-06 14:25:38 -04:00
Alex Yocom-Piatt
f89af0d9ae Add rpc json for new set/getbalancetomaintain command 2016-03-18 11:56:16 -05:00
cjepson
71837f4674 Add and implement the getticketpoolvalue JSON RPC command
The RPC command getticketpoolvalue has been added. Calling the
command will return the current value of all the locked stake from
tickets in the ticket pool.
2016-03-16 12:43:53 -04:00
cjepson
df701d8cdf Revert sync merge
The sync merge does not build and needs further testing. It is
being reverted.
2016-03-08 22:16:06 -05:00
Alex Yocom-Piatt
7e2c687295 Fix build/test errors from merge 2016-03-07 11:42:51 -06:00
Alex Yocom-Piatt
5b2b97e858 Sync to upstream 0280fa0264
Conflicts:
	blockchain/chain.go
	blockchain/checkpoints.go
	blockchain/difficulty.go
	blockchain/internal_test.go
	blockchain/txlookup.go
	blockchain/validate.go
	blockchain/validate_test.go
	blockmanager.go
	chaincfg/params.go
	cmd/dropafter/dropafter.go
	cpuminer.go
	database/db.go
	database/interface_test.go
	database/ldb/block.go
	database/ldb/insertremove_test.go
	database/ldb/leveldb.go
	database/ldb/operational_test.go
	database/ldb/tx.go
	database/memdb/memdb.go
	database/reorg_test.go
	dcrjson/walletsvrcmds.go
	docs/README.md
	docs/json_rpc_api.md
	mempool.go
	mining.go
	peer.go
	rpcserver.go
	rpcserverhelp.go
	rpcwebsocket.go
	sample-dcrd.conf
	txscript/consensus.go
	txscript/script_test.go
	txscript/sign.go
	txscript/standard.go
	wire/blockheader_test.go
	wire/msgtx_test.go
2016-03-07 11:35:24 -06:00
cjepson
7570926222 Add consolidate cmd and response framework to the JSON RPC
This adds the consolidate command to master, enabling a wallet to
consolidate small UTXOs into a large UTXO.
2016-03-04 12:19:59 -05:00
cjepson
cd8ea2e309 Add the new RPC function existsmempooltxs
A new RPC function has been added to the daemon to quickly check for
the existence of transactions in the mempool. It handles raw encoded
hex containing transaction hashes and outputs a raw encoded hex of
bit flags. This makes the output size as small as possible while
speeding up the JSON encoding/decoding of the data.
2016-03-02 11:37:35 -05:00
cjepson
95b4e76c1d Add getticketsvotebits batched command for wallet RPC
JSON handling for the new wallet command getticketsvotebits has been
added. A common struct for voteBits data is now also used between
getticketvotebits and getticketsvotebits.
2016-03-01 13:08:08 -05:00
Alex Yocom-Piatt
c1420d93ad Add new RPC handlers for get/setticketfee 2016-02-29 13:52:10 -06:00
Josh Rickmar
38ff4bbb3c btcjson: Add spendable to listunspent result. 2016-02-29 12:51:36 -05:00
cjepson
e318312e80 Fix a copy-paste error in chainsvrcmds.go 2016-02-26 17:50:48 -05:00
cjepson
f001389ff1 Add JSON RPC handling for listscripts wallet command
Framework handling the new listscripts JSON RPC command for wallet
has been added. This will allow wallet users to dump the complete list
of redeem scripts from their wallet.
2016-02-24 13:42:00 -05:00
cjepson
18acc1194f Add handling of modified getrawmempool RPC call and existslivetickets
getrawmempool has been modified to allow for the selection of specific
transaction types from the mempool. A new RPC call, existslivetickets,
has been added. This call takes a blob of ticket hashes and returns
a blob of bit flags specifying whether or not the tickets exist. This
allows for much faster getstakeinfo calls in the wallet.
2016-02-23 12:29:02 -05:00
cjepson
3f706d2358 Add JSON RPC handlers for getstakeinfo and related functions
The JSON framework has been modified to enable two new RPC calls,
existsliveticket and getstakeinfo. existsliveticket handling has
been added to the daemon RPC. It checks for the existence of a ticket
in the live ticket stake database given a hash.
2016-02-19 11:33:06 -05:00
John C. Vernaleo
ca9365aea0 Fix minor comment typo. 2016-02-19 08:05:42 -05:00
Alex Yocom-Piatt
4868ed4d3d Remove rpc cmd Results that only have 1 field
Instead just return field value in rpc handler
2016-02-17 16:05:28 -06:00
cjepson
2f9fc2d450 Add JSON RPC handling for per transaction VoteBits manipulation
This adds the JSON handling for the per ticket manipulation of the
VoteBits field in wallet.
2016-02-17 11:27:31 -05:00