nu-node/CHANGELOG.md
Mukan Erkin ca388b4bc2 feat(rpc): add nu_listValidators endpoint
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 20:19:31 +03:00

6.3 KiB
Raw Blame History

Changelog — nu-node

All notable changes to this project will be documented in this file. Format: Keep a Changelog


[Unreleased]

[0.9.0] — 2026-04-24

Added

  • nu_listValidators RPC handler — tüm validatörleri döner; params[0] = true ile yalnızca aktifler filtrelenir

[0.8.0] — 2026-04-24

Added

  • --p2p-api <url> CLI flag — nu-p2p publish API adresi; verildiğinde P2P forwarding loop aktif olur
  • reqwest HTTP client ile nu-p2p /publish endpoint'ine BlockAnnounce ve TxGossip mesajları iletilir
  • nu-nodenu-p2p entegrasyonu tamamlandı: block loop ürettiği her blok için announce, RPC üzerinden kabul edilen her tx için gossip gönderir

Changed

  • --p2p-addr / --bootstrap flag'leri kaldırıldı; yerini --p2p-api aldı (process sınırı korunuyor, nu-p2p ayrı process olarak çalışıyor)

[0.7.0] — 2026-04-24

Added

  • nu-vm/executor.rsexecute_nft_transfer: sahiplik + koleksiyon kontrolü, owner güncelleme, hesap nft_ids sync
  • nu-vm/executor.rsexecute_collection_claim: validate_lineage() ile geçerli prefix-extension yolu doğrulama; tüm NFT'lere collection_id atar
  • nu-vm/engine.rsNftTransfer ve CollectionClaim varyantları bağlandı; NftMint kullanıcı tx'i değil (hata döner)

[0.6.0] — 2026-04-24

Added

  • block_loop.rsBlockLoopConfig.dev_mode; rotation check: non-dev modda slot_producer() çağrılır, sıra başka validatörde ise slot atlanır
  • block_loop.rsload_validator_set(db): her slot başında "validator:" prefix'i taranarak canlı ValidatorSet oluşturulur
  • block_loop.rsupdate_validator_pon(db, address): dürüst blok sonrası PoN skoru ve consecutive_blocks güncellenir
  • nu-consensus/src/validator_set.rsslot_producer(), update(), get(), active_count(), Default impl; schedule() filtresine is_banned() eklendi
  • nu-rpc/src/handlers.rsnu_getValidator: verilen adres için ValidatorState döner, kayıt yoksa null

[0.5.0] — 2026-04-24

Added

  • nu-consensus/src/slashing.rsslash_double_sign (%10 stake, PoN→0.5, 30 slot ban), slash_invalid_block (%5 stake, PoN→0.7), record_skip/record_block, try_unban
  • nu-consensus/src/types.rsValidatorRecord'a skip_count, ban_until_slot alanları; MIN_VALIDATOR_STAKE Shell cinsine güncellendi (1_000_000)
  • nu-state/src/validator.rsValidatorState struct (on-chain validator kayıt)
  • nu-state/src/db.rsscan_prefix<T> — prefix ile tüm kayıtları iterate eder
  • nu-state/src/accessor.rsget_nft/set_nft, get_validator/set_validator trait metodları
  • nu-vm/executor.rsexecute_validator_register, execute_voting_open, execute_node_approve (NFT mint + ödül dağıtımı), execute_node_reject (entry fee yakım + stake unlock)
  • block_loop.rs — her slot'ta generate_scheduler_txs çalışır; Pending→VotingOpen ve VotingOpen→Approved/Rejected auto-tx'leri mempool'a eklenir
  • DEV_WALLET env variable desteği — hardcode kaldırıldı

[0.4.0] — 2026-04-24

Added

  • src/p2p.rsP2pSender ve NodeP2pEvent (BlockAnnounce, TxGossip); block loop ve RPC handler'larının P2P event'i yayınlamasını sağlar
  • --p2p-addr ve --bootstrap CLI flag'leri — P2P etkinleştirildiğinde event channel başlatılır
  • RpcServer::with_p2p constructor — RPC katmanına P2P gossip sender enjekte eder
  • nu_sendRawTx: tx kabul edildiğinde raw bytes P2P gossip channel'ına iletilir

[0.3.0] — 2026-04-24

Added

  • nu-vm/executor.rsexecute_node_submit: validates entry fee (25 NUT), creates StoryNodeState { Pending } in RocksDB indexed by temp_id
  • nu-vm/executor.rsexecute_vote_register: validates node is VotingOpen, locks 10 NUT stake until vote end
  • nu-vm/executor.rsexecute_vote_cast: computes weight as √(staked) × pon_score, appends WeightedVote to node
  • nu-vm/executor.rsexecute_stake_op: stake/unstake with balance and staked field updates
  • nu-state/accessor.rsStateAccessor extended with get_account/set_account, get_node/get_node_by_temp/set_node, lock_stake/unlock_stake/add_nft/record_vote
  • nu-rpc/handlers.rsnu_getBlock: reads "block:{height}" from RocksDB, returns serialized Block or null
  • nu-vm/rewards.rsSHELL_PER_NUT = 1_000, NUT_PER_NU = 100, NODE_REWARD_NUT = 100 constants; currency hierarchy Shell → NUT → NU

[0.2.0] — 2026-04-24

Added

  • nu-vm/engine.rsexecute_block: runs all txs in a block against StateDb; TokenTransfer fully applied, other variants produce a "not implemented" receipt
  • src/block_loop.rs — tokio task producing one block per slot (6 s) in dev mode; drains mempool, executes txs, removes successful ones, persists block to RocksDB
  • --dev --validator flags in main.rs trigger block production loop on startup

Changed

  • StateAccessor trait: set_balance / inc_nonce now take &self (RocksDB provides interior mutability — no &mut required at the Rust level)
  • StateDb wrapped in Arc<Mutex<StateDb>> — block loop holds write lock per block, RPC holds read lock for nu_getAccount
  • nu-vm now depends on nu-block (was implicit via engine)

[0.1.0] — 2026-04-24

Added

  • nu_sendRawTx — decodes JSON RawTransaction, deduplicates by tx_id, inserts into mempool; returns { tx_id } on success
  • TxPayload enum in nu-block/types.rs — all variants with priority_hint()
  • TxPriority derived from TxPayload in nu-mempool (Critical > High > Normal)
  • nu-rpc axum HTTP server on POST /rpc — dispatches JSON-RPC 2.0 requests
  • nu_chainInfo — returns chain_id and node_version
  • nu_getAccount — reads AccountState from RocksDB; returns empty account for unknown addresses (zero balance, nonce 0)
  • StateAccessor trait implemented on StateDb — canonical single source of truth for balance and nonce access
  • --dev, --validator, --rpc-addr, --db-path, --chain-id CLI flags via clap
  • Rust workspace scaffold with six crates: nu-consensus, nu-mempool, nu-state, nu-block, nu-rpc, nu-vm
  • Dockerfile.dev — multi-stage Rust build (builder: rust:1.79-slim, runtime: debian:bookworm-slim)