Migrating from 3.x
Current releases are node 4.1.0, wallet 4.1.0 and epicbox protocol 3.0.0.
API changes
total_difficulty is an object
Difficulty is tracked separately for each proof-of-work algorithm:
{
"total_difficulty": {
"cuckaroo": 0,
"cuckatoo": 1234,
"randomx": 5678,
"progpow": 9012
}
}
Block headers describe proofs with two fields
proof names the algorithm and solution is a tagged union whose shape depends on it. In 3.x a
single scalar field carried the solution.
Wallet output and transaction reads take pagination
retrieve_outputs and retrieve_txs take limit, offset and sort_order. Supply them explicitly.
Status gains supply fields
supply and max_supply are amounts in freemen. blocks_to_next_halving is a count of blocks, at
api/src/types.rs:102. Reward steps are not all halvings; see
emission.
Kernels appear in two shapes
get_block returns a flattened kernel. get_kernel and get_last_n_kernels return the raw type with an
externally tagged features field.
Command line changes
Flags moved. init -h for the current directory is now -w, scan -h <height> is now
-s <height>, and the node's taxes argument is start_height. New wallet commands are export_tx,
import_tx and change_password, plus --slate_version on the transfer commands. Every command and
flag is in configuration and CLI.
The algorithm mix on the test networks is selected by config key, not by a command-line flag. See the block policy.
Toolchain and build
Each repository pins its Rust version, so installing rustup is sufficient and you should not pin a version yourself. Building also needs system packages beyond a Rust toolchain, listed per platform in building from source.
Storage changes
The wallet stores data in SQLite at db/sqlite/epic.db, in WAL mode, and its Tor directory is
wallet_tor. Anything that read the 3.x wallet database directly needs rewriting. Paths and keys are
in wallet configuration.
New behaviour
Bundled Tor
Building with --features with-tor downloads a Tor expert bundle and verifies it against a committed
digest. Release builds do not enable the feature. See
what this version does not cover.
Epicbox acknowledges delivery
Protocol 3.0.0, which wallets speak from 3.6.0 onwards, so not new in 4.x, adds a Made
acknowledgement carrying a per-message id, so a slate is marked delivered only once the recipient
confirms it processed it. Compatibility with clients older than
3.5.2 is preserved. See the protocol.
Mempool confirmation after posting
The wallet watches the node's mempool after posting a transaction and records a distinct state when it
appears. That wait is why a send can look unresponsive, covered in
the send appears to hang, and it moves a
posted transfer out of the set cancel_tx accepts, covered in
cancelling has preconditions.
The epicbox relay implementation changed
The relay is EpicCash/epic-epicbox-docker, Node.js with a Rust verification helper. Its deployment
topology and storage are in the epicbox reference.
Behaviour to check in your integration
tx_lock_outputsis required in a manual send sequence. See what reserves outputs.- Epicbox converts every slate to V2, which drops a payment proof request. See the transport comparison.
change_passwordremoves the backup seed unless--remove-backupis passed.- Sync validation defaults changed shape.
skip_pow_validationdefaults totrueanddisable_checkpointstofalse. On mainnet proof of work is skipped only up to the last checkpoint and fully verified above it, anddisable_checkpointsis ignored. See node and wallet setup.
Changes in 4.1.0
Node and wallet 4.1.0 tighten authentication. An integration that worked against 4.0.x can start getting 401s.
- The wallet Owner API needs HTTP Basic.
/v3/ownerand/v2/ownertake usernameepicand the contents of.owner_api_secret, on top of the v3 token. See owner access on the wallet. - The node's
/v1and/v2/ownerfail closed. With no secret configured they answer 401 rather than running open. OnlyGET /v1/versionand one plainget_statuscall answer without a credential. See the node credential. - New foreign method
ready_for_txsreports whether the node is synced, with no credential. The wallet uses it in place of the ownerget_status. See which method lives where. - The wallet sends its node secret far less. It never sends one to
/v2/foreign, so a node withforeign_api_secret_pathset cannot serve it. See the credential the wallet presents to the node. /v1/kerneldownloadis removed. See the v1 routes.disable_checkpointsdefaults tofalseand is ignored on mainnet, and a new checkpoint at height 3,710,000, making 13, moves the end of the skipped range. See sync validation settings.