Releases: near/nearcore
Release list
2.13.0-rc.2
2.13.0-rc.1
CODE_COLOR: CODE_YELLOW_TESTNET
RELEASE_VERSION: 2.13.0-rc.1
PROTOCOL_UPGRADE: TRUE
DATABASE_UPGRADE: TRUE
SECURITY_UPGRADE: FALSE
Protocol Changes
- Opt-in strict nonce mode for transactions. A transaction may opt in to require its nonce be exactly the previous nonce for that access key plus one; such transactions are rejected when the nonce repeats or skips a value. Transactions that do not opt in keep the existing monotonic nonce behavior. (#15361, #15402)
- Stabilized the FIPS 204 ML-DSA-65 post-quantum signature scheme as a third transaction-signature and access-key scheme alongside ed25519 and secp256k1. Public keys are stored on-trie as a 32-byte SHA3-256 hash rather than the full 1952 bytes, and ML-DSA-65 signature verification is charged an extra 100 Ggas at transaction conversion to cover its higher verification cost. (#15731)
- Ensure delegate action returns the correct error consistently. (#15458)
- Fix
action_delete_accountnot accounting for the global contract identifier when checking the account deletion storage limit. For accounts using a global contract, the check overcounted storage usage by the identifier size (32 bytes, or the account id length forGlobalByAccount), so they were slightly harder to delete. (#15752) - Fix a bug in
receiververification for aDeterministicStateInitActioninside aDelegateActionthat made it impossible to create deterministic accounts through meta transactions. (#15812) - Stabilized gas keys (NEP-611): a new access key type that carries a pre-funded NEAR balance and up to 1,024 independent nonce sequences. Transactions signed with a gas key pay gas costs from the key's balance rather than the signer's account balance. (#15183)
- Added a new
DelegateV2meta-transaction action that lets gas keys (NEP-611) sign relayed (meta) transactions. Unlike the existingDelegateaction, whosenonceis the signing access key's plain nonce,DelegateV2carries aTransactionNoncethat selects either the access key's nonce or one of a gas key's parallel nonce sequences by index. The signed payload is versioned so future variants can be added without a new action type. (#15904, #15905, #15906) - Stabilized the
promise_yield_create_with_idandpromise_yield_resume_with_yield_idhost functions, which let a contract supply its own deterministic 32-byte yield ID when creating a yield/resume promise instead of storing the runtime-generateddata_idin state. This avoids the storage cost of tracking yields, enabling use cases such as in-contract mempools. (#15602) - Increased the cost of creating new accounts from
~0.0008NEAR to~0.007 NEAR(NEP-642), paid in gas. The gas will now be purchased at a higher price than before (at leastmin_gas_purchase_price = 0.001 NEAR/TGas) to cover the cost of creating new accounts. Gas will still be burned at the same price as before (usuallymin_gas_price = 0.0001 NEAR/TGas) and the price difference will be refunded, so the total cost of a transaction will stay the same. However the balance required to start a transaction will be 10x higher than before, as the price at which gas is purchased will be 10x higher than before. For any operation which creates an account, the protocol will deduct~0.007 NEARfrom the gas refund to cover the cost of creating an account. - Meta transactions with gas key support via
Action::DelegateV2. (#15183) - Extend the existing sticky chunk-producer-to-shard assignment to resharding boundaries. Previously stickiness was keyed by
ShardIndex, which is unstable across a shard layout change; switch to keying byShardId, and when a shard splits distribute the parent's chunk producers across its child shards using greedy stake-balanced bin-packing. Reduces unnecessary state sync after resharding. - Skip transactions whose hash already appeared earlier in the same chunk. A transaction hash is also its outcome id, and outcomes are committed (via the chunk outcome root) keyed by that id.
- Recompute
block_ordinalandepoch_sync_data_hashagainst local chain state when validating received block headers. - Emit
ExecutionMetadata::V4from chunk producers. V4 carries a per-actionVec<AccountContract>: one entry per action in the receipt, recording the contract attached to the receiver account immediately before that action ran. Captured for every action kind (not justFunctionCall), so consumers can see what code an account had even on receipts that did not invoke a contract.AccountContract::Noneis emitted when the account has no contract deployed, when it did not exist (e.g. theCreateAccountslot that materialized it), or for unexecuted trailing slots after a mid-receipt failure. Order matches the receipt'sactionsvector. (#15822) - Authenticate
ContractCodeResponsemessages with a chunk-producer signature, matching the signed-message pattern already used byChunkContractAccessesandContractCodeRequest. - Stabilized continuous epoch sync: epoch sync proofs are maintained incrementally at each epoch boundary, and block headers are garbage-collected on non-archival nodes. Enabling this feature performs a DB migration (48 → 49) to store the compressed proof. (#15476)
- Stabilized dynamic resharding: shards are now split automatically at epoch boundaries based on runtime state size, without requiring a protocol upgrade to ship a new hard-coded shard layout. (#15823)
- Clamp the gas admission check used when forwarding buffered receipts under congestion control to
allowed_shard_outgoing_gas, so a receipt whose gas exceeds the per-shard outgoing budget can still be forwarded when the shard is in the "allowed" set. (#15924)
Non-protocol Changes
EXPERIMENTAL_receipt_to_txaccepts optionalblock_height,shard_id,windowhint params. On a column miss with a hint set, the handler scans execution outcomes around the hint. Best-effort: long emit-to-execute delays may returnUnknownReceiptinstead of a terminal tx. Resharding boundaries are handled. New node-config knobs:receipt_to_tx_max_hint_window(default 20),receipt_to_tx_max_hop_distance(default 20),receipt_to_tx_max_outcomes_per_request(default 20_000). Operators serving cold-archival queries should consider raising these.- Added pagination to
EXPERIMENTAL_view_stateand theview_statequery. The request takesafter_key_base64andlimit, and the response returnslast_keyto fetch the following page. (#15743)
Protocol upgrade voting
This release upgrades the protocol version from 84 to 85.
Voting for protocol version 84 will start on Tuesday June 30th 00:00 UTC.
To continue participating in consensus, you need to upgrade your node before this time.
If voting succeeds in one epoch, the protocol upgrade to version 85 is expected to happen 7-14 hours after the voting epoch ends.
2.12.0
CODE_COLOR: CODE_YELLOW_MAINNET
RELEASE_VERSION: 2.12.0
PROTOCOL_UPGRADE: TRUE
DATABASE_UPGRADE: TRUE
SECURITY_UPGRADE: FALSE
Protocol Changes
- The contract runtime has been upgraded to use the new Wasmtime-based runtime.
- The contract runtime now allows for bulk memory instructions in Wasm code.
Non-protocol Changes
- Fix VM compilation and cache metrics (
near_vm_runner_compilation_seconds,near_vm_compiled_contract_cache_*) not being reported for contract deployment, global contract distribution, and pipelining code paths. Add newnear_vm_compiled_contract_memory_cache_hits_totalmetric to distinguish in-memory cache hits from disk hits. (#15580) - Removed deprecated fields from
EpochConfig,GenesisConfig, andProtocolConfigView:num_block_producer_seats_per_shard,avg_hidden_validator_seats_per_shard,num_chunk_only_producer_seats. - New
EXPERIMENTAL_receipt_to_txRPC method that resolves a receipt ID back to the originating transaction hash and sender account. Requiressave_receipt_to_txconfig enabled and all-shards tracking. (#15414) - New sync handler (sync-v2) replaces the legacy sync implementation with a clean state machine. Nodes are routed through one of two paths based on how far behind they are: near-horizon nodes sync blocks directly, while far-horizon nodes follow the full pipeline (epoch sync, header sync, state sync, block sync). (#15335)
- Epoch sync proofs are now maintained incrementally at each epoch boundary instead of being derived on demand. Block headers are garbage collected alongside block bodies on non-archival nodes, reducing disk usage. (#15412)
- Validator key consistency check runs once per epoch to detect mismatches between the node's validator key and the key registered on chain. Misconfigured nodes will exit via panic. (#15417)
- State sync status now shows download and apply parts progress. (#15391)
- Fix: allow
Disconnectmessage on Tier3 connections. (#15405) - Fix: gracefully handle expired peer in
peer_connection_attempt. (#15390) - Archival nodes with split storage (cold store) will run a one-time migration on startup that is expected to take 1–2 hours depending on disk performance. Expect downtime. Nodes without cold store are not affected. (#15503)
Protocol upgrade voting
This release upgrades the protocol version from 83 to 84.
Voting for protocol version 84 will start on Wednesday June 10th 00:00 UTC.
To continue participating in consensus, you need to upgrade your node before this time.
If voting succeeds in one epoch, the protocol upgrade to version 84 is expected to happen 7-14 hours after the voting epoch ends.
2.12.0-rc.2
2.12.0-rc.1
CODE_COLOR: CODE_YELLOW_TESTNET
RELEASE_VERSION: 2.12.0-rc.1
PROTOCOL_UPGRADE: TRUE
DATABASE_UPGRADE: TRUE
SECURITY_UPGRADE: FALSE
Protocol Changes
- The contract runtime has been upgraded to use the new Wasmtime-based runtime.
- The contract runtime now allows for bulk memory instructions in Wasm code.
Non-protocol Changes
- Fix VM compilation and cache metrics (
near_vm_runner_compilation_seconds,near_vm_compiled_contract_cache_*) not being reported for contract deployment, global contract distribution, and pipelining code paths. Add newnear_vm_compiled_contract_memory_cache_hits_totalmetric to distinguish in-memory cache hits from disk hits. (#15580) - Removed deprecated fields from
EpochConfig,GenesisConfig, andProtocolConfigView:num_block_producer_seats_per_shard,avg_hidden_validator_seats_per_shard,num_chunk_only_producer_seats. - New
EXPERIMENTAL_receipt_to_txRPC method that resolves a receipt ID back to the originating transaction hash and sender account. Requiressave_receipt_to_txconfig enabled and all-shards tracking. (#15414) - New sync handler (sync-v2) replaces the legacy sync implementation with a clean state machine. Nodes are routed through one of two paths based on how far behind they are: near-horizon nodes sync blocks directly, while far-horizon nodes follow the full pipeline (epoch sync, header sync, state sync, block sync). (#15335)
- Epoch sync proofs are now maintained incrementally at each epoch boundary instead of being derived on demand. Block headers are garbage collected alongside block bodies on non-archival nodes, reducing disk usage. (#15412)
- Validator key consistency check runs once per epoch to detect mismatches between the node's validator key and the key registered on chain. Misconfigured nodes will exit via panic. (#15417)
- State sync status now shows download and apply parts progress. (#15391)
- Fix: allow
Disconnectmessage on Tier3 connections. (#15405) - Fix: gracefully handle expired peer in
peer_connection_attempt. (#15390) - Archival nodes with split storage (cold store) will run a one-time migration on startup that is expected to take 1–2 hours depending on disk performance. Expect downtime. Nodes without cold store are not affected. (#15503)
Protocol upgrade voting
This release upgrades the protocol version from 83 to 84.
Voting for protocol version 84 will start on Monday June 1st 00:00 UTC.
To continue participating in consensus, you need to upgrade your node before this time.
If voting succeeds in one epoch, the protocol upgrade to version 84 is expected to happen 7-14 hours after the voting epoch ends.
2.11.1
CODE_COLOR: CODE_RED_MAINNET, CODE_RED_TESTNET
RELEASE_VERSION: 2.11.1
PROTOCOL_UPGRADE: FALSE
DATABASE_UPGRADE: FALSE
SECURITY_UPGRADE: TRUE
This release fixes critical flaws in nearcore code that could cause node crash.
Upgrade as soon as possible to avoid node downtime.
2.11.0
CODE_COLOR: CODE_YELLOW_MAINNET
RELEASE_VERSION: 2.11.0
PROTOCOL_UPGRADE: TRUE
DATABASE_UPGRADE: TRUE
SECURITY_UPGRADE: FALSE
Protocol Changes
- Contract gas limit is increased from 300 TGas to 1 PGas.
- Yield/Resume improvements - from now on, calling
promise_yield_resumeafterpromise_yield_createwill always work. Previously there were some cases where callingresumewould fail if called too quickly aftercreate. See the github issue for details. Strictly speaking, this could be a breaking change for contracts which expected the resume to fail in these situations, but it shouldn't affect normal use cases. - A promise with a single
DeleteAccountaction and no input promises will be executed immediately after the receipt that created it, before any other receipts for this account. - ETH implicit accounts now use a globally deployed contract instead of a contract embedded in the neard binary.
- Invalid transactions now generate execution outcomes, allowing indexers and RPC to report outcomes for all transactions including failed ones.
- Existing contract code is excluded from chunk state witnesses for deploy-contract and delete-account actions, reducing witness size by using internal trie nodes to check code size instead.
- Fix access key allowance being incorrectly decremented before validation checks that could fail. Previously, allowance was mutated in-place before storage stake and function call permission checks, so a failed transaction could incorrectly reduce the allowance.
- Include tokens burnt as part of global contract deploys in the corresponding execution outcome's
tokens_burntfield. - Fix deterministic account ID creation to allow creation by any incoming transfer (unless it's a refund) and correctly check whether the feature is enabled.
- Add nonce-based idempotency for global contract distribution receipts. Each distribution carries an auto-incremented nonce, and any distribution receipt with a stale nonce is dropped, preventing race conditions during multiple distribution attempts for the same contract.
Non-protocol Changes
- Replace polling for transaction status with event notifications to improve jsonrpc response latency
- Added a database migration to backfill trie data lost due to a bug in resharding. The migration runs automatically on node startup and takes approximately 5 minutes on an archival node. Non-archival nodes are not affected. (#15044)
- Fix
sandbox_fast_forwardRPC returning success before blocks are actually produced, by tracking target height explicitly instead of relying on the delta field which could be temporarily zero during processing. (#14899) - Fix
sandbox_patch_stateRPC silently dropping patches when a block was being processed concurrently, by removing an unnecessaryclear()call that raced with new patches. (#14893) - Added
experimental.tier3_public_addrnetwork config option to manually override the auto-discovered Tier3 public address.
Protocol upgrade voting
This release upgrades the protocol version from 82 to 83.
Voting for protocol version 83 will start on Monday 2026-04-13 00:00:00 UTC.
To continue participating in consensus, you need to upgrade your node before this time.
If voting succeeds in one epoch, the protocol upgrade to version 83 is expected to happen 7-14 hours after the voting epoch ends.
2.11.0-rc.5
2.11.0-rc.4
2.11.0-rc.3
CODE_COLOR: CODE_GREEN_TESTNET
RELEASE_VERSION: 2.11.0-rc.3
PROTOCOL_UPGRADE: FALSE
DATABASE_UPGRADE: FALSE
SECURITY_UPGRADE: FALSE
This release includes #15415 on top of 2.11.0-rc.2.