Skip to content

Releases: gear-tech/gear

build

27 Sep 14:25
695efd0
Compare
Choose a tag to compare
build Pre-release
Pre-release
chore: Change mocked BlockNumber to u32 (#4868)

v1.9.1

05 Sep 13:36
748e09a
Compare
Choose a tag to compare

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

14 Aug 11:07
Compare
Choose a tag to compare

Release v1.8.2 changes

  • Crates versions bumped to "v1.8.2” (won't be published), runtime spec version bumped to 1820.

Note

This is an interim release intended to address governance requirements in the tokenomics API (#4801).

Full Changelog: v1.8.1...v1.8.2

v1.9.0

31 Jul 15:08
56b030a
Compare
Choose a tag to compare

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

15 May 09:54
5419ab2
Compare
Choose a tag to compare

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

11 Apr 08:25
d1181d8
Compare
Choose a tag to compare

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 the gr_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

03 Feb 11:45
b006a00
Compare
Choose a tag to compare

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

23 Nov 18:10
de47744
Compare
Choose a tag to compare

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);


📚 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

07 Oct 12:58
93eb5b5
Compare
Choose a tag to compare

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 of Wasmi as underlying executor (#4261);
  • Fixed gtest v1.6.1 bug caused user space panic for some rare cases (#4270);
  • gstd now uses waker-fn crate instead of custom waker for async runtime (#4271);
  • Fixed gstd documentation publishing caused by inclusion of ethexe feature (#4278).

Full Changelog: v1.6.1...v1.6.2

v1.6.1

28 Sep 07:35
94adcbc
Compare
Choose a tag to compare

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