Oasis July 2024 Engineering Update
Read the latest report by the Oasis engineering team with updates and improvements from July 2024!
July was packed with dozens of updates and upgrades from the engineering team at the Oasis Foundation. network updates, feature enhancements, and bug fixes across the Oasis Network. Inside this update is a review of all of the performance data and network upgrades that happened in the past month. Keep reading for a full recap of all the following updates:
- 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 team continued on the unified codebase for all three Oasis wallet versions: the web wallet, the wallet extension, and the mobile wallet. Currently, only completed transactions were shown in the list of transactions. Now, the pending transactions are also shown (#1954, #2001, #1998). Having another transaction status solved a long-standing issue when the transactions weren’t immediately visible after submitting them. Also, if you open the same account on two devices the pending transactions are now visible on both.
The Delegations and Debonding tabs are now part of the Stake view (#1985, #1986, #2009). The account derivation type (a private key, derived from a mnemonic or Ledger) is now shown next to each account on the list of accounts (#1989). Also, the “keyphrase” term was now replaced with “mnemonic” for consistency with the documentation and the Oasis CLI (#1988). The “Send” heading was added to the top of the send transaction form (#2012). The active and hover button styles in the nav bars are now consistently styled (#2018). Since the transaction details are immutable, they are now cached to reduce burden on the Explorer (#1979). The “Available amount” is now shown next to delegation input (#1996).
On the mobile front, the wallet footer (e.g. version, license, link to the source code) is now moved to the settings pane to save vertical space (#1961, #2026). The unnamed accounts are titled by their address and they consume quite some space (usually 3 lines) on mobile. Now, we use ellipsis to fit the address into a single line to save vertical space (#2015). Android bundles are now part of the GitHub Action build artifacts (#1944). The font size was reduced to improve the UI on mobile (#2017). The list of transactions layout was revisited to accommodate large numbers (#2003, #2010). A bug when losing mnemonic input when changing phone orientation was fixed (#2008). In total, 41 wallet pull requests were merged in July.
The team made a new v1.12.0 release of the Web wallet on July 29 and deployed it at wallet.oasis.io.
Unfortunately, granting the Oasis Foundation access to publish apps on the Google Play Store needed some extra cycles. Hopefully, this will happen in August and then we can release the official Oasis Mobile Wallet for Android. Stay tuned!
Network Updates
On July 9, a “consensus240” proposal was made on the Mainnet. This is a similar proposal that was passed on the Testnet a month earlier and activated the novel proactive secret sharing for key managers (CHURP) and support for runtime off-chain components (ROFL) features. The proposal voting ended a week after, on July 16, with 76% of the total network stake voted YES (the required threshold was 68%). Finally, at epoch 33777 on the morning of July 24, the proposed features were successfully activated on the Mainnet. This upgrade, also known as the “Eden 24.0 upgrade”, demonstrated how smoothly the consensus network upgrade can be performed on Oasis without requiring any downtimes.
On the Testnet, Oasis Core 24.1 release was proposed on July 4. Read the Core platform updates section below to learn more. Also, the new releases of Sapphire 0.8.0-testnet and Cipher 3.1.0-testnet were made on July 8 and proposed on the network. Read the Developer platform and ParaTimes section below to learn more.
Mainnet highlights
The number of daily transactions on Sapphire Mainnet was in the 29k range at the beginning of the month and ending in the 38k range at the end. A few daily slumps occurred on July 1, July 9, and July 20. The monthly average for July was 27,959 transactions per day and was slightly lower compared to the last month (30,735 transactions). The daily maximum was 40,420 transactions on July 30, comparable with 41,289 transactions on June 4.
The number of daily transactions on Emerald Mainnet was in the 4k range with a few daily bumps ranging all the way to the 8k range, but no outstanding bursts to 20k range to what we saw in June. The monthly average in July was 4,683 transactions per day and was lower for a quarter compared to the last month (6,532 transactions). We can speculate that dApp developers are slowly phasing out their dApps on Emerald and migrating them to Sapphire. The daily maximum was 8,787 transactions on July 5, compared with the 20,039 burst the last month on June 5.
As of July 31, 2024, the number of the Mainnet nodes are comparable to the last month (figures from June in parenthesis). Some node operators didn’t upgrade their Oasis node to the latest 24.0 version by the end of July yet and they were evicted from the validator set:
- 113 (119) validator nodes
- 6 (6) key manager nodes
- 44 (44) Cipher ParaTime compute nodes
- 61 (61) Emerald ParaTime compute nodes
- 42 (42) Sapphire ParaTime compute nodes
No major outages occurred for Oasis foundation-provided services in July. A few-minutes downtimes were encountered by the Oasis Nexus indexer on July 23 and 29, and the Oasis Rosetta Gateway on July 2, 18, and 29. You can check out the details on the Mainnet status page.
Testnet highlights
The number of daily transactions on Sapphire Testnet was in the 7k-9k range, slightly increasing through the month. The average in July was 7,626 transactions per day and was similar to the last month (7,820 transactions). The daily maximum was 9,371 transactions at the end of month, July 29, compared with 8,531 the last month on June 27.
The Emerald Testnet was mostly dormant in the 3k-5k range. The monthly average in July was 3,357 similar to June’s figure (3,276 transactions). The daily maximum was 4,902 transactions on July 28, compared with 3,416 on June 11.
As of July 31, 2024, the Testnet figures were as follows (figures from June in parenthesis):
- 46 (45) validator nodes
- 7 (9) key manager nodes
- 18 (18) Cipher ParaTime compute nodes
- 32 (31) Emerald ParaTime compute nodes
- 17 (17) Sapphire ParaTime compute nodes
- 5 (6) Pontus-X ParaTime compute node
Two notable downtimes of the Oasis Foundation-provided Testnet services occurred in July. On July 10, there was a 41-minute downtime of the Oasis Sapphire Web3 and GRPC endpoints due to an unexpected error during the disk resizing operation. On July 24, a 30-minute downtime related to the snapshot-creation of Oasis Nexus occurred. You can check out the details on the Testnet status page.
Oasis Nexus and Explorer
The Oasis Nexus team continued their work mostly focusing on indexing the consensus layer this month. The timestamp of the first account activity was added (#727). Timestamps for accounts before the Cobalt upgrade (April 28, 2021) are approximate, block time-based. The information on the validators can now be accessed via a new API (#686). Similarly, the validator’s staking history was revamped (#703, #712, #719).
Consensus account balances including the delegation details are now computed in a materialized view to speed up the queries (#717). For changing the network parameters and performing upgrades, the Oasis network uses “governance proposals”. These proposals including their metadata are now indexed by Nexus (#725). Additional consensus block properties were added such as the gas_limit, epoch, state_root, size_limit and gas_limit (#721, #724, #720). On the ParaTime front, arbitrary ParaTime transfer fee denomination is now supported (#726). For example, the Pontus-X ParaTime, although running on the Oasis network, uses EUROe tokens to pay for the gas fees. The Nexus API docs also saw smaller improvements (#731, #730, #723). In total, 15 pull requests were merged in July.
In parallel, the Oasis Explorer team worked on the consensus layer frontend. A new details column was added to the consensus transactions list (#1472). Validator details such as the commission rates and bounds, rank, voting power, entity and node IDs are now added to the UI (#1481). Similarly, the transaction and block details UI was synced with the latest version of the Oasis Nexus (#1468, #1474, #1478, #1480, ). Debonding delegations are part of the staking card now (#1461). Transaction and account events are now shown in a separate tab (#1488). Also, pagination for block, account and transaction events was introduced (#1489). On the ParaTime front, a new gas price field is now computed and shown for EVM-compatible transactions (#1469).
The total received and total sent in the account view were temporarily removed, because they did not consider the evm.Call token transfers (#1475). We’ll add the fields back once we correctly catch all account balance changes. The account’s first activity field was added in the account details page (#1486, #1471). 22 pull requests were merged in July in total.
Developer Platform and ParaTime Updates
The Oasis SDK team was all about the tooling for the new Runtime OFfchain Logic (ROFL 🤣) this month. ROFL officially became part of the Oasis SDK this month (#1773). A series of improvements followed shortly. A new access control module was added to the SDK that will be used by our Pontus-X partner (#1850). A number of gas-related additions for managing ROFLs were added (#1906, #1904). The ROFLs and RONLs (such as ParaTimes) were decoupled from the bundle, so one can release and upgrade to a new version of ROFL without needing the very exact SDK version of RONL, such as the Sapphire ParaTime (#1884). For correctly and safely deploying a ROFL, a prelude containing the ROFL version, ID and environment information was added as well as required blockchain trust root (#1886, #1885). Finally, the ORC tool used to generate and sign ParaTime bundles now supports signing and showing ROFL bundle details (#1860, #1861).
As a consequence, the major releases of the Runtime SDK, Client SDK for Go and the ORC tool were made followed by a series of bugfix releases:
- The major 0.9.0 release of the Runtime SDK with added support for ROFLs released July 3 followed by maintenance fixes 0.9.1, 0.9.2, 0.9.3, and 0.9.4 from July 16 until July 24.
- The major 0.10.0 release of the Client SDK for Go was made on July 3 followed by a 0.10.1 maintenance release on July 24. This maintenance release also included a convenience fix to the WrappedBackend interface (#336).
- The major 0.3.0 release of the ORC tool on July 3, followed by 0.3.1 and 0.3.2 releases on July 4 and 5.
In addition, the confidential Cipher and Sapphire ParaTimes were bumped to use the new 0.9.x Runtime SDK codebase with enabled ROFL support. Both Cipher 3.1.0-testnet and Sapphire 0.8.0-testnet were released on July 5 and proposed on the network. Early developers can now build their favorite offchain, confidential ROFL app in Rust and deploy it on the Oasis Testnet by following this work-in-progress tutorial! You are warmly welcome to contact us on #dev-central channel on Discord and share your thoughts!
The Oasis Sapphire team prepared an exciting pack of new features this month. The TypeScript Client SDK now supports Viem v2 & Wagmi v2 packages, and is not dependent on the Ethers library anymore (#303). Since this is a breaking change, it will land in the upcoming August major release of the TypeScript Client SDK.
The Sapphire Contracts package is richer for the On-Chain EIP-4361 SIWE parser (#332). SIWE enables Web3 native users to use the crypto wallet to prove their identity. Until now, SIWE was only used in the crypto space by the Web2 apps, because you wouldn’t need on-chain verification for transparent chains. But since the smart contract state in Sapphire is confidential, you need a form of on-chain authentication for a user to access sensitive on-chain data. For transactions, this is not an issue, because those are always signed and you can rely directly on the msg.sender field. But for read-only queries, we required signed queries, otherwise the msg.sender field is set to zero.
For backend services, signed queries are viable because you typically provide the private key directly as a parameter and the query is yours anyway, so you can trust it. But, for frontend dApps, the UX is slightly annoying (a popup for signing any authenticated query each time) and may also be unsafe (the calldata parameters are not obvious and you in fact perform blind signing). On-Chain SIWE allows dApp developers to design an end user-friendly flow. First, they authenticate (login) once and then use the received bearer token for future authenticated queries in a dApp until the token is expired or they log out. You can check out the work-in-progress demo starter PR using this mechanism. And of course, don’t forget to contact us on #dev-central channel on Discord, if you have any questions or thoughts!
Apart from the work on SIWE, two important subcall-related bug fixes landed in the Sapphire Contracts package: the CBOR integer decoding fix in Subcall.sol (#325) and the undelegation done fix (#341).
The sapphire-localnet Docker image now ships the new 0.8.0-testnet version of the Sapphire ParaTime. In addition, a regression was fixed for Mac users on startup (#593).
The Oasis Playground is now rebranded to reflect the new Oasis styling guides (#67). In addition, a fix for stale screenshots after switching projects was implemented (#64). You can already see the changes on playground.oasis.io!
The Demo Starter project received an important fix for some users where the wallet did not want to show up (#17). Now, a proper eth_requestAccounts is used instead of the eth_accounts call.
A new Demo Starter for Go was launched! This is a preferred skeleton for any projects written in golang that want to integrate Sapphire. Such projects typically run as micro backend services, so there is no web or other UI available, just a CLI and/or a REST interface. The underlying smart contract is the same as in the original Demo Starter.
Core Platform Updates
The Oasis Core team contributed to the following areas:
- CHURP: Fetching key shares and recover keys is now supported (#5715, #5786). Additional effort was invested in properly serving key shares to lagging clients (#5784). For monitoring, a number of new CHURP-related Prometheus metrics were added (#5773). Finally, a fix for responding to a request only if the node is in the committee was merged (#5792)
- ROFL: Detached bundles are now supported (#5785).
- In the Oasis node configuration an entity ID can be passed directly without needing a separate entity.json file (#5764).
- Network upgrades handling: The latest consensus-breaking software version is now checked whether to run the migration of a new feature (#5760). Also, the initial handler for the upcoming 24.2 upgrade was added (#5777).
- An important key manager upgrade fix to the quote policies was submitted that occasionally stopped the key manager service after it started (#5759).
- Consensus transaction format: GasUsed was added to transaction results and the Size to the block header (#5761)
- CometBFT: Bumped to 0.37.9 codebase (#5782).
In total, 16 core platform pull requests were merged in July.
What’s Next?!
More updates are coming in August, but that concludes the Oasis engineering team’s news for July. Readers who have questions about this report or who want to discuss any of the updates with the Oasis Foundation team are invited to connect with Oasis in the official Discord server or on the Oasis Forum.