Skip to content

Releases: amadeusprotocol/node

v1.5.4 - 0to100

14 Jun 17:40
46fb4ba

Choose a tag to compare

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

02 Jun 03:00
565ed45

Choose a tag to compare

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

12 Jan 22:21

Choose a tag to compare

output.mp4

Major 📜

  • Upgrade bintree🌲 to V2 which significantly improves merkle proofs+verification
  • Add submit_and_wait?finalized=true on 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|pending to tx metadata as status
  • Add transfer_nft to API
  • Snapshot at 48362121

v1.5.1

20 Dec 20:46

Choose a tag to compare

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

18 Dec 04:37

Choose a tag to compare

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

14 Dec 22:31

Choose a tag to compare

image
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 /stats api

Minor:

  • Relax NetGuard in the case of catchup
  • Fix crash inside ComputorGen

v1.3.8 - Kami Road

11 Dec 19:10

Choose a tag to compare

image

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

v1.3.7

02 Dec 17:36

Choose a tag to compare

fix circulating and epoch reward RPC query

v1.3.6

01 Dec 16:55

Choose a tag to compare

New snapshot 41960861

v1.3.5

30 Nov 05:51

Choose a tag to compare

Add exec accounting in epoch 419 to prepare for new WASM contracts