Changelog
v0.6.0-rc.1
v0.6 is a breaking release. It runs only against the v0.6 consensus contracts (release tag v0.6-rc-1), and all validators upgrade together: receipt hashes, storage-fee votes, spendable contract balance and child budgets change.
New features
- Check at start-up and in
doctorthat the consensus deployment matches the trusted protocol manifest of the network, and refuse a mismatch; new requiredconsensus.manifestpathandconsensus.chainid, optionalconsensus.admissiontimeout(default 15s) - Serve as a tribunal juror: re-run the accused execution, commit and reveal the tribunal vote, and after a restart reveal a committed vote and vote in tribunals that opened while the node was down; log an error when this validator is the accused leader
- After a tribunal verdict, settle its penalty pages and its quarantine cause
- As leader, propose receipts that emit messages through the v0.6 message envelope
- Deliver the messages that accepted and finalized transactions still owe, in turns with the other validators that voted
- Retry an external message that the chain paused, with a backoff from 30 s up to 10 min
- Execute transactions under the v0.6 fee model: fee values pinned at activation, storage and receipt budgets, message fee limits and fee allocations; the leader proposes the storage fee the execution used
- When the chain rejects a leader receipt as over a fee or size limit, propose a leader timeout instead, so the leader gets no idleness strike
- Vote
DeterministicViolation, instead of not voting, when the leader receipt is missing data or cannot be used, or reports a storage fee the execution did not use - Prove activations and leader proposals with an ECVRF proof made with the operator key; a validator whose signer cannot make ECVRF proofs does not start
- After a restart, resume the duties this node accepted but did not finish: activate, propose, commit, reveal, appeal vote, message delivery and tribunal vote
- Deliver consensus events to the duty handlers at least once; new
node.streamersettingsack_wait_seconds(30),max_ack_pending(256) andbuffer_size(2048) - Refuse to start when the transaction layout of the consensus contracts differs from the node
- Bind
ops.dbtonode.operatorAddresson the first start, and refuse to start when it belongs to another operator (for example a copied data directory) - Add opt-in operational keys for the duties that do not need the operator key (
consensus.operational_keys:enabled,pool_size1,low_watermark0.05,target_balance0.25,interval5m); the node derives them from the operator key and tops them up from the operator account - Add opt-in parallel replay of independent transactions (
genvm.replay.parallel_enabled, default off;workers4,consensus_reserve_permits2,replay_floor_permits1,max_journal_bytes256 MiB) - Roll back replayed state exactly on chain reorgs (
genvm.replay.reorg_history_blocks, default 4096;genvm.replay.max_reorg_journal_bytes, default 256 MiB) - Add the
gen_getLogsevent query endpoint, with astatusfilter (logs of appeal-cancelled rounds needstatus: ["cancelled"]) and the limitsnode.rpc.getlogs_max_block_rangeandnode.rpc.getlogs_max_results(10,000 each) - Add
gen_subscribeandgen_unsubscribeon the RPC WebSocket, with the streamstransactions,leadership,epochsandnewHeads - Add the
gen_getTransactionLifecycleendpoint: projected status, resolution action, decision id andexecutionGeneration - Add the
gen_getTransactionDataendpoint: the on-chain data of a transaction round, plus itsreturnDataandleaderPublicDatafrom the local trace store (nullonce pruned) - Add a
feesobject togen_getTransactionReceipt: deposit, distribution, locked prices, consumed counters (includingstorageFeeUsed),allocationsandallocationPolicy - Add events store retention (
node.events.retention_blocks, default 1,000,000) - Add trace store limits:
node.trace.retention_blocks(1,000,000),max_trace_bytes(32 MB) andmax_debug_field_bytes(256 KB pergen_dbg_traceTransactionfield) - Add the
node.rpc.contract_read_max_byteslimit (16 MB) forgen_getContractCodeandgen_getContractState - Add
genvm.sync_permits_lag_threshold(default 1000) to choose between the replay and live GenVM permits - Add
rollup.rpc_response_header_timeout(default 30s),node.rpc.request_timeout(default 180s) andconsensus.head_pin_freshness(default 30s) - Add
node.rpc.gen_call_max_debug_bytes(default 1 MB) andnode.rpc.gen_call_max_debug_elements(default 10,000) to limitgen_calldebug output - Add an opt-in allowlist for proxied
eth_*andzks_*methods: disable the group and enable only the methods listed under it - Add a
scope(alldefault,genvm,ops) and asnapshot.jsonmanifest toPOST /snapshot - Report the operator balance in
/healthanddoctor: warn belownode.operatorBalanceWarnWei(default 0.1 GEN), fail belownode.operatorBalanceCriticalWei(default 0.01 GEN) - Add a Validator Participation section to
doctor: ban, self-stake, operator balance, sync and primed state - Show
validator_addressandvalidator_monikerin/health, and report the health conditions indoctorand the logs - Read the chain RPC API key from
GENLAYERNODE_ROLLUP_GENLAYERCHAINRPCKEYand send it in therollup.genlayerchainrpckeyheaderheader (defaultX-AccessKey) - Publish signed checksums (
genlayer-node_<version>_SHA256SUMSwith a Sigstore bundle) and aninstall.shscript with each release - Add gas, duty and fee metrics:
genlayer_node_gas_*,genlayer_node_consensus_submit_total,genlayer_node_consensus_revert_total,genlayer_node_operator_misconfigured_total,genlayer_node_fees_operator_insufficient_funds_total,genlayer_node_fees_settlement_events_total,genlayer_node_fees_distributed_wei_total,genlayer_node_fees_earned_wei_totalandgenlayer_node_fees_penalties_wei_total - Add metrics
genlayer_node_operator_condition_*,genlayer_node_external_message_delivery_total,genlayer_node_external_message_reimbursed_wei_total,genlayer_node_sync_consecutive_failures,genlayer_node_sync_stuck_block,genlayer_node_prime_blocked_insufficient_funds,genlayer_node_transact_keyed_replacements_total,genlayer_node_event_dispatch_*_total,genlayer_node_replay_*,genlayer_node_head_partition_*_totalandgenlayer_node_pubsub_messages_dropped_total
Misc
- Ship GenVM v0.6.0-rc10; the node uses the new GenVM manager protocol, so an older GenVM manager does not work (this matters only with
genvm.start_manager: false) - The GenVM runtime moves from
third_party/genvmtoopt/genvm/<version>: setgenvm.root_dir: ./opt/genvm/v0.6.0-rc10(install.shsets it for you) - Refuse to start when the config file is missing, is not a regular file, or has an empty required field:
datadir, both rollup URLs,consensus.consensusaddress,consensus.manifestpath,consensus.chainid, andgenvm.root_dir(orgenvm.manager_urlwhenstart_manager: false) - Warn about unknown config keys (
Ignoring unknown config keys) - RPC groups move from
node.rpc.endpoints.groups.<group>tonode.rpc.endpoints.<group>, and method overrides tonode.rpc.endpoints.<group>.methods.<method>; the node ignores the old form without an error and uses the defaults, so move your settings - The
gen_dbg_*methods are off unlessnode.rpc.endpoints.genlayer_debug.enabled: true; the example config also turns off thezks_*proxy - Return
-32601instead of-32004for a deniedeth_*orzks_*method; a disabledgen_*method still returns-32004 - Replace the
/healthbody:statusis one ofunknown,healthy,suspect,warning,degradedandunavailable, explained by aconditionscatalog;checksandgenvm_modulesare removed /healthreturns HTTP 503 only forunavailable, so a node that catches up or is not primed yet now returns 200; a self-stake below the minimum or a critical operator balance setsconsensus.stakeorconsensus.operator_fundstounavailablegen_getTransactionStatusreturns the stored status only and ignorestimestamp(usegen_getTransactionLifecyclefor the projected status);ReadyToFinalize(11) is removed, soValidatorsTimeout,LeaderTimeoutandLeaderRevealingare now 11, 12 and 13previousStatusingen_getTransactionReceiptis alwaysnull- The
statusparameter ofgen_call,gen_getContractStateandgen_getContractCodetakesdecidedinstead ofaccepted(defaultdecided);acceptedreturns-32602 genvm.permitsandgenvm.sync_permitsare now permit budgets (a nondeterministic run costs 8, a sync run 4): leave them empty or multiply your old values by 4 (8 → 32, 64 → 256)- Split the database into
genvm.db(chain data) andops.db(this node's own records);<datadir>/genlayer.dbis renamed togenvm.dbat start-up, and start-up is refused when both exist node.genlayerdbis replaced bynode.genvmdbandnode.opsdb; move a custom database path by hand- Prove VRF duties with the operator key registered before the transaction was created; after an operator key rotation, keep the old operator account in the keystore, with the same password, until its transactions are done
- Run the Docker image as the non-root user uid 10001; run
sudo chown -R 10001:10001 ./dataonce before the first start - Read WebDriver container stats only through
DOCKER_HOST: the release compose adds a read-only Docker socket proxy and no longer mountsdocker.sockinto the node; a binary install setsDOCKER_HOST, else the collector is skipped - The release compose file requires
NODE_PASSWORD(the default12345678is removed) and gives it to the node asGENLAYERNODE_PASSWORD, not on the command line - The release monitoring profile has no default
CENTRAL_*endpoints or credentials: set all six in.env - Clamp
consensus.chain_submit_bufferat start-up so at least 5 s of the shortest on-chain phase window stays for execution, and log a warning when it does - The
genlayer_node_disk_*metrics reportdirectory="genvm.db"anddirectory="ops.db"in place ofdirectory="genlayer.db"; update dashboards and alerts - Add a
reasonlabel (http_unavailable,block_lag,rate_limited) togenlayer_rollup_rpc_ws_fallback_total - Signed GenVM web requests send the validator wallet address in the
genlayer-node-addressheader, instead of the operator address - Show contract revert errors with their argument names in logs
- Show module paths, not build-machine paths, in log
callerfields and stack traces - Update the release image base to Alpine 3.24.2, Grafana Alloy to v1.20.1 and the WebDriver image to 0.0.12, and add
tecnativa/docker-socket-proxy:0.3.0
Bug fixes
- Retry a chain HTTP request once after a dropped connection, a 502/503/504 or a rate limit; the transport does not retry timeouts and transaction sends
- Fall back to the WebSocket RPC when the HTTP RPC is down or does not answer in time, also for transaction submission and at start-up
- Report the RPC error, not a connection-closed error, when the WebSocket server closes right after it replies
- Keep syncing when the HTTP RPC lags the WebSocket head, instead of exiting after repeated
block not found - Keep every nonce owned until the chain settles it: a stuck nonce no longer blocks all later transactions until a restart, recorded transactions are sent again after a restart, and a nonce is freed or reused only on chain evidence
- Make the self-cancellation of a stuck nonce affordable on a small wallet, and outbid the previous cancellation when it is retried
- Finalize, idleness, epoch-advance and message-delivery transactions no longer cancel pending commit and reveal transactions
- Keep commit and reveal transactions on time when older pending transactions block them, and cancel transactions whose deadline passed or whose fee bumps are used up
- No longer mark a transaction rejected, and reuse its nonce, when the RPC does not show it as pending within 10 s
- Read the receipt before treating a timed-out transaction as failed, so a mined transaction is not sent again
- Fix a node crash (
concurrent map writes) when several transactions fail at the same time, for example during parallel finalizations - Keep committed votes and their salts across restarts and replayed events, so the reveal is not missed
- Retries no longer regenerate a commit vote or a proposed receipt, so a validator or leader whose first transaction already mined can still reveal
- A leader rotation delivered twice (for example at restart) no longer sends a second, reverting propose transaction
- A GenVM manager outage or restart during a duty no longer turns the transaction into a leader timeout; the duty waits for the manager within its phase
- Stop retrying a transaction that the operator wallet cannot pay for; when priming is blocked, log one error that names the operator wallet, and resume once it is funded
- Duty watchers no longer sleep through their turn when the chain clock runs ahead of the node clock
- Fail a transaction whose calldata cannot be decoded with an error receipt, instead of voting Timeout
- Stop a transient database read error or a missed sync event from making a synced node vote Timeout
- Vote Timeout instead of crashing when a node behind sync is missing transaction data
- Give intelligent contracts the real chain ID instead of
1 - Set the contract
origin_addressto the transaction submitter instead of the activating validator - Read EVM contract views for intelligent contracts at the activation block, so all validators see the same value
- Stop sending an extra transaction before each duty; read time-sensitive contract views at the pending block instead
- Drive pending tribunals to their end during epoch finalization, so an epoch no longer stays unfinalized behind them
- Re-run transactions that an appeal sends back for recomputation, from a clean round
- Stagger finalization: one validator at a time polls and submits, also for the predecessor drain and the epoch sweep, so validators stop reverting with
already finalized - Stop sending a duplicate finalize when the last reveal and the decision event arrive together
- Stop resubmitting a finalize that reverts permanently
- Epoch recovery sweep: force-process only stuck transactions, and bound each attempt, so a transaction that cannot finalize no longer stops epoch finalization
- Retry the epoch advance during each validator's turn, so epochs advance at their normal pace again
- Stop a validator from skipping an epoch's prime after a stale epoch read or a failed retry loop
- Stop paying for prime transactions that the contract ignores: after 5 in a row with no effect, only re-check until the next epoch
- Re-fetch blocks that a chain reorg replaced, so their consensus events are no longer lost
- Stop dropping consensus events that the log bloom check wrongly treated as false positives, and never move the sync cursor backwards (a synced node looked behind and lost its duties)
- Stop sync with an error that names the transaction, instead of silently skipping an accepted transaction that cannot be decoded
- Sync contract state for transactions accepted without a
TransactionAcceptedevent, so contract reads stop failing withpebble: not found - Do not restore contract state from an execution that an appeal replaced in the same block
- Fetch at most 16 transactions at a time during sync, so a node that catches up no longer floods its RPC provider
- Retry instead of rescanning from block 0 when the first-sync genesis lookup fails
- Wait for indexed data in
gen_call,gen_getContractState,gen_getContractCodeandgen_dbg_traceTransactioninstead of failing while the node catches up (newgenvm.sync_wait_poll_interval, default100ms) - Stop crashes on empty or out-of-range data from the chain, and on malformed revert data
- Reject malformed GenVM storage changes instead of crashing the node
- Stop a crash from an oversized map-key length in contract calldata, and reject calldata with non-canonical length headers
- Fail the transaction instead of crashing on missing or malformed numbers in GenVM output and emitted messages
- Fix a GenVM cache race that could crash the node during sync, and data races on per-transaction and epoch state
- Fix a slow memory leak of finalized and canceled transactions
- Exit with a non-zero status after a panic, so Docker or systemd restarts the node
- Report the real error, not
context canceled, when parallel work fails - Stop logging
Can not process rotate leadererrors when the proposal of the replacement leader carries the rotation - Allow full-mode nodes to start without a password
- Honor
node.rpc.host; the RPC listener bound to all interfaces - Raise the open-file limit to 65536 (or to the hard limit) at start-up, so GenVM stops failing with
Too many open files - Make
doctorreport a GenVM install that was moved aftersetup.pyran - Omit
resultfrom JSON-RPC error responses - Accept
gen_dbg_trietransaction IDs with or without0x, and stopgen_syncingfrom reporting a hugeblocksBehindwhen the synced block is ahead of the latest one
Removed
- Remove the
node.environmentfield and the development-onlynode.dev.disableSubscriptionswitch; old configs still load, and the node logs the ignored keys - Remove the
doctor --networkflag;doctorchecks the deployment against the protocol manifest instead
Security
- Keep the chain RPC API key out of logs, error responses,
doctoroutput and the config dump; RPC URLs show only scheme and host - Stop passing the
GENLAYERNODE_ROLLUP_*variables (chain URLs and RPC key) and the operator token to GenVM processes - Mask the operator token, the GenVM token and the chain RPC key in the config dump, and log RPC request params and results only at DEBUG
- Stop logging the node admin token in the GenVM manager request logs of the node
- Warn at start-up when
genvm.manager_urlis not a loopback address, because the requests carry the admin token - Write
account new --exportandaccount exportfiles straight to the target with owner-only permissions; the command fails if the file exists - A validator refuses to start when its operator account cannot be resolved, instead of signing with a throwaway key
- Bound memory use: cap GenVM host-call frames at 64 MiB and the size of GenVM manager responses, and limit the concurrent GenVM runs that public RPC (
gen_call,gen_dbg_traceTransaction) starts - Stop a malformed leader payload from crashing validators
- Return generic messages for internal errors from the admin, ops and RPC APIs, and log the detail; a failed chain read in
gen_callnames only the read that failed - Restrict the
destDirofPOST /snapshottonode.admin.snapshot_dir(default<datadir>/snapshots); other paths return400 - Reduce the
rpc_urllabel ofgenlayer_node_infoto scheme and host - Limit the
namespacelabel ofgenlayer_node_ws_inbound_subscriptions_activeto known namespaces, so clients cannot create unbounded metric series - Cache
/balancefor 5 s, so public requests cannot multiply chain RPC calls - Stop failures of proxied public
eth_*andzks_*requests from opening the chain RPC circuit breaker that guards validator duties - Drop all Linux capabilities from the node container in the release compose file
- Build with a newer Go release that includes the standard-library security fixes
- Update
golang.org/x/netto v0.60.0 andgolang.org/x/cryptoto v0.57.0
v0.5.14
Bug fixes
- Skip replay check when chain records no result
v0.5.13
Bug fixes
- Self-recover stalled sync gate
- Boot degraded when a module fails
- Stop dealing turns to non-actors
v0.5.12
Misc
- Update dependency ethers to ~5.8.0
- Update all non-major dependencies
Bug fixes
- Self-recover from sync stall wedge
- Reclassify zkSync not-found errors
Security
- Update module golang.org/x/net to v0.55.0
- Update module golang.org/x/crypto to v0.52.0
v0.5.11
New features
- Add node health state machine
- Scope admin tokens per role
- Add circuit breaker for RPC outages
- Add bearer auth for admin endpoints
- Unify CORS and WS origins allowlist
- Inbound WebSocket JSON-RPC endpoint
Misc
- Tag runtime metrics by network
- Cap PreloadAccepted concurrency
- Improve historical sync by sync-mode cleanup
- Reframe /snapshot examples for SSH access; drop cloud refs
- Default inbound WS path to /ws
- Default WS example to single-listener
- Multiplex WS subscriptions
- Trace context cancellations on all watchers
- Remove unused WaitMined method
Bug fixes
- Guard nil GasFeeCap on bump retry
- Ensure GenVM precompile cache before manager start
- Keep sync ticker running while Synced
- Create export file when --path is missing
- Autodetect GenVM permit capacity
- RPC debug error codes and id default
- Trust XFF + cap WS frame size
- Never halt sync on bloom mismatch
- Refresh version on skip-sync
- Route receipt polls to poll probes
- Handle -32602 decode-rejection and cap GasFeeCap
- Cap RPC body/batch and admin loopback bind
Security
- Update module go.opentelemetry.io/otel to v1.41.0
v0.5.10
New features
- Resilient WS RPC for fallback path
Bug fixes
- Close activator-binding race
- Exit finalize loop on post-Submit race
- Persist gas high-water across cycles
- Lift gas ceiling on retry-count
- Bound cancel gasFeeCap and lift bump ceiling on blocker lookup
- Fall back to WS on block-not-found
- Repair self-cancellation recovery
- Make chain-submit buffer configurable and stop collapsing on short step_timeout
- Add fault label to RPC error metric
- Unwedge replay and filter sync
Misc
- Label RPC metrics with provider
- Add chain nonce and desync gauges metrics
- Log timestamps after acquireTransaction
v0.5.9
Bug fixes
- Count real provider failures on SLA
- Harden nonce management
- Check per-block bloom filters for multi-block ranges
- Pool HTTP transport for chain RPC
- Self-cancel stuck nonce on mempool replacement exhaustion
- Prevent sync panic and self-dependency cycle during tx replay
- Resume sync after WS reconnect
Misc
- Use RFC3339Nano for zerolog timestamps
- Extract encoding functions into dedicated encoding package
- Move consensus entity types to entities package
- Add gen_dbg_traceTransaction API doc
v0.5.8
New features
- Add
gen_syncingendpoint for sync status visibility - Add bounded sync wait for RPC readiness
- Add per-IP per-method RPC rate limiting
Bug fixes
- Defer GenVM precompile to container startup to avoid AVX-512 incompatibility
- Replace stuck transactions with gas bump
- Skip duty recovery when behind and handle chained missing tx data dependencies
- Add hiccup retry to sync pipeline
- Recover prime after reorg
- Fix RPC max block range exceeded in event router
- Return -32001 for missing contract errors
- Pass transaction value to GenVM
- Standardize RPC error codes per EIP-1474
- Retry tx lookup for RPC indexing lag
Misc
- Consolidate genvm configs
- Add
gen_getTransactionStatusdocs - Add
gen_syncingAPI docs and clarify RPC config group vs method precedence
v0.5.7
New features
- Add LLM greyboxing with configurable chain order via YAML meta
Bug fixes
- Use PendingAt for idle activator rotation
- Remove unnecessary workaround from view calls
- Restart sync pipeline after RPC failures
- Suppress shutdown errors in watchers
- Reduce FindAcceptanceBlock range to fit RPC limit
Misc
- Include Alloy healthcheck script in release tarball
- Increase Alloy push intervals to 60s
v0.5.6
Bug fixes
- Add priority admission control
v0.5.5
New features
- Add network name to health endpoint
- Add network label to logger and all metrics
- Add metrics to rollup RPC transport and WebSocket
Bug fixes
- Recover from cache miss on late lifecycle events
- Wait for queue head before finalize with recipient-aware queue management
- Suppress context canceled errors on shutdown
- Raise gas bump ceiling and retries
- Stuck nonce and finalize resilience
- Patch GenVM dylib references on macOS during download
Misc
- Downgrade finalized-not-in-cache log to Debug
v0.5.4
New features
- Add
--networkflag to doctor command for multi-network validation
v0.5.3
New features
- Add network label to telemetry metrics and logs
v0.5.2
New features
- Add recovery for missing TxData
Bug fixes
- Invalidate timeout cache on SetTimeouts
- Dedup propose on duplicate events
- Stop retrying on ValidatorSelectionFailed
- Prevent sync error race on ctx cancel
- Recover sync on missing TxData
- Reject stale block in idle check
- Increment leader revealed metric counter
- Sync commit idle timeout with contract timestamps
Misc
- Use CtxLogger in HTTP handler constructors
v0.5.1
New features
- Add transaction manager for nonce resilience
- Add leader_results input and nondetDisagreementCallNo to gen_call
- Handle hanging transactions via processIdleness
- Add Morpheus as OpenAI-compatible LLM provider
Misc
- Dedup duplicate NewTransaction events per block
- Add CanFinalize pre-check before finalization
- Make sync idempotent
- Per-recipient head-by-head idleness finalization
Bug fixes
- Detect ZkSync nonce inconsistency error
- Capture RPC error message when data is not decodable
- Correct consensus address and genesis block
- Enrich context errors with last failure
- Fetch on-chain data in Accepted/Undetermined handlers
v0.5.0
New features
- Upgrade consensus contracts from v0.4 to v0.5
- Add gen_getContractCode endpoint
- Return full VMResult data from gen_call
Bug fixes
- Check pending queue head before activation
- Enable and fix gen_call write simulation
- Exclude stack field from console output
- Move GenVM execution outside retry loop to avoid double GenVM execution on submitting failure
- Use ConsoleWriter for caller field filtering
- Remove nested retry from epoch finalization
- Add logging for silent tx submission failures
- Retry ProcessIdleness on failure in lastVoteWatcher
- Handle shutdown errors gracefully
- Remove --create-venv=false flag from post-install scripts
- Install Python dependencies globally to avoid venv build issues
- Update validator priming logic to use current epoch
- Epoch advance scheduler not running for epoch 0
- Prevent panic on closing done channel during event processing
- Handle new consensus ResultType
- New behavior for finalizing epochs
Misc
- Inject txID into context for automatic log propagation
- Enable validator idle reveal idleness
- Add profiling with pyroscope
- Fix to handle zksync local-node compatibility
v0.4.5
New features
- Decouple epoch advance from finalization, allowing them to run as independent processes with separate retry mechanisms
- Implement sync waiting mechanism to ensure GenVM has latest state before contract execution
- Add
genlayer_node_infoPrometheus metric exposing node and protocol version
Bug fixes
- Add canPrime check to verify epoch state before validator priming, preventing priming when epochs are out of sync
- Return user-friendly error instead of system error when sync times out
- Fix genvm executor process handling
Misc
- Improve GenVM logging with context-aware logger
- Update health checker to use ZkSync connectivity checks
- Increase default genvm permits to 8 in config.yaml.example
v0.4.4
New features
- Improve logging with context-aware tracing and cleaner console output
- Refactor ZkSync client to split RPC and WSS connections for better reliability
- Move storage writing to genvm for improved performance
Bug fixes
- Skip priming check for full nodes
- Add Docker socket mount for webdriver metrics collection in docker-compose configurations
- Prevent incorrect sync state by updating blocksBehind calculation
- Fix memory leak from threads package
- Fix memory leak in consensus processing
- Fix bug in latest transaction with effect calculation
- Fix wallet mutex using read lock instead of write lock when unlocking accounts
Misc
- Fix signer for full nodes
- Improve logs for http servers
- Improve signer initialization for faster and more reliable transaction signing
- Add logs for previous activator on idleness checks
- Migrate zksync-go to go-ethereum
v0.4.3
Bug fixes
- Fix node storage handling for non-accepted transactions like LeaderTimeout
- Fix validator priming logic
- Fix default in release/.env.example
v0.4.2
Bug fixes
- Telemetry config and scraping
- Fix genvm readiness attempts
v0.4.1
New features
- Add show and list subcommands for account management
- Split authentication credentials for Prometheus and Loki
- Add IsPrimed health check for unprimed validators
- Add primed state and warning for unprimed validators
Misc
- Refactor txcalldata decoding to a new encoding package
- Remove unused
pkg/cryptoutils/address.go - Update deployment configuration options for network and cleanup
- Refactor gas estimator
Bug fixes
- Implement indefinite retry for validator priming until primed
- Implement health check and timeout handling for GenVM manager
- Fix undetermined transaction rotations when ProcessIdleness
- Improve message handling to prevent dropped events
- Add GenVM contracts cache and enhance sync progress logging
- Fix sync filtering process
- Improve messages around genlayerRPC chain connectivity
- Stop retrying activation after transaction is activated
v0.4.0
New features
- Integrate the latest GenLayer Consensus version v0.4 with Staking
- Introduce validator wallet
- Handle validator priming
- Finalize epochs
- Advance epochs when epochs finalize
- Handle automatic gas increase
- Implement ProcessIdleness and enhance event subscription
- Handle validator commit idleness for leader
- Implement leader idleness detection and rotation
- Add detailed ban information with epoch and permanent flag
- Handle unfinished transactions with batch finalization
- Add nonceSafe for granular transaction locking
- Add sanity check for operator address in validator wallet configuration
- Add missing fields from consensus transaction data to API response
- Add validator telemetry push monitoring
- Add actionable fix suggestions to WebDriver error messages in doctor command
- Add zkSync connectivity checks
- Add Staking Contract address comparison to doctor checks
- Add libertai as a new LLM provider
- Add transaction count metrics for consensus roles
- Implement consensus sync status metrics
- Add TimeoutsSet event router for dynamic timeout configuration
- Add enhanced transaction failure debugging with trace support
- Sync data with finalized and appeal started events
- Add timeout delay mechanism for RPC resilience
- Add status and blockNumber parameters to gen_call
- Enhance health endpoint with version info and validator with ban and permanent ban detection
- Update genvm version to v0.2.7
- Store and expose genvm execution information
- Add sign admin endpoint for genvm
Bug fixes
- GenVM architecture on arm64
- Fix sync issue when there are no consensus events
- Use latest block instead of timestamp for transaction queries
- Update WebDriver check for Puppeteer implementation
- Resolve multi-transaction nonce issue
- Remove duplicated check logic and fix status check on specific block
- Leader rotation timeout and receipt cleanup
- Change transaction finalization to allow all nodes to finalize
- GenVM non determinism
- Add retry logic to prevent validator banning on transient errors
- GenVM sanity checks
- Cancel context and wait for group when genvm tester fails
- Decoding calldata into complex types
- Don't try activating already activated transactions
- Still process sync failed TX for DB consistency
- Add correct encoding for getState
- Only sync transactions with ResultCodeReturn and add sanity check
- Use block number for transaction data retrieval
- Validator votes idleness
- Leader idleness
- Accidental deadlock in genvm
- Lazy validators commit order
Misc
- Simplify environment variable configuration using .env file
- Add environment variable override support for config values
- Update webdriver image to v0.0.9
- Update RPC and WebSocket endpoints in config.yaml.example
- Correct status for validatorTimeout after appeal time window
- Validate presence of abigen in dependency check
- Rename environment validation functions for clarity
- Use cockroachdb errors package for error handling
- Remove wallet.yaml file handling
- Rename archive to full
v0.3.11
New features
- Add validator telemetry push monitoring
Bug fixes
- Validator banning on parallel transactions executions
Misc
- Document health RPC endpoint
v0.3.10
New features
- Add actionable fix suggestions to WebDriver error messages in doctor command
Bug fixes
- Add retry logic to prevent validator banning on transient errors
v0.3.9
New features
- Add doctor command zkSync connectivity checks
Misc
- Simplify contract initialization with auto-discovery
Bug fixes
- Remove response body size limit for WebDriver
v0.3.8
New features
- Add Staking Contract address comparison to doctor checks
- Add libertai as a new LLM provider
Misc
- Enhance metrics logging by adding blocks behind calculation
- Print address for account not found
- Fix typo in telemetry configuration comment
Bug fixes
- Enable CORS support for HTTP methods in the API
- Move sync success log after state update
- Don't panic with metrics + print panics
v0.3.7
New features
- Add transaction count metrics for consensus roles
- Implement consensus sync status metrics
- Add node uptime collector
- Add disk storage usage metrics for monitoring
- Add comprehensive metrics collection for ops visibility
v0.3.6
Misc
- Add enhanced transaction failure debugging with trace support
v0.3.5
New features
- Add Transport with exponential backoff retry logic
- Add timeout delay mechanism for RPC resilience
- Add status and blockNumber parameters to gen_call
- Enhance health endpoint with version info and validator ban detection
- Add balance endpoint for validator nodes
- Add gas estimation failover to all consensus transaction functions
- Implement gen_getContractState endpoint
- Add ionet as inference provider
- Add gen_getTransactionStatus endpoint
- Implement gen_getTransactionReceipt
- Add log upload system for validator diagnostics
Misc
- Add comprehensive API documentation system and operations endpoints
- Move retry logic to infrastructure and update DI
- Improve timeout detection with type-based checking
- Enhance WebDriver health check validation
Bug fixes
- Fix validator idleness commit flow
- Handle methods and groups configuration for RPC methods
v0.3.4
New features
- Added genesis block configuration support for faster node startup
- Enhanced
doctorcommand with GenVM diagnostics integration - Updated consensus contract addresses for network upgrade
Misc
- Improved node synchronization performance with genesis block hints
- Enhanced validator configuration validation and error reporting
v0.3.3
New features
- Added Comput3 (opens in a new tab) as a supported LLM provider for validators
v0.3.2
New features
- Add command
doctorto check Consensus Contract configuration
Misc
- Implement retry logic with double-checked locking for
GetTimeouts - Update ABI for consensus contracts.
- Decode error returns from the network to improve error handling.
v0.3.1
Misc
- Add logs details
v0.3.0
New features
- Added appeals functionality
- Added gen_getContractSchema
- Added admin checkpoint endpoint
- Added admin "stop at block" endpoint
- Handle leader timeout
- Handle validator timeout
- Added
versioncommand
Bug fixes
- Mitigate TxAccepted events being dropped
- Waiting on event timeouts is now absolute
- Patch up genvm timeouts
- Add retry mechanism for genvm contracts interaction
- Listen to leader timeout event to finalize transaction
v0.2.0-testnet007
New features
- Activator idle replacement
- Leader idle replacement
- Validator idle replacement
- Check for genvm on startup
- Log file support for node
- Ability to export private key in account command
Bug fixes
- Build info logs now display correctly
- Fixed config relative path
- Node now fails fast when accepted transaction processing fails
Misc
- Updated module github.com/btcsuite/btcd to v0.24.2 (security)
- Improved sync speed on node startup
v0.2.0-testnet005
New features
- Discover Consensus main genesis from deployment (contracts)
Bug fixes
- All accepted sync transactions are now processed atomically per block
- Fixed deadlock on cancelled context
v0.2.0-testnet004
Bug fixes
- Updated genvm to v0.0.18
v0.2.0-testnet003
New features
- Updated genvm to v0.0.17
v0.2.0-testnet002
New features
- Use different address to run e2e tests
- Updated consensus contract addresses in config
v0.2.0-testnet001
New features
- Updated genvm to v0.0.16
Bug fixes
- Log level is no longer ignored
- Revived trie dumping and enhanced logging
- Always kill genvm modules
Misc
- Updated module golang.org/x/net to v0.38.0 (security)