Oasis September 2023 Engineering Update
Browse the full Oasis engineering report for September 2023 with updates on wallets, explorer, runtimes, and more!
September marked the end of an exciting quarter for Oasis Engineering. Updates were pushed throughout the entire Oasis stack, and big improvements to the Oasis ecosystem are planned — all while the Privacy4Web3 hackathon is in its final stages!
Oasis continues to prove that bear markets are for building!
The full list of developments included in this report are as follows:
- Wallet and CLI Updates
- Network Updates (Mainnet and Testnet)
- Oasis Nexus and Explorer Updates
- Developer Platform and ParaTime Updates
- Oasis Core Updates
Keep reading for full updates from Oasis Engineering!
Wallet and CLI Updates
In September, the Oasis Wallet - Web saw a number of exciting features both on the frontend side and under the hood soon reaching feature-parity with the Oasis Wallet Extension!
- A user can now change the master password to their wallet (#1675).
- Users can now store commonly used contacts to their wallets similar to how they store phone numbers into the phonebook—some other wallets such as the Oasis CLI call this the address book (#1635, #1657, #1668).
- The name of the contact is also shown when submitting a transaction and browsing through the transaction history of accounts (#1674, #1661).
- Since the number of configurable features has risen so much (e.g. the new change password form, the default language and theme, accounts management), a new Settings page was implemented (#1630, #1666).
- The ParaTime withdrawals and deposits were implemented a while ago in the web wallet, but they have been hidden from the general audience. Now, they are finally opened for anyone to use (#1636).
- In addition, two annoying balance refresh bugs were fixed when switching the network (#1691, #1692).
- The development team has also moved away from using the MegaLinter action in favor of GitLint and MarkdownLint (#1637, #1639, #1640).
Testers can check out the latest version of the web wallet at wallet.dev.oasis.io and report any issues to our github repository or the discord channel. In total, 62 pull requests were merged this month, which is the highest from March this year!
A preparation for deprecating the Oasis Wallet - Extension began moving to the Web wallet codebase. In contrast to the wallet extension, the new codebase does not store the mnemonic, but derives a private key of the account and then stores the private key instead. A new warning message will be shown explaining this to the user (#1668).
A preparation for deprecating the Oasis Wallet - Extension was started moving to the Web wallet codebase. A new warning message will be shown to users in the final release that their mnemonic will not be exported automatically to the new code base and that they will need to do export it manually (#1668).
A new version 0.5.0 of the Oasis CLI was released on September 26. Two important new features landed.
- The first one is added support for direct ParaTime-layer delegations to a validator (#128). This enables the user to still hold the tokens inside Sapphire while they are delegated.
- The second feature is added file-based support for Sr25519 encryption scheme, which is an alternative to the Ed25519 and Sep256k1 schemes already fully supported by the Oasis wallets (#119, #122, #130).
No less than 9 pull requests were merged in September.
Network Updates
In September, Mainnet and Testnet networks were running stable. Emerald, Sapphire and Cipher ParaTimes were up 100% on the Mainnet and the Testnet. Oasis-provided services (gRPC, Web3 endpoint, the Explorer, IAS proxy and the seed nodes) had short outages. Read below to learn more.
In September, the Privacy4Web3 hackathon ignited and also two crypto-related conferences — Dappcon 2023 in Berlin and Smartcon 2023 in Barcelona — took place where a team of Oasis engineers presented the Oasis ecosystem and tools for a confidential dApp development in a handful of talks and workshops. Consequently, the number of transactions on both Sapphire Testnet and Mainnet networks notably increased.
Mainnet Highlights
Since the Oasis Protocol’s heartbeat client was temporarily disabled for two weeks (September 9-22), the average number of daily transactions this month on Sapphire was lower compared to the previous month (708 transactions versus 1,158 in August). The peak of 1,212 transactions was reached on September 29 and was higher from the peak in August (the prior month’s peak was 1,196 transactions on August 7).
Despite the Oasis Protocol’s heartbeat client was temporarily down for two days (September 22-23), the average number of daily transactions on Emerald was comparable to September’s figures (12,156 transactions compared to 12,189 in August). The peak of 15,180 transactions was reached on September 29 and was higher compared to the last month’s peak – 13,534 on August 17.
The number of Oasis compute nodes running the Trusted Execution Environment using Intel's SGX is significantly lower this month compared to August, but it is still sufficiently distributed to ensure the security of the network.
On September 19, a TCB recovery was enforced by Intel (read more here) due to a critical security update issued in August. Since not all existing compute node operators performed the upgrade in time, the TEE required by the Sapphire and Cipher ParaTimes stopped working for them.
Consequently, the figures on September 30, 2023 were the following (the figure from the previous month in parenthesis):
- 120 (120) validator nodes
- 6 (6) key manager nodes
- 36 (41) Cipher ParaTime compute nodes
- 53 (62) Emerald ParaTime compute nodes
- 22 (33) Sapphire ParaTime compute nodes
On the Mainnet services level, the Oasis Explorer services (Nexus, legacy Sapphire and Emerald explorers) were down for up to one-hour breaks on September 6, 15 and 25. The official Oasis seed node was down for 1.5h on September 12 due to planned migration.
Testnet Highlights
Three new releases of the Sapphire ParaTime were proposed on Testnet in September. On September 4, the 0.6.2-testnet, on September 21 the 0.6.3-testnet and on September 26, the 0.6.4-testnet release. Read the Developer platform and ParaTime updates below to learn about the new features.
The average number of daily transactions on Sapphire saw an extraordinary 57% growth compared to the previous month (17,768 transactions compared to 11,313). The peak of 24,308 transactions on September 30 was almost twice as high compared to August (12,893 transactions on August 24)! Oasis assumes that the developers attending our workshops at Dappcon and Smartcon helped the tremendous growth!
The number of daily transactions on Emerald first saw a burst of 3,000 on September 19 and then the monthly peak of 6,144 transactions on September 20. Before and afterwards, the number of daily transactions was steady around 1,300 transactions. On average there were 1,521 transactions in September compared to 1,226 in August. The last month’s peak was 1,308 transactions on August 23.
Active Oasis Testnet nodes as of September 30, 2023 (the figure from the previous month in parenthesis):
- 46 (46) validator nodes
- 6 (5) key manager nodes
- 17 (17) Cipher ParaTime compute nodes
- 31 (31) Emerald ParaTime compute nodes
- 20 (19) Sapphire ParaTime compute nodes
Some of the Oasis Testnet services encountered outages. On September 6, a planned upgrade of the Sapphire ParaTime to 0.6.2-testnet was performed, on September 22 an upgrade to 0.6.3-testnet and on September 26 an upgrade to 0.6.3-testnet. During the upgrade, the Web3 gateway, the Faucet and the Explorers were unreachable for up to two hours. Other Oasis Testnet services were running with no downtimes.
Later in October, a major upgrade to Oasis Core 23.0 will be proposed on Testnet. Stay tuned!
Oasis Nexus and Explorer Updates
Oasis Nexus, the official indexer of the Oasis network, continued its “release often, release early” cycle and made three new releases in September:
- 0.1.13 released on September 15 was a bugfix release fixing the computation of spent gas, the number of transactions and the total value fields (#512).
- 0.1.14 released on September 21 brought support for indexing direct ParaTime delegation/undelegation events (#515) introduced by the new subcalls in Oasis SDK’s August release.
- 0.1.15 released on the same day fixed a regression that slipped through in the 0.1.14 release causing a crash when querying the balance of an EVM token (#522).
The Oasis Nexus repository is richer for 16 merged pull requests in September.
The team behind the Oasis Explorer, a frontend for Oasis Nexus, made the 1.2.0 release on September 12 which is already live on explorer.oasis.io! The release primarily brought support for Emerald both on the Mainnet and Testnet networks (#857). A number of other exciting features were merged into the development branch in September — 52 pull requests in total — which will be written about more in the next report when the new release is made. In the meantime, readers can test the latest development version on explorer.dev.oasis.io and report back!
Developer Platform and ParaTime Updates
The Oasis SDK repository saw 19 pull requests in September, and three new exciting releases of Sapphire were made:
- On September 4, a bugfix 0.6.2-testnet fixed the refunding of the unused gas fee for transactions that revert. The gas refund policy is now consistent with the Ethereum network (oasis-sdk#1470).
- On September 21, the 0.6.3-testnet release changed the revert reason from a custom CBOR to the standard Ethereum ABI encoding. This makes standard Ethereum ABI-decoding tools usable for displaying the correct revert reason. The release also brought gas padding precompiles which may be used by dApp developers in the future to mimic the loss of confidentiality due to the amount of spent gas (oasis-sdk#1479, oasis-sdk#1496).
- On September 26, the 0.6.4-testnet release correctly truncates the call results and adds delegation receipts. This feature now enables developers to write a dApp that can transfer, deposit, withdraw and also delegate tokens to a validator all from within the dApp. (How cool is this?! 🤓) – (oasis-sdk#1509, oasis-sdk#1510).
There is an ongoing debate among the Oasis Sapphire team whether it should allow impersonation for view calls or not. In Ethereum, this mechanism allows for the defining of an arbitrary value of msg.sender and then simulate the call. While this is fine for non-confidential contracts, it may reveal information stored inside the confidential storage, if the execution path depends on the contract state.
For this reason, Sapphire prohibits impersonation and always populates msg.sender with the signer address either for the transaction or the signed view call. In case of an unsigned view call, the msg.sender field is always set to zero. However, this breaks compatibility with Ethereum and adds friction when porting over the existing dApps to Sapphire, so a patch was suggested which removes zeroing of this field (#1481) and relying on a generic EIP-712 for authentication then. In preparation for 0.6.3-testnet, however, the patch was reverted due to security considerations (#1500). Further research needs to be put into this topic, and if any readers want to contribute to the discussion, don’t hesitate to join Discord and writing to the #dev-central channel!
A new 2.5.4 version of the Oasis Ledger Nano app was released fixing the account derivation using the Sr25519 encryption scheme. The newly derived accounts are now compatible with the Oasis CLI-derived accounts stored in a file.
In September, an overhaul of the API reference documentation was completed.
The Oasis network is made out of a number of more or less pluggable components written in different programming languages. For example, the Oasis Core node is written in Go. To communicate with the node over gRPC, developers can write their client in Go directly or they can use the TypeScript bindings (the Oasis Wallet Web and the Extension use these bindings for example).
Next, the ParaTimes are written in Rust by importing the Runtime SDK which provides basic functionalities such as the key-value store, token operations, different encryption schemes, and the communication with the core node over the runtime-host protocol. On the client side, Oasis provides TypeScript and Go ParaTime client bindings. The Runtime SDK also implements confidentiality and some modules — both can optionally be used. For example, Sapphire and Emerald make use of the EVM module, since they are EVM-compatible.
Cipher, on the other hand, uses the Oasis WASM Contract SDK module. Sapphire and Cipher ParaTimes use the confidential storage and contract execution while Emerald uses the key-value store directly. On the client side, Sapphire supports encrypted transactions and signed view calls. Both are provided by the TypeScript Sapphire ParaTime wrapper. Finally, when it comes to writing Solidity contracts for Sapphire, developers can use Sapphire-specific precompiles accessible from the Sapphire Contracts package.
Core Platform Updates
The Core team was working on final patches before the Oasis Core 23.x release planned in October:
- The Sr25519 key derivation from the mnemonic was reviewed and standardized (curve25519-voi#121).
- Support for Attestation-Verification Reports version 5 was implemented (#5372). In addition, each ParaTime can now define their own TCB recovery schedule. For example, the Key manager ParaTime, which is the most critical component can be very strict in terms of when the node operator must patch their node with the new firmware version of the CPU. Other ParaTimes with a larger set of node validators may be more permissive.
- A new observer node role was introduced. These nodes behave similarly to the existing ParaTime client nodes, but can also execute confidential queries inside the trusted enclave, if they are whitelisted by the key manager. In contrast to the existing client node though, the observer node will also need to generate its own entity ID similar to the validator nodes (#5357, #5378).
- The preparation for the cross-ParaTime communication is being made by adding a new MaxPastRootsStored roothash consensus parameter. This enables storing runtime state and I/O roots for the past rounds in the consensus state (#5359).
- The ability to change the voting power distribution via consensus governance was added. The two currently available options are linear (the original, where the voting power is linearly proportional to the stake) and sqrt (new, where the voting power is proportional to the square root of the stake) (#5365).
- The "debug fix-genesis" subcommand was renamed to "genesis migrate" (#5360).
- The following oasis-node deprecated subcommands were removed: consensus, control clear-deregister, control runtime-stats, debug bundle, governance, keymanager, registry, signer and stake. They are replaced by the Oasis CLI (#5376).
In total, 15 pull requests were merged in September including bug fixes and version bumps.
What’s Next?!
Those are all the updates from September! Q4 will be another busy set of months to finish 2023. The Oasis engineering team is excited to complete some remaining goals and execute more key upgrades to the network. More important updates will be shared at the end of October.
Until then, chat more with the Oasis team by joining the Oasis Discord or on the Oasis Forum!