Nadav Ivgi
d6597d352e
mempool: Implement address stats
2019-01-20 10:12:23 +02:00
Nadav Ivgi
96c04125a8
mempool: Index history as TxHistoryInfo entries
...
This allows more performant reads (no need to fetch and process full txs),
at the cost of increased memory usage.
This also allows calculating mempool stats without fetching prevouts
(still not implemented).
2019-01-20 10:08:23 +02:00
Nadav Ivgi
b2a84026a5
Update itertools to v0.8.0
2019-01-20 09:59:17 +02:00
Nadav Ivgi
b644d25cd8
Indicate mempool txs are unconfirmed instead of a null "status"
2019-01-20 08:49:46 +02:00
Nadav Ivgi
fb5919f06e
cargo fmt
2019-01-20 07:28:06 +02:00
Nadav Ivgi
da3b8107c1
Query: Use accessor methods for chain and mempool
2019-01-19 12:57:21 +02:00
Nadav Ivgi
4196d06a4c
Optimization: Store value of outputs/prevouts in history rows
...
With this, utxo() and stats() no longer have to make txo lookups and can
rely solely on history rows, confirmation rows and in-memory data.
This required removing the "script pubkey" from Utxo, as it is no longer known.
But this is okay, because Utxos are always returned in the context of a specific
address/scripthash that was requested by the user and is known to him.
2019-01-19 11:35:58 +02:00
Nadav Ivgi
e33be76a7a
Implement GET /address/:addr/mempool-txs
...
and /scripthash/:hash/mempool-txs
2019-01-19 10:27:11 +02:00
Nadav Ivgi
7b5aaacdc9
Use new Query in REST
2019-01-19 10:26:18 +02:00
Nadav Ivgi
b7e04e3048
Implement new Query encapsulating ChainQuery and Mempool
...
With some related changes:
- Mempool::lookup_txos() signature was changed to match ChainQuery::lookup_txos()
- Removed some ChainQuery methods that are now exposed on Query
2019-01-19 10:23:14 +02:00
Nadav Ivgi
2c1f698dbd
Implement Mempool::lookup_raw_txn()
2019-01-19 10:20:17 +02:00
Nadav Ivgi
4ad7695af1
Implement Mempool::utxo() and a stub placeholder for Mempool::stats()
2019-01-19 10:19:41 +02:00
Nadav Ivgi
ff54a19907
Mempool: Index spend edges, add lookup_spend()
2019-01-19 09:29:27 +02:00
Nadav Ivgi
50c594af1c
Don't attach "status" to block txs
...
They all share the same status, so this is unnecessary.
2019-01-19 09:20:02 +02:00
Nadav Ivgi
3bbde8387f
Fix Mempool::remove(): add missing not
2019-01-19 08:56:16 +02:00
Nadav Ivgi
6c27e80746
Rename Query -> ChainQuery
2019-01-19 08:55:18 +02:00
Nadav Ivgi
74d695a79e
Correct names for funding/spending
2019-01-19 07:25:18 +02:00
Roman Zeyde
27037d9305
Add Prometheus metrics to the new Indexer and Query
2019-01-18 11:16:16 +02:00
Nadav Ivgi
1cb864222c
Implement cache and incremental updates for script stats
2019-01-16 03:06:33 +02:00
Nadav Ivgi
bc60ede45d
Replace dedup() with unique()
...
Required because the same txid can appear non-consecutively
in the case of a transactions that both funds and spends from
the same script.
This requires storing a list of all seen txid in memory,
which isn't ideal. This list could theoretically be reset
whenever we reach a new block height, but currently isn't.
2019-01-16 02:13:50 +02:00
Roman Zeyde
cee33f7e3a
Update RocksDB crate to 0.11
2019-01-13 15:53:03 +02:00
Roman Zeyde
7d8e3d8c47
Add missing file
2019-01-07 00:03:38 +02:00
Roman Zeyde
dc7dd0cc68
Update rust-rocksdb dependency for SetOptions API
...
Still not officially released (but should be at 0.11)
2019-01-06 09:59:30 +02:00
Roman Zeyde
3830fc4796
Mark non-public methods as such
2018-12-24 12:57:28 +02:00
Roman Zeyde
a8fe3cad0a
Make ScriptStats field names shorter
...
We should have separate stats for confirmed and unconfirmed transactions.
2018-12-24 12:48:49 +02:00
Roman Zeyde
7643a81e01
Load blockheaders for more efficient startup
...
We shouldn't re-download all headers from bitcoind, only the ones that
are missing from the DB.
2018-12-24 12:42:20 +02:00
Roman Zeyde
d2dc53c80e
Remove old modules from lib.rs
2018-12-24 09:02:06 +02:00
Roman Zeyde
0eb76ccc5a
Add conditional support for Elements' data structures
...
The code fails to build with `--feature=liquid`, but most of the errors are
around confidential values and block header differences:
46d01f91ab/liquid-errors.txt
2018-12-24 09:00:38 +02:00
Roman Zeyde
88d695c7a5
Enable auto compactions after the first index update
2018-12-20 22:30:10 +02:00
Roman Zeyde
4387d315e9
Update RocksDB (for SetOptions API support)
2018-12-20 22:30:09 +02:00
Roman Zeyde
59baa02115
Wait for daemon to fully sync before indexing and starting REST API
2018-12-20 22:30:06 +02:00
Roman Zeyde
257e788cf3
Merge branch 'bitcoin_e' into new-index
2018-12-19 11:57:42 +02:00
Roman Zeyde
d0073711db
Rename binary to 'electrs' for backwards compatibility
2018-12-19 11:52:12 +02:00
Roman Zeyde
75318516e7
Add simple (and not very efficient) mempool index implementation
2018-12-19 10:47:12 +02:00
Roman Zeyde
87feebafcb
Don't use blk*.dat on subsequent indexer invocations
2018-12-19 10:47:11 +02:00
Roman Zeyde
f77e6e3c98
Serialize TxHistoryKey MSB-first
...
Otherwise, lexicographic order won't be according to confirmed_height.
2018-12-19 10:47:07 +02:00
Roman Zeyde
5fedce2485
Run 'cargo fmt'
2018-12-18 17:58:37 +02:00
Nadav Ivgi
e53a05c03d
Add db version compatibility field
2018-12-18 06:52:48 +02:00
Nadav Ivgi
2cecf51402
Parallel lookup for tx outputs spends
2018-12-18 03:27:47 +02:00
Nadav Ivgi
0c212bb9f3
Remove explicit lifetime annotations no longer required by recent Rust
2018-12-18 03:27:04 +02:00
Nadav Ivgi
6b7ff7ae1a
Remove block height from TxConfRow
...
Rely on the hash->height map stored on HeaderList instead.
2018-12-18 03:25:12 +02:00
Roman Zeyde
3c7f0a41b6
Change compute_script_hash() argument to be &Script
2018-12-17 14:53:38 +02:00
Roman Zeyde
78f07f969f
Remove unused code
2018-12-17 13:09:02 +02:00
Roman Zeyde
1519b3587a
Enable graceful shutdown for the REST API server
2018-12-17 13:07:00 +02:00
Roman Zeyde
bfb07c392b
Store tip after initial indexing
2018-12-17 12:51:19 +02:00
Roman Zeyde
c9a845dd32
Mark added/indexed blocks explicitly as "done"
...
Instead of relying on other block-related rows.
2018-12-17 12:51:19 +02:00
Roman Zeyde
796aec75e2
No need to use INFO for blk*.dat listing log
2018-12-16 16:29:01 +02:00
Roman Zeyde
e355a7f299
Fetch from bitcoind after initial indexing
2018-12-16 16:26:17 +02:00
Roman Zeyde
1e84fa56a9
Fix 'use' statement at tests
2018-12-16 15:15:18 +02:00
Roman Zeyde
dbe586c102
Rename Indexer::flush() into start_flushing()
...
It can be called once (after initial indexing is over).
2018-12-16 15:08:24 +02:00