Skip to content

Releases: amadeusprotocol/node

v1.5.5 - Raditz Update

Choose a tag to compare

@vans163 vans163 released this 07 Jul 02:00
RZUP

v1.5.5

Major 📜

  • 🏦 Add the LockupVault BIC — vault staking for AMA. Lock 1000+ AMA in og/3m/6m/12m tiers with the APY rate locked at creation
    (5% / 10% / 15% +5% early bonus on 12m until epoch 1150). Vaults name a validator (2-epoch change queue), route yield to a
    payout address or auto-compound it into the vault (payout address alone decides), and serve a 21-day unlock window before
    withdraw. Includes owner transfer (change_owner), lock extension (extend_lock, capped at 100 years), treasury-funded
    beneficiary vaults (owner arg), and strict canonical-map args. Callable on testnet now, mainnet from epoch 750. See
    lockup_vault.rs, consensus_apply.rs.
  • 🐉 Activate the Shenron emission curve (v2) at epoch 750. Per-epoch emission becomes 1,430,936,428 / (epoch−20)^1.3 (anchored
    +72, ~232.4k AMA at activation), computed exactly in integers, replacing the legacy geometric decay. Single source of truth
    for minting, supply accounting, and the emission API. See epoch.rs.
  • ⚖️ New epoch boundary (next2) at fork 750: emission split, vault APY, participation, network tax. Emission splits 50/50
    between vault APY and solvers. Vault yield draws on its half plus a carried pool (paid on amount+accrued, pro-rata if dues
    exceed budget); solver emission is curbed by network participation (phash, the integer-exact pflops measure) — below 100 PFLOPS
    only phash% pays and the shortfall accrues; from epoch 1150 participation curbs vault APY too. A 25% network tax on everything
    paid goes to the treasury, funded from the vault leftover so total issuance never exceeds the curve. Undisbursed emission
    carries in bic:epoch:vault_accrued_pool / bic:epoch:solver_accrued_pool. Pre-750 boundaries replay byte-identical on the
    untouched legacy path. See epoch.rs.
  • 🗳️ Validator-set rework at fork 750. Next epoch's set = peddlebike67 + every vault-backed validator with ≥1m AMA staked
    (amount+accrued) + the top 33 solvers by sol count, deduped, with the fixed 99 cap removed. Every sol-submitting solver in the
    set is paid (no top-99 payout cap); payouts — sol and vault alike — require already being in the set, so first-time solvers
    mine one unpaid epoch to earn entry. Queued vault validator changes post exactly once, first thing at the boundary (single
    promotion site). See epoch.rs, lockup_vault.rs.
  • 🪓 Remove the legacy Hubt/bintree entirely (−2.7k lines). With HBSMT live since epoch 710, the old bintree trie, its rdb
    backing, and proof code are deleted; the NIF surface migrates bintree_* → hbsmt_* (root/prove/verify, contractstate proofs).
    See consensus_apply.rs, hbsmt_rdb.rs, lib.rs.

Minor

  • Unlocking vaults keep earning yield and keep backing their validator's stake until withdrawn.
  • Testnet: rebuild the MMR from genesis automatically when none exists. See ex.ex.
  • New consensus test harness (single-node chain + multi-node cluster) and a ~1.2k-line LockupVault suite, including an
    epoch-751 emission-conservation scenario (paid + tax + pools == curve, exactly). See tests/chain_harness.rs,
    tests/lockup_vault.rs.

v1.5.4 - 0to100

Choose a tag to compare

@vans163 vans163 released this 14 Jun 17:40
46fb4ba
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

Choose a tag to compare

@vans163 vans163 released this 02 Jun 03:00
565ed45
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

Choose a tag to compare

@vans163 vans163 released this 12 Jan 22:21
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

Choose a tag to compare

@vans163 vans163 released this 20 Dec 20:46

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

Choose a tag to compare

@vans163 vans163 released this 18 Dec 04:37

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

Choose a tag to compare

@vans163 vans163 released this 14 Dec 22:31
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

Choose a tag to compare

@vans163 vans163 released this 11 Dec 19:10
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

Choose a tag to compare

@vans163 vans163 released this 02 Dec 17:36

fix circulating and epoch reward RPC query

v1.3.6

Choose a tag to compare

@vans163 vans163 released this 01 Dec 16:55

New snapshot 41960861