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.