Oasis February 2025 Engineering Update

Read the latest report from the Oasis engineering team with all the latest releases and network updates from February 2025!

February marked eventful month for the Oasis engineering team. This monthly review summarizes the important project updates, key technical fixes, and new upgrades that pushed the network forward over the past month. Each of the sections below provides a full recap of the following engineering updates:

  • Wallet and CLI Updates
  • Network Updates
  • Oasis Nexus and Explorer Updates
  • Developer Platform and ParaTime Updates
  • Oasis Core Update

Wallet and CLI Updates

Most of the work by the ROSE Wallet team was focused on migrating the browser extension to the Manifest V3 architecture (#2120, #2125). In addition to this migration, a series of minor bugs were fixed: a fix for the wrong account type detection (#2124), the ParaTime transaction status in the first few seconds (#2123) and missing validators ranked above 100 (#2122). The team released v2.2.0-beta on February 6 which is already based on Manifest V3 for early users to try it out and which final release is scheduled for early March.

Six pull requests were merged in February.

The Oasis CLI team focused on further improving tooling and documentation for ROFL development. The updated “rofl” subcommand for TDX-based ROFLs is fully documented at docs.oasis.io/general/manage-tokens/cli/rofl (#373). When compiling ROFL, the memory offsets for measurements are now correctly computed based on the differentiated system description table (DSDT) as part of the ACPI subsystem (#378). 

The ROFL storage was migrated to qcow2 format (#354). ROFL kernel, firmware, and stage 2 containers were bumped to 0.4.1 (#365, #376, #381) Finally, if the user runs “oasis rofl create” twice, the CLI now refuses to overwrite the existing app ID (#364).

The team made four new releases in February:

  • v0.11.0, released on February 7, was a major release that brought the initial ROFL TDX compilation support
  • v0.11.1 maintenance release on February 12 bumped the containers to 0.4.1
  • v0.11.2 maintenance release on February 20 bumped the boot stage to 0.4.0
  • v0.11.3 maintenance release on February 28 fixed the memory offset computation and bumped the boot stage to 0.4.1.

In total, 12 pull requests were merged in February.

Network Updates

On February 3, Oasis Core 24.3.2 was released and proposed for both Mainnet and Testnet. This maintenance release bumped CometBFT to 0.37.15-oasis1. The upgrade is non-breaking and can be performed anytime by replacing the oasis-node binary and restarting your node. All node operators are encouraged to upgrade.

Mainnet Highlights

The number of daily transactions on Sapphire Mainnet fluctuated widely in February from the 14k range to the monthly high of 133,399 transactions on February 7 (the January high was 93,609 on January 17). The monthly average in February was 36,283 transactions, which was slightly higher than last month (35,510 transactions).

The number of daily transactions on Emerald Mainnet was in the 3k-6k range. The monthly average in February was 3,872 transactions per day which was 13% higher compared to the last month (3,413 transactions). The daily maximum was 5,763 transactions on February 3, comparable to 5,567 the last month on January 29.

As of February 28, 2025, the Mainnet nodes were well decentralized (January figures in parenthesis):

  • 114 (115) validator nodes
  • 6 (6) key manager nodes
  • 41 (41) Cipher compute nodes
  • 57 (57) Emerald compute nodes
  • 34 (33) Sapphire compute nodes

No major outages were reported for Oasis Foundation-provided services in February. You can monitor Oasis-provided Mainnet services on the Mainnet status page.

Testnet Highlights

Apart from the maintenance 24.3.2 release early in the month, the new major release of Oasis Core v25.0 was released on February 8 and proposed on Testnet. Consult the Core platform updates section below to learn more about new features.

The number of daily transactions on Sapphire Testnet was in the 8k-14k range. This number increased in the second half of the month, most probably due to the EthDenver conference, where the Oasis team was also participating and organizing two side event workshops. The monthly average in February was 10,502 transactions per day, which was 27% higher than last month (8,241 transactions). The daily maximum was 14,129 transactions on February 17 (compared to 9,157 the last month on January 22).

The number of daily transactions on Emerald Testnet was in the 3k range, mostly related to our health check monitoring services.

As of February 28, 2025, the Testnet figures are as follows (January figures in parenthesis):

  • 44 (44) validator nodes
  • 7 (7) key manager nodes
  • 18 (16) Cipher compute nodes
  • 29 (28) Emerald compute nodes
  • 18 (17) Sapphire compute nodes
  • 5 (5) Pontus-X compute nodes

February 4-9, the Oasis Rosetta Testnet experienced a few hours of outages due to the firewall cluster upgrades by one of the Oasis Foundation partners. Otherwise, no downtimes for Oasis-provided Testnet services were encountered. You can monitor the status of those services at any time on the Testnet status page.  

Nexus and Explorer

The Nexus team brought a few exciting new features to the table this month. Support for Sourcify v2 API has been merged, resulting in much better overall performance when it comes to contract verification than v1 (#916). Method filters were implemented for account-related queries (#897, #915) and token type filters (#914). 

ParaTime events were now migrated to a new table for improved query efficiency (#809). Two new endpoints for total and circulating ROSE supply were added (#904). EVM token ordering is now partially curated (#903). For those hosting the explorer service, the file service security was hardened (#913). ROFL instance registered event is now indexed (#917). The validator history query was also optimized (#906).

Two new releases of Nexus were made this month:

  • 0.6.0 released on February 25
  • 0.6.1 released on February 28

For a list of changes, see the Change Log. In total, 12 pull requests were merged in February.

The Explorer team merged a number of convenient fixes and improvements. Last month, support for “named” accounts was merged. The UI was improved this month to contain the token/contract name with the reference who labeled the account—either it was done and verified by the Oasis foundation (green mark) or the account itself (gray mark) (#1773, #1774). 

Explorer testers noticed that some React components were missing the hot-reloading of modules, which was now re-added back (#1741). Learning articles in the explorer were refreshed (#1738). Tab titles are no longer duplicated in the tab content (#1740, #1733). Finally, a new copy of clipboard buttons was added to the block number and transaction details (#1732). 

The Explorer team made two releases in February:

  • 1.16.0 release on February 3.
  • 1.16.1 maintenance release on February 4.

The latest version has been deployed to explorer.oasis.io. 18 pull requests were merged in February.

Developer Platform and Paratime Updates

The Oasis SDK repository saw many additions this month, mostly related to the Runtime Offchain Logic libraries, tools, and documentation. The rofl.DeriveKey action now supports a new “scope” key, which can be used to obtain ROFL instance-specific derivation (based on the node or entity ID) (#2148). The watchdog task ensures that the ROFL app is successfully re-registering and terminates it if this is not the case (#2145).

A new endpoint was introduced in the ROFL app service for signing the transaction with a key that is only derivable within ROFL TEE and for submitting them to the chain (#2147, #2151). This enables a developer to create an EVM transaction from any container inside ROFL that provably originates from the TEE. On the Solidity smart contract side, such transactions can be seamlessly verified on Sapphire via the roflEnsureAuthorizedOrigin() subcall. 

The Nexus team proposed two usable features in their ROFL indexing service. When a new ROFL instance is registered, an event is now emitted, and a list of all registered ROFL apps can be easily obtained (#2159).

The Runtime and Go Client SDK were bumped to the Oasis Core 25.0 version (#2156). Finally, the ROFL tutorial was fully rewritten for TDX containers (#2153). 

Two new ROFL containers were released:

  • 0.4.0 released on February 7.
  • 0.4.1 released on February 12.

A new Runtime SDK 0.12.0 was released on February 20.

Seven pull requests were merged into the Oasis SDK repository in February.

The Sapphire team expanded the compatibility, documentation, and integration with Ethereum-compatible tooling. In light of the new v2 client, the SIWE API and documentation were updated (#491, #489). SIWE is the preferred way to authenticate queries to the confidential smart contracts on Sapphire. A new, clean version of the hardhat example was added (#527). Also, the Go client SDK is now always end-to-end tested with demo-starter-go project to ensure nothing is broken (#504). 

A new official version of the Sapphire Quickstart screencast will be recorded in March. Initial work to seamlessly connect and install the Sapphire snap to Metamask was merged, including support for Wagmi and Viem (#431, #512). Foundry users will be glad that the @oasisprotocol-sapphire-contracts package was added to SolDeer (#513). The color scheme of Mermaid-based diagrams in Sapphire docs was revisited (#1138).

The following new releases were made:

  • @oasisprotocol/sapphire-paratime TypeScript client 2.1.0 (#522, #494)
  • @oasisprotocol/sapphire-hardhat Hardhat integration 2.22.2 (#518
  • @oasisprotocol/sapphire-contracts Solidity library 0.2.12 (#490)

The Sapphire team merged 21 pull requests.

The Oasis Web3 gateway is richer for one important feature this month. The gateway only supported local gRPC connection to the Oasis node. Now, support for over-the-network TLS was added (#694). This was incorporated in the 5.2.0-rc2 release on February 10.

The following docs.oasis.io chapters were alsoimproved:

A number of demo projects were also updated. Let’s briefly go through them.

The Demo Starter project frontend now uses rainbowkit (#26). The back and frontend were rewritten to the @oasisprotocol/sapphire-paratime client v2 (#16, #27). End-to-end UI dAppwright tests were merged (#22).

The Demo Starter Go EVM version was pinned to Paris for compatibility (#4).

The Demo Starter Python project now includes instructions on how to install sapphire-py from PyPi. A new example for signed queries using EIP-712 was also added (#5).

Core Platform Updates

The Oasis Core team was busy at work this month, too. Some features are more exotic, while others are simply convenient 😉

  • Support for archive mode was successfully backported to one of the first releases of Oasis Core dating back to late 2020 (#6054, #6057). This enables Oasis Nexus to index consensus blocks going back all the way to the Mainnet and Testnet genesis block!
  • History reindex writes are now made in batches of 1000 (#6050). This improves spinning up a new ParaTime node by a factor of 2 to 3.
  • On the ROFL front, the persistent storage may now be resized, e.g., if there is an upgrade that defines a larger image (#6077). Re-attestation is now done faster on failure to reduce potential downtime (#6038). If some manifests cannot be loaded, the node no longer stops (#6044). This is useful when upgrading from earlier versions where the exploded bundle directory may contain non-bundle subdirectories, which should not cause the loader to fail. And finally, the qemu-related processes for ROFLs are now correctly cleaned up on node termination (#6066)
  • The last consensus block is now published on node subscription (#6083). Replaying the latest block with a hook was not ideal because if the broker still had blocks in the queue while adding a new subscription, it could result in an unexpected block order and potentially cause the last block to be replayed twice. The solution with monotonically increasing order solved this problem, but there is a simpler one using the broker's option to publish the last block on subscription.
  • A race condition was fixed during the observer role registration (#6037).
  • Fail, if the block version is missing (#6040). Previously, when an `ImmutableState` was requested for a block version that didn't exist, the function would silently default to the latest available block. This could lead to inconsistencies since clients might receive state for a different block than expected. With this change, calls to create an `ImmutableState` for a missing version now explicitly fail with a "version not found" error, ensuring that such cases are handled properly. 
  • Hot-loading of runtime bundles is now disabled for key managers since it may lead to an irrecoverable deadlock of the key manager committee (#6043).
  • Validator nodes that don't run ParaTimes don't require installed bubblewrap anymore (#6060).
  • golang.org/x/crypto was bumped to 0.35.0 fixing CVE-2025-22869 (#6090).

Two new releases of the Oasis Core were made this month:

Read the Change Log to learn more about the changes. In total, 26 pull requests were merged in February.

What’s Next?!

That wraps it up for February. There are already big things in process for March, so be sure to revisit the Oasis blog for more updates at the end of this month. Meanwhile, chat more with the Oasis team by joining the Oasis Discord or the Oasis Forum. Also, check out this post to learn some of the latest on Runtime Offchain Logic (ROFL).

How we use cookies?
At Oasis Foundation we believe in your privacy, so you can choose to browse our site without any tracking or by clicking “Accept”, you help us to improve our site and help us grow our ecosystem. View our Privacy Policy for more information.