Release Notes
✨ Features
- (rpc_server) Add basic statistics for block intervals (37bc71cb)
- (rpc_server) Add endpoint for block difficulties (b9835d89)
- Key derivation (8682a1eb)
- Dashboard support for deriving keys (24660ca9)
- Display symmetric key hash to avoid leaking secret (6d1c660b)
- (RpcServer) Show block digests by height (f5ee1b04)
- (CLI) Add command to get block digests by height (e33d2edd)
- Add is_canonical to block_info() RPC result (3995e39d)
- Add sibling_blocks to /block_info rpc (0f0871bf)
- (native-currency) Add time-lock check in rust source (867a9ac0)
- (native-currency) Time-lock half of coinbase (da724fa3)
- Harden native currency (ecfbefe9)
- Add constructor for fee-gobbler transaction details (71f1cf62)
- (proof_upgrader) Sort jobs by profitability (077ddcc7)
- (proof_upgrader) Gobble fees (9eb941f3)
- (merge) Allow negative fees (17c4a841)
- (native-currency) Disallow coinbase with negative fee (94c897ce)
- /block_info rpc returns actual block reward (5d4de110)
- (SingleProof) Ensure merge bit retained in update-branch (6787d595)
- (SingleProof) Verify merge bit set after merge (bf7e49d2)
- (BlockProgram) Verify that merge bit is set (ba89f056)
- (mine_loop) Merge nop-gobbler if no other txs available (996701de)
- (mine_loop) Graceful shutdown on composition failure (ea6188e7)
- (dashboard) Show max num peers (f4a564af)
- (archival_mmr) Add function to get latest leaf (2049e1bb)
- (archival_mmr) Add function to prune MMR to specified num leafs (50088a47)
- (archival_mmr) Add try-get for leafs (66ae10d1)
- (archival_state) Add archival block MMR (fd9a10aa)
- (archival_state) Use block MMR to determine canonicity (0477832e)
- (CLI) Add command
nth-receiving-address
(611b16d4) - (CLI) Add command
premine-receiving-address
(9c1c4438) - (mine_loop) Restart guesser every 20 seconds (37695fd4)
- (peer_loop) Challenge block notifications before syncing (22a7ba75)
- (rpc) Cookie based authentication (65b67e98)
- (global_state) Allow storing of block that's not tip (0f61d6ab)
- (archival_mmr) Get MPs relative to smaller MMRs (8a7f5e8e)
- (
main_loop
) Tolerate arbitrarily deep reorganizations (ebcd3ab0) - (main_loop) Add global timeout for sync mode (5eb8d2fa)
- Add RustyArchivalBlockMmr for schema-access (89f5a1c2)
- (
difficulty_control
) Estimate max pow after n blocks (f56e669d) - (
peer_loop
) Reject fishy PoW evolutions (1ab0beec) - Add Shamir secret sharing maths (27ca2f05)
- CLI commands for Shamir secret sharing (e65f6bac)
🐛 Bug Fixes
- Store known keys in HashSet to ensure unique (e15e228e)
- Reserve key 0 for coinbase transactions (4927b432)
- (PrimitiveWitness/Arbitrary) Pick one: coinbase or inputs (203a18ac)
- Use
checked_add_negative
for adding potentially negative fee (0a92e9d5) - (native_currency) Adjust some test-case generators relating to amounts (7c2cc2ac)
- (
Merge
) Compare fee not hash of fee against max amount (9efdbd3e) - Test
upgrade_proof_collection_to_single_proof_foreign_tx
(7f41efe9) - (block) Adjust block parameters to match 42.000.000 limit (a4a8f7f5)
- (docs) Fix wrong number in docs about target block interval (2a0538a3)
- (test) Test that premine does not exceed promise (2eab824e)
- Add arbitrary for coinbase (1a302055)
- (AuthenticateTxkField) Account for merge bit (0f13fbae)
- (test) Account for merge bit in more tests (b22200c5)
- Temporarily exceed max num peers when bootstrapping (a05b581e)
- (mine_loop) Recheck for connections every 5 seconds (517bd194)
- Deserializing GenerationSpendingKey with serde_json (3f4ddd14)
- Remove panic when deriving key index > 0 (ac35685c)
- (
PeerStanding
) Include lower bound in standing test (5c35dc10) - (wallet_state) Avoid adding duplicate MUTXOs from different blocks (cbe6122b)
- (
WalletState
) Filter out unspendable UTXOs before monitoring (226a371c) - (
WalletState
) Filter UTXOs for state validity (ff4dcb00) - (
WalletState
) Avoid duplicateMonitoredUTXO
s (a0eb24bf) - (Block::is_valid) Fix false negative (4d6b7013)
- (
mine_loop
) Segregate rayon threadpool for guessing (#315) (a1baa425) - Spawn task for block proof verification (17fd4737)
- (neptune-cli) Catch failed connection gracefully (0abca09e)
- (
WalletState
) Receive premine at multiple addresses (27ec3d36) - (wallet_state) Remove unneeded
mut
for key-getter (ef0c76c2) - (native_currency) Update hardcoded program hash (a607d105)
- (verify_mmr_successor) Update non-determinism (19001aee)
- Percolate rename of CLI argument (6115692d)
- Add end-of-page margin for random memory pointers (b856e36b)
- (difficulty_control) Add epsilon to function for upper-bounds on difficulty evolution (847fa714)
- Update TIME_LOCK_HASH value (77728617)
- (Block) Restrict spending of guesser-fee UTXO (b97cda33)
- (wallet_state) Only register one hash-lock key per PoW-mined block (e83aae39)
- (peer_loop) Don't grab read lock twice (6a1c2fe1)
- Cancel proving job if composing stops (44d503b4)
- Kill prover process directly (27726379)
- (PeerInfo) Use string for peer's version, not ArrayString (27fa206b)
🚀 Performance
- Serialize only 'seed' field of GenerationSpendingKey (f84c59c8)
- (mine_loop) Faster PoW guessing (edbff181)
- (peer_loop) Use archival block-MMR for faster batch-response (10c3f3a9)
- (peer_loop) Faster response to block request by height (8cfd801a)
- Faster PoW guessing by precalculating MT auth paths (5c5650b1)
📚 Documentation
- Clarify docstring for mutxo-pruning (6154e890)
- (Block) Synchronize comments in validity check function (76f089e6)
- (main_loop) Information about main loop's data (1d9e4e7f)
- Add docs page about documentation (5d201d70)
- (archival_state) Add comment about duplicated data (651bb5b9)
- (peer_loop) Fix log-msg for batch-response (983a06fb)
- (mine_loop) Log block height when constructing block proposal (eefc4947)
- Fix broken links in documentation (bae89de0)
- Trace-log MUTXO info in wallet-updater (0bb00862)
- Clarify deficiency on race-condition in sync-challenge-response (87dc4cb6)
- Fix typo in comment. (5b254f53)
- (rpc) Add token/cookie auth example (c185f8c5)
- (rpc) Fix doc-comment example compile error (3afe2838)
- Fix
cargo doc
warnings (a24b647c) - (archival_state) Clarify that
store_block
doesn't write to DB (144af4f6) - (wallet_state) Comment on lack of wallet-persisting for genesis block (acc0d6ca)
- Fix comment on why no wallet action on MempoolEvent::UpdateTxMutatorSet (e3d8f1f0)
- Add user guide to installation (ca3c02fb)
- Add user guide on Shamir secret sharing (802c2769)
- Fix typo (a70464ae)
- Add comment about allowed minimum value for sync-threshold (68b62644)
- Fix link to tokio::sync::RwLock (46dc1e54)
- Add "Two-Step Mining" (bc539624)
- Remove link to private code from public interfaces (50dd91bc)
- Fix doc tests (4f26919a)
♻️ Refactor
- (
PrimitiveWitness
) Time-lock half of coinbase (b6c08ec4) - Integrate time-locked coinbase into mine pipeline (be2feb01)
- Specify proving capability (b48f9622)
- (NeptuneCoins) Change inner type to
i128
(93efd2c5) - (neptune_coins) Remove manual implementation of BFieldCodec (fb80ac19)
- (native-currency) Add support for negative fees (c4729a91)
- (native-currency) Assert non-negativity of coinbase (b4cdb7a1)
- (native_currency) Assert UTXO-coin amount legality (a97fe00a)
- (native_currency) Assert valid coinbase discriminant (81af76c4)
- (BlockProgram) Assert fee-legality (e3fa6696)
- (block_program) Factor out fee legality verification (9813c6b7)
- Make all generation key fields private (9033bfb8)
- (mine_loop) Only mine when connected to peers (34d0f570)
- (TransactionKernel) Add
merge_bit
(fb736546) - (transaction) Delete deprecated snippet (0f6a695d)
- (mine_loop) Create state-less versions of tx-generators (db5435f9)
- Add 'arbitrary-impl' feature-flag (d7256533)
- (
TransactionDetails
) Add and use nop-tx constructor (5faac406) - (
proof_upgrader
) Log error on failure; don't panic (2f403002) - (mine_loop) Avoid mutable variable for latest block (8fb1a1bf)
- (archival_state) Don't crash on canonicity-check of unknown block (558539f0)
- (archival_state) Delete unused methods (78629f1f)
- (archival_state) Delete method (eaa82d08)
- (single_proof) Disallow update of coinbase-transactions (3fca68bf)
- (mempool) Add merge bit to tx-kernel-id (8907bf4c)
- (mine_loop) Factor out generation of composer parameters (212bcc7b)
- (SingleProof) Allow update of transaction's timestamp (04e247de)
- (wallet_state) Don't consume input for empty tx (d595f030)
- (cli_args) Restrict visibility of fields (45cef88d)
- (cli_args) Increase default reorganization tolerance (e491b2e0)
- Simplify guessing step (e6a63258)
- (peer_loop) Limit block-batch size to 250 (3ab413ca)
- (models::peer) Move PeerBlockNotification to separate file (44260b5d)
- Add wrapper for
triton_vm::verify
(85a79d5d) - Use wrapper for
triton_vm::verify
(e170c925) - (
mine_loop
) Factor out coinbase transaction preparation (11bfca65) - Create valid blocks with bogus proofs (9534287d)
- (peer_loop) Validate
SyncChallenge
(3b33a742) - (peer_loop) Don't allow syncing mode from handshake data alone (1af153d7)
- Remove data_dir from GlobalStateLock (b8c3d0ca)
- (peer_loop) Verify block before adding to fork-reconciliation list (05a5d8b1)
- (archival_mmr) Move module out of mutator-set directory (a601150c)
- (
peer_loop
) Reject responses with fishy difficulties (05ad1be6) - Add
SpendingKey
variantRawHashLock
(11883ffc) - (wallet_state) Replace list with Option for nonce-preimage (1b897818)
- (wallet) Delete duplicated type AnnouncedUtxo (bfd7d8f6)
- (
SecretKeyMaterial
) Move logic to new file (db391f8d) - (NativeCurrency) Rename NeptuneCoins to NativeCurrencyAmount (a2038ef9)
- (archival_state) Add block-hash witness to BlockRecord (a54f749d)
- (mine_loop) Avoid hardcoded array-lengths for auth paths (38d90c24)
- (mast_hash) Use sequential Merkle tree builder (e1fdb65c)
- Halve target block interval (89c04cb7)
- (
Block
) Drop unused testing premine recipients (419dc812) - (!) Add
guesser_digest
toBlockHeader
(03359d56) - Reduce futuredating limit to 5 minutes (5a107c04)
- Drop needless variable binding (99c24a51)
- (SyncChallenge) Don't check difficulties if own tip is genesis (6fcbf4e8)
- (peer) Move
HandshakeData
to separate file (50752a1a) - (peer) Move
PeerInfo
to own file (050071db) - (peer) Use fixed-size string for version in handshake (41615578)
- (!) Add own timestamp to peer handshake (487e8b33)
- (
HashLock
) Factor out related functions and structs (adee45c8) - Make guesser key deterministic (eaaa2c33)
- (
HashLock
) Drop convenienceFrom
implementations (dfec62fe)
✅ Testing
- Validate we can send to symmetric keys (cbc37454)
- Add negative tests (f1798368)
- (mine_loop) Add test that coinbase tx has timelocked/liquid outputs (0cbbffbc)
- (mine_loop) Account fox timelocked coinbase output in test (35954def)
- Re-randomize former proptest (f0cadb5c)
- (native_currency) Assert that expected asserts are hit (b3720787)
- (primitive_witness) Fix test-case generators after timelocking cb (6f2ba0a5)
- Add positive and negative tests for negative fees (4dbb0f42)
- Arbitrary non-negative
NeptuneCoins
(d0df57cd) - Update error ID allocation (f97275e1)
- Add proptest for fee gobbler (54ffdea5)
- (native_currency) Verify negative fee and set coinbase is disallowed (0f74c71b)
- (native_currency) Add proptest variant of deterministic test (83d184de)
- Estimate multi-threaded hash rate (f1e26c22)
- (rpc_server) Add test of tx with 0-n transaction outputs (c22cfe41)
- (SingleProof) Verify behavior of set/unset merge_bit (73db2547)
- (mine_loop) Account for merge-bit in test case generator (4a64fcab)
- (neptune_coins) Fix ranges in proptest (7383c883)
- Add tests to verify key/addr format and derivation (8447875e)
- Don't do PoW if not needed (86a55cc8)
- Mimic real blocks better in mock_block generator (a92ec31c)
- Add failing test of double-registration of MUTXOs (4064bb4c)
- (
WalletState
) Allow repeated addition records (783a817d) - (archival_mmr) Add panicking test for leaf-getter (c3dfc352)
- Test legacy addresses for premine recipients (546e5e5a)
- (block) Fix negative test of block validity/bad block MMRA value (814627b4)
- Fix mempool test of reorganization/tx-updates (b8d0f781)
- (Block) Verify validity for blocks with 0-10 inputs (6ffa24b4)
- Fix test of double-spend illegality (0506c9d9)
- (archival_state) Fix flaky test about block rollbacks (a4bb80f4)
- (mine_loop) Verify fast mast-hash agrees with trait function (aead0424)
- Don't drop receiver before iterations are done (8b69daf2)
- Produce valid transactions with bogus proofs (e363c896)
- Add test of sync challenge (950112b2)
- (global_state) Verify that never-tip blocks can bridge to new tip (2b21f26c)
- (archival_mmr) Test
prove_membership_relative_to_smaller_mmr
(625ce19f) - (archival_state) Verify expected bounds of archival_block_mmr (2f149132)
- Annotate snippet names with sign-off status (e1d16736)
- Sanity checks on max-future pow estimator (8ce167fa)
- Add sanity checks on max-future pow estimator (2c450291)
- Avoid magic constants (aa42608c)
- Don't run same test multiple times (36875586)
- Fix tests of key-properties (32e215da)
- Ensure guesser-fee UTXO addition records are consistent (58299f4a)
- (wallet_state) Check timelock registration of PoW UTXOs (bc795563)
- More tests of wallet's handling of guesser-UTXOs (4a13881e)
- Fix off-by-one error in sync-test (fa3dc860)
- Add faster test that mine-loop's fast-hash is correct (1577b09a)
- Fix failing test related to guesser-preimages (42b7e6f4)
- Fix hardcoded parameters from consensus-changes (4581b1eb)
🎨 Styling
- Check sanity of size indicators (bcbf96e9)
- Add conversion method for
NativeCurrencyWitness
(7277ba13) - Rename for better descriptiveness (3ad22fff)
- (merge_branch) Fix error codes (ea706be5)
- (native_currency) Simplify and document check (11f93b64)
- (
mine_loop
) Factor out composer parameters (d64257c1) - Reduce visibility of arbitrary implementations (763f4ce4)
- Happify clippy (rust v. 1.83) (1b4cce48)
- Avoid async closures (f7c816b6)
- Remove bad whitespace from premine table (913dc23f)
- (Block) Change derivation of current block's ms-field (4cf6e18e)
- Avoid needless iteration (c3f1a8fe)
- Make linter happy (a1edbd4f)
- Apply PR feedback (09671d03)
- Happify clippy (b17e295c)
- (
peer_loop
) Arrange message handlers in order of sequence (7c807673) - (
cli_args
) Rename CLI argument about sync threshold (e26ba392) - (
GlobalState
) Rename criterion function (2dd639c2) - (
peer_loop
) Improvetry_ensure_path
readability (3e88e47f) - (archival_state) Rename variable (ea380e9d)
- (
Block
) Renamegenesis_block
togenesis
(fd4652d3) - Rename
HashLock
->HashLockKey
(b7166043)
🛠 Build
- Fix build script for Windows (aff9423c)
⚙️ Miscellaneous
- Add proof-server explorer.neptune.cash (b6f49c33)
- Upgrade tasm-lib dependency (6f90dd53)
- Cargo fmt (1297fd5a)
- Clippy too-many-args lint (bd7accfc)
- Neptune-cli offline cmds accept network (5a70cc73)
- Update benchmarks (eb09fde1)
- Run clippy on all code (b65c2119)
- Don't lint nightly-specific feature (953a93c2)
- (connect_to_peers) Reduce log-noise on failed outgoing connections (8eb547cf)
- Allocate funds to premine recipients (88db6fef)
- Make arbitrary and proptest an optional dependency (4e68232e)
- Add comment in Cargo.toml (2418e2a6)
- Reject if documentation builds with warnings (55014685)
- Make linter happy (0a083d89)
- Delete unused trait and implementation (7178cb9d)
- Happify clippy (31bf6db2)
- Happify clippy (6ffa0ee1)
- Update benchmarks (55142de3)
- Happify clippy (7e499ac3)
Block
- Verify coinbase is not negative (c48acb70)
Devops
- Lint code behind feature flag in precommit hook (8b28ac6c)
- Add more rules to pre-commit hook (466a5b89)
Log
- (peer-loop) Verbosify logging in block handler (d7854b24)
- Add peer address to peer-loop log messages (2eb6e588)
- Add peer address to peer-loop log messages (638926ea)
- (peer_discovery) Debug-log if no candidate can be found (0d9da62a)
- (mine_loop) Warn if not mining because no connections (4a1117f2)
- (
BlockProposal
) Readably print guesser fee (e0c2318b) - (peer_loop) More info on bad block-requests-by-height (522a669f)
Ui
- (
neptune-cli
) Avoid stack trace dump (1e6833ac)
Note: (!) indicates a breaking change.
Install neptune-cash 0.0.11
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/Neptune-Crypto/neptune-core/releases/download/v0.0.11/neptune-cash-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy ByPass -c "irm https://github.com/Neptune-Crypto/neptune-core/releases/download/v0.0.11/neptune-cash-installer.ps1 | iex"
Download neptune-cash 0.0.11
File | Platform | Checksum |
---|---|---|
neptune-cash-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
neptune-cash-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
neptune-cash-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
neptune-cash-x86_64-pc-windows-msvc.msi | x64 Windows | checksum |
neptune-cash-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo Neptune-Crypto/neptune-core
You can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>