Releases: casper-network/casper-node
Releases · casper-network/casper-node
v2.0.0-rc5
Added
- Add BinaryPort interface along with the relevant config entries.
- Added chainspec settings finders_fee, finality_signature_proportion and signature_rewards_max_delay to control behavior of the new seigniorage model.
Changed
- All SSE events are emitted via the IP:Port/events endpoint. None of the previous ones (/events/main, /events/deploys, and /events/sigs) is available any longer.
- DeployBuffer was renamed to TransactionBuffer along with the related metrics.
- Switch blocks and the creation and propagation of signatures on them are now rewarded.
- Era end reports now record rewards as motes rather than scores.
- Seigniorage model is now independent of the details of consensus (and compatible with both Highway and Zug) and based solely upon block proposals, signature generation and signature distribution by validators.
Removed
- Remove the JSON-RPC and speculative execution interfaces.
- Remove chainspec setting highway.performance_meter.blocks_to_consider and the entire highway.performance_meter section.
- Remove chainspec setting highway.reduced_reward_multiplier
v1.5.8
v1.5.7
v1.5.6
Node
1.5.6
Changed
- The node will recognise if a pending upgrade is unstaged and will avoid shutting down for upgrade in this case.
- If an upgrade with the same activation point as the current one is detected on startup, the node will immediately shut down for upgrade.
- Reduce chainspec setting
deploys.max_ttl
from 18 hours to 2 hours.
1.5.5
Added
- New chainspec setting
highway.performance_meter.blocks_to_consider
with a value of 10, meaning that nodes will take 10 most recent blocks into account when determining their performance in Highway for the purpose of choosing their round lengths.
Execution Engine
7.0.1
Changed
- Change the cost of
wasm.storage_costs.gas_per_byte
andshared::storage_costs::DEFAULT_GAS_PER_BYTE_COST
from630_000
to1_117_587
. - Change the cost of the host function
casper_add_associated_key
from9_000
to1_200_000
. - Change the cost of the argument
entry_points_size
of host functioncasper_add_contract_version
from0
to120_000
. - Change the cost of the host function
casper_blake2b
and its argumentin_size
from200
and0
respectively to1_200_000
to120_000
. - Change the cost of the host function
casper_call_contract
and its argumentsentry_point_name_size
andruntime_args_size
from4_500
,0
and420
respectively to300_000_000
,120_000
and120_000
. - Change the cost of the host function
casper_call_versioned_contract
and the argumentsentry_point_name_size
andruntime_args_size
from4_500
,0
and420
respectively to300_000_000
,120_000
and120_000
. - Change the cost of the host function
casper_get_balance
from3_800
to3_000_000
. - Change the cost of arguments
name_size
anddest_size
of host functioncasper_get_named_arg
from0
to120_000
. - Change the cost of the host function
casper_put_key
and its argumentsname_size
andkey_size
from38_000
,1_100
and0
respectively to100_000_000
,120_000
and120_000
. - Change the cost of the host function
casper_read_value
and its argumentkey_size
from6_000
and0
respectively to60_000
and120_000
. - Change the cost of the argument
urefs_size
of host functioncasper_remove_contract_user_group_urefs
from0
to120_000
. - Change the cost of the host function
casper_transfer_from_purse_to_purse
from82_000
to82_000_000
.
7.0.0
Added
- Add chainspec option
core.allow_unrestricted_transfers
that, if enabled, allows token transfers between any two peers. Disabling this option makes sense only for private chains. - Add chainspec option
core.allow_auction_bids
that, if enabled, allows auction entrypointsdelegate
andadd_bid
to operate. Disabling this option makes sense only for private chains. - Add chainspec option
core.compute_rewards
that, if enabled, computes rewards for each era. Disabling this option makes sense only for private chains. - Add chainspec option
core.refund_handling
that specifies how payment refunds are handled. - Add chainspec option
core.fee_handling
that specifes how transaction fees are handled. - Add chainspec option
core.administrators
that, if set, contains list of administrator accounts. This option makes sense only for private chains. - Add support for a new FFI function
enable_contract_version
for enabling a specific version of a contract.
Changed
current stack height
is written tostderr
in caseTrap(Unreachable)
error is encountered during Wasm execution.- Tweak upgrade logic transforming withdraw purses to early exit if possible.
- Lower the default gas costs of opcodes.
- Set the cost for branching opcodes to 35,000 (
br
,br_if
,br_table
). - Set the cost for call opcodes to 68,000 (
call
,call_indirect
).
- Set the cost for branching opcodes to 35,000 (
- Default value for round seigniorage rate is halved to
7/175070816
due to reduction in block times, to maintain current seigniorage rate (per unit of time). - Refund ratio is changed from 0% to 99%.
v1.5.4
1.5.4
Added
- New environment variable
CL_EVENT_QUEUE_DUMP_THRESHOLD
to enable dumping of queue event counts to log when a certain threshold is exceeded. - Add initial support for private chains.
- Add support for CA signed client certificates for private chains.
- Add a Highway Analysis tool for checking the state of the consensus.
Changed
- Minimum block time reduced from 32.768s to 16.384s, with corresponding changes to related chainspec settings:
core.minimum_block_time
reduced to16384 ms
.core.round_seigniorage_rate
reduced to[7, 175070816]
.highway.block_gas_limit
reduced to4_000_000_000_000
.
- The
state_identifier
parameter of thequery_global_state
JSON-RPC method is now optional. If nostate_identifier
is specified, the highest complete block known to the node will be used to fulfill the request. state_get_account_info
RPC handler can now handle anAccountIdentifier
as a parameter.- Replace the
sync_to_genesis
node config field withsync_handling
.- The new
sync_handling
field accepts three values:genesis
- node will attempt to acquire all block data back to genesisttl
- node will attempt to acquire all block data to comply with time to live enforcementnosync
- node will only acquire blocks moving forward
- The new
- Make the
network.estimator_weights
section of the node config more fine-grained to provide more precise throttling of non-validator traffic.
Removed
- The section
consensus.highway.round_success_meter
has been removed from the config file as no longer relevant with the introduction of a new method of determining the round exponent in Highway.
Fixed
- Now possible to build outside a git repository context (e.g. from a source tarball). In such cases, the node's build version (as reported vie status endpoints) will not contain a trailing git short hash.
- Remove an error that would unnecessarily be raised when a node includes its highest orphaned block within the current era.
- Short-circuit initialization of block and deploy metadata DB to resolve delays after an upgrade.
Security
- Update
openssl
to version 0.10.55 as mitigation for RUSTSEC-2023-0044.
v1.5.3
1.5.3
Added
- Add
deploy_acceptor
section to config with a single optiontimestamp_leeway
to allow a small leeway when deciding if a deploy is future-dated. - Add
deploys.max_timestamp_leeway
chainspec option to define the upper limit for the new config optiondeploy_acceptor.timestamp_leeway
. - Add
block_validator.max_completed_entries
config option to control the number of recently validated proposed blocks to retain.
Changed
- Change the limit of the
core_config.simultaneous_peer_requests
chainspec parameter to 255. - Optimize the
BlockValidator
component to reduce the number of simultaneous fetch events created for a given proposed block.
Fixed
- Fix issue in
chain_get_block_transfers
JSON-RPC where blocks with no deploys could be reported as havingnull
transfers rather than[]
. - Fix issue in
chain_get_block_transfers
JSON-RPC where blocks containing successful transfers could erroneously be reported as having none.
Removed
- Remove the
block_synchronizer.stall_limit
node config parameter since it is no longer needed.
v1.5.2-alt
Alternate 1.5.2 binary to fix some reporting issues.
v1.5.2
v1.5.1
1.5.1
Added
- Added the
upgrade_timeout
config option under the[node]
section.
Changed
speculative_exec
server now routes deploys toDeployAcceptor
for more comprehensive validation, including cryptographic verification of signatures.
1.5.0-rc.1
Added
- Introduce fast-syncing to join the network, avoiding the need to execute every block to catch up.
- Add config sections for new components to support fast-sync:
[block_accumulator]
,[block_synchronizer]
,[deploy_buffer]
and[upgrade_watcher]
. - Add new Zug consensus protocol, disabled by default, along with a new
[consensus.zug]
config section. - Add a
consensus_protocol
option to the chainspec to choose a consensus protocol, and aminimum_block_time
setting for the minimum difference between a block's timestamp and its child's. - Add a
vesting_schedule_period
option to the chainspec to define the period in which genesis validators' bids are released over time after they are unlocked. - Add a
simultaneous_peer_requests
option to the chainspec to define the maximum number of simultaneous block-sync and sync-leap requests. - Add following config options under
[node]
section to support fast-sync:sync_to_genesis
which if set totrue
will cause the node to retrieve all blocks, deploys and global state back to genesis.idle_tolerance
which defines the time after which the syncing process is considered stalled.max_attempts
which defines the maximum number of attempts to sync before exiting the node process after the syncing process is considered stalled.control_logic_default_delay
which defines the default delay for the control events that have no dedicated delay requirements.force_resync
which if set totrue
will cause the node to resync all of the blocks.
- Add following config options under
[network]
section:min_peers_for_initialization
which defines the minimum number of fully-connected peers to consider network component initialized.handshake_timeout
which defines connection handshake timeouts (they were hardcoded at 20 seconds previously).max_incoming_peer_connections
which defines the maximum number of incoming connections per unique peer allowed.max_in_flight_demands
which defines the maximum number of in-flight requests for data from a single peer.tarpit_version_threshold
,tarpit_duration
andtarpit_chance
to configure the tarpitting feature, designed to reduce the impact of old node versions making repeated, rapid reconnection attempts.blocklist_retain_duration
which defines how long peers remain blocked after they get blocklisted.- optional
[network.identity]
section to support loading existing network identity certificates signed by a certificate authority. - In addition to
consensus
anddeploy_requests
, the following values can now be controlled via the[network.estimator_weights]
section in config:gossip
,finality_signatures
,deploy_responses
,block_requests
,block_responses
,trie_requests
andtrie_responses
.
- The network handshake now contains the hash of the chainspec used and will be successful only if they match.
- Checksums for execution results and deploy approvals are written to global state after each block execution.
- Add a new config option
[rpc_server.max_body_bytes]
to allow a configurable value for the maximum size of the body of a JSON-RPC request. - Add
enable_server
option to all HTTP server configuration sections (rpc_server
,rest_server
,event_stream_server
) which allow users to enable/disable each server independently (enabled by default). - Add
enable_server
,address
,qps_limit
andmax_body_bytes
to newspeculative_exec_server
section toconfig.toml
to configure speculative execution JSON-RPC server (disabled by default). - Add new event to the main SSE server stream across all endpoints
<IP:PORT>/events/*
which emits a shutdown event when the node shuts down. - Add following fields to the
/status
endpoint and theinfo_get_status
JSON-RPC:reactor_state
indicating the node's current operating mode.last_progress
indicating the time the node last made progress.available_block_range
indicating the highest contiguous sequence of the block chain for which the node has complete data.block_sync
indicating the state of the block synchronizer component.
- Add new REST
/chainspec
and JSON-RPCinfo_get_chainspec
endpoints that return the raw bytes of thechainspec.toml
,accounts.toml
andglobal_state.toml
files as read at node startup. - Add a new JSON-RPC endpoint
query_balance
which queries for balances under a givenPurseIdentifier
. - Add new JSON-RPC endpoint
/speculative_exec
that accepts a deploy and a block hash and executes that deploy, returning the execution effects. - Add
strict_argument_checking
to the chainspec to enable strict args checking when executing a contract; i.e. that all non-optional args are provided and of the correctCLType
. - A diagnostics port can now be enabled via the
[diagnostics_port]
config section. See theREADME.md
for details. - Add
SIGUSR2
signal handling to dump the queue in JSON format (see "Changed" section forSIGUSR1
). - Add
validate_and_store_timeout
config option under[gossip]
section to control the time the gossiper waits for another component to validate and store an item received via gossip. - Add metrics:
block_accumulator_block_acceptors
,block_accumulator_known_child_blocks
to report status of the block accumulator component(forward|historical)_block_sync_duration_seconds
to report the progress of block synchronizationdeploy_buffer_total_deploys
,deploy_buffer_held_deploys
,deploy_buffer_dead_deploys
to report status of the deploy buffer component(lowest|highest)_available_block_height
to report the low/high values of the complete block range (the highest contiguous chain of blocks for which the node has complete data)sync_leap_duration_seconds
,sync_leap_fetched_from_peer_total
,sync_leap_rejected_by_peer_total
,sync_leap_cant_fetch_total
to report progress of the sync leaper componentexecution_queue_size
to report the number of blocks enqueued pending executionaccumulated_(outgoing|incoming)_limiter_delay
to report how much time was spent throttling other peers.
- Add
testing
feature to casper-node crate to support test-only functionality (random constructors) on blocks and deploys. - Connections to unresponsive nodes will be terminated, based on a watchdog feature.
Changed
- The
starting_state_root_hash
field from the REST and JSON-RPC status endpoints now represents the state root hash of the lowest block in the available block range. - Detection of a crash no longer triggers DB integrity checks to run on node start; the checks can be triggered manually instead.
- Nodes no longer connect to nodes that do not speak the same protocol version by default.
- Incoming connections from peers are rejected if they are exceeding the default incoming connections per peer limit of 3.
- Chain automatically creates a switch block immediately after genesis or an upgrade, known as "immediate switch blocks".
- Requests for data from a peer are now de-prioritized over networking messages necessary for consensus and chain advancement.
- Replace network message format with a more efficient encoding while keeping the initial handshake intact.
- Flush outgoing messages immediately, trading bandwidth for latency and hence optimizing feedback loops of various components in the system.
- Move
finality_threshold_fraction
from the[highway]
to the[core]
section in the chainspec. - Move
max_execution_delay
config option from[consensus.highway]
to[consensus]
section. - Add CORS behavior to allow any route on the JSON-RPC, REST and SSE servers.
- The JSON-RPC server now returns more useful responses in many error cases.
- Add a new parameter to
info_get_deploys
JSON-RPC,finalized_approvals
- controlling whether the approvals returned with the deploy should be the ones originally received by the node, or overridden by the approvals that were finalized along with the deploy. - Support using block height as the
state_identifier
parameter of JSON-RPCquery_global_state
requests. - Add new
block_hash
andblock_height
optional fields to JSON-RPCinfo_get_deploy
response which will be present when execution results aren't available. - JSON-RPC responses which fail to provide requested data will now also include an indication of that node's available block range, i.e. the block heights for which it holds all global state. See #2789 for an example of the new error response.
- Add a
lock_status
field to the JSON representation of theContractPackage
values. Key::SystemContractRegistry
is now readable and can be queried via thequery_global_state
JSON-RPC.- Unify log messages for blocked nodes and provide more detailed reasons for blocking peers.
- Rename
current_era
metric toconsensus_current_era
.
Deprecated
null
should no longer be used as a value forparams
in JSON-RPC requests. Prefer an empty Array or Object.- Deprecate the
chain_height
metric in favor ofhighest_available_block_height
.
Removed
- Remove legacy synchronization from genesis in favor of fast-sync.
- Remove config options no longer required due to fast-sync:
[linear_chain_sync]
,[block_proposer]
and[consensus.highway.standstill_timeout]
. - Remove chainspec setting
[protocol.last_emergency_restart]
as fast sync will use the global state directly for recognizing such restarts instead. - Remove a temporary chainspec setting
[core.max_stored_value_size]
which was used to limit the size of individual values stored in ...
v1.5.0-rc.1
Initial RC release for 1.5.0