Oasis January 2024 Engineering Update
Dive into the monthly engineering report from Oasis for the start of 2024!
January marked a busy and exciting start to the new year for Oasis engineering. Dozens of completed updates and strong network performance data set the stage for another landmark year of development on Oasis. (Check out the 2023 year-in-review blog here!)
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 implemented an interesting pack of features for the first month of this year.
- The Delete and Manage account buttons were revisited on mobile (#1836, #1837). The former is now consistently colored red and appropriately positioned while the latter is less aggressive by removing its border.
- The Web Wallet now supports Ionic Capacitor which enables building native mobile for Android and iOS (#1769). Stay tuned for the official mobile release!
- Until the new Ledger Nano App is released the ParaTime deposits and withdrawals for Ledger accounts are disabled (#1824).
- The fallback font is now consistently used, if there is issue fetching Rubik (#1822).
- A call for translators last month brought a new Chinese translation and the updated Slovenian one (#1821, #1827). Feel free to join the Oasis translation team on Transifex with an ongoing effort to translate the wallet to the user’s native language or improve the existing strings!
Finally, a number of smaller developer-related fixes landed such as the yaml schemas, code cleanups, CI and test improvements, and dependency bumps (#1828, #1829, #1830, #1831, #1832, #1839).
In total, 17 pull requests were merged in January.
The Oasis CLI saw a few improvements as well.
- The output of the wallet export command was refreshed (#137). Now, it also shows the account kind and, if the account is of bip44 or adr8 type, the derived secret key for an account’s mnemonic, derivation path and index. Currently, users requiring the raw key (e.g. dApp developers) need to rely on 3rd party tools or web services to derive the secret which may have been insecure.
- New pool: literals for reserved addresses were introduced such as the common pool, rewards pool, the delegation and withdrawal pools, and others (#134). These addresses are not ordinary on-chain accounts, so when trying to use them inside transactions, the CLI will prevent a user from doing so.
- Finally, a handful of documentation fixes and dependency bumps were made.
7 pull requests were merged in January.
Network Updates
In December 2023, Mainnet and Testnet were running stable. Emerald, Sapphire and Cipher ParaTimes were also up 100% both on Mainnet and Testnet. Some users encountered transaction timeouts due to congestion of the public Oasis Sapphire Web3 endpoint on Mainnet. Read the Mainnet section below to learn more. No other extraordinary downtimes were encountered.
On January 12, two new releases of ParaTimes were made and proposed on Testnet: the 0.7.1-testnet release of Sapphire and the 3.0.3-testnet release of Cipher. Read the Developer platform and ParaTime updates section below to learn about the new features.
Mainnet Highlights
After three months of exponential growth, Sapphire saw a slight decline of daily transactions. In fact, the three-month daily peak was already reached on December 27, 2023 (108,945) followed by a 35% plunge back to the 55-75k range at the end of December 2023 and throughout January 2024. The average for January was thus 62,373 daily transactions (down 25% from 83,256 in December). The January peak was also lower—76,325 daily transactions on January 18 (down 43% from before mentioned 108,945 on December 27, 2023).
On Emerald, the number of daily transactions were in the 11-13k range until January 13. Then, the number dropped to the 3-4k range. The average number of daily transactions was 7,172 (11,590 in December). The peak of 16,505 was reached on January 2 (compared to peak 20,204 transactions on December 24).
Oasis engineering is happy to announce that the number of both the validators and all kinds of compute nodes increased for the second month in a row! As of January 31, 2024, the figures are as follows (the figure from the previous month in parenthesis):
- 120 (119) validator nodes
- 6 (6) key manager nodes
- 42 (34) Cipher ParaTime compute nodes
- 61 (54) Emerald ParaTime compute nodes
- 40 (31) Sapphire ParaTime compute nodes
At the end of year and in the first week of January, some users encountered timeouts when performing contract view calls or trying to submit a transaction using the public Oasis Web3 endpoint for Sapphire. The main issue was that the Web3 gateway load balancer was incorrectly configured, which resulted in the load being scheduled to Oasis nodes which were already busy. The Oasis team increased the number of Oasis node instances and fixed the load detection bug in the load balancer. After carefully monitoring the network, these actions seemed to fix the congestion issues. Due to the Nexus indexer upgrade, the Explorer was out of sync on January 18 for more than an hour. Apart from the mentioned issues, the remaining Mainnet services were up all the time.
Testnet Highlights
The number of Sapphire Testnet daily transactions were steady in the 5.5-6.5k range with some spikes up to 11k in the second half of the month. The average for the month was 7,606 daily transactions (7,260 in December). The peak was on January 23 (13,429 transactions on December 2).
On Emerald Testnet, no major change was encountered from the last month. The chain was mostly dormant with around 1,200 daily transactions generated by the Oasis heartbeat service with a spike on January 17-18 reaching 4-5k daily transactions. The average number of transactions in January was 1,419 (1,253 in December). The January peak of 5,347 transactions on January 18 was, as mentioned earlier, exceptionally high (last month’s peak was 1,341 transactions on December 2).
As of January 31, 2024, the Testnet figures are slightly lower compared to the ones from the last month (the figure from the previous month in parenthesis):
- 44 (44) validator nodes
- 5 (7) key manager nodes
- 18 (20) Cipher ParaTime compute nodes
- 29 (30) Emerald ParaTime compute nodes
- 21 (22) Sapphire ParaTime compute nodes
Apart from a few minute outages, all Oasis Testnet services were up 100%.
Oasis Nexus and Explorer Updates
On Nexus, the explorer backend saw a number of bug fixes and other smaller improvements. The team cut 3 releases in January:
- 0.2.5, released January 16, adds support for NFT event filtering, number of NFT transfers and bug fixes related to gas fee computation, NFT type detection and nil dereference crash
- 0.2.6, released January 22, exposes more human-readable event information and a small fix when shutting down the indexer
- 0.2.7, released January 25, was mostly a bugfix release for smart contract ABI error parsing, common and fee accumulator pool handling and improved tests.
Overall, 22 pull requests were merged in January.
The Explorer frontend also received a pack of new features and bug fixes. The team focused on both the Sapphire/NFT front and the upcoming consensus layer frontend.
- On the Sapphire front, a new ERC20/ERC721 token transfer tab was added (#1066).
- Trending dApps related to a specific address can now be displayed inside the explorer UI (#1085). One such example is the Oasis ROSE (un) wrapper related to the WROSE contract address.
- New back/previous block buttons were added when viewing a block (#1178, #1201).
- On the consensus-layer frontend, a new pie chart component was added which will be, among others, used to show the validators’ status (#1115).
- A list of validators page was implemented (#1144).
- A consensus transaction chart, social/learning section and network change proposals components were added (#1154, #1155, #1168, #1161, #1179, #1185, #1192). Readers can check out the current state of the consensus frontend in the development version of the explorer.
- Finally, a number of smaller UI improvements landed for icons, labels, routes and input field validations (#966, #1082, #1152, #1159, #1164, #1165, #1174, #1176, #1186, #1210).
The rest of the pull requests were dependency bumps and internal cleanups resulting in 75 pull requests being merged in January. The team also made two new releases: 1.5.0 on January 10 and 1.6.0 on January 25. Try out the Oasis Explorer on explorer.oasis.io!
Developer Platform and ParaTime Updates
After launching the Oasis Eden upgrade at the end of November 2023 and closely monitoring the network behavior in December, the Oasis SDK saw a new wave of features in January.
- ParaTime state handling code was greatly refactored and simplified now having two distinct types — one for the read-only information of the current block and the other one for transactions, events and other storage-related data (#1601).
- Optional support for storage gas was introduced, which is tracked in parallel of the execution gas and depends on the size of the actual state write log (#1612). This will avoid border-case transactions where there is little computation and a large write log that is not sufficiently charged by the SSTORE instructions. The maximum of computation and storage gas use is eventually charged.
15 pull requests were merged in January.
The following Oasis SDK releases were made in January:
- Runtime SDK 0.8.3 released on January 11 included the state handling refactor PR mentioned above. In addition, the round roots and uncompressed public key format support merged back in November were also included (read the engineering report here to learn more!).
- Runtime SDK 0.8.4 released on January 26 included the new storage gas computation.
- The Client SDK for Go 0.7.2 released on January 26 added reserved addresses inside a ParaTime for the pending withdrawal and delegations tokens.
On January 12, two new ParaTime versions were released for Testnet based on the Runtime SDK 0.8.3 described above: Sapphire 0.7.1-testnet and Cipher 3.0.3-testnet.
A few important changes also landed in the Sapphire repository. The codebase was migrated to Ethers v6 (#239, #261, #267). Users are warmly encouraged to migrate their dApps to Ethers v6 as soon as possible. Additionally, the OPL endpoint address on Mainnet was updated (#251) and some broken documentation anchors were fixed (#252). The following releases were made:
- @oasisprotocol/sapphire-paratime 1.3.0 and @oasisprotocol/sapphire-hardhat 2.19.4 released on January 24 added support for Ethers v6.
- @oasisprotocol/sapphire-paratime 1.3.1 released on January 29 was a bugfix release fixing Ethers v5 compatibility.
- @oasisprotocol/sapphire-contracts 0.2.7 released on January 17 containing a fix to OPL endpoint address on Mainnet and migration to Ethers v6.
In total, 18 pull requests were merged.
The Web3 gateway team also merged a handful of new features.
- The Web3 gateway health checks now also query for the runtime public key, which implicitly tests the availability of the key manager (#510).
- Suggested gas price calculations for runtimes that have dynamic min gas pricing enabled were fixed (#509).
- The docker image logging was changed from info to warn greatly reducing the size of the docker image over time (#513).
- The Sapphire and Emerald Localnet docker images were renamed from sapphire-dev and emerald-dev to sapphire-localnet and emerald-localnet, respectively (#507).
- The -dev suffix is reserved for the images having specific development files available needed for compiling the Oasis Core and the ParaTime binaries.
The remainder of the 12 pull requests merged in January were dependency bumps.
Some documentation updates also landed in January:
- The ‘Precompiles’ chapter, which described the details of the Sapphire-specific solidity calls was migrated directly inside the solidity codebase natspec format for easier maintenance. Since the documentation is generated from the solidity contracts library, it is always synced with the actual codebase. Developers can access it at api.docs.oasis.io/sol/sapphire-contracts.
- The ‘Run Your Archive Node’ chapter was updated for running a Damask archive node.
- The Security chapter adds an important finality clause, which, depending on the block height, determines whether the query was simulated or an actual transaction was made e.g. requiring a payment to reveal a secret.
- The documentation framework was migrated to Docusaurus 3.x (#696).
Finally, the Oasis team is happy to announce a new interactive Oasis Playground, which lists example dApps built on the Oasis network, a short markdown description, a link to the source code, related tutorials and the link to the actual (demo) app. All dApps are tagged, so viewers can quickly determine which topics it covers. Most dApps are Sapphire-centric, however, Cipher, Emerald, consensus-layer or any combination of those are also supported.
Oasis would like to encourage third party developers who build on the Oasis platform to contribute their dApp to the Playground! This way, users will not only improve the reputation of their dApp, but also help out other developers striving to build solutions to similar problems.
Core Platform Updates
The Oasis Core team improved the developer experience, metrics, logging and oasis-node performance:
- If the Deoxys-II unsealing fails (e.g., if a user migrate to a different CPU without updating their node in the network registry) a more reasonable error message is now reported (#5458).
- A new get_diff value for the call label was added to the storage latency and failure metric (#5512).
- A new oasis_rhp_timeouts metric measuring the number of timeouts between the ParaTime and its host was added (#5519).
- The MKVS storage written in rust and used by the ParaTimes now supports the get_proof call similar to its go counterpart (#5514).
- The transaction artifacts are now read from the local database, if available, which improves performance (#5520).
- The number of worker/dispatcher threads in SGX was increased from 2/2 to 6/16, respectively, to improve performance on newer CPUs (#5523).
- In light of the query node congestion in the beginning of January, a new load balancer provisioner was added to the Oasis node, which can spin up multiple workers of the same runtime and load balance the queries. Also, new oasis_worker_client_lb_healthy_instance_count and oasis_worker_client_lb_requests metrics were added (#5528).
- A potential race condition was fixed in the key manager (#5529).
- The key manager worker code responsible for managing master and ephemeral secrets was separated from the rest of the code, allowing Oasis engineers to easily add new features to the key manager. As part of the refactor, the enclave RPC access control list was tightened, allowing peers to call only methods supported by the enclave (#5532, #5538).
- Added support for arbitrary log level in oasis-net-runner used in the Sapphire and Emerald Localnet docker images, among others (#5534).
- A new function, GetActiveVersion, was added to the runtime host interface to quickly determine the version of the currently active runtime. This eliminates the need to listen to runtime start and stop events (#5535).
- The mode of the Oasis node (e.g. client, validator, compute) is now also reported in the “oasis-node control status” and “oasis network status” (#5537).
- The performance of the key manager and its clients was improved by allowing peers to establish noise sessions with key managers only if they have permission to invoke at least one secure enclave RPC method (#5539).
- A caching bug was fixed for transactions that fail the pre-check phase, but may be valid in the future (#5542).
- An observer node registration bug was fixed (#5545).
26 pull requests were merged in January.
What’s Next?!
That’s all for January — stay tuned for more updates at the end of this month. Meanwhile, chat more with the Oasis team by joining the Oasis Discord or on the Oasis Forum.
Oasis engineers will also be mingling and presenting at ETHDenver 2024 in Denver, Colorado! Find the team in the exhibitor hall, on the conference mainstage, or anywhere in between during the event. Get more information here.