Oasis Engineering Update | March 2025
A summary of all the biggest engineering updates for March 2025.
.png)
March was another busy month for the Oasis engineering team. This monthly review highlights the most notable project updates, critical technical fixes, and new enhancements that pushed the network forward over the past month. Each section below details the core engineering updates from March. Let's dive in!
Wallet & CLI Updates
The ROSE Wallet team fixed a number of bugs this month and made the wallet even more convenient to use. ParaTime transactions are now shown in the “Pending transactions” section like their Consensus counterparts (#2128). USB errors when connecting Ledger are now correctly reported, and troubleshooting links are shown (#2149, #2137).
ROSE wallet integrates the Transak service to buy tokens within the app seamlessly. Sometimes, the Transak iframe doesn’t load properly. In such cases, a new button pointing to the external Transak app is shown (#2154, #2132). A new Vietnamese translation has been added thanks to an external emhieu2005 contributor (#2131, #2129, #2148). The team also made a new v2.2.0 release on March 4, which, among other features, brought the Manifest V3 support we summarized in the last engineering report.
In total, 22 pull requests were merged in March.
The Oasis CLI team focused on tooling for ROFL management this month. A series of hints were incorporated for the new developers using the CLI for the first time. So, if you run out of funds, a link to the Testnet faucet is provided; if you don’t have an account yet, commands for creating or importing an existing keypair are suggested and similar (#403).
The “oasis rofl init” command no longer creates a deployment, which would require internet access and a funded account (#391). Also, if an existing Docker compose file exists, it is now automatically recognized and added to the manifest file (#395, #411). The deployment is now configured when registering your app by running “oasis rofl create”. Until the ROFL Marketplace, which will offer seamless deployment of your .orc bundles, is live, temporary deployment instructions are shown when running a new “oasis rofl deploy” command (#396).
ROFL’s enclave identity and a version are now populated in the generated bundle, making it possible to verify whether it matches the onchain state before running it (#399, #402, #400). The author, code repository URL, and license fields are now supported in your ROFL’s metadata (#393). Executing “oasis rofl build” now updates the manifest file by default, and there is no need to pass “--update-manifest” anymore (#405).
Three new Oasis CLI releases were made this month:
In total, 17 pull requests were merged in March.
Network Updates
Sapphire 0.9.2 and Cipher 3.2.2 were proposed on Testnet on March 4 and on Mainnet two weeks later on March 18. These releases improve ROFL app management and add features needed for containers in ROFL apps, add Sr25519 signature primitives to confidential EVM precompiles, add support for node and instance key scopes in key derivation for ROFL apps, support for per-instance metadata, additional queries and events to manage ROFL registrations, reduce ROFL app registration cost and more.
Mainnet highlights
The number of daily transactions on Sapphire Mainnet fluctuated in the 13k-18k rangethis month, with extraordinary outbursts about once every week towards 100k, which were caused by our Ocean protocol partners. The monthly average in March was 29,980 transactions per day, and was 17% lower compared to the last month (36,283 transactions). The daily maximum was 110,155 transactions on March 20 (compared to 133,399 the last month on February 7).
Daily transactions on the non-confidential Emerald Mainnet fluctuated in the 3k-4k range. The monthly average in March was 3,545 daily transactions, which was 8% lower than the last month (3,872 transactions). The daily maximum was 4,406 transactions on March 3 (compared to 5,763 the last month on February 3).
As of March 31, 2025, the Mainnet nodes were well distributed (February figures in parenthesis):
- 116 (114) validator nodes
- 6 (6) key manager nodes
- 41 (41) Cipher compute nodes
- 57 (57) Emerald compute nodes
- 35 (34) Sapphire compute nodes
No major outages were reported for Oasis Protocol Foundation-provided services in March. Monitor Oasis-provided Mainnet services on the Mainnet status page.
Testnet highlights
Daily transactions on Sapphire Testnet were steady in the 9k-14k range. The monthly average in March was 10,456 daily transactions, comparable to the last month (10,502 transactions). The daily maximum was 14,007 transactions on March 21 (compared to 14,129 the last month on February 17).
The number of daily transactions on Emerald Testnet was dormant, with around 3k daily transactions. The monthly average in March was 3,444 (3,548 transactions in February). The daily maximum was 3,720 transactions on March 14 (compared to 3,843 the last month on February 15).
As of March 31, 2025, the Testnet figures are as follows (Feb figures in parenthesis):
- 44 (44) validator nodes
- 7 (7) key manager nodes
- 17 (18) Cipher compute nodes
- 29 (29) Emerald compute nodes
- 18 (18) Sapphire compute nodes
- 4 (5) Pontus-X compute nodes
In March, suspicious activity was recorded on the Oasis Testnet Faucet. This service sends a small amount of TEST tokens to a consensus or ParaTime address. TEST tokens have no (market) value other than allowing new developers to start deploying their smart contracts and ROFLs on the Oasis Testnet chain.
On March 12, the activity was so intense that the faucet wallet was drained. Before the team refilled it back, we set the CAPTCHA level to the hardest one and enabled another Cloudflare frontend bot protection.
Solutions are being considered, including Anubis, the proof of work for AI scrapers protection. Over time, the activity stopped, and the faucet was 100% operational before the end of March. Apart from the faucet, no downtimes for other Oasis-provided Testnet services were encountered.
Review the status of the services on the Testnet status page.
Nexus & Explorer
The team behind Nexus indexer worked on further improving performance and adding initial support for indexing ROFL transactions and events. New {runtime}/rofl_apps/* endpoints were introduced for fetching a list of all registered ROFL apps, related transactions, and instances (#911, #939).
Also, initial support for ROFL marketplace transactions and events for instances and providers was added (#938, #922). A handful of newly named addresses were added to Nexus on Pontus X devnet, testnet, and the Oasis Testnet Faucet (#925, #931).
Raw error messages for failed Sapphire transactions are now exposed (#936). Handling of opened connections to the database was improved and made more configurable (#929, #934, #919, #933).
The Nexus team also prepared and deployed three new releases to nexus.oasis.io
In total, 15 pull requests were merged in March.
The Explorer team building a UI on top of Nexus was furiously shipping features this month! They mostly focused on ROFL, but also performed a number of code cleanups, restyling, refactoring, and convenience improvements. One such cleanup was removing support for Storybook, a rapid UI development and testing framework (#1826, #1823). Since most of the design is being done in Figma, maintaining both was too much of a burden. Storybook may be used in the future when we introduce our own UI library.
An entire new ROFL apps Explorer section was implemented (#1834, #1837, #1827, #1786, #1820). The result can already be seen in production here. A new toggle between “age” and “date” in the table views was added (#1782, #1829). TableConfig was generalized as LocalSettings and is now remembered even if you close the browser (#1793).
New Status badges were added and unified across the Explorer (#1819). All addresses in the Explorer are now reactive when hovering over with the cursor and are highlighted along with other occurrences of the same address on the same page (#1776, #1814). When walking through blocks using the prev/next button and switching between layers, query-specific arguments (e.g., transaction filter) are now remembered (#1780, #1794).
The validator page was refreshed and now shows the validator’s balance, includes a highlighted address label, whether it’s verified or self-professed, and includes a link to the account version of the page (#1815, #1813). Name attributions were restyled to clearly articulate who named the specific address (currently either Oasis or deltaDAO/Pontus X) (#1796, #1795, #1797).
Tokens can now be filtered by a type (#1772). Currently, ERC-20 and ERC-721 are supported. A bug where an account was found even though it never occurred on-chain was fixed (#1785). Amounts used in the Burn events are now correctly formatted (#1846).
In total, the team merged 44 pull requests in March. And a new v1.17.0 was released on March 11 and is already live at explorer.oasis.io!
Developer Platform & ParaTime Updates
The Oasis SDK team was working hard on further improving the ROFL developer experience.
Since offering TDX-enabled hardware to run ROFLs is not a standard feature for cloud providers, running your own TDX-enabled Oasis node also requires certain DevOps skills; we were investigating ways to make ROFL deployments more accessible for a broader developer audience.
In March, the initial implementation of the so called “ROFL marketplace” module was done (#2172, #2181). This mechanism was already deployed on Sapphire Testnet and integration into the Oasis CLI tooling is in the works.
Other features on the ROFL front include refreshed (and simplified) documentation for the new version of the Oasis CLI (#2174), a description of the ROFL app ID derivation (#2169), and a new warning on mandatory FQDN URLs inside the “compose.yaml” file (#2170).
To ease the process of registering ROFL apps without contacting the Oasis team and using the Testnet faucet, the required stake to register a ROFL app was reduced from 10,000 TEST to 100 TEST (#2177, #1165). A bug was fixed when spinning up ROFLs on the Oasis node if a “build:” directive was present in “compose.yaml” file (#2178).
Another important feature was the implementation of the native ParaTime denomination into an ERC-20-compatible interface (#2144). This, for example, enables seamless billing of an on-chain service, which can be used directly (without an intermediary) to pay for the gas fee.
Four new releases were made of this monorepo were made:
- ROFL Containers 0.4.2 released on March 17.
- Runtime SDK 0.13.0 released on March 29.
- ORC Tool 0.3.3 and 0.4.0 released on March 5 and 29, respectively.
In total, 10 pull requests were merged into the oasis-sdk repository.
The Sapphire team added the following new features this month. A new Foundry toolkit was added to test Sapphire-compatible contracts without using forks (#484). The new boilerplate for Foundry contracts simulates Sapphire precompiles and transaction decryption, implements the Foundry tests base class, and contains Rust FFI bindings. The SIWE support in the sapphire-contracts was extended with the “statement” and “resources” fields (#542).
This allows dApp for finer-grained authorization, e.g., the first signature for logging into the service and a subsequent signature(s) for specific actions like making trades or withdrawing tokens—all using SIWE and read-only contract calls. Also, the SiweAuth._domain variable visibility is now changed to internal so that it can be (optionally) changed in the subcontract (#529).
Five new releases Sapphire-related releases were made this month:
- Sapphire ParaTime 0.9.2-testnet and 0.9.2 released on March 3 and 17 which are based on the Oasis SDK version 0.12.0 and 0.10.0, released on March 31, which is based on Oasis SDK 0.13.0 which brought support for the ROFL marketplace.
- @oasisprotocol/sapphire-contracts 0.2.13 released on March 4, which changed the SiweAuth._domain visibility, and 0.2.14 released on March 19, which added resources and statements to SIWE.
In total, 15 pull requests were merged in March.
Similarly to Sapphire, the Cipher ParaTime was also bumped and rebased on Oasis SDK 0.12.0 and later in the month on version 0.13.0 with added ROFL marketplace module (#59).
Three releases of Cipher ParaTime were made:
- 3.2.2-testnet and 3.2.2 were released on March 3 and 17, respectively,
- 3.3.0-testnet based on Oasis SDK 0.13.0 was released on March 31.
The Oasis Web3 Gateway was bumped to Sapphire ParaTime 0.9.2 (#716). This included bumping the sapphire-localnet Docker image, too.
The official docs.oasis.io documentation saw the following changes:
- The Sapphire Quickstart chapter was refreshed to use the new Sapphire Typescript 2.x codebase, including a new screencast (#524)
- New Testing the Sapphire dApps with dAppwright chapter (#536, #534, #537, #544, #1170)
- New Build Sapphire dApps with Foundry chapter devoted to those who want to build confidential smart contracts using forge, cast, anvil, and other Foundry tooling (#1151)
- The ROSE wallet Browser extension chapter was refreshed to showcase the latest version of the wallet (#997).
- Mermaid diagrams now support both light and dark themes (#1172, #538).
The Oasis Playground showcases a new confidential ROFL Chatbot (#110). On the administration end, a new projects importer tool was added to the Playground, making it easier to import existing projects from hackathon hubs such as DoraHacks or EthGlobal or just directly from GitHub (#91).
The Demo Starter now uses dappwright test helpers (#29).
The Demo Quiz got a fix for claiming the rewards button discovered during preparations for the ACM RTK 2025 competition (#11).
A new Demo ROFL Chatbot developed by the Oasis team was made public and is available as a proof of concept at playground.oasis.io/demo-rofl-chatbot. This bot runs inside ROFL TEE and includes a local Ollama deepseek instance. Since the communication with the user is done purely over confidential smart contracts on Sapphire (protected by the roflEnsureAuthorizedOrigin() subcall), this ensures that prompts and answers are provably available only to the user. No cloud provider, node operator, or Oasis team can access them!
Core Platform Updates
The Oasis Core team merged the following important new features and changes:
- Runtime history was removed from the roothash service (#6089, #6116). The roohash service now only returns blocks when they are finalized on the consensus. Indexing and maintenance of block history are now handled by the runtime history.
- Key manager API client has been enabled in our gRPC client (#6078), allowing us to fetch on-chain key manager data via gRPC calls.
- Oasis Light client interfaces for the upcoming Oasis light client were cleaned up (#6120). The trust root configuration for the light client was moved to a dedication section (#6115).
- The genesis provider was removed (#6113) to avoid storing large genesis documents in memory. When the full genesis document is needed, it is now read directly from the local file.
- Round results were removed from history reindexing (#6095, #6114), as they are already stored on-chain. This change reduced reindexing time by approximately 30%.
- Per-component (i.e. ROFL or ParaTime) networking is now supported (#6123). This allows a node operator to expose a port, for example of a service running inside ROFL externally.
- The ParaTime block history indexer progress is now reported (#6013) when querying the Oasis node status. The report also includes an estimated time for reindexing completion.
- A fix was merged to ensure ParaTime deployments are ordered before being filtered by version (#6097), as the consensus layer does not guarantee chronological order of deployments.
The team released Oasis Core 25.1 on March 31 which brought the described features above. Besides, the team also released the maintenance releases for Oasis Core 20.10.2 and 20.12.8 which backported support for the archive mode. This will enable Nexus to connect to these nodes to fetch and index blocks prior to Cobalt upgrade (April 2021).