Releases: amadeusprotocol/node
v1.5.4 - 0to100
0to100.mp4
This is the 100th tagged release 🥳
Major 📜
- 🔱 Activate HBSMT as the consensus contractstate tree at epoch 710. At fork height 710_00000 the contractstate trie
migrates from the legacy HubtV2/bintree to HBSMT, whose root is now signed into attestations. The fork block does a
deterministic full rebuild of the HBSMT from contractstate; post-fork updates are incremental and rewind-safe (folded
into the mutation set). See consensus_apply.rs, hbsmt_rdb.rs. - 🌲 Move the receipts / tx / validator roots to HBSMT at the fork. The per-block root_receipts, root_tx, and
root_validator switch from the Hubt trie to HBSMT once past the fork height (gated; pre-fork stays on Hubt). See
consensus_apply.rs, entry.ex. - 🔗 Add root_chain — an MMR commitment over all blocks — to the header. At epoch 710 the MMR accumulator root becomes
a mandatory block-header field that every node re-derives and verifies per block, and that snapshot import re-checks.
Built in lockstep with the chain and rewind-safe via per-entry pre-apply snapshots. See entry.ex, db_mmr.ex,
fabric_snapshot.ex. - 💸 Charge a per-value-byte READ budget (epoch 710). Reads now cost proportional to value size, so re-reading a large
(1MB+) term repeatedly is no longer almost free. See consensus_kv.rs. - ⚙️ Add a native multi-threaded UPOW solver — new upow.rs (~350 lines): the genuine 16×50240×16 matmul with
AVX-512-VNNI / AVX2 / scalar autodetect. A computor can compute UPOW to itself as a node, with a COMPUTOR_UPOW_THREADS override. See upow.rs, computor_gen.ex, node/upow.ex. - 🛡️ WASM VM budget/metering fixes — meter as_abort string reads (charge-before-read, capped), fix the
LOG element off-by-one, cap import call depth at MAX_CALL_DEPTH=16, and charge slash_trainer exec cost
(COST_PER_SLASH). See wasm.rs, protocol.rs. - 🧮 Harden Freivalds UPOW verification — AVX2-accelerated matmul check (hsum256/dot8_i32_to_i64/i64 accumulation),
fix an i32-min-wrap, plus a soundness/attack test battery. See sol_freivalds.rs.
Minor
- Don't crash on UDP send failure — handle all :gen_udp.send errors instead of only :ok/:eperm. See
node_gen_socket_gen.ex. - Harden special-meeting consensus — ignore signatures from non-validators, add a catch-all handler. See
special_meeting_gen.ex. - Per-op peer rate-limiting — canonical accepted-op set with per-6s quotas; throttle/drop unknown ops. See node_ops.ex
(new), node_gen_netguard.ex. - Harden STUN self-IP detection — DNS-resolve the STUN server, validate responses by transaction id, deadline/retry;
only accept parsable IPv4. See stun.ex, cymru_routing.ex. - Don't crash on malformed peer input — graceful handling of invalid entries/ANRs/attestations (throw vs match-crash),
cache pending attestations. See node_state.ex. - Validate BIC names/symbols — shared validate_name (1–32 bytes) for coin/NFT/collection; reject reserved symbols even
with punctuation stripped. See coin.rs, nft.rs, coin_symbol_reserved.rs. - Depth-limited, length-checked vecpak decode (reject malformed payloads).
- Cost-overflow guard (cost_per_byte_overflow) + min historical tx cost. See protocol.rs.
- RocksDB single-subcompaction tuning;
- fix an Elixir Range deprecation warning.
v1.5.3 - Waiting so Long
silverfins_waitingsolong.mp4
Major 📜
- Add MMR (Merkle Mountain Range) block accumulator — append-only commitment over all blocks with compact inclusion proofs + standalone verify, exposed over RPC (proof/block, proof/verify_block). See mmr.ex and api_proof.ex.
- Add state snapshots + chain pruner — snapshot-consistent reads via transaction_with_snapshot, fast-sync state snapshots, and a pruner to bound disk growth. See fabric_snapshot.ex, db_pruner.ex.
- Add submit_and_wait?finalized=true on RPC to block until a tx is finalized (not just committed). See api_tx.ex.
- Harden the WASM contract VM — upgrade to wasmer 7.1.0; fix gas/budget accounting, bulk-mem & seed charging, RNG farming, cache poisoning, and cap call depth at 16.
- 🧪 Land HBSMT (Hot Binary Sparse Merkle Tree) — ~5k-line Merkle tree running alongside legacy HubtV2, with a full soundness/attack test battery. Will be added to consensus in next fork. See hbsmt.rs.
Minor
- Significantly lower RocksDB RAM usage; add memaudit.
- Add finalized | committed | pending tx status to metadata.
- New cursor/start_nonce pagination for tx-by-address queries.
- Peer hardening: malicious-address warning endpoint, drop spammy/unrouted peers, cache IPv4 off STUN, only accept parsable IPv4.
- Fix DoS on the testnet SSL forwarder + validator bitset; rate-limit testnet uPoW endpoints.
- Guard against zstd bombs, negative nonces, and invalid sols (no crash).
- Rewrite DOCS.md (protocol params, WASM contracts, SDKs, networks).
- Snapshot at 63000010.
v1.5.2 - Tree of Might
output.mp4
Major 📜
- Upgrade bintree🌲 to V2 which significantly improves merkle proofs+verification
- Add
submit_and_wait?finalized=trueon RPC to wait for finality - Add Rust and more AssembyScript contract examples
Minor:
- Add Prometheus support for RPC metrics feed (BYOT)
- Reduce storage cost per read 10x
- Reduce storage cost per write 10x (didnt allow large contracts to deploy)
- Fix a DoS bug on the testnet SSL forwarder
- Add
finalized|committed|pendingto tx metadata as status - Add
transfer_nftto API - Snapshot at 48362121
v1.5.1
Fix issues related to the tx_filter.
To recap:
/api/chain/tx_by_filter?arg0=<b58(sol)>
now naturally checks if the sol is included in the chain
Queries on accounts with tons of transactions will work now
to rebuild ALL CHAIN filters you can use
DB.Entry.Hashbuilder.clear_all()
DB.Entry.Hashbuilder.start()
otherwise itl start building new filters from when you launch.
you should still delete all the old filters via
RocksDB.get_cf_size(:tx_filter)
DB.Entry.Hashbuilder.clear_all()
size of optimized filters should be approx 22G for full chain. If your size is over 30G delete the old filters.
v1.5.0
Upgrade whenever possible, otherwise you will fall out of sync when the next slash_trainer gets called
Major:
- Changes TX filters to use hashfilters (current filters defined here)
- Reorgs slash_trainer args so the mpk is arg0
Minor:
- Temporary hashfilter builder genserver
NOTE:
Please consider arg0 as the receiver PK as its part of the hashfilter for future contract programming.
With hashfilters its possible now to search for arg0 == sol, making it quick to check if a sol is included in the chain.
v1.3.9 - Frieza Upgrade
awaken.mp4
AKA The WASM Executor update 🥳
- Adds full WASM execution live only on testnet and behind a NOOP on mainnet (pending further tests)
- Adds full AssembyScript examples for coding smart contracts
- Fixes large performance regression in RPC
/statsapi
Minor:
- Relax NetGuard in the case of catchup
- Fix crash inside ComputorGen
v1.3.8 - Kami Road
Update before epoch 434:
- Adds new ExecutionReceipt
#[derive(Clone, Debug)]
pub struct ExecutionReceipt {
pub txid: Vec<u8>,
pub success: bool,
pub result: Vec<u8>,
pub exec_used: Vec<u8>,
pub logs: Vec<Vec<u8>>,
}- Adds storage deposit of 1.0 AMA which is refunded at TX END
- Ensures some extra correctness of TXPool
- Continuing work on VM cost counting and import calling