6aa9db9538
- Remove implicit `operator bool` from ec_point/public_key/etc. which
was causing all sorts of implicit conversion mess and bugs.
- Change ec_point/public_key/etc. to use a `std::array<unsigned char,
32>` (via a base type) rather than a C-array of char that has to be
reinterpret_cast<>'ed all over the place.
- Add methods to ec_point/public_key/etc. that make it work more like a
container of bytes (`.data()`, `.size()`, `operator[]`, `begin()`,
`end()`).
- Make a generic `crypto::null<T>` that is a constexpr all-0 `T`, rather
than the mishmash `crypto::null_hash`, crypto::null_pkey,
crypto:#️⃣:null(), and so on.
- Replace three metric tons of `crypto::hash blahblah =
crypto::null_hash;` with the much simpler `crypto::hash blahblah{};`,
because there's no need to make a copy of a null hash in all these
cases. (Likewise for a few other null_whatevers).
- Remove a whole bunch of `if (blahblah == crypto::null_hash)` and `if
(blahblah != crypto::null_hash)` with the more concise `if
(!blahblah)` and `if (blahblah)` (which are fine via the newly
*explicit* bool conversion operators).
- `crypto::signature` becomes a 64-byte container (as above) but with
`c()` and `r()` to get the c() and r() data pointers. (Previously
`.c` and `.r` were `ec_scalar`s).
- Delete with great prejudice CRYPTO_MAKE_COMPARABLE and
CRYPTO_MAKE_HASHABLE and all the other utter trash in
`crypto/generic-ops.h`.
- De-inline functions in very common crypto/*.h files so that they don't
have to get compiled 300 times.
- Remove the disgusting include-a-C-header-inside-a-C++-namespace
garbage from some crypto headers trying to be both a C and *different*
C++ header at once.
- Remove the toxic, disgusting, shameful `operator&` on ec_scalar, etc.
that replace `&x` with `reinterpret_cast x into an unsigned char*`.
This was pure toxic waste.
- changed some `<<` outputs to fmt
- Random other small changes encountered while fixing everything that
cascaded out of the above changes.
|
||
---|---|---|
.. | ||
blockchain_ancestry.cpp | ||
blockchain_blackball.cpp | ||
blockchain_depth.cpp | ||
blockchain_export.cpp | ||
blockchain_import.cpp | ||
blockchain_objects.h | ||
blockchain_prune.cpp | ||
blockchain_prune_known_spent_data.cpp | ||
blockchain_stats.cpp | ||
blockchain_usage.cpp | ||
blockchain_utilities.h | ||
blocksdat_file.cpp | ||
blocksdat_file.h | ||
bootstrap_file.cpp | ||
bootstrap_file.h | ||
bootstrap_serialization.h | ||
CMakeLists.txt | ||
README.md | ||
sn_key_tool.cpp |
Oxen Blockchain Utilities
Copyright (c) 2014-2019, The Monero Project Copyright (c) 2018, The Loki Project
Introduction
The blockchain utilities allow one to import and export the blockchain.
Usage:
See also each utility's "--help" option.
Export an existing blockchain database
$ oxen-blockchain-export
This loads the existing blockchain and exports it to $OXEN_DATA_DIR/export/blockchain.raw
Import the exported file
$ oxen-blockchain-import
This imports blocks from $OXEN_DATA_DIR/export/blockchain.raw
(exported using the
oxen-blockchain-export
tool as described above) into the current database.
Defaults: --batch on
, --batch size 20000
, --verify on
Batch size refers to number of blocks and can be adjusted for performance based on available RAM.
Verification should only be turned off if importing from a trusted blockchain.
If you encounter an error like "resizing not supported in batch mode", you can just re-run
the oxen-blockchain-import
command again, and it will restart from where it left off.
## use default settings to import blockchain.raw into database
$ oxen-blockchain-import
## fast import with large batch size, database mode "fastest", verification off
$ oxen-blockchain-import --batch-size 20000 --database lmdb#fastest --verify off
Import options
--input-file
specifies input file path for importing
default: <data-dir>/export/blockchain.raw
--output-file
specifies output file path to export to
default: <data-dir>/export/blockchain.raw
--block-stop
stop at block number
--database <database type>
--database <database type>#<flag(s)>
database type: lmdb, memory
flags:
The flag after the # is interpreted as a composite mode/flag if there's only one (no comma separated arguments).
The composite mode represents multiple DB flags and support different database types:
safe, fast, fastest
Database-specific flags can be set instead.
LMDB flags (more than one may be specified):
nosync, nometasync, writemap, mapasync, nordahead
Examples:
$ oxen-blockchain-import --database lmdb#fastest
$ oxen-blockchain-import --database lmdb#nosync
$ oxen-blockchain-import --database lmdb#nosync,nometasync