TOC

Oasis June 2025 Engineering update

Wallet and CLI Updates

Wallet

The Wallet team merged 3 PRs this month:

Don't throw on failed debonding transaction (#2187) ±5 by lukaw3d @ 2025-06-03.

e.g. https://wallet.oasis.io/account/oasis1qqazrhk6l3v23nzk098p0dq9xlv5rfkpn50mjxdd
image

CHANGELOG:

Don't throw on failed debonding transaction

Fix screenshots CI (#2186) ±3 by lukaw3d @ 2025-06-03.

Screenshots CI was still broken. https://github.com/oasisprotocol/wallet/actions/workflows/update-screenshots.yml

All causes since #2174:

CHANGELOG:

Fix screenshots CI

In total, 3 pull requests were merged in June.


Cli

The Cli team merged 14 PRs this month:

docs: Document `rofl secret`, `upgrade`, `deploy`, `provider` and minor polishes (#495) ±470 by matevz @ 2025-06-16.

Fixes #479, #480

This PR:

Required by oasisprotocol/docs#1261

feat(cmd/rofl): Add support for machine logs (#492) ±389 by kostko @ 2025-06-23.

Requires at least rofl-scheduler 0.2.0 on the provider side (currently in oasisprotocol/oasis-sdk#2236) with Oasis Core master.

cmd/rofl/build: Validate service volume source (#494) ±304 by abukosek @ 2025-06-20.

Closes #462.

cmd/rofl/deploy: Add --replace-machine flag and show native pricing (#506) ±135 by abukosek @ 2025-06-30.

Closes #487 and #508.

cmd/rofl: Add 'rofl push' command (#502) ±103 by ptrus @ 2025-06-20.

Fixes #498

cmd/rofl/build: Validate image platform and size (#488) ±88 by abukosek @ 2025-06-06.

Closes #416.

cmd: Upgrade oasis-core to 25.3 (#481) ±87 by peternose @ 2025-06-04.

Waiting for client-sdk/go/v0.14.1.

docs: Add --term and --term-count to rofl deploy example (#505) ±52 by matevz @ 2025-06-20.
cmd/rofl/build: Check if service images contain FQDNs (#482) ±35 by abukosek @ 2025-06-02.

Closes #415.

Add Mainnet provider address (#507) ±9 by matevz @ 2025-06-23.

Use Oasis-managed Mainnet ROFL provider by default.

feat(cmd/rofl): Show per-replica metadata (#485) ±8 by kostko @ 2025-06-04.
feat(build/rofl): Bump latest rofl-containers to v0.5.2 (#504) ±2 by kostko @ 2025-06-20.
cmd/rofl/upgrade: Print warning to build, not update (#511) ±2 by matevz @ 2025-06-27.

Fixes #503

cmd/rofl/logs: Add -y for non-interactive mode (#512) ±1 by matevz @ 2025-06-28.

You typically don't encrypt test accounts when developing ROFLs, so the -y flag comes handy in this case to check the logs.

1 new releases of cli were made this month: In total, 14 pull requests were merged in June.


Network Updates

Mainnet highlights

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).

dateall
2025-06-0110,591
2025-06-0219,286
2025-06-0313,963
2025-06-0413,208
2025-06-0512,122
2025-06-0617,975
2025-06-0720,638
2025-06-0817,940
2025-06-0915,884
2025-06-1019,649
2025-06-1119,698
2025-06-1218,444
2025-06-1312,444
2025-06-1411,596
2025-06-1515,862
2025-06-1673,993
2025-06-17137,055
2025-06-1824,226
2025-06-19128,473
2025-06-2027,408
2025-06-2118,395
2025-06-2212,933
2025-06-2319,379
2025-06-2418,463
2025-06-2516,659
2025-06-26112,841
2025-06-2721,620
2025-06-2812,533
2025-06-2912,599
2025-06-3016,748
2025-07-011,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).

dateall
2025-06-013,261
2025-06-023,625
2025-06-033,396
2025-06-043,510
2025-06-053,645
2025-06-063,393
2025-06-073,310
2025-06-083,257
2025-06-093,342
2025-06-103,696
2025-06-113,576
2025-06-123,734
2025-06-133,709
2025-06-143,336
2025-06-153,269
2025-06-163,372
2025-06-173,742
2025-06-183,450
2025-06-193,311
2025-06-203,452
2025-06-213,396
2025-06-223,663
2025-06-233,852
2025-06-243,617
2025-06-253,427
2025-06-263,442
2025-06-273,262
2025-06-283,372
2025-06-293,296
2025-06-303,815
2025-07-01267

{{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.

Testnet highlights

[2025-06-20] am3lody:

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).

dateall
2025-06-0115,599
2025-06-0216,867
2025-06-0317,019
2025-06-0418,085
2025-06-0517,437
2025-06-0617,518
2025-06-079,772
2025-06-088,584
2025-06-098,659
2025-06-108,579
2025-06-118,747
2025-06-128,910
2025-06-139,123
2025-06-1417,207
2025-06-1517,192
2025-06-1617,508
2025-06-1717,547
2025-06-1817,844
2025-06-1924,513
2025-06-2018,197
2025-06-2117,861
2025-06-2224,696
2025-06-2316,880
2025-06-2417,255
2025-06-2517,326
2025-06-2617,192
2025-06-2718,776
2025-06-2821,170
2025-06-2921,521
2025-06-3022,982
2025-07-01777

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).

dateall
2025-06-013,017
2025-06-023,264
2025-06-033,266
2025-06-043,280
2025-06-053,266
2025-06-063,268
2025-06-073,262
2025-06-083,263
2025-06-093,267
2025-06-103,265
2025-06-113,267
2025-06-123,265
2025-06-133,261
2025-06-143,268
2025-06-153,263
2025-06-163,269
2025-06-173,263
2025-06-183,268
2025-06-193,263
2025-06-203,265
2025-06-213,265
2025-06-223,263
2025-06-233,266
2025-06-243,265
2025-06-253,266
2025-06-263,260
2025-06-273,262
2025-06-283,281
2025-06-293,283
2025-06-303,287
2025-07-01271

{{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.

Oasis Nexus and Explorer

Nexus

The Nexus team merged 34 PRs this month:

analyer/block: Simplify and improve batch processing (#1068) ±332 by ptrus @ 2025-06-26.

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:

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

evmabi-backfill: Optimize db queries (#935) ±129 by ptrus @ 2025-06-03.

Fixes #910

TODO:

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

api/roflmarket: Add api endpoints to fetch specific instance/offer (#1056) ±121 by ptrus @ 2025-06-20.

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.

api/rofl_apps: Support ordering by created at (#1077) ±120 by ptrus @ 2025-06-30.

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`

analyzer/runtime: Use events to detect rofl related txs (#1053) ±60 by ptrus @ 2025-06-18.

Fixes: #1051

CHANGELOG:

analyzer/runtime: Use events to detect rofl related txs

api/roflmarket_instances: Support filtering by admin (#1054) ±60 by ptrus @ 2025-06-19.

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.

storage/roflmarket: Fix roflmarket tables constrains (#1063) ±60 by ptrus @ 2025-06-24.

Fixes #1062 (likely)

Not sure how I missed this in the initial impl.

CHANGELOG:

storage/roflmarket: Fix roflmarket tables constrains

roflmarket: Properly mark removed instances/offers (#1067) ±46 by ptrus @ 2025-06-25.

CHANGELOG:

roflmarket: Properly mark removed instances/offers

storage/roflmarket: Fix double hex-encoded fields (#1040) ±36 by ptrus @ 2025-06-05.

Fixes #1039

CHANGELOG:

storage/roflmarket: Fix double hex-encoded fields

api/roflmarket_instances: Support filtering by deployed app id (#1060) ±33 by ptrus @ 2025-06-23.

CHANGELOG:

api/roflmarket_instances: Support filtering by deployed app id

Changelog 0.7.2 (#1055) ±32 by ptrus @ 2025-06-20.
Changelog 0.6.16 (#1031) ±30 by ptrus @ 2025-06-02.
Changelog 0.7.0 (#1037) ±24 by ptrus @ 2025-06-04.
rofl_instances: Support rofl instance metadata (#1071) ±24 by ptrus @ 2025-06-27.

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

Add ROFL pools to named accounts (#1049) ±21 by lukaw3d @ 2025-06-17.

CHANGELOG:

Add ROFL pools to named accounts

api/rofl_apps: Support filtering by admin (#1052) ±20 by ptrus @ 2025-06-18.

Fixes #1048

Changelog 0.7.7 (#1075) ±20 by ptrus @ 2025-06-27.
Changelog 0.7.3 (#1058) ±16 by ptrus @ 2025-06-20.
Changelog 0.7.6 (#1069) ±16 by ptrus @ 2025-06-26.
Changelog 0.7.1 (#1045) ±14 by ptrus @ 2025-06-11.
Changelog 0.7.4 (#1061) ±10 by ptrus @ 2025-06-23.
storage/roflmarket_instances: Remove invalid FK (#1064) ±10 by ptrus @ 2025-06-25.
Changelog 0.7.5 (#1066) ±10 by ptrus @ 2025-06-25.
Add epoch index for history.validators (#1032) ±8 by ptrus @ 2025-06-03.

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

analyzer/consensus: Record timing only for successful requests (#1073) ±8 by ptrus @ 2025-06-27.

This makes it consistent with other (runtime) block analyzers.

CHANGELOG:

analyzer/consensus: Record timing only for successful requests

api/roflmarket_instances: Node id is optional (#1043) ±5 by ptrus @ 2025-06-11.

Fixes: #1041

CHANGELOG:

api/roflmarket_instances: Node id is optional

analyzer/roflmarket: Periodically refresh providers until missing events are added (#1065) ±4 by ptrus @ 2025-06-25.
api/rofl_apps: A bit improved ordering (#1070) ±3 by ptrus @ 2025-06-26.

CHANGELOG:

api/rofl_apps: Prioritize non-removed apps in ordering

rofl_instances: Include instance metadata in rofl app (#1072) ±3 by ptrus @ 2025-06-27.
api/rofl_apps: No active instances for removed apps (#1076) ±3 by ptrus @ 2025-06-30.

"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

Update oasis-sdk to v0.15 (#1033) ±2 by ptrus @ 2025-06-03.
Update oasis-sdk to include rofl tx fix (#1035) ±2 by ptrus @ 2025-06-04.

Includes: oasisprotocol/oasis-sdk#2230

After the fix is confirmed, tag a new oasis-sdk version and update to that.

Update oasis-sdk to v0.15.2 (#1036) ±2 by ptrus @ 2025-06-04.
openapi: Add roflmarket.ProviderUpdate method (#1047) ±2 by lukaw3d @ 2025-06-14.

CHANGELOG:

openapi: Add roflmarket.ProviderUpdate method

9 new releases of nexus were made this month: In total, 34 pull requests were merged in June.


Explorer

The Explorer team merged 33 PRs this month:

Support flexible searching for multiple words in random order (in all free-text search) (#2012) ±1150 by csillag @ 2025-06-04.

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

Prefer string literals instead of enum constants (#2016) ±770 by csillag @ 2025-06-11.

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,

etc.

CHANGELOG:

Prefer string literals instead of constants

Fix detecting production env (fix exhausted type error in production) (#2037) ±752 by lukaw3d @ 2025-06-14.

Fixes #2036
https://explorer.oasis.io/testnet/sapphire/address/oasis1qp2ens0hsp7gh23wajxa4hpetkdek3swyyulyrmz

CHANGELOG:

Fix exhausted type error in production (should be a console warning)

Layer handling code cleanup (#2002) ±621 by csillag @ 2025-06-03.

CHANGELOG:

Layer handling cleanup

Migrate build and tests from parcel/jest to vite/vitest (#1975) ±475 by buberdds @ 2025-06-03.

CHANGELOG:

Migrate build and tests from parcel/jest to vite/vitest

Add support for filtering Rofl app list by name (flex search version) (#2013) ±391 by csillag @ 2025-06-11.

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.

Screenshots

Filtering the list on the desktop

image

When no match:

image

On mobile:

image

On mobile, vertical mode:

image

No match on mobile:

image

CHANGELOG:

Add support for filtering Rofl app list by name

Improve consensus dashboard resilience (#2004) ±278 by csillag @ 2025-06-04.

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.

Before, if any of the queries have a problem:

image

Instead of this, now we get:

Failing to load blocks:

image

Failing to load validators:

image

Failing to load paratimes:

image

Failing to load accounts:

image

Failing to load transactions:

image

Network change proposals:

image

TX Stats:

image

CHANGELOG:

Improve Consensus dashboard resilience

Improve runtime dashboard robustness (#2018) ±228 by csillag @ 2025-06-11.

This is a follow-up to #2004; delivering the second part of #1999.

This makes the paratime dashboard more robust.

With almost everything blocked:

image

CHANGELOG:

Improve runtime dashboard resilience

Assemble changes for 1.22.0 release (#2031) ±129 by buberdds @ 2025-06-11.
Don't show fake fiat zero value on Gecko failures (#2017) ±111 by csillag @ 2025-06-05.

Fixes #2006.

Test URL: https://pr-2017.oasis-explorer.pages.dev/mainnet/sapphire/address/0x8D8E302aDf83948F22c8aefb26755b059f958893

CHANGELOG:

Don't show fake fiat zero value on Gecko failures

Correctly mark validators accounts in search results (#2026) ±99 by buberdds @ 2025-06-10.

Closes #1767

CHANGELOG:

Correctly mark validators accounts in search results

Inline copy button next to more account links using AdaptiveTrimmer (#2029) ±76 by lukaw3d @ 2025-06-30.

Improves #1943

https://explorer.dev.oasis.io/mainnet/consensus/tx/ef055a0d2e3c04a8bf831a20cede78eca9fff3821acfd4b64e2c9a855c3d5b8e
https://explorer.dev.oasis.io/testnet/consensus/address/oasis1qpwaggvmhwq5uk40clase3knt655nn2tdy39nz2f
https://explorer.dev.oasis.io/mainnet/consensus/validators/oasis1qq0xmq7r0z9sdv02t5j9zs7en3n6574gtg8v9fyt

Screenshot from 2025-06-11 04-07-56

Screenshot from 2025-06-11 04-06-30

Screenshot from 2025-06-11 04-00-08

CHANGELOG:

Inline copy button next to some account links using AdaptiveTrimmer

Change explorer background, logo and card borders (#2033) ±72 by kaja-osojnik @ 2025-06-18.

Changing some basic styling in order to ease transition to the new design and implementation of shadcn components.

Before:
Screenshot 2025-06-12 at 16 57 55
Screenshot 2025-06-12 at 17 02 23

After:
Screenshot 2025-06-17 at 23 01 58
Screenshot 2025-06-12 at 16 59 37

CHANGELOG:

Change explorer background, logo and card borders

Simplify VerificationIcon internals (#2019) ±69 by lukaw3d @ 2025-06-10.

CHANGELOG:

Simplify VerificationIcon internals

Votes page: adjust filter positions on layout (#1994) ±61 by csillag @ 2025-06-04.

@donouwens has requested some adjustments on the network proposal votes page.

Changes made:

Before After
image image
image image

CHANGELOG:

Votes page: adjust filter positions

Improve tokens table on mobile (#2021) ±55 by lukaw3d @ 2025-06-10.

Closes #1978

Before | After
image

CHANGELOG:

Improve tokens table on mobile

Estimate ROFL app instance expiration time based on epoch (#2045) ±53 by lukaw3d @ 2025-06-26.

https://pr-2045.oasis-explorer.pages.dev/mainnet/sapphire/rofl/app/rofl1qpdzzm4h73gtes04xjn4whan84s3k33l5gx787l2/instances#instances

Before After
Screenshot from 2025-06-23 15-11-26 Screenshot from 2025-06-23 15-11-23

CHANGELOG:

Estimate ROFL app instance expiration time based on epoch

Add tooltip for token origins (#2009) ±40 by lukaw3d @ 2025-06-03.

Part of #1769

CHANGELOG:

Add tooltip for token origins

Change border-radius to match new design (#2011) ±40 by lukaw3d @ 2025-06-03.

image

CHANGELOG:

Change border-radius to match new design

Assemble changes for 1.23.0 release (#2047) ±34 by lukaw3d @ 2025-06-27.
Hide label of verification badge in a table for mobile screens (#2003) ±31 by kaja-osojnik @ 2025-06-05.

Implements: #1992

Before:
Screenshot 2025-05-30 at 20 26 46

After:
Screenshot 2025-05-30 at 20 26 22

CHANGELOG:

Hide label of contract verification badge in a table for mobile screens

Parse subcall precompile transactions to show method name (#2044) ±27 by lukaw3d @ 2025-06-27.

Extracted + refactored from #1516

https://pr-2044.oasis-explorer.pages.dev/testnet/sapphire/address/0x0100000000000000000000000000000000000103?page=13
image

CHANGELOG:

Show method name in subcall transactions

Display fee proxy information (#2001) ±25 by kaja-osojnik @ 2025-06-24.

Implementation of Fee proxy support #1742. Displaying fee proxy module and id.

https://pr-2001.oasis-explorer.pages.dev/mainnet/sapphire/tx/6d955495022a2a157c1a68ce1948fe9f29d3975cfb98aec59199808a28f10625

Before:
Screenshot 2025-05-30 at 15 51 55

After:
Screenshot 2025-06-19 at 02 02 44

CHANGELOG:

Display fee proxy module and id for rofl transactions

Fix warnings about tooltip child missing forwardRef (#2020) ±21 by lukaw3d @ 2025-06-10.

http://localhost:1234/mainnet/sapphire/token

Warning: Failed prop type: Invalid prop children supplied to ForwardRef(Tooltip2). Expected an element that can hold a ref. Did you accidentally use a plain function component for an element instead? For more

CHANGELOG:

Fix warnings about tooltip child missing forwardRef

Improve transaction method labels (#2042) ±19 by lukaw3d @ 2025-06-23.

https://pr-2042.oasis-explorer.pages.dev/testnet/consensus/tx/40686c28a2a116ac5d1219fc17061ca2ef208c3e5cc449384352269311be4a36

https://pr-2042.oasis-explorer.pages.dev/testnet/sapphire/address/oasis1qrwncs459lauc77zw23efdn9dmfcp23cxv095l5z

https://pr-2042.oasis-explorer.pages.dev/testnet/sapphire/address/oasis1qrtyn2q78jv6plrmexrsrv4dh89wv4n49udtg2km

https://pr-2042.oasis-explorer.pages.dev/testnet/sapphire/block/3039108/events#events

Before | After
image
image
image
image

CHANGELOG:

Improve transaction method labels

Render links instead of labels in ROFL app events (#2022) ±17 by buberdds @ 2025-06-09.

create/remove/updated:
https://pr-2022.oasis-explorer.pages.dev/mainnet/sapphire/tx/ba977253463f6d627369e9a5131df437e12185b761aaa43fc3d751c437581f46

registered
https://pr-2022.oasis-explorer.pages.dev/mainnet/sapphire/tx/1722c6009c2ad5c2c6d01dd5da0adcd9b7443238be1d14e6bdfcc389c8639a35

CHANGELOG:

Render links instead of labels in ROFL apps events

Parse ROFL machine commands in transaction body (#2043) ±17 by lukaw3d @ 2025-06-27.

https://explorer.dev.oasis.io/testnet/sapphire/tx/73ba85308ce6bebee1734d520c10e297ec3bcf868ad2093d4d5dde06105b485f

Before After
explorer dev oasis io_testnet_sapphire_tx_73ba85308ce6bebee1734d520c10e297ec3bcf868ad2093d4d5dde06105b485f localhost_1234_testnet_sapphire_tx_73ba85308ce6bebee1734d520c10e297ec3bcf868ad2093d4d5dde06105b485f (1)

CHANGELOG:

Parse ROFL machine commands in transaction body

Assume "unknown" method and status means encrypted so show a lock icon (#2032) ±10 by lukaw3d @ 2025-06-26.

Status already differentiates two-step transactions with unknown status as pending. And there are currently no other transactions that are missing these.

Screenshot from 2025-06-11 23-07-25

CHANGELOG:

Assume "unknown" method and status means encrypted so show a lock icon

Assemble changes for 1.22.1 release (#2038) ±10 by lukaw3d @ 2025-06-14.

Includes #2037

Fix TableHeaderToggle height (#2010) ±5 by lukaw3d @ 2025-06-03.

TableHeaderToggle took up more vertical space than other table headers. Shrinking it reduces table header height
image

CHANGELOG:

Fix TableHeaderToggle height

In release-tag.js, mark default cli response (#2041) ±3 by lukaw3d @ 2025-06-18.

CHANGELOG:

In release-tag.js, mark default cli response

Adjust the titleOnBackground color in the default theme (#2051) ±3 by csillag @ 2025-06-30.

Since we are now using white instead of blue bg, the "title on bg" color must be dark, not white, since it must have a contrast with the white bg.

Before After
image image
image image

Fixes #2049

CHANGELOG:

Adjust the titleOnBackground color in the default theme

Remove ui-library directory (#2027) ±2 by buberdds @ 2025-06-11.

I added this by accident in #2026

CHANGELOG:

Remove ui-library directory

3 new releases of explorer were made this month: In total, 33 pull requests were merged in June.


Developer Platform and ParaTime Updates

Oasis Sdk

The Oasis Sdk team merged 17 PRs this month:

rofl-scheduler: Add API endpoint and route to get logs (#2236) ±2761 by kostko @ 2025-06-20.

Fixes #2229

docs/rofl: Revamp for marketplace and ROFL node (#2225) ±1157 by matevz @ 2025-06-16.

This PR revamps the Build ROFL chapters:

Fixes #2197, #2162, #2164

Requires oasisprotocol/docs#1261 to work.

Preview

ts-web/rt: add rofl and roflmarket modules (#2243) ±622 by lukaw3d @ 2025-06-20.

Part of #2045

ts-web/rt: add encoding transactions to subcalls and encrypting rofl secrets (#2245) ±610 by lukaw3d @ 2025-06-25.

Prerelease yarn add https://github.com/oasisprotocol/oasis-sdk/raw/732ef972559ec246b38e1dc595cb2f11cd87b357/client-sdk/ts-web/rt/oasisprotocol-client-rt-1.2.1-0.tgz

ts-web/rt: cleanup rofl and roflmarket types (#2244) ±68 by lukaw3d @ 2025-06-22.

Fixes #2243 (comment)

docs/rofl: Mention rofl machine logs command (#2255) ±31 by matevz @ 2025-06-30.

Also, add price to offers and add --network parameter to the rofl create command so it's clear where the users can select a different chain.

rofl-scheduler: Allow any domain in SIWE, change statement (#2252) ±18 by kostko @ 2025-06-27.
rofl-scheduler: Release 0.2.1 (#2251) ±10 by kostko @ 2025-06-26.
docs: Mention http://localhost for appd communication (#2246) ±9 by matevz @ 2025-06-23.

One of our partners stumbled upon this issue.

docs/rofl: Add ROFL-compose-app image (#2242) ±8 by matevz @ 2025-06-19.

Fixes #2240

runtime-sdk/modules/rofl-market: Refund provider stake on remove (#2239) ±7 by kostko @ 2025-06-17.
ts-web/core: Add a note to reflect-go (#2238) ±5 by lukaw3d @ 2025-06-16.
docker/rofl-dev: Bump CLI to 14.0 and Core to 25.4.x (#2253) ±4 by anzoman @ 2025-06-28.

Upgrading CLI to 14.0 and Core to 25.4.x for rofl-dev Docker image.

rofl-scheduler: Configure CORS needed allowed headers (#2250) ±3 by ptrus @ 2025-06-26.
client-sdk/go/rofl: Add missing metadata for Register (#2230) ±2 by ptrus @ 2025-06-04.
client-sdk/go/rofl: Add missing metadata to Registration (#2231) ±2 by ptrus @ 2025-06-04.
docs: Fix typo in /sign-submit param name (#2247) ±2 by lukaw3d @ 2025-06-23.

pub encrypt: bool,

encrypt: body.encrypt,

6 new releases of oasis-sdk were made this month: In total, 17 pull requests were merged in June.


Sapphire Paratime

The Sapphire Paratime team merged 3 PRs this month:

docs: Fix oasisprotocol.org -> oasis.net (#592) ±43 by matevz @ 2025-06-11.

Emails such as oasis@oasisprotocol.org and team@oasisprotocol.org still remain at oasisprotocol.org.

feat: Pass arguments to http transport (#591) ±17 by BerkliumBirb @ 2025-06-04.

Passing arguments enables url overriding and transport batching control

fixes #590

integrations/viem-v2: Prepare 2.1.0 release (#593) ±9 by matevz @ 2025-06-06.
1 new releases of sapphire-paratime were made this month: In total, 3 pull requests were merged in June.


Oasis Web3 Gateway

The Oasis Web3 Gateway team merged 9 PRs this month:

other: use slices.Contains to simplify code (#742) ±22 by rustrover @ 2025-06-13.

There is a new function added in the go1.21 standard library, which can make the code more concise and easy to read.

feat: Bump oasis-sdk to v0.15.0 (#740) ±9 by ptrus @ 2025-06-04.
fix: Potential panic during shutdown (#741) ±8 by ptrus @ 2025-06-04.

Fixes: #739

other(chore): fix some typos in comment (#748) ±8 by jinjingroad @ 2025-06-21.

fix some typos in comment

other: fix comment (#746) ±2 by cuithon @ 2025-06-15.

fix comment

In total, 9 pull requests were merged in June.


Docs

The Docs team merged 10 PRs this month:

ROFL revamp for marketplace and ROFL node (#1261) ±1281 by matevz @ 2025-06-16.

This PR:

Fixes oasisprotocol/oasis-sdk#2089, oasisprotocol/oasis-sdk#2160, oasisprotocol/oasis-sdk#2171, #1193,

Preview: ROFL Build, ROFL Node

oasisprotocol.org -> oasis.net (#1272) ±92 by matevz @ 2025-06-11.

Change links from oasisprotocol.org to oasis.net.

Also replaces the "Oasis Protocol Foundation" in the Network information pages and Getting involved -> Run ParaTime simply with "Oasis".

Add analytics (#1287) ±62 by lubej @ 2025-06-20.
docs/node/testnet: Bump Core 25.4 (#1288) ±10 by amela @ 2025-06-20.
docs/node/mainnet: Bump Key Manager to 0.6.0 (#1274) ±4 by kostko @ 2025-06-04.
external/oasis-core: Pin to master (#1282) ±3 by matevz @ 2025-06-16.

When merging oasisprotocol/oasis-core#6213 I realized the docs dependabot doesn't want to update the oasis-core external module, because we have it pinned to an ancient v24.2.x.

Instead of bumping the oasis-core repo version each time a new release is made, let's simply have the master branch referenced, and let dependabot follow the latest changes. If any chapters disappear from the core repo (unlikely though), the docs linter will still catch it.

In total, 10 pull requests were merged in June.


Demo Rofl Chatbot

The Demo Rofl Chatbot team merged 1 PRs this month:

Fix typo in /sign-submit param name (#22) ±4 by lukaw3d @ 2025-06-24.

I don't know if this is actually behavior we want. But field name was wrong

In total, 1 pull requests were merged in June.


Demo Rofl

The Demo Rofl team merged 2 PRs this month:

feat: add oracle contracts (#4) ±7150 by rube-de @ 2025-06-02.

This adds the contracts from the example to the repository, to make the life of hackers on hackathons easier.

Bump rofl-containers to 0.5.2 (#8) ±8 by kostko @ 2025-06-20.
In total, 2 pull requests were merged in June.


Demo Quiz

The Demo Quiz team merged 1 PRs this month:

backend/genCoupons: Write coupons to file too (#15) ±14 by matevz @ 2025-06-24.

Currently, the task only printed those to stdout which is clumsy for storing to file because of the whitespaces etc.
Add support for writing coupons to a file.

In total, 1 pull requests were merged in June.


Dapp Blockvote

The Dapp Blockvote team merged 15 PRs this month:

Add support for whitelabeling the app (#140) ±303 by csillag @ 2025-06-27.

Make it possible to set the application title, tagline, background, etc. from the .env settings.

Add GitHub workflow for cloudflare deployment (#138) ±110 by csillag @ 2025-06-24.
Improve handling of RPC gateway communication errors (#142) ±51 by csillag @ 2025-06-27.

In case of RPC issues, show error messages
that makes it clear that we are having
RPC issues, and not issues with the data.

This is needed because we are often rate limited on our Web3 RPC gateway, and then we get random failures.

With this in place, the reason for failure can be clearly seen, and together with #141, the user can just re-try until success.

Reduce RPC traffic (#150) ±42 by csillag @ 2025-06-27.

By better optimizing frontend code, implementing caching where applicable, etc.

This is needed because we are often rate-limited on the Web3 RPC gateways. With this in place, now we need to send less messages, so there is a smaller chance of failure.

Small input form improvements (#141) ±31 by csillag @ 2025-06-27.

The overall effect is that now there is support for allowing the user for manually re-trying a failed validation.

Set up vite to also generate 404.html (#148) ±15 by csillag @ 2025-06-27.

The idea is that we want to handle all paths
(including non-existent files) with the app routing, and don't want to see 404 page from GH pages at all.

Add redirect to lido (#144) ±10 by csillag @ 2025-06-27.

Opening /lido should redirect vote-lido.oasis.io

Follow-up to #143, since the prev. version only worked locally, not after deployment.

Change how lido redirect works (#149) ±10 by csillag @ 2025-06-27.

Since we are now handing all routing via the app router,
we can now do the redirect using the originally planned method.

Skip failing test cases (#145) ±6 by csillag @ 2025-06-27.

Currently we have some failures in the hardhat test cases.
We need the tests passing, so that we can deploy the master branch.

So as a quick and dirty solution, I am skipping the failing test cases.

Skip even more failing test cases (#146) ±4 by csillag @ 2025-06-27.

Follow-up to #145.

Some of the before() hooks is also timing out, so skip that, too.

Use browser router instead of hash router (#152) ±4 by csillag @ 2025-06-30.

This changes URLs to a more natural form, like:

(This was not possible earlier because of how deployment was set up, but since #148 all URLs will reach the router, so now we can do this.)

Add redirect to LIDO branded version (#143) ±2 by csillag @ 2025-06-27.

Opening /lido should redirect vote-lido.oasis.io

This depends on:

Skip even more failing test cases (#147) ±2 by csillag @ 2025-06-27.

Follow-up to #145 and #146.

Testing seems to be somewhat unpredictable.
Skipping some more failing tests.

Add missing svgrrc config file (#136) ±0 by csillag @ 2025-06-24.

In same cases, when trying to run the app, we can get errors referring to permission problem to '/.config/svgrrc'.

This is because one of the tools is searching for it's configuration file at the wrong location.

Adding this file at the project roots takes care of this issue.

Remove superfluous bg image file (#139) ±0 by csillag @ 2025-06-24.
In total, 15 pull requests were merged in June.


Core Platform Updates

Oasis Core

The Oasis Core team merged 15 PRs this month:

go/consensus/cometbft: Add light query factories (#6215) ±3360 by peternose @ 2025-06-05.

These changes enable stateless nodes to retrieve trusted state roots from the block metadata transaction and use untrusted remote nodes to fetch state and run service clients.

go/worker/storage/committee: Fix Stuck Storage Finalization (#6239) ±295 by martintomazic @ 2025-06-27.

Closes #6238

CHANGELOG:

go/worker/storage/committee: Fix stuck storage finalization

go/consensus/cometbft: Refactor service descriptor (#6209) ±294 by peternose @ 2025-06-01.

Makes sure that service descriptor is created only once and that queries are pushed to the channel immediately.

Add support for component label attestation (#6224) ±265 by kostko @ 2025-06-14.

Fixes #6158

This allows apps to request that the node attests to labels attached to those apps have specific values which can be used to prove specific statements about individual components hosted by a specific node.

CHANGELOG:

Add support for component label attestation
This allows apps to request that the node attests to labels attached to those apps have specific values which can be used to prove specific statements about individual components hosted by a specific node.

go/common/sgx: Also cache TCB evaluation data numbers (#6233) ±208 by kostko @ 2025-06-19.

Fixes #6230

go/consensus/cometbft/light/client: Refactor light client (#6217) ±200 by peternose @ 2025-06-05.

CometBFT's light client is not safe for concurrent use by multiple goroutines, so we need to verify only one header/block at a time.

go/storagek/mkvs: Simplify Iterator's doNext function (#6176) ±152 by martintomazic @ 2025-06-30.

Whilst working on #6165 (still WIP) I found iterator code quite hard to follow/debug. I tried to simplify it a bit but am still not 100% convinced by the changes (see comment).

Change label attestation to use a map of labels (#6228) ±112 by kostko @ 2025-06-18.
changelog: Assemble changes for 25.4 release (#6234) ±40 by kostko @ 2025-06-20.
go/runtime/localstorage: Fix nil dereference after close (#6231) ±20 by kostko @ 2025-06-19.

Fixes #6232

CHANGELOG:

go/runtime/localstorage: Fix nil dereference after close

docs: Fix oasisprotocol.org -> oasis.net (#6213) ±8 by matevz @ 2025-06-04.

Emails such as oasis@oasisprotocol.org still remains at oasisprotocol.org.

runtime: Fix log manager request structure (#6214) ±8 by kostko @ 2025-06-05.
chore: fix some struct field names (#6240) ±6 by gopherorg @ 2025-06-30.

fix some struct field names

chore: fix some function names in comment (#6212) ±4 by clonemycode @ 2025-06-03.

fix some function names in comment

1 new releases of oasis-core were made this month: In total, 15 pull requests were merged in June.


Oasis Boot

The Oasis Boot team merged 2 PRs this month:

Bump Linux kernel to 6.12.31 (#18) ±13029 by kostko @ 2025-06-30.
Bump podman-compose to 1.4.1 (#17) ±6 by kostko @ 2025-06-05.
In total, 2 pull requests were merged in June.