At the end of Q1 2023, Oasis Engineering has accomplished so much in a short time. March saw significant progress and updates all across the Oasis stack. Amid the progress, network activity and reliability remained strong and stable.
This monthly engineering brief provides an overview of:
- Wallet and CLI Updates
- Network Updates (Mainnet and Testnet)
- Indexer and Explorer Updates
- Developer Platform and ParaTime Updates
- Oasis Core Updates
Keep reading for a deep dive into Oasis Engineering’s work from March!
Wallet and CLI Updates
In March, the Oasis Wallet – Web saw a number of dependency bumps and notable bug fixes.
- WebUSB issues when connecting Ledger for first time wallet users on Chrome version 110 or later have now been fixed (#1321, #1338).
- When copying the ROSE amount anywhere in the wallet, the ROSE or TEST symbols are now correctly separated with a space (previously, they looked the same but were copy-pasted without a space). Also the word containing the number is separated from the symbol so you can now copy just the number (#1337).
- Support for multiple tabs was improved. The active network used is now correctly communicated and synced across all tabs without latency. The list of accounts is also synced, but each tab shows its own selected account. This way the user can use multiple tabs or windows to explore the accounts and send tokens (#1343).
- A number of UI, usability fixes and tests regarding ParaTime operations were merged (#1346, #1347, #1352, #1353, #1362, #1365, #1306).
In total, 62 pull requests were merged.
The Oasis Wallet – Browser Extension also saw a number of maintenance fixes!
- A similar fix to WebUSB issue regarding first-time Ledger users on Chrome was implemented to the wallet extension (#301, #303).
- In time of deprecating Node.js 14 at the end of April, the extension was migrated to Node.js 16 (#305).
A new 1.10.0 release of the extension was made and is already available on the Chrome Web Store.
The Oasis CLI is now the first wallet that officially supports ParaTime transactions signed by the Ledger hardware wallet (#11). Pretty printing of basic ParaTime transactions (deposits, withdrawals, transfers) was also implemented (#24). Additional safeguards for users were introduced which prevent accidental token transfers to Ethereum-compatible addresses on consensus layer (#31). You can always override such checks by adding the -f flag. For non-interactive environments, a new yes-to-all -y flag was introduced (#45). Oasis CLI will gradually replace the network inspection and entity/token management in the oasis-node binary so the latter will be solely used to run the network. The newly introduced oasis registry command allows you to register or deregister your entity, a new runtime and access existing or historic node, entity, runtime, validator records in the registry (#47, #48). A new 0.2.0 release was made on March 14 containing Linux amd64 binaries. In total, 14 pull requests were merged into the CLI repository.
Network Updates
In March, Emerald, Sapphire and Cipher ParaTimes were running stable on the Mainnet and the Testnet. No downtimes or incidents have been reported on the network. The Web3 gateway and Explorer instances for Sapphire encountered a few minutes of downtime due to scheduled maintenance.
On March 3, the bugfix Oasis Core 22.2.7 release was proposed for the Testnet and on 28 March for the Mainnet. On March 14, Sapphire 0.5.0-testnet was proposed for the Testnet. To learn more about Oasis Core fixes and the new ParaTime features, read the sections below.
Mainnet Highlights
The average number of daily transactions on Emerald has seen a slight decrease in February (13,525 transactions compared to 14,300 in February). The peak of 20,362 transactions on March 18 was also lower from the previous month – 25,358 on February 8.
The average number of daily transactions on Sapphire has seen a slight decrease in March (1,123 transactions compared to 1,157 in February). The peak of 1,193 transactions on March 14 was higher from the previous month though – 1,174 transactions on February 16.
Active Oasis Mainnnet nodes as of March 31, 2023:
- 120 validator nodes
- 6 key manager nodes
- 34 Cipher ParaTime compute nodes
- 55 Emerald ParaTime compute nodes
- 26 Sapphire ParaTime compute nodes
Testnet Highlights
On Emerald the average of daily transactions was around 1,200-1,300 except for a bump from March 21-25 where it reached a monthly record of 5.552 daily transactions on March 22. The February high was 3,156 transactions on February 5. The daily March average was lower than in February though (1,813 transactions compared to 2,271 in February).
The number of daily transactions on Sapphire saw almost a 5-fold increase from February due to more frequent health checks imposed by the Oasis Foundation (9,622 transactions compared to 2,341) and was steadily increasing over a period of months. The number of transactions saw a significant increase in the days following the ETHDenver conference (March 6-15). Another important bump was noticed on March 25 when the Oasis foundation sponsored the national Slovenian programming competition ACM RTK 2023. The peak of 10,489 transactions was reached on March 29 – compared to the previous peak of 3,672 transactions on February 28.
Active Oasis Testnet nodes as of March 31, 2023:
- 45 validator nodes
- 4 key manager nodes
- 18 Cipher ParaTime compute nodes
- 31 Emerald ParaTime compute nodes
- 20 Sapphire ParaTime compute nodes
Oasis Indexer and Explorer Updates
Another exciting month has passed for the Oasis Indexer team. Readers following the Oasis Network from the beginning will recall the first Amber and the Mainnet Beta networks in 2020, the Cobalt upgrade in 2021 and the Damask upgrade in 2022. The API and data structures changed significantly during that period and the chain analyzer needs to speak a correct language in order to correctly index the data. A new abstraction layer over the chain analyzer was introduced this month which lets it talk to the Oasis Node after the Cobalt upgrade (#326, #356, #362, #358, #361). Transaction failure reasons both inside EVM and consensus are now stored (#347). The number of active compute nodes per ParaTime per epoch is now stored (#354) and statistics for daily active accounts are now computed (#329). Some other important bug fixes such as race conditions, wrong order of EVM events, wrong ERC20 token balances, crashes when smart contract was not what it pretended to be, parsing were fixed, pagination fixes, wrong EVM event number data type, missing indexes (#340, #344, #368, #332, #346, #348, #359, #369). In total, 30 pull requests were merged.
The Oasis Explorer team has also been progressing at a rapid pace and we will just name the most notable changes. Since the Oasis Network is a public blockchain, anyone can register a new ParaTime (read more here), if they possess enough balance in the escrow account. If the escrow size falls below the threshold, the ParaTime will be suspended even though there could be compute nodes still executing it.
- To avoid cluttering the Explorer UI, only active (non-suspended) ParaTimes are now shown (#143).
- Since the Indexer supports parsing and storing transaction error messages (see above) this has been also implemented in the UI now (#163) .
- An important fix to displaying the gas limit and gas costs was merged (#182). A new transactions logs view was added (#224).
- The hourly and daily chart were added (#193, #195).
- A number of mobile version fixes were incorporated (#200, #236).
- If the Indexer knows it, the address and the transaction hash will now be shown in the original hex (Ethereum-compatible) format in contrast to the native Bech32 and Base64 formats (#239, #244).
- To avoid clutter, the UI will now offer you at most 100 pages to click on (#249).
A record high 84 pull requests were merged this month!
Developer Platform and ParaTime Updates
Sapphire 0.5.0 was released on March 14 and brought two major features.
X25519 support for signing, encrypting and decrypting on-chain data was already available in Sapphire’s solidity precompile. In this release, the helper for generating a new x25519 keypair was added (#116). This opens the door to having confidential keys generated and stored fully on-chain similar to how the hardware wallets are treated. Another missing feature was the error reporting for failed transactions. Because of confidentiality, all transactions with sufficient gas fees were marked as successful, even if they failed. After careful consideration, we decided to retain the transaction status and propagate it back to the user. We also implemented propagation of error messages of failed transactions behind the scenes, but this needs some final adjustments in the final typescript and go clients.
The @oasisprotocol/sapphire-hardhat wrapper now implements mocked hardhat tests for confidential transactions (#108). This is an alternate approach to running a complete Oasis confidential stack inside the sapphire-dev docker image when it comes to testing your smart contracts locally.
Extensive integration tests were added to the Gas Station Network wrapper that work both locally and on the Testnet (#1). We will announce the official release once the wrapper is thoroughly tested and the developer documentation available.
The documentation is richer for a few sections:
- Bubblewrap troubleshooting was added.
- Standard Contract Addresses page was added listing official addresses of the generally usable smart contracts such as the wrapped ROSE. Links to Sourcify verification are also provided.
- In the last engineering report, we mentioned that Docker images for Sapphire running localnet were released. Now, the procedure of how to obtain and use the images is documented. The Sapphire examples now also use the standard _mainnet, _testnet and _localnet extensions when determining the network.
- An important warning was added to the Sapphire guide about the potential security risk that the compute node can trace which memory cells are accessed and then try to determine, whether the same key-value pairs are accessed or not. For example, this could reveal, if the balance of the same accounts are accessed in ERC-20 transactions.
- The Run your validator node page has been revamped. Hopefully, newcomers will find it easier to bootstrap their own validator node and become part of the Oasis ecosystem!
Core Platform Updates
A new patch release of Oasis Core 22.2.7 this month removed the “halt epoch” check by default (#5200). The halt epoch was used in the past to force dump-and-restore network upgrades over a predetermined period of time and bring the network to a halt in case consensus on the upgrade proposal couldn’t be reached. Since on-chain governance has been well-tested for a while and the network is mature enough, the halt epoch can be ignored and it will be completely removed from the genesis document in the upcoming 23.x release.
As we are approaching the new 23.x release of the Oasis Core, work focused on optimizations, dependency bumps and bug fixes.
- The main worker loop of the key manager was refactored (#5212).
- Key manager’s enclave initialization was moved to a separate goroutine to not block the main loop. Also the initialization is now more robust so when the key manager key rotation takes place, the enclave simply re-initializes if the key expired (#5218).
- The key manager policies can now also be used in non-SGX builds. This will speed up our CI and simplify testing (#5215).
- The runtimes running in SGX now got support for limited multiple threads using the new version of the Tokio library, improving performance and removing possible deadlocks with upcoming master secret rotation implementation (#5214, #5220, #5223).
- An important bugfix was merged to allow the node to continue running even if aesmd is upgraded. In this case the Quoting Enclave identity could change and this required the target info to be updated (#5239).
- Docker images used by CI were migrated to ghcr.io due to recent announcement of Dockerhub sunsetting the free team plans (#5224).
- The announcement was later retracted, but our migration was already performed. Oasis Core is now compiled and tested with Go 1.20.x (#5228).
Check out all the 22 pull requests merged in March, to see a complete list of changes.
That’s all for March, and the first quarter of the year! Now, onward to April. In the meantime, chat more with the Oasis team by joining us on Discord or on the Oasis Forum! Also, learn more about the Oasis Privacy Layer here and register for the Oasis Privacy4Web3 Hackathon.