Q3 has been another busy few months for the Oasis Engineering team.
We have made huge strides in bringing Sapphire to the ParaTime layer with its launch on Testnet at the end of July. It is now possible to build and deploy EVM confidential smart contracts to the Sapphire ParaTime on Testnet — look out for the tutorial below!
Additionally, the team has also worked to maintain Cipher and Emerald, with these ParaTimes experiencing no downtime.
The Oasis Wallet — Web, the future common codebase for all Oasis Wallets, has also had some big upgrades toward supporting browser local storage and ParaTime transactions. This is getting us closer to releasing the Oasis Wallet — Browser Extension 2.0, built from the common codebase.
Throughout the quarter, ongoing updates, improvements, and three maintenance releases to the Oasis Core, the underlying engine powering Oasis nodes, have also been made.
We look forward to building upon this busy period and moving into the fourth quarter of the year, where other big updates will be made; most notably, the launch of Sapphire onto the Mainnet.
For full details of the engineering update, please see below.
Oasis Wallet — Web has seen significant development in Q3 towards supporting browser local storage and ParaTime transactions. We plan to release support for ParaTimes later this year, followed by the next generation of the Oasis Wallet — Browser Extension, built from this common codebase. We merged 112 pull requests. Some of the most notable additions and fixes (including the work on the ParaTimes branch):
- Show list of ParaTime transactions (#849)
- Browser extension fixes (#904)
- Add lint rules to enforce our type-safe replacements (#911, #914)
- Default to null balance instead of 0 (show ‘-’ for unknown balance) (#916)
- Only show AddEscrowForm on your accounts (#918)
- Mark failed transactions (#925)
- Don’t use misleading balance fields from RPC (#927)
- Add “Reclaim All” button (#931, #932)
- Change UI to resemble Oasis Wallet — Browser extension (#933, #935, #936, #937)
- Improve numeric precision with BigNumber.js (#952)
- ParaTime deposits and withdrawals (#962, #969)
- Display estimated debonding time in debonding list (#963)
- Speedup loading network configuration by 40% (#976)
- Fix importing multiple accounts from Ledger (#980)
- Add support for deriving multiple accounts from mnemonic (#983)
- Mention the correct ticker in account summary (#1026)
- Reduce bundle size (7.2MB -> 5.4MB) with consistent grommet imports (#1038)
- Smaller UI fixes and cleanups (#868, #879, #903, #919, #921, #922, #928, #946, #947, #949, #953, #958, #999, #979, #1019, #1049)
While the Oasis Wallet — Web codebase will soon become the common code base for both wallets, we have continued to improve the Oasis Wallet — Browser Extension. In Q3, we merged 9 pull requests and released version 1.8.0. Notable changes are:
- Add Sapphire on testnet (#279)
- Improve numeric precision in reclaim escrow (#281)
- Poll for sapphire transaction status (transactions are indexed now) (#285)
- Fix “invalid nonce” bug (#282)
- Smaller UI fixes and cleanups (#280, #282, #286)
The Oasis CLI — a unified CLI for managing your account and smart contracts on Oasis — has also seen some improvements:
- Add support for dumping deployed WASM of contracts (#1007)
- Add contracts state dump support (#1034)
- Lookup address by account name, add support for test accounts (#1038)
- Support changing contract upgrades policy (#1052)
- Add support for address book (#1087)
For signing ParaTime transactions with hardware wallets such as Ledger, a new ADR 14 specification has been proposed. Implementation will start in Q4.
- The Emerald and Cipher ParaTimes were stable on Mainnet throughout Q3, experiencing no downtime or other incidents.
- The effects of the bear market on DeFi usage can be seen in transaction volumes on Emerald. The daily peak for Q3 was at the beginning of July with roughly 60k transactions per day, declining steadily and ending the quarter with 16k-18k transactions per day.
- 52 nodes are running Emerald ParaTime on Mainnet as of Sep 30.
- 29 nodes are running Cipher ParaTime on Mainnet as of Sep 30.
Q3 saw a number of major developments for Oasis ParaTimes.
For convenience, we added support for dumping deployed smart contract code on the Cipher ParaTime and dumping (optionally encrypted) smart contract state. This paves the way for verifying on-chain contracts and should help with debugging.
The summary of the Runtime SDK changes:
- Add encryption transport library to web-ts; derive_symmetric_key tests for go, rust and typescript (#962)
- ORC tool: Add support for signing SGXS binaries (#1056)
- EVM: Don’t require encryption of empty string (#1064)
- Gas computation fix: Fix subcall dispatch (#1066)
- EVM: Expose public data in signed queries (#1069)
- EVM: Add encryption precompiles (#1102)
- EVM: Don’t encode contract create output (#1138)
- Improved tests and documentation (#991, #1041, #1046, #1047, #1081, #1101)
DEVELOPER PLATFORM UPDATES
It is now possible to build and deploy EVM confidential smart contracts to the Sapphire ParaTime on Testnet. Feel free to check out a tutorial and give us feedback.
The Emerald Web3 Gateway now supports both Emerald and Sapphire ParaTimes. Other fixes mostly include dependency version bumps. In Q3, we merged 9 pull requests. A new v3.0.0 release was made with fixes to gas estimation functions, and v3.1.0-rc1 release added support for Sapphire.
Our Documentation is composed of markdown files from multiple repositories, and it saw a major overhaul in Q3 both from the backend and the frontend side. The frontend categories are now audience-oriented instead of component-oriented:
- Oasis network users (general information about the Oasis network and the foundation, wallet-related guides)
- Community-related information
- Node operators (Mainnet and Testnet network parameters, setting up various kinds of nodes and services)
- dApp developers (writing apps for emerald, sapphire, and cipher ParaTimes)
- ParaTime developers
- Core contributors
- Support for editing any Markdown file regardless of the original repository location
- Seamless linking of referenced .md files and doc cards from other repositories
- Support for importing code snippets from files
- For backward compatibility, redirects have been set up for all previous documents
The documentation has been migrated from docs.oasis.dev to docs.oasis.io domain. We hope you will enjoy the new changes. Feel free to contribute tutorials, guides and fixes by visiting https://github.com/oasisprotocol/docs and making pull requests!
ADR 17 introduces a standard format for ParaTime-specific application interoperability standards. This goes along with our first RFP requesting a confidential fungible token standard for the Sapphire ParaTime.
CORE PLATFORM UPDATES
Three maintenance releases of Oasis Core 22.1.x were published in Q3 (v22.1.9, v22.1.10, v22.1.11). In parallel, the development of Oasis Core 22.2.x started with key features such as Intel SGX2, DCAP-based attestation, improvements to on-chain governance, and TEE-based runtime security. A stable release is planned early in Q4. Overall, 64 pull requests were merged in Q3. Notable new features and breaking changes as follows (most are scheduled to land in Oasis Core 22.2.x, and some were backported to 22.1.x):
- go/staking/grpc: Rename misnamed GovernanceDeposits method (#4652)
- go/runtime: Mandate the use of runtime schedule control (#4665)
- Add support for PCS attestation (#4806, #4789, #4720, #4752)
- go/governance: Add change parameters proposal (#4938)
- Add archive mode support (#4539)
- go/control: Show the debug option statuses in the control output (#4634)
- runtime: Make persistent transaction check state configurable (#4640)
- go/runtime/txpool: Limit outstanding transactions per sender (#4665)
- go/control/status: Add fields for quick overview of node status (#4669)
- go/worker/storage: Make checkpoint sync peer selection smarter (#4671)
- runtime: verify epoch in dispatcher using consensus verifier (#4677)
- go/worker/compute: Ensure trust root is verified before registering (#4678)
- go/worker/compute: Start batch resolution early for backup worker (#4679)
- go/runtime/txpool: Add roothash incoming messages’ data as transactions (#4681)
- go/worker/registration: add node status metrics (#4686)
- runtime: Enable dispatcher to verify state integrity for queries (#4694, #4830, #4904)
- go/worker/common/p2p: Add support for persistent and blocked peers (#4713)
- go/worker/common: Properly handle dynamic key manager configuration (#4715)
- go/runtime/txpool: Add txpool metric for rejected runtime transactions (#4724)
- runtime: Verify RAK in consensus state when serving requests (#4741)
- runtime: Add support for reporting EnclaveRPC peer feedback (#4757)
- archive-mode: disable runtime P2P if archive mode is used (#4775)
- go/consensus/tendermint: Add consensus.tendermint.halt_height (#4793)
- net-runner: Add — fixture.default.runtime.version flag (#4813)
- go/oasis-node: allow km to have private peers (#4821)
- go/runtime/registry: allow client nodes to run sgx runtimes (#4832)
- go/worker/keymanager: Add key manager worker metrics (#4877)
- go/control/status: Add key manager worker status to node status (#4883)
- keymanager: Add support for ephemeral keys (#4888)
- oasis-net-runner: Set default max_allowances, increase test account balance (#4902)
- runtime/consensus/verifier: Support trust root consensus layer upgrades (#4903)
- runtime: Support consensus event queries (#4904)
- keymanager: Validate latest trust root height in key manager requests (#4910)
- registry: Add ProveFreshness consensus layer transaction (#4916)
- runtime: Add client node TEE freshness verification (#4922)
- keymanager: Verify that policy was published in the consensus layer (#4925)
- Bind TEE attestations to nodes and enforce freshness (#4926)
- go/genesis: Cache computed genesis document hash (#4919)
- go/oasis-node/cmd: unsafe-reset preserve local storage by default (#4700)
- go/oasis-node/cmd: unsafe-reset check datadir validity (#4702)
- runtime: Emit runtime logs as oasis-node logs (#4709, #4924)
The new Oasis Indexer, which supports indexing both consensus-layer and ParaTime transactions, has been open-sourced. In Q3, the focus was mostly on building out the basic features, adding caching, fixing bugs, and improving deployment tooling. 25 PRs have been merged. We plan to update the Oasis Wallets to use the Oasis Indexer in the future.
ADR 15 has been proposed to address weaknesses in the process by which ParaTime block proposers are selected. The block proposer is currently selected via a round-robin algorithm, making it trivial to determine the proposer for a given block well in advance. ADR 15 proposes a mechanism for randomizing the Paratime block proposer order.
ADR 16 proposes a more efficient process for updating consensus parameters on the Oasis Network. Currently, to change consensus parameters, one needs to update the oasis-node binaries, restart them and resync with the new consensus network version. ADR 16 adds a new ChangeParametersProposal governance proposal which can prevent downtime and improve the robustness of the network.