Releases: gear-tech/gear
build
chore: Change mocked BlockNumber to u32 (#4868)
v1.9.1
Release v1.9.1 changes
- Crates versions bumped to "v1.9.1”, runtime spec version bumped to 1910 (#4837);
- Weights of extrinsic and WASM instructions WERE NOT updated from 1.9.0.
Important
Maximal stable 🦀 Rust version set to v1.88 for Linux users (#4825).
It’s necessary due to bug in wasmer
dependency.
Important
For networks it's recommended to skip update v1.9.0
and move directly from v1.8.2
to v1.9.1
.
Update requirements
JS clients | Programs | Node bin |
---|---|---|
⚪ Insubstantial | ⚪ Insubstantial | 🟡 Recommended |
👤 Userspace
📚 Removed bug with requirement of GEAR_WORKSPACE_DIR
env (#4798);
📚 Temporary reverted removal of WasmProgram
mockery trait in gtest
(#4828).
⚙️ Runtime
📚 Added tokenomic methods from v1.8.2 (#4801);
📚 RPC-calls like for gas or reply calculations now accept multiple value: u128
encodings (#4831).
Full Changelog: v1.9.0...v1.9.1
v1.8.2
v1.9.0
Release v1.9.0 changes
- Crates versions bumped to "v1.9.0”, runtime spec version bumped to 1900 (#4795);
- Weights of extrinsic and WASM instructions WERE updated (#4794).
Important
Minimal stable 🦀 Rust version bumped to v1.88 (#4768).
Recommended nightly 🦀 Rust version bumped to nightly-2025-06-06.
Important
parity-scale-codec
crate used to have performance regression in v3.7.4.
It’s highly recommended to update it at least to v3.7.5 (#4779).
Update requirements
JS clients | Programs | Node bin |
---|---|---|
🔴 Required | 🟡 Recommended | ⚪ Insubstantial |
✨ Key changes
🔥📚 Code operations in storage were optimized (#4274);
Important
Some storage items had types changes. Applicable migrations are implemented.
This change helps users to spend less gas on average case, as well as from now on handles cases with re-instrumentation errors and retries for future weights versions.
🔥📖 Refund exceeding value instead of errors in BIAs (#4743);
🔥📚 Default system reserve got 10x increase (#4783).
Important
System reserve is a gas locked in async mains for possible critical hooks. Its default value bumped 10-times to be sufficient for arbitrary fast-written program.
Keep in mind that this parameter is configurable via gstd::Config
api.
👤 Userspace
📚 gear-eth-bridge-primitives
are now on crates.io
(#4734);
📚 Proper calculate_reply
function implemented for gtest
(#4659);
📚 Gas counter in gtest
was fixed (#4736);
📚 WasmProgram
and legacy approach of mocking is removed from gtest
(#4751).
⚙️ Runtime
📚 Governance messages are off-limits in gear-eth-bridge (#4716);
📚 Security of memory accesses increased at backend (#4381);
📚 Removed redundant memory copies, improving overall performance (#4630);
📚 Legacy pallet-gear-debug
was removed from runtime (#4667).
Full Changelog: v1.8.1...v1.9.0
v1.8.1
Release v1.8.1 changes
- Crates versions bumped to "v1.8.1”, runtime spec version bumped to 1810 (#4658);
- Weights of extrinsic and WASM instructions WERE NOT updated.
Note
Recommended nightly 🦀 Rust version bumped to nightly-2025-05-09
(#4645).
Update requirements
JS clients | Programs | Node bin |
---|---|---|
⚪ Insubstantial | ⚪ Insubstantial | ⚪ Insubstantial |
Key changes
🔥📖 Protocol's invariant change: value management (#4634);
Important
Previously, on errors, values were always returned to the message source immediately, without any actual notification.
From now on, values can only be transferred with messages — including error replies — making it possible to check how much value was returned in your handle_reply export.
For messages that do not expect a reply, no value will be returned on errors. This mainly affects the reply logic: any value sent with a reply will always reach its destination and be retained there.
🔥📚 Fixed bug with absence of reply in case of program's exit. Extended purpose and usage of error reply codes (#4620).
Note
If a program exits without sending a manual reply, an auto-generated one will be sent to maintain the invariant that all repliable messages receive one.
Userspace
📚 Optimized amount of custom sections produced by opt-wasm
in gear-wasm-builder
(#4444);
📚 Added query for inheritor of exited program in gtest
(#4616);
📚 Added query for inheritor of exited program in gsdk
(#4622).
Runtime
📚 Builtins now lock Existential Deposit as it do usual Gear Programs (#4633).
Note
The necessary value is deposited from the treasury account on migrations.
Full Changelog: v1.8.0...v1.8.1
v1.8.0
Release v1.8.0 changes
- Crates versions bumped to "v1.8.0”, runtime spec version bumped to 1800 (#4593);
- Weights of extrinsic and WASM instructions WERE NOT updated.
Important
Minimal stable 🦀 Rust version bumped to v1.85.
Note
To update your compiler version run: $ rustup update stable
Update requirements
Name | Character |
---|---|
JS clients | 🔴 Required |
Programs | 🟡 Recommended |
Node bin | ⚪ Insubstantial |
Key changes
🔥📖 Panic instruction now fully flexible (#4583);
Important
Previously, each error reply followed a soft invariant: messages had to be filled with string-formatted data. That constraint is now lifted - it’s entirely up to users and their implementation details.
Note
The gr_panic
syscall now accepts arbitrary bytes as payload. These can be processed by the calling actor, enabling more flexible and expressive error handling within your program’s logic.
No more userspace hacks needed for error cases!
🔥📖 Extended purpose and usage of error reply codes (#4589);
Note
As mentioned in the previous update, the invariant requiring string payloads in error replies is deprecated. Alongside that, the error reply code system has been refactored.
All changes are backward compatible with existing programs.
The InactiveActor
error reply variant has been renamed to UnavailableActor
, and it now includes sub-variants that indicate the specific reason for unavailability.
Important
In most error cases, there will be no payload in the message. The reply codes themselves are now sufficiently descriptive to give your application clear insights into what went wrong.
Spefic cases include:
-
UserspacePanic
code: payload will contain the raw bytes passed by the program via thegr_panic
argument; -
ProgramExited
code: payload will contain 32 bytes representing the ActorId of the program’s designated inheritor, set through a prior (fatal)gr_exit
call; -
All other error code cases: payload will be empty. Be sure to parse reply codes properly in your clients (e.g., frontends, indexers).
🔥📖 System GearBank account address changed (#4588);
Important
Previously, the GearBank
(pallet-gear-bank
) account address was derived from a repeated "gearbank" string to fill 32 bytes (kGhsZSxCZpJN8aC2jbQ4Sm9NMhfAE9FtNjthhRDvpGPQNNFkv
).
It is now derived natively using Substrate’s PalletId
, making it automatically recognized by observers as the modlpy/gbank
address.
🔥📚 Treasury transaction and gas fee split (#4534);
Note
Now at the substrate pallets level, the constants GearBank::TreasuryTxFeeShare
and GearBank::TreasuryGasFeeShare
define the percentage of transaction and gas fees that are redirected to the treasury account for future governance-controlled use.
Tips always remain in the hands of the validators.
🔥📚 Increased economic deterrents for network abuse (#4585).
Important
The cost of gas and weight has been increased from 6 units per gas/weight to 100, making it significantly harder to spam the network or overload validators at minimal cost.
Note
Deposit requirements for governance and referenda-related actions have been raised accordingly.
Userspace
📖 Compilation to WASM switched to the brand-new wasm32v1-none
target (#4407);
Note
Make sure to install it by running $ rustup target add wasm32v1-none
📚 gtest
functionality for reading state using the legacy metadata approach has been removed (#4320);
📖 Support for the gmeta
crate has been completely removed (#4347);
📚 Bug with incorrect maximum gas applied to messages in gtest
has been fixed (#4592).
Runtime
📚 Replaced deprecated parity-wasm
library with a custom-written WASM parsing library for improved stability and long-term support (#4494, #4469);
📚 Optimized memory allocations behavior (#4473, #4503);
📚 Updated bags thresholds, enhasing election performance and quality (#4428);
📖 Implemented a basic transport fee for pallet-gear-eth-bridge
(#4590);
Note
The pallet is still only available for dev/testnet builds.
📖 Added governance referenda tracks for bridge administration (#4527).
Full Changelog: v1.7.1...v1.8.0
v1.7.1
Release v1.7.1 changes
- Crates versions bumped to "v1.7.1”, runtime spec version bumped to 1710 (#4487);
- Weights of extrinsic and WASM calls WERE NOT updated.
Update requirements
Important
Upcoming release will deprecate previous approach of reading state inside programs using fn state()
and applicable RPC calls read_state
/read_state_using_wasm
as well as gmeta
crate, in favor of sails-like approach of calculate_reply_for_handle
and required dispatch (read, immutable) functions inside fn handle
. Make sure to migrate your programs to the new approach. Previously uploaded programs will work for some amount of releases.
Warning
It's still not recommended to use windows-based nodes for blocks validation.
Name | Character |
---|---|
JS clients | ⚪ Insubstantial |
Programs | ⚪ Insubstantial |
Node bin | 🟡 Recommended |
Key features
🔥📚 Optimized performance of weak hardware validators caused by sandbox executor (#4420);
Tip
Due to this update, it's recommended to update node binary.
🔥📚 Builtin actors implementation got extended by tracking block gas allowance (#4345).
Note
This update increases stability on corner cases and makes execution time more predictable.
Userspace
📚 Changed test-purpose implementation of ActorId
's From<u64>
(#4377);
Tip
Now it puts u64 bytes from idx 12, instead of 0.
📚 Fixed gtest
memory limit for programs: up to 2gb, matching real production (#4391);
📚 Recommended nightly rust version bumped to one of the latest (#4404);
📚 gear-wasm-builder
now pays attention on workspace patches (#4478);
📚 gcore
's function with_read_on_stask
renamed to with_read_on_stack_or_heap
(#4452);
📚 Fixed conditional compilation of stack_debug
macro in gcore
(#4374).
Runtime
📚 Removed legacy unreachable error type "UnsupportedMessage" in core execution crates (#4453);
📚 Fixed gas benchmark for reservation_reply_per_byte
syscall condition (#4361);
📚 Removed floats from runtime on substrate migration regression (#4477).
Full Changelog: v1.7.0...v1.7.1
v1.7.0
Release v1.7.0 changes
- Crates versions bumped to "v1.7.0”, runtime spec version bumped to 1700 (#4352);
- Weights of extrinsic and WASM calls WERE updated (#4359), schedule version bumped to 1700 (#4359).
Update requirements
Warning
Since this release it's recommended to avoid using windows-based nodes for validation purposes, since they may produce unpredictable and non-consensus outcomes.
Name | Character |
---|---|
JS clients | 🔴 Required (runtime metadata ext) |
Programs | 🟡 Recommended (gr_commit changed behaviour) |
Node bin | 🔴 Required (runtime metadata ext) |
Key features
🔥📚 substrate
version has been updated to 2409 (#4289):
Important
This change requires update of clients to support MetadataHashExtension
and complete removal of native executor.
Tip
Added extension brings support of Ledger, using Polkadot Generic App 🥳.
🔥📖 New Built-in Actor with pallet-proxy
functionality (#4259);
📖 Sending messages by parts across wakes is deprecated now (#4304).
Important
Deprecation can break logic of programs that rely on this feature: calling gr_init
-> any wait/wake logic, so the execution changes -> gr_push/gr_commit
of previously initialized handle, since handle no longer exists.
Support of mentioned functionality was meaningless since the same workflow can be implemented in userspace just storing tempopary payloads in the memory. Removal of this improves protocol stability and reduces average gas consumption of the messages due to less load on storage.
Pseudocoded sample of code that now panics:
use gstd::msg::MessageHandle;
// Entry of your program: in gstd, sails or any other notations.
fn handle() {
let msg_handle = MessageHandle::init();
msg_handle
.push("This part is pushed in the first execution;")
.unwrap();
//
// Any type of wait-wake (interrupting) logic happens here.
//
// Pay attention on async calls:
// they're more likely cause interruptions.
//
msg_handle
.push("But this part is pushed in the second execution")
.uwnrap(); // < Here the program will panic, since handle
// < become unavailable after wake.
msg_handle.commit(ActorId::from(42), 0).unwrap();
}
How to replace it:
use gstd::msg;
// Entry of your program: in gstd, sails or any other notations.
fn handle() {
let mut buf = b"This part is pushed in the first execution;".to_vec();
//
// Any type of wait-wake (interrupting) logic happens here.
//
buf.push(b"But this part is pushed in the second execution".to_vec());
gstd::msg::send_bytes(ActorId::from(42), buf, 0).uwnrap();
}
Resulting code costs less gas for execution, being also more readable and Rust-native.
Userspace
📖 Message handles invalidate after wake (#4304);
Note
Details are in the end of release key features.
📚 gbuiltin-*
crates are now published on crates.io (#4306);
Note
Check out built-in interfaces:
📚 Fixed gclient
issue of missing static pages on program dump (#4319).
Runtime
📚 pallet-proxy
filters adjusted to deny gear pallets usage for NonPayable type (#4342).
Full Changelog: v1.6.2...v1.7.0
v1.6.2
Release v1.6.2 changes
- Versions are bumped to 1.6.2 for crates and 1620 for runtime (#4281).
This release is intended to fix a few issues appeared with publishing previous v1.6.1
, also implementing small fixes.
Runtimes are the same with v1.6.1
and v1.6.0
.
Note
gtest v1.6.1
was yanked.
- Gear tooling that run wasms now uses
Wasmer
instead ofWasmi
as underlying executor (#4261); - Fixed
gtest v1.6.1
bug caused user space panic for some rare cases (#4270); gstd
now useswaker-fn
crate instead of custom waker for async runtime (#4271);- Fixed
gstd
documentation publishing caused by inclusion ofethexe
feature (#4278).
Full Changelog: v1.6.1...v1.6.2
v1.6.1
Release v1.6.1 changes
This release is intended to fix a few issues appeared with cargo on publishing previous v1.6.0. Otherwise, they are identical.
Note
Buggy 1.6.0 gtest
and gear-wasm-instrument
were yanked.
If you're still on 1.5.0, consider bumping to 1.5.1 first.
- Crates are now hard pinned to workspace versions (#4254);
- Fixed
gtest
bug of already instrumented code instrumentation (#4258); - Versions of crates and runtime are bumped to 1.6.1 and 1610 accordingly (#4262).
Full Changelog: v1.6.0...v1.6.1