Oasis March 2024 Engineering Update
Read about Oasis' March 2024 engineering progress, featuring key network updates, ParaTime enhancements, and critical CLI improvements.
Everyone at Oasis engineering ended the first quarter of the year strong! March was another busy month of network updates, feature upgrades, and bug fixes across all fronts of the Oasis Network. Inside this update is a review of all of the performance data and network upgrades that happened in March.
The updates included in this report are ordered as follows:
- Wallet and CLI Updates
- Network Updates (Mainnet and Testnet)
- Oasis Nexus and Explorer Updates
- Developer Platform and ParaTime Updates
- Oasis Core Updates
Wallet and CLI Updates
The Oasis Wallet - Web team applied a few fixes this month. When sending or delegating tokens, the token ticker is now shown on the right to avoid any confusion (#1857). The error messages were made mobile-friendly and are now consistent with the rest of the UI (#1859). The remainder of merged pull requests were dependency bumps. In total, 5 pull requests were merged in March
The Oasis CLI saw a number of interesting improvements. This month, a proposal for changing the staking reward schedule was submitted and node operators needed to review the governance proposal and submit a vote. For this reason, the “oasis network governance show” command was beautified (#201, #212). In addition to the governance proposal screen, the network status screen was redesigned (#208). Previously, the “oasis network status” just dumped the complete node status in JSON format, which was difficult to read. Now, the output is simplified and reorganized into the Consensus and ParaTimes sections and formatted in the markdown-like style. The old behavior is still reachable by setting the “--format json” flag for anyone using the CLI in automated environments. You can check out the new output and the usage in the Oasis CLI Network chapter. Support for multiple ParaTime native tokens landed this month (#206, #211). As you may already know, each ParaTime can define additional native tokens and mechanics for issuing/burning those tokens. For example, the recently added PontusX ParaTime defines the “EUROe” native token with 18 decimals. Now, one can transfer EUROe tokens by simply appending the token symbol next to the amount, for example, “oasis account transfer 10 EUROe 0xDce075E1C39b1ae0b75D554558b6451A226ffe00”. Another consistency fix was merged this month — all the oasis.dev RPC endpoints in the CLI examples were replaced with oasis.io. In total, 9 pull requests were merged.
Network Updates
In March, Mainnet and Testnet were running stable. Likewise, Emerald, Sapphire, Cipher and PontusX ParaTimes were up 100%.
The new rewards schedule proposal passed on March 27. The current staking reward of about 2.5 % will remain the same until the common pool runs out. We estimate that this will happen in about six years at the current staking rate. You can already see the new staking rewards schedule in the Staking incentives section in our docs.
On March 4, the new Oasis Core 23.0.10 release was made and proposed on Testnet. Read the Core Platform Updates section below for more.
On March 28, two new releases of ParaTimes were made and proposed on Testnet: the 0.7.2-testnet release of Sapphire and the 3.0.4-testnet release of Cipher. Read the Developer platform and ParaTime updates section below to learn about the new features.
Mainnet highlights
On Sapphire Mainnet, the number of daily transactions varied. The month began in the 35k range then rising to 50k in the middle of the month and dropping back to 35k. The monthly peak of 67,431 on March 18 was lower than the exceptional peak from February (112,504 transactions on February 4). The daily average for March was 43,043 transactions (55,986 in January).
On Emerald Mainnet, the number of daily transactions also greatly fluctuated from the 3k to 6k range. The solo peak of 10,305 transactions was reached on March 15 (slightly lower than the last month’s peak was 11,383 on February 29). The average was 5,332 daily transactions (slightly higher from 5,150 in February).
As of March 31, 2024, the figures are slightly lower compared to the last month (the February figures in parenthesis):
- 120 (120) validator nodes
- 5 (6) key manager nodes
- 42 (44) Cipher ParaTime compute nodes
- 62 (63) Emerald ParaTime compute nodes
- 42 (42) Sapphire ParaTime compute nodes
No major outages were reported for Oasis foundation-provided services in March. However, some saw a few-minute downtimes: the Oasis gRPC endpoint, the Oasis Sapphire endpoint, Nexus and Rosetta Gateway. You can check the details on the Mainnet status page.
Testnet highlights
The number of Sapphire Testnet daily transactions dropped from 12k to 7k range on March 13. The average for the month was 9,206 daily transactions (12,469 in February). The peak of 12,939 transactions was on March 4 (13,269 transactions on February 19).
The Emerald Testnet chain was in the 2k range as was the case for the past era (most of them generated by the Oasis heartbeat service). The average number of 2,427 transactions this month was comparable to the previous month (2,370 in February). The monthly peak of 2,651 transactions on March 15 was slightly higher compared to the previous month (2,460 transactions on February 2).
As of March 31, 2024, the Testnet figures are comparable to the last month (the February figure in parenthesis):
- 43 (44) validator nodes
- 5 (5) key manager nodes
- 19 (19) Cipher ParaTime compute nodes
- 30 (29) Emerald ParaTime compute nodes
- 18 (18) Sapphire ParaTime compute nodes
- 1 (1) Pontus-X ParaTime compute node
On March 6, the Oasis Nexus explorer backend saw a 1.5 hour downtime on Testnet due to a DB upgrade. The Mainnet version was not affected. There were also a few smaller outages of other Oasis services running on Testnet: the Sapphire Web3 Gateway, the Rosetta Gateway and the Faucet. You can check the details on the Testnet status page.
Oasis Nexus and Explorer
The Nexus team delivered a number of interesting features this month. Support for partially verified contracts landed (#678). Until now, only fully verified contracts were considered as “Verified” in the explorer. To fully verify a contract, you need to use the exact same solidity compiler, compilation settings and the same contract creation transaction arguments used when deploying a contract. Some contracts may not have these and their maintainers may be inaccessible, however, the contract code may still be available. In this case, a partial contract verification can be performed. Such verification is now also considered by the analyzer and stored in the database. Next, the NFT parsing now also supports inline images encoded as data: URI (#649). Those are not very common, because the blockchain space is expensive, but there are some of them. A number of consensus layer data and features were added (#588, #653, #655, #656, #661). Finally, indexing the new Pontus-X chain was enabled (#639).
Two releases were made:
- 0.2.10, released March 12, was a feature release
- 0.2.11, released March 21, was mostly a bugfix release
24 pull requests were merged into the Nexus repository in March.
The Explorer frontend team mostly focused on the consensus layer improvements. A new component for the signed blocks was added (#1236). The account details page got the balance distribution, staking, transactions and validators components (#1261, #1298, #1310). A new consensus transaction page was also added (#1299, #1337). The new status pane of all the ParaTimes landed (#1319) including support for showing offline banners (#1344).
On the Sapphire front, the contract creation transaction data is now shown (#1317), the contract verification status icon now links to Sourcify (#1326) and each account icon now matches the jazz ones in MetaMask (#1328).
Overall polishes included revamping the heading levels across the whole explorer UI (#1308), new instructions, if an adblocker blocks the analytics tool (#1325) and analytics tool tests (#1327).
Finally, a number of bug fixes were applied: broken links when switching between the Eth and Oasis mode (#1329), wrong CoinGecko queries for ParaTime-specific tokens (#1331), not showing the ticker for some transactions (#1336) and empty balance for specific accounts (#1338). 45 pull requests were merged in total!
Developer Platform and ParaTime Updates
In March, a migration of Oasis services from oasis.dev to the oasis.io domain was completed. Some of the services (documentation, Oasis Explorer, the Oasis Wallet - Web and the status page) were already running on the new domain while others (gRPC and Web3 RPC endpoints, the Testnet faucet, old explorers) were still pending for the right moment. That moment happened at the end of March, so we were prepared for the upcoming mid-April Oasis rebranding launch.
On March 28, the Oasis Runtime SDK 0.8.5 was released and brought a number of important updates. Support for simulated Contract Create transactions was added (#1669). The maximum number of messages per transaction to consensus layer is now computed dynamically (#1662). This was one of the Oasis-specific settings and may have posed problems to Ethereum-compatible transactions in the past. Next, the Transfer EVM event is now emitted when a contract initiates a transfer (#1591). This helps indexers and other services to easily catch the contract’s native token transfers. The 0.8.5 release is based on the Oasis Core 23.0.10 (#1665).
On March 28, Sapphire 0.7.2-testnet and Cipher 3.0.4-testnet were released and proposed on the Testnet bringing the exciting new Oasis Runtime SDK features described above to our dApp developers!
The Oasis Client SDK for Go saw two releases:
- 0.8.1, released on March 6, changed default Oasis gRPC endpoints from oasis.dev to oasis.io
- 0.8.2, released on March 28, fixed the ParaTime-specific fee denomination printing
In addition, the Oasis Sapphire Client SDK for Go 0.11.0 was released based on the Oasis Core 23.x branch. Stay tuned for the official Sapphire for Go example soon including the end-to-end encryption and signed calls!
The sapphire-localnet and emerald-localnet Docker images saw a number of improvements for debugging. The LOG__LEVEL and OASIS_NODE_LOG_LEVEL environment variables are now documented (#538, #542). Also, apart from queries, the transaction body is now also logged when using the debug level even though it may be encrypted (#540). This is handy for dApp developers to make sure that none of the components are leaking any sensitive data before moving to the public network. The sapphire-localnet Docker image now ships Sapphire 0.7.2-testnet (#550).
The documentation got the following improvements:
- Overview chapters of the Create dApp part, including the Sapphire, Emerald and Cipher landing pages now include a list of gRPC and Web3 RPC endpoints including the 3rd party ones. Those can either be free of charge (but rate limited) or billable (with more whitelisted methods and higher or unlimited traffic rate).
- The Sapphire’s Standard contract addresses page now also contains a list of all Celer contract addresses bridged to Oasis Sapphire.
- The Run a node introductory chapter was revisited.
- The Set up TEE chapter now contains the new Multi-socket systems section when you want to use multiple CPUs on the same machine.
CORE PLATFORM UPDATES
A new Oasis Core 23.0.10 was released on March 4, which brought some bug fixes and improvements to DCAP-based remote attestation for confidential compute runtimes.
In parallel, a number of exciting new features were merged to the main branch corresponding to the upcoming 24.x release. Let’s expose some:
- A new storage layout called PathBadger was proposed (#5559). Previously, the nodes in the global state trie were stored on the location corresponding to the hash of the node content. Effectively, these locations were random, so no locality existed when for example traversing from the root to the leaf. The proposed PathBadger layout stores the nodes based on the version and the index of the transaction inside a batch (e.g. transactions in the same block). This exposes the time-locality of consecutive nodes on disk and reduces the size of the database (8 for the version and 4 for the index compared to the original 32 bytes). Benchmarks on the Sapphire database have shown almost 2x speed increase when reindexing the transactions from the latest Eden upgrade. Interested audiences may also want to know that alternatives to Badger DB were considered. PebbleDB turned out slower in our benchmarks for our workload (#5557) and RocksDB was lacking an efficient Go implementation and would cause more maintenance for us.
- New GetUnconfirmedTransactions() method was added to the ParaTime (#5589). It returns the transactions inside a ParaTime that are still waiting to be executed by the compute nodes (aka the “mempool”) and be included in the ParaTime block. This call is complementary to the one already available on the consensus layer.
- Further CHURP components were integrated for sharded secret sharing among the key manager nodes such as the lagrange interpolation, polynomial pointer operations, verification vector and a number of corresponding unit tests (#5590, #5592, #5593, #5603, #5616).
- Automatic whitelisting of the observer nodes was added (#5606). The observer nodes are ParaTime client nodes that support confidential queries without being elected into the compute committee.
- CometBFT was bumped to the 0.37.5 codebase and its rust counterpart tendermint-rs to 0.35.0 (#5615, #5604).
In March, 26 pull requests were merged into the Oasis Core repository in total.
A new ADR-24 was submitted proposing the architecture of the Runtime Off-chain Logic (ROFL). ROFLs will allow seamless integration of confidential off-chain enclaves with on-chain smart contracts for trusted off-chain oracles, high-performance computing such as the AI or gaming. The implementation on the Core side has already started, so stay tuned for the April’s engineering report to learn more!
What’s Next?!
More updates are coming in April, but that’s everything from Oasis engineering for March. Talk about any of the updates in this report with the Oasis Foundation team in the official Discord server or on the Oasis Forum. Revisit this blog next month for another in-depth report on the status of the Oasis Network.