The Wallet team merged 3 PRs this month:
CHANGELOG:
Don't throw on failed debonding transaction
Screenshots CI was still broken. https://github.com/oasisprotocol/wallet/actions/workflows/update-screenshots.yml
All causes since #2174:
CHANGELOG:
Fix screenshots CI
The Cli team merged 14 PRs this month:
This PR:
rofl upgrade, if there are any changes to the manifestrofl rm to advanced sectionrofl deploy docs and mentions ROFL marketplacerofl upgrade commandrofl secret commandrofl provider commandRequired by oasisprotocol/docs#1261
Requires at least rofl-scheduler 0.2.0 on the provider side (currently in oasisprotocol/oasis-sdk#2236) with Oasis Core master.
Waiting for client-sdk/go/v0.14.1.
Closes #415.
Use Oasis-managed Mainnet ROFL provider by default.
You typically don't encrypt test accounts when developing ROFLs, so the -y flag comes handy in this case to check the logs.
Full Changelog: v0.13.4...v0.14.0
The number of daily transactions on Sapphire Mainnet fluctuated between 10,591 and 137,055. The monthly average in June was 29,754 transactions per day and was 6% lower compared to the last month (31,588 transactions). The daily maximum was 137,055 transactions on 17 June (compared to 122,750 the last month on 16 May).
| date | all |
|---|---|
| 2025-06-01 | 10,591 |
| 2025-06-02 | 19,286 |
| 2025-06-03 | 13,963 |
| 2025-06-04 | 13,208 |
| 2025-06-05 | 12,122 |
| 2025-06-06 | 17,975 |
| 2025-06-07 | 20,638 |
| 2025-06-08 | 17,940 |
| 2025-06-09 | 15,884 |
| 2025-06-10 | 19,649 |
| 2025-06-11 | 19,698 |
| 2025-06-12 | 18,444 |
| 2025-06-13 | 12,444 |
| 2025-06-14 | 11,596 |
| 2025-06-15 | 15,862 |
| 2025-06-16 | 73,993 |
| 2025-06-17 | 137,055 |
| 2025-06-18 | 24,226 |
| 2025-06-19 | 128,473 |
| 2025-06-20 | 27,408 |
| 2025-06-21 | 18,395 |
| 2025-06-22 | 12,933 |
| 2025-06-23 | 19,379 |
| 2025-06-24 | 18,463 |
| 2025-06-25 | 16,659 |
| 2025-06-26 | 112,841 |
| 2025-06-27 | 21,620 |
| 2025-06-28 | 12,533 |
| 2025-06-29 | 12,599 |
| 2025-06-30 | 16,748 |
| 2025-07-01 | 1,028 |
The number of daily transactions on Emerald Mainnet fluctuated between 3,257 and 3,852. The monthly average in June was 3,484 transactions per day and was 7% lower compared to the last month (3,730 transactions). The daily maximum was 3,852 transactions on 23 June (compared to 4,396 the last month on 12 May).
| date | all |
|---|---|
| 2025-06-01 | 3,261 |
| 2025-06-02 | 3,625 |
| 2025-06-03 | 3,396 |
| 2025-06-04 | 3,510 |
| 2025-06-05 | 3,645 |
| 2025-06-06 | 3,393 |
| 2025-06-07 | 3,310 |
| 2025-06-08 | 3,257 |
| 2025-06-09 | 3,342 |
| 2025-06-10 | 3,696 |
| 2025-06-11 | 3,576 |
| 2025-06-12 | 3,734 |
| 2025-06-13 | 3,709 |
| 2025-06-14 | 3,336 |
| 2025-06-15 | 3,269 |
| 2025-06-16 | 3,372 |
| 2025-06-17 | 3,742 |
| 2025-06-18 | 3,450 |
| 2025-06-19 | 3,311 |
| 2025-06-20 | 3,452 |
| 2025-06-21 | 3,396 |
| 2025-06-22 | 3,663 |
| 2025-06-23 | 3,852 |
| 2025-06-24 | 3,617 |
| 2025-06-25 | 3,427 |
| 2025-06-26 | 3,442 |
| 2025-06-27 | 3,262 |
| 2025-06-28 | 3,372 |
| 2025-06-29 | 3,296 |
| 2025-06-30 | 3,815 |
| 2025-07-01 | 267 |
{{NODE_STATS mainnet}}
No major outages were reported for Oasis foundation-provided services in June. A few-minutes downtimes were encountered by the ... You can check out the details on the Mainnet status page.
We have released Oasis Core 25.4 for TESTNET.
Key highlights include: ➡️ Add support for components like the ROFL scheduler to access logs of other components. ➡️ Add support for component label attestation. ➡️ Various minor bug fixes.
Visit the changelog (https://github.com/oasisprotocol/oasis-core/blob/v25.4/CHANGELOG.md) to view all changes. The upgrade is non-breaking and can be performed at any time by replacing the oasis-node binary and restarting your node. All node operators on TESTNET are encouraged to upgrade. For more information and links to releases, see the updated TESTNET network parameters (https://docs.oasis.io/node/testnet/). Thanks!
The number of daily transactions on Sapphire Testnet fluctuated between 8,579 and 24,696. The monthly average in June was 16,352 transactions per day and was 13% lower compared to the last month (18,773 transactions). The daily maximum was 24,696 transactions on 22 June (compared to 46,427 the last month on 11 May).
| date | all |
|---|---|
| 2025-06-01 | 15,599 |
| 2025-06-02 | 16,867 |
| 2025-06-03 | 17,019 |
| 2025-06-04 | 18,085 |
| 2025-06-05 | 17,437 |
| 2025-06-06 | 17,518 |
| 2025-06-07 | 9,772 |
| 2025-06-08 | 8,584 |
| 2025-06-09 | 8,659 |
| 2025-06-10 | 8,579 |
| 2025-06-11 | 8,747 |
| 2025-06-12 | 8,910 |
| 2025-06-13 | 9,123 |
| 2025-06-14 | 17,207 |
| 2025-06-15 | 17,192 |
| 2025-06-16 | 17,508 |
| 2025-06-17 | 17,547 |
| 2025-06-18 | 17,844 |
| 2025-06-19 | 24,513 |
| 2025-06-20 | 18,197 |
| 2025-06-21 | 17,861 |
| 2025-06-22 | 24,696 |
| 2025-06-23 | 16,880 |
| 2025-06-24 | 17,255 |
| 2025-06-25 | 17,326 |
| 2025-06-26 | 17,192 |
| 2025-06-27 | 18,776 |
| 2025-06-28 | 21,170 |
| 2025-06-29 | 21,521 |
| 2025-06-30 | 22,982 |
| 2025-07-01 | 777 |
The number of daily transactions on Emerald Testnet fluctuated between 3,017 and 3,287. The monthly average in June was 3,259 transactions per day and was 4% lower compared to the last month (3,390 transactions). The daily maximum was 3,287 transactions on 30 June (compared to 5,619 the last month on 25 May).
| date | all |
|---|---|
| 2025-06-01 | 3,017 |
| 2025-06-02 | 3,264 |
| 2025-06-03 | 3,266 |
| 2025-06-04 | 3,280 |
| 2025-06-05 | 3,266 |
| 2025-06-06 | 3,268 |
| 2025-06-07 | 3,262 |
| 2025-06-08 | 3,263 |
| 2025-06-09 | 3,267 |
| 2025-06-10 | 3,265 |
| 2025-06-11 | 3,267 |
| 2025-06-12 | 3,265 |
| 2025-06-13 | 3,261 |
| 2025-06-14 | 3,268 |
| 2025-06-15 | 3,263 |
| 2025-06-16 | 3,269 |
| 2025-06-17 | 3,263 |
| 2025-06-18 | 3,268 |
| 2025-06-19 | 3,263 |
| 2025-06-20 | 3,265 |
| 2025-06-21 | 3,265 |
| 2025-06-22 | 3,263 |
| 2025-06-23 | 3,266 |
| 2025-06-24 | 3,265 |
| 2025-06-25 | 3,266 |
| 2025-06-26 | 3,260 |
| 2025-06-27 | 3,262 |
| 2025-06-28 | 3,281 |
| 2025-06-29 | 3,283 |
| 2025-06-30 | 3,287 |
| 2025-07-01 | 271 |
{{NODE_STATS testnet}}
No major outages were reported for Oasis foundation-provided services in June. A few-minutes downtimes were encountered by the ... You can check out the details on the Testnet status page.
The Nexus team merged 34 PRs this month:
In the old code, when the block analyzer was near the head of the chain, the backoff was almost always at 6 seconds.
See retry interval quickly increasing to 6 seconds on a recently started node that is at the head of the chain:
{"analyzer":"sapphire","caller":"block.go:420","height":12287791,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":100,"ts":"2025-06-25T08:36:03.901279912Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287791,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":200,"ts":"2025-06-25T08:36:04.13376454Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287791,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":400,"ts":"2025-06-25T08:36:04.570368877Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287791,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":800,"ts":"2025-06-25T08:36:05.403994745Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287792,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":1440,"ts":"2025-06-25T08:36:07.952763714Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287792,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":2880,"ts":"2025-06-25T08:36:10.862558227Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287794,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":4665,"ts":"2025-06-25T08:36:21.879480568Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287798,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":6000,"ts":"2025-06-25T08:36:46.568709867Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287803,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":6000,"ts":"2025-06-25T08:37:21.578675488Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287810,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":5739,"ts":"2025-06-25T08:38:03.155313823Z"}
{"analyzer":"sapphire","caller":"block.go:420","height":12287817,"level":"info","mode":"slow-sync","module":"analysis_service","msg":"no data available; will retry","retry_interval_ms":5490,"ts":"2025-06-25T08:38:43.316051961Z"}This often caused the analyzers to lag behind the head by 1–2 blocks. There were a couple of reasons for this, so we’ve restructured the code, simplified the logic, and adjusted the backoff behavior for block analyzers.
Summary of changes:
isRecentOutOfRangeError). In such cases, we now poll every 1 second.In practice, a failing analyzer should now send queries less frequently (previously every 6 seconds, now up to a 30-second maximum timeout). However, after recovering, or when at the head of the chain, it should resume polling more quickly (every 1 second).
CHANGELOG:
analyer/block: Simplify and improve batch processing
Fixes #910
abi_parsed_at field in runtime_transactions and events non-nill, to simplify queries and improve index usageTODO:
RuntimeEvmVerifiedContractTxs
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=698040.63..698043.13 rows=1000 width=880) (actual time=134.601..134.607 rows=7 loops=1)
-> Sort (cost=698040.63..698465.63 rows=170000 width=880) (actual time=134.600..134.604 rows=7 loops=1)
Sort Key: tx.round DESC
Sort Method: quicksort Memory: 73kB
-> Nested Loop (cost=0.69..688719.71 rows=170000 width=880) (actual time=95.900..134.496 rows=7 loops=1)
-> Seq Scan on evm_contracts (cost=0.00..854.34 rows=170 width=765) (actual time=0.119..2.820 rows=373 loops=1)
Filter: ((abi IS NOT NULL) AND (runtime = 'sapphire'::runtime))
Rows Removed by Filter: 10437
-> Limit (cost=0.69..4021.27 rows=1000 width=724) (actual time=0.271..0.352 rows=0 loops=373)
-> Index Scan using ix_runtime_transactions_to_round_abi_parsed_at on runtime_transactions tx (cost=0.69..85976.66 rows=21384 width=724) (actual time=0.271..0.352 rows=0 loops=373)
Index Cond: ((runtime = evm_contracts.runtime) AND (("to")::text = (evm_contracts.contract_address)::text) AND (abi_parsed_at < evm_contracts.verification_info_downloaded_at))
Planning Time: 0.424 ms
Execution Time: 134.690 ms
(13 rows)
RuntimeEvmVerifiedContractEvents
QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=361266.87..361269.37 rows=1000 width=982) (actual time=96.899..97.013 rows=1000 loops=1)
-> Sort (cost=361266.87..361691.87 rows=170000 width=982) (actual time=96.897..96.946 rows=1000 loops=1)
Sort Key: e.round DESC
Sort Method: top-N heapsort Memory: 2049kB
-> Nested Loop (cost=1.25..351945.95 rows=170000 width=982) (actual time=29.907..78.912 rows=27234 loops=1)
-> Nested Loop (cost=0.56..2311.66 rows=170 width=786) (actual time=0.105..8.796 rows=360 loops=1)
-> Seq Scan on evm_contracts (cost=0.00..854.34 rows=170 width=765) (actual time=0.074..2.877 rows=373 loops=1)
Filter: ((abi IS NOT NULL) AND (runtime = 'sapphire'::runtime))
Rows Removed by Filter: 10437
-> Index Scan using address_preimages_pkey on address_preimages p (cost=0.56..8.57 rows=1 width=68) (actual time=0.015..0.015 rows=1 loops=373)
Index Cond: ((address)::text = (evm_contracts.contract_address)::text)
-> Limit (cost=0.70..2046.67 rows=1000 width=229) (actual time=0.108..0.187 rows=76 loops=360)
-> Index Scan using ix_runtime_events_abi_parsed_at on runtime_events e (cost=0.70..250573.28 rows=122471 width=229) (actual time=0.107..0.182 rows=76 loops=360)
Index Cond: ((runtime = evm_contracts.runtime) AND ((body ->> 'address'::text) = encode(p.address_data, 'base64'::text)) AND (abi_parsed_at < evm_contracts.verification_info_downloaded_at))
Planning Time: 1.598 ms
Execution Time: 97.192 ms
(16 rows)
CHANGELOG:
evmabi-backfill: Optimize db queries
CHANGELOG:
api/roflmarket: Add endpoints to fetch specific instance/offer
Added `/{runtime}/roflmarket_providers/{address}/instances/{id}` and `/{runtime}/roflmarket_providers/{address}/offers/{id}` api endpoints.
CHANGELOG:
api/rofl_apps: Add support for sorting by creation time
Supports the `sort_by` query parameter:
- `sort_by=created_at`
- `sort_by=created_at_desc`
Example: `GET v1/{runtime}/rofl_apps?sort_by=created_at`
Fixes: #1051
CHANGELOG:
analyzer/runtime: Use events to detect rofl related txs
CHANGELOG:
api/roflmarket_instances: Support filtering by admin address
- The old endpoint `/{runtime}/roflmarket_providers/{address}/instances` has been removed.
- Clients should now use: `/{runtime}/roflmarket_instances?provider={address}` to filter instances by provider address.
Fixes #1062 (likely)
Not sure how I missed this in the initial impl.
CHANGELOG:
storage/roflmarket: Fix roflmarket tables constrains
CHANGELOG:
roflmarket: Properly mark removed instances/offers
Fixes #1039
CHANGELOG:
storage/roflmarket: Fix double hex-encoded fields
CHANGELOG:
api/roflmarket_instances: Support filtering by deployed app id
Initially, rofl apps did not have metadata. Update rofl instances to support metadata and queue refresh of all active rofl apps, so that the instance metadata is fetched.
CHANGELOG:
rofl_instances: Support rofl instance metadata
CHANGELOG:
Add ROFL pools to named accounts
This makes the query ValidatorStakingHistoryUnprocessedEpochs used by validator_history analyzer efficient.
The table and the index are small compared to other tables, so overhead by adding this index is small.
CHANGELOG:
Add epoch index for history.validators
This makes it consistent with other (runtime) block analyzers.
CHANGELOG:
analyzer/consensus: Record timing only for successful requests
Fixes: #1041
CHANGELOG:
api/roflmarket_instances: Node id is optional
CHANGELOG:
api/rofl_apps: Prioritize non-removed apps in ordering
"Active instances" are computed by just looking at the expiration epoch. However removed apps don't have any active instances (even if the expiration has not yet expired). So just don't compute active instances for that case. That will also fix the sorting, since currently it can happen that a removed app will show up before non-removed one, due to the misleading "active instances".
CHANGELOG:
api/rofl_apps: No active instances for removed apps
Includes: oasisprotocol/oasis-sdk#2230
After the fix is confirmed, tag a new oasis-sdk version and update to that.
CHANGELOG:
openapi: Add roflmarket.ProviderUpdate method
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
For a list of changes in this release, see the Change Log.
NOTE: If you are upgrading from an earlier release, please carefully review
the Change Log for Removals and Breaking changes.
The Explorer team merged 33 PRs this month:
Before this change, we executed all text searches looking for an exact match. So if we searched for "apple pie", it matched "apple pie", but not "apple-pie", and definitely not "pie with apple".
However, Nexus has now (oasisprotocol/nexus#1026) enhanced the search feature for rofl apps and evm tokens to cover these cases, too.
So this PR introduces flexible multi-word searching for all text searches. The search query is tokenized, and we are searching for all of them independently. We have a match if all of them are found, in whatever order.
Here are a few test searched with work with this PR, but didn't work earlier:
For reviewers: I suggest going commit by commit.
CHANGELOG:
Enable flexible multi-word searching in names
This is a follow-up to #2002, where @lukaw3d commented:
I somewhat prefer string literals 🤷
So, this PR increases the usage of string literals, instead of Layer and Network constants.
So,
Network.mainnet => 'mainnet'Layer.sapphire => 'sapphire'etc.
CHANGELOG:
Prefer string literals instead of constants
Fixes #2036
https://explorer.oasis.io/testnet/sapphire/address/oasis1qp2ens0hsp7gh23wajxa4hpetkdek3swyyulyrmz
CHANGELOG:
Fix exhausted type error in production (should be a console warning)
CHANGELOG:
Layer handling cleanup
import.meta warning, but it works. not sure how to make it happyCHANGELOG:
Migrate build and tests from parcel/jest to vite/vitest
This PR is an updated version of #1987, rebased on top of #2012, so that it has the latest multi-word flex search.
See demo of flex search in the Rofl app list here: https://pr-2013.oasis-explorer.pages.dev/testnet/sapphire/rofl/app?name=tg+cha
Original description follows.
===========
The Nexus API has already added support for filtering the Rofl app list by name in oasisprotocol/nexus#997.
In Explorer, currently this is only unitized in the global search since #1973/. (So that we can find Rofl apps from the global search field.)
This PR adds name/based filtering to the Rofl app list page itself.
I suggest reviewing commit by commit, because the different commits add different (small) features, and also there were some preparatory code refactorings, which would otherwise obscure the actual changes.
Filtering the list on the desktop
When no match:
On mobile:
On mobile, vertical mode:
No match on mobile:
CHANGELOG:
Add support for filtering Rofl app list by name
Improves #1999
Now a failing query won't collapse the whole consensus dashboard, only the relevant card.
Every card has been split to two component, and the internal parts are now wrapped in the appropriate error boundaries.
The same could be done to the paratime dashboard, too.
Plus, the design could obviously improved, but this already avoids the collapsing of the whole board, so definitely improves the UX.
Instead of this, now we get: