From 7276953cb01f65e91fba027e7f2a63330a8baf6a Mon Sep 17 00:00:00 2001 From: Divam Date: Fri, 15 May 2026 08:29:08 +0000 Subject: [PATCH 1/8] Totals, root hash APIs return 3 values Signed-off-by: Divam --- apps/scan/src/main/openapi/scan.yaml | 68 ++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/apps/scan/src/main/openapi/scan.yaml b/apps/scan/src/main/openapi/scan.yaml index c04846d607..6d8d4d1bb1 100644 --- a/apps/scan/src/main/openapi/scan.yaml +++ b/apps/scan/src/main/openapi/scan.yaml @@ -1901,8 +1901,6 @@ paths: application/json: schema: "$ref": "#/components/schemas/GetRewardAccountingActivityTotalsResponse" - "404": - $ref: "../../../../common/src/main/openapi/common-external.yaml#/components/responses/404" /v0/reward-accounting-process/rounds/{round_number}/root-hash: get: @@ -1926,8 +1924,6 @@ paths: application/json: schema: "$ref": "#/components/schemas/GetRewardAccountingRootHashResponse" - "404": - $ref: "../../../../common/src/main/openapi/common-external.yaml#/components/responses/404" /v0/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}: get: @@ -4700,13 +4696,29 @@ components: format: int64 GetRewardAccountingActivityTotalsResponse: + type: object + oneOf: + - "$ref": "#/components/schemas/RewardAccountingActivityTotalsOk" + - "$ref": "#/components/schemas/RewardAccountingActivityTotalsUndetermined" + - "$ref": "#/components/schemas/RewardAccountingActivityTotalsCannotProvide" + discriminator: + propertyName: status + mapping: + Ok: "#/components/schemas/RewardAccountingActivityTotalsOk" + Undetermined: "#/components/schemas/RewardAccountingActivityTotalsUndetermined" + CannotProvide: "#/components/schemas/RewardAccountingActivityTotalsCannotProvide" + + RewardAccountingActivityTotalsOk: type: object required: + - status - round_number - total_app_activity_weight - active_parties_count - activity_records_count properties: + status: + type: string round_number: type: integer format: int64 @@ -4720,12 +4732,44 @@ components: type: integer format: int64 + RewardAccountingActivityTotalsUndetermined: + type: object + required: + - status + properties: + status: + type: string + + RewardAccountingActivityTotalsCannotProvide: + type: object + required: + - status + properties: + status: + type: string + GetRewardAccountingRootHashResponse: + type: object + oneOf: + - "$ref": "#/components/schemas/RewardAccountingRootHashOk" + - "$ref": "#/components/schemas/RewardAccountingRootHashUndetermined" + - "$ref": "#/components/schemas/RewardAccountingRootHashCannotProvide" + discriminator: + propertyName: status + mapping: + Ok: "#/components/schemas/RewardAccountingRootHashOk" + Undetermined: "#/components/schemas/RewardAccountingRootHashUndetermined" + CannotProvide: "#/components/schemas/RewardAccountingRootHashCannotProvide" + + RewardAccountingRootHashOk: type: object required: + - status - round_number - root_hash properties: + status: + type: string round_number: type: integer format: int64 @@ -4733,6 +4777,22 @@ components: type: string description: Hex-encoded root hash + RewardAccountingRootHashUndetermined: + type: object + required: + - status + properties: + status: + type: string + + RewardAccountingRootHashCannotProvide: + type: object + required: + - status + properties: + status: + type: string + GetRewardAccountingBatchResponse: type: object oneOf: From f50af899675ac47b01b2037374c2a18ab20b1b10 Mon Sep 17 00:00:00 2001 From: Divam Date: Fri, 15 May 2026 08:29:31 +0000 Subject: [PATCH 2/8] HttpScanHandler fixes Signed-off-by: Divam --- .../splice/console/ScanAppReference.scala | 4 +- .../admin/api/client/BftScanConnection.scala | 14 ++ .../admin/api/client/ScanConnection.scala | 12 ++ .../api/client/SingleScanConnection.scala | 20 +++ .../client/commands/HttpScanAppClient.scala | 12 +- .../scan/admin/http/HttpScanHandler.scala | 124 ++++++++++++------ 6 files changed, 136 insertions(+), 50 deletions(-) diff --git a/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/console/ScanAppReference.scala b/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/console/ScanAppReference.scala index ea55480895..bcc5db0988 100644 --- a/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/console/ScanAppReference.scala +++ b/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/console/ScanAppReference.scala @@ -385,7 +385,7 @@ abstract class ScanAppReference( @Help.Summary("Get CIP-0104 activity totals for a specific round") def getRewardAccountingActivityTotals( roundNumber: Long - ): Option[definitions.GetRewardAccountingActivityTotalsResponse] = + ): definitions.GetRewardAccountingActivityTotalsResponse = consoleEnvironment.run { httpCommand(HttpScanAppClient.GetRewardAccountingActivityTotals(roundNumber)) } @@ -393,7 +393,7 @@ abstract class ScanAppReference( @Help.Summary("Get CIP-0104 root hash for a specific round") def getRewardAccountingRootHash( roundNumber: Long - ): Option[definitions.GetRewardAccountingRootHashResponse] = + ): definitions.GetRewardAccountingRootHashResponse = consoleEnvironment.run { httpCommand(HttpScanAppClient.GetRewardAccountingRootHash(roundNumber)) } diff --git a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/BftScanConnection.scala b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/BftScanConnection.scala index 3ca3ca927b..8c0430d3d0 100644 --- a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/BftScanConnection.scala +++ b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/BftScanConnection.scala @@ -36,6 +36,8 @@ import org.lfdecentralizedtrust.splice.http.HttpClient import org.lfdecentralizedtrust.splice.http.v0.definitions.{ AnsEntry, GetDsoInfoResponse, + GetRewardAccountingBatchResponse, + GetRewardAccountingRootHashResponse, HoldingsSummaryRequestV1, HoldingsSummaryResponse, HoldingsSummaryResponseV1, @@ -740,6 +742,18 @@ class BftScanConnection( ec: ExecutionContext, tc: TraceContext, ): Future[NonNegativeInt] = bftCall(_.getActivePhysicalSynchronizerSerial()) + + override def getRewardAccountingRootHash(roundNumber: Long)(implicit + ec: ExecutionContext, + tc: TraceContext, + ): Future[GetRewardAccountingRootHashResponse] = + bftCall(_.getRewardAccountingRootHash(roundNumber)) + + override def getRewardAccountingBatch(roundNumber: Long, batchHash: String)(implicit + ec: ExecutionContext, + tc: TraceContext, + ): Future[Option[GetRewardAccountingBatchResponse]] = + bftCall(_.getRewardAccountingBatch(roundNumber, batchHash)) } trait HasUrl { def url: Uri diff --git a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/ScanConnection.scala b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/ScanConnection.scala index 11bd2d6798..bac93443e5 100644 --- a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/ScanConnection.scala +++ b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/ScanConnection.scala @@ -25,6 +25,8 @@ import org.lfdecentralizedtrust.splice.environment.* import org.lfdecentralizedtrust.splice.http.HttpClient import org.lfdecentralizedtrust.splice.http.v0.definitions.{ GetDsoInfoResponse, + GetRewardAccountingBatchResponse, + GetRewardAccountingRootHashResponse, HoldingsSummaryResponse, HoldingsSummaryResponseV1, LookupTransferCommandStatusResponse, @@ -323,6 +325,16 @@ trait ScanConnection tc: TraceContext, ): Future[NonNegativeInt] + def getRewardAccountingRootHash(roundNumber: Long)(implicit + ec: ExecutionContext, + tc: TraceContext, + ): Future[GetRewardAccountingRootHashResponse] + + def getRewardAccountingBatch(roundNumber: Long, batchHash: String)(implicit + ec: ExecutionContext, + tc: TraceContext, + ): Future[Option[GetRewardAccountingBatchResponse]] + } object ScanConnection { diff --git a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/SingleScanConnection.scala b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/SingleScanConnection.scala index b5a38b8a42..3fa91337fa 100644 --- a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/SingleScanConnection.scala +++ b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/SingleScanConnection.scala @@ -31,6 +31,8 @@ import org.lfdecentralizedtrust.splice.environment.{ } import org.lfdecentralizedtrust.splice.http.HttpClient import org.lfdecentralizedtrust.splice.http.v0.definitions.{ + GetRewardAccountingBatchResponse, + GetRewardAccountingRootHashResponse, HoldingsSummaryRequestV1, HoldingsSummaryResponse, HoldingsSummaryResponseV1, @@ -824,6 +826,24 @@ class SingleScanConnection private[client] ( config.adminApi.url, HttpScanAppClient.GetActivePhysicalSynchronizerSerial(), ) + + override def getRewardAccountingRootHash(roundNumber: Long)(implicit + ec: ExecutionContext, + tc: TraceContext, + ): Future[GetRewardAccountingRootHashResponse] = + runHttpCmd( + config.adminApi.url, + HttpScanAppClient.GetRewardAccountingRootHash(roundNumber), + ) + + override def getRewardAccountingBatch(roundNumber: Long, batchHash: String)(implicit + ec: ExecutionContext, + tc: TraceContext, + ): Future[Option[GetRewardAccountingBatchResponse]] = + runHttpCmd( + config.adminApi.url, + HttpScanAppClient.GetRewardAccountingBatch(roundNumber, batchHash), + ) } object SingleScanConnection { diff --git a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/commands/HttpScanAppClient.scala b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/commands/HttpScanAppClient.scala index f21795af43..96b6e36ea1 100644 --- a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/commands/HttpScanAppClient.scala +++ b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/api/client/commands/HttpScanAppClient.scala @@ -2900,7 +2900,7 @@ object HttpScanAppClient { case class GetRewardAccountingActivityTotals(roundNumber: Long) extends InternalBaseCommand[ http.GetRewardAccountingActivityTotalsResponse, - Option[definitions.GetRewardAccountingActivityTotalsResponse], + definitions.GetRewardAccountingActivityTotalsResponse, ] { override def submitRequest( client: ScanClient, @@ -2913,16 +2913,14 @@ object HttpScanAppClient { override def handleOk()(implicit decoder: TemplateJsonDecoder) = { case http.GetRewardAccountingActivityTotalsResponse.OK(response) => - Right(Some(response)) - case http.GetRewardAccountingActivityTotalsResponse.NotFound(_) => - Right(None) + Right(response) } } case class GetRewardAccountingRootHash(roundNumber: Long) extends InternalBaseCommand[ http.GetRewardAccountingRootHashResponse, - Option[definitions.GetRewardAccountingRootHashResponse], + definitions.GetRewardAccountingRootHashResponse, ] { override def submitRequest( client: ScanClient, @@ -2935,9 +2933,7 @@ object HttpScanAppClient { override def handleOk()(implicit decoder: TemplateJsonDecoder) = { case http.GetRewardAccountingRootHashResponse.OK(response) => - Right(Some(response)) - case http.GetRewardAccountingRootHashResponse.NotFound(_) => - Right(None) + Right(response) } } diff --git a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/http/HttpScanHandler.scala b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/http/HttpScanHandler.scala index c44ec2c275..a7a672672e 100644 --- a/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/http/HttpScanHandler.scala +++ b/apps/scan/src/main/scala/org/lfdecentralizedtrust/splice/scan/admin/http/HttpScanHandler.scala @@ -2998,31 +2998,53 @@ class HttpScanHandler( ] = { implicit val tc = extracted withSpan(s"$workflowId.getRewardAccountingActivityTotals") { _ => _ => - appRewardsStoreO match { - case None => - Future.successful( - ScanResource.GetRewardAccountingActivityTotalsResponse.NotFound( - ErrorResponse("Reward accounting is not enabled on this node") - ) - ) - case Some(appRewardsStore) => - appRewardsStore.getAppActivityRoundTotalByRound(roundNumber).map { - case None => - ScanResource.GetRewardAccountingActivityTotalsResponse.NotFound( - ErrorResponse( - s"Activity totals not (yet) computed for round $roundNumber" - ) - ) + (appRewardsStoreO, appActivityStoreO) match { + case (Some(appRewardsStore), Some(appActivityStore)) => + appRewardsStore.getAppActivityRoundTotalByRound(roundNumber).flatMap { case Some(roundTotal) => - ScanResource.GetRewardAccountingActivityTotalsResponse.OK( - definitions.GetRewardAccountingActivityTotalsResponse( - roundNumber = roundTotal.roundNumber, - totalAppActivityWeight = roundTotal.totalRoundAppActivityWeight, - activePartiesCount = roundTotal.activeAppProviderPartiesCount, - activityRecordsCount = roundTotal.activityRecordsCount, + Future.successful( + ScanResource.GetRewardAccountingActivityTotalsResponse.OK( + definitions.GetRewardAccountingActivityTotalsResponse( + definitions.RewardAccountingActivityTotalsOk( + status = "Ok", + roundNumber = roundTotal.roundNumber, + totalAppActivityWeight = roundTotal.totalRoundAppActivityWeight, + activePartiesCount = roundTotal.activeAppProviderPartiesCount, + activityRecordsCount = roundTotal.activityRecordsCount, + ) + ) ) ) + case None => + appActivityStore.earliestRoundWithCompleteAppActivity().map { + case Some(earliest) if roundNumber < earliest => + ScanResource.GetRewardAccountingActivityTotalsResponse.OK( + definitions.GetRewardAccountingActivityTotalsResponse( + definitions.RewardAccountingActivityTotalsCannotProvide( + status = "CannotProvide" + ) + ) + ) + case _ => + ScanResource.GetRewardAccountingActivityTotalsResponse.OK( + definitions.GetRewardAccountingActivityTotalsResponse( + definitions.RewardAccountingActivityTotalsUndetermined( + status = "Undetermined" + ) + ) + ) + } } + case _ => + Future.successful( + ScanResource.GetRewardAccountingActivityTotalsResponse.OK( + definitions.GetRewardAccountingActivityTotalsResponse( + definitions.RewardAccountingActivityTotalsCannotProvide( + status = "CannotProvide" + ) + ) + ) + ) } } } @@ -3034,29 +3056,51 @@ class HttpScanHandler( ] = { implicit val tc = extracted withSpan(s"$workflowId.getRewardAccountingRootHash") { _ => _ => - appRewardsStoreO match { - case None => - Future.successful( - ScanResource.GetRewardAccountingRootHashResponse.NotFound( - ErrorResponse("Reward accounting is not enabled on this node") - ) - ) - case Some(appRewardsStore) => - appRewardsStore.getAppRewardRootHashByRound(roundNumber).map { - case None => - ScanResource.GetRewardAccountingRootHashResponse.NotFound( - ErrorResponse( - s"Root hash not (yet) computed for round $roundNumber" - ) - ) + (appRewardsStoreO, appActivityStoreO) match { + case (Some(appRewardsStore), Some(appActivityStore)) => + appRewardsStore.getAppRewardRootHashByRound(roundNumber).flatMap { case Some(rootHash) => - ScanResource.GetRewardAccountingRootHashResponse.OK( - definitions.GetRewardAccountingRootHashResponse( - roundNumber = rootHash.roundNumber, - rootHash = rootHash.rootHash.toHex, + Future.successful( + ScanResource.GetRewardAccountingRootHashResponse.OK( + definitions.GetRewardAccountingRootHashResponse( + definitions.RewardAccountingRootHashOk( + status = "Ok", + roundNumber = rootHash.roundNumber, + rootHash = rootHash.rootHash.toHex, + ) + ) ) ) + case None => + appActivityStore.earliestRoundWithCompleteAppActivity().map { + case Some(earliest) if roundNumber < earliest => + ScanResource.GetRewardAccountingRootHashResponse.OK( + definitions.GetRewardAccountingRootHashResponse( + definitions.RewardAccountingRootHashCannotProvide( + status = "CannotProvide" + ) + ) + ) + case _ => + ScanResource.GetRewardAccountingRootHashResponse.OK( + definitions.GetRewardAccountingRootHashResponse( + definitions.RewardAccountingRootHashUndetermined( + status = "Undetermined" + ) + ) + ) + } } + case _ => + Future.successful( + ScanResource.GetRewardAccountingRootHashResponse.OK( + definitions.GetRewardAccountingRootHashResponse( + definitions.RewardAccountingRootHashCannotProvide( + status = "CannotProvide" + ) + ) + ) + ) } } } From dd5f9e86f354e9a5eebd5bdc9c2392f2a44ebb28 Mon Sep 17 00:00:00 2001 From: Divam Date: Mon, 18 May 2026 16:12:43 +0900 Subject: [PATCH 3/8] Test fixesq Signed-off-by: Divam --- ...BasedRewardsTimeBasedIntegrationTest.scala | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TrafficBasedRewardsTimeBasedIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TrafficBasedRewardsTimeBasedIntegrationTest.scala index 17a2c738a3..75158391ae 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TrafficBasedRewardsTimeBasedIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TrafficBasedRewardsTimeBasedIntegrationTest.scala @@ -19,6 +19,8 @@ import org.lfdecentralizedtrust.splice.config.ConfigTransforms.{ } import org.lfdecentralizedtrust.splice.http.v0.definitions import definitions.DamlValueEncoding.members.CompactJson +import definitions.GetRewardAccountingActivityTotalsResponse +import definitions.GetRewardAccountingRootHashResponse import org.lfdecentralizedtrust.splice.integration.EnvironmentDefinition import org.lfdecentralizedtrust.splice.integration.tests.SpliceTests.IntegrationTestWithIsolatedEnvironment import org.lfdecentralizedtrust.splice.integration.tests.TokenStandardTest.CreateAllocationRequestResult @@ -88,9 +90,11 @@ class TrafficBasedRewardsTimeBasedIntegrationTest assertOldestOpenRound(0) - clue("Reward accounting endpoints return 404 before any data is available") { + clue("Reward accounting endpoints report 'Undetermined' before any data is available") { sv1ScanBackend.getRewardAccountingEarliestAvailableRound() shouldBe None - sv1ScanBackend.getRewardAccountingActivityTotals(0L) shouldBe None + sv1ScanBackend.getRewardAccountingActivityTotals(0L) shouldBe an[ + GetRewardAccountingActivityTotalsResponse.members.RewardAccountingActivityTotalsUndetermined + ] } // Here we perform all settlements with verdict ingestion paused just to @@ -237,26 +241,38 @@ class TrafficBasedRewardsTimeBasedIntegrationTest } clue("Verify activity totals for the computed round") { - val totals = sv1ScanBackend.getRewardAccountingActivityTotals(earliest) - totals.value.roundNumber shouldBe earliest - totals.value.activityRecordsCount should be > 0L + val totals = inside(sv1ScanBackend.getRewardAccountingActivityTotals(earliest)) { + case GetRewardAccountingActivityTotalsResponse.members + .RewardAccountingActivityTotalsOk(t) => + t + } + totals.roundNumber shouldBe earliest + totals.activityRecordsCount should be > 0L } clue("Verify root hash is available") { - val rootHash = sv1ScanBackend.getRewardAccountingRootHash(earliest) - rootHash shouldBe defined - rootHash.value.roundNumber shouldBe earliest - rootHash.value.rootHash should have length 64 // hex-encoded SHA-256 + val rootHash = inside(sv1ScanBackend.getRewardAccountingRootHash(earliest)) { + case GetRewardAccountingRootHashResponse.members.RewardAccountingRootHashOk(h) => h + } + rootHash.roundNumber shouldBe earliest + rootHash.rootHash should have length 64 // hex-encoded SHA-256 } clue("Verify batch lookup for root hash returns batch contents") { - val rootHashHex = sv1ScanBackend.getRewardAccountingRootHash(earliest).value.rootHash + val rootHashHex = inside(sv1ScanBackend.getRewardAccountingRootHash(earliest)) { + case GetRewardAccountingRootHashResponse.members.RewardAccountingRootHashOk(h) => + h.rootHash + } sv1ScanBackend.getRewardAccountingBatch(earliest, rootHashHex) shouldBe defined } - clue("Verify 404 for non-existent data") { - sv1ScanBackend.getRewardAccountingActivityTotals(earliest + 100) shouldBe None - sv1ScanBackend.getRewardAccountingRootHash(earliest + 100) shouldBe None + clue("Verify response for non-existent data") { + sv1ScanBackend.getRewardAccountingActivityTotals(earliest + 100) shouldBe an[ + GetRewardAccountingActivityTotalsResponse.members.RewardAccountingActivityTotalsUndetermined + ] + sv1ScanBackend.getRewardAccountingRootHash(earliest + 100) shouldBe an[ + GetRewardAccountingRootHashResponse.members.RewardAccountingRootHashUndetermined + ] sv1ScanBackend.getRewardAccountingBatch(earliest, "0" * 64) shouldBe None } } From 4966a0926adff000ae6df6a14163ea1d92d9b698 Mon Sep 17 00:00:00 2001 From: Divam Date: Mon, 18 May 2026 07:15:35 +0000 Subject: [PATCH 4/8] [ci] Signed-off-by: Divam From cb4048570a0d44dc5318ccf1c22dc1b4cbb692df Mon Sep 17 00:00:00 2001 From: Divam Date: Mon, 18 May 2026 08:18:22 +0000 Subject: [PATCH 5/8] prepend '/internal' to reward-accounting scan endpoints Signed-off-by: Divam --- apps/scan/src/main/openapi/scan.yaml | 8 ++++---- cluster/configs/shared/rate-limits/unlimited.yaml | 2 +- cluster/deployment/scratchneta/config.resolved.yaml | 2 +- cluster/deployment/scratchnetb/config.resolved.yaml | 2 +- cluster/deployment/scratchnetc/config.resolved.yaml | 2 +- cluster/deployment/scratchnetd/config.resolved.yaml | 2 +- cluster/deployment/scratchnete/config.resolved.yaml | 2 +- cluster/expected/canton-network/expected.json | 4 ++-- cluster/expected/sv-runbook/expected.json | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/scan/src/main/openapi/scan.yaml b/apps/scan/src/main/openapi/scan.yaml index 6d8d4d1bb1..3cb0d356b5 100644 --- a/apps/scan/src/main/openapi/scan.yaml +++ b/apps/scan/src/main/openapi/scan.yaml @@ -1859,7 +1859,7 @@ paths: "500": $ref: "../../../../common/src/main/openapi/common-external.yaml#/components/responses/500" - /v0/reward-accounting-process/rounds/earliest-available: + /v0/internal/reward-accounting-process/rounds/earliest-available: get: tags: [internal, scan] x-jvm-package: scan @@ -1878,7 +1878,7 @@ paths: "404": $ref: "../../../../common/src/main/openapi/common-external.yaml#/components/responses/404" - /v0/reward-accounting-process/rounds/{round_number}/activity-totals: + /v0/internal/reward-accounting-process/rounds/{round_number}/activity-totals: get: tags: [internal, scan] x-jvm-package: scan @@ -1902,7 +1902,7 @@ paths: schema: "$ref": "#/components/schemas/GetRewardAccountingActivityTotalsResponse" - /v0/reward-accounting-process/rounds/{round_number}/root-hash: + /v0/internal/reward-accounting-process/rounds/{round_number}/root-hash: get: tags: [internal, scan] x-jvm-package: scan @@ -1925,7 +1925,7 @@ paths: schema: "$ref": "#/components/schemas/GetRewardAccountingRootHashResponse" - /v0/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}: + /v0/internal/reward-accounting-process/rounds/{round_number}/batches/{batch_hash}: get: tags: [internal, scan] x-jvm-package: scan diff --git a/cluster/configs/shared/rate-limits/unlimited.yaml b/cluster/configs/shared/rate-limits/unlimited.yaml index 2c430c923a..09ac07ac4f 100644 --- a/cluster/configs/shared/rate-limits/unlimited.yaml +++ b/cluster/configs/shared/rate-limits/unlimited.yaml @@ -205,7 +205,7 @@ rateLimits: name: rollForwardLsu type: unlimited - /api/scan/v0/reward-accounting-process: + /api/scan/v0/internal/reward-accounting-process: name: reward-accounting-process type: unlimited diff --git a/cluster/deployment/scratchneta/config.resolved.yaml b/cluster/deployment/scratchneta/config.resolved.yaml index 1261befca6..eef82aa0de 100644 --- a/cluster/deployment/scratchneta/config.resolved.yaml +++ b/cluster/deployment/scratchneta/config.resolved.yaml @@ -266,7 +266,7 @@ sv: /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/reward-accounting-process: + /api/scan/v0/internal/reward-accounting-process: name: 'reward-accounting-process' type: 'unlimited' /api/scan/v0/rewards-collected: diff --git a/cluster/deployment/scratchnetb/config.resolved.yaml b/cluster/deployment/scratchnetb/config.resolved.yaml index 1261befca6..eef82aa0de 100644 --- a/cluster/deployment/scratchnetb/config.resolved.yaml +++ b/cluster/deployment/scratchnetb/config.resolved.yaml @@ -266,7 +266,7 @@ sv: /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/reward-accounting-process: + /api/scan/v0/internal/reward-accounting-process: name: 'reward-accounting-process' type: 'unlimited' /api/scan/v0/rewards-collected: diff --git a/cluster/deployment/scratchnetc/config.resolved.yaml b/cluster/deployment/scratchnetc/config.resolved.yaml index 1261befca6..eef82aa0de 100644 --- a/cluster/deployment/scratchnetc/config.resolved.yaml +++ b/cluster/deployment/scratchnetc/config.resolved.yaml @@ -266,7 +266,7 @@ sv: /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/reward-accounting-process: + /api/scan/v0/internal/reward-accounting-process: name: 'reward-accounting-process' type: 'unlimited' /api/scan/v0/rewards-collected: diff --git a/cluster/deployment/scratchnetd/config.resolved.yaml b/cluster/deployment/scratchnetd/config.resolved.yaml index 1261befca6..eef82aa0de 100644 --- a/cluster/deployment/scratchnetd/config.resolved.yaml +++ b/cluster/deployment/scratchnetd/config.resolved.yaml @@ -266,7 +266,7 @@ sv: /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/reward-accounting-process: + /api/scan/v0/internal/reward-accounting-process: name: 'reward-accounting-process' type: 'unlimited' /api/scan/v0/rewards-collected: diff --git a/cluster/deployment/scratchnete/config.resolved.yaml b/cluster/deployment/scratchnete/config.resolved.yaml index 1261befca6..eef82aa0de 100644 --- a/cluster/deployment/scratchnete/config.resolved.yaml +++ b/cluster/deployment/scratchnete/config.resolved.yaml @@ -266,7 +266,7 @@ sv: /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/reward-accounting-process: + /api/scan/v0/internal/reward-accounting-process: name: 'reward-accounting-process' type: 'unlimited' /api/scan/v0/rewards-collected: diff --git a/cluster/expected/canton-network/expected.json b/cluster/expected/canton-network/expected.json index 734749dfc6..18810dc9e5 100644 --- a/cluster/expected/canton-network/expected.json +++ b/cluster/expected/canton-network/expected.json @@ -1671,7 +1671,7 @@ "name": "open-and-issuing-mining-rounds", "type": "unlimited" }, - "/api/scan/v0/reward-accounting-process": { + "/api/scan/v0/internal/reward-accounting-process": { "name": "reward-accounting-process", "type": "unlimited" }, @@ -1938,7 +1938,7 @@ "name": "open-and-issuing-mining-rounds", "type": "unlimited" }, - "/api/scan/v0/reward-accounting-process": { + "/api/scan/v0/internal/reward-accounting-process": { "name": "reward-accounting-process", "type": "unlimited" }, diff --git a/cluster/expected/sv-runbook/expected.json b/cluster/expected/sv-runbook/expected.json index 213715283f..745ae6db8b 100644 --- a/cluster/expected/sv-runbook/expected.json +++ b/cluster/expected/sv-runbook/expected.json @@ -957,7 +957,7 @@ "name": "open-and-issuing-mining-rounds", "type": "unlimited" }, - "/api/scan/v0/reward-accounting-process": { + "/api/scan/v0/internal/reward-accounting-process": { "name": "reward-accounting-process", "type": "unlimited" }, From 5252d351df9dcf8375ab79fe547c91bd179a078f Mon Sep 17 00:00:00 2001 From: Divam Date: Mon, 18 May 2026 08:18:37 +0000 Subject: [PATCH 6/8] [ci] Signed-off-by: Divam From cac96c4db0cf4970049fa5f75472374cc7f6b1fc Mon Sep 17 00:00:00 2001 From: Divam Date: Mon, 18 May 2026 08:40:25 +0000 Subject: [PATCH 7/8] Update generated .yaml Signed-off-by: Divam --- .../deployment/scratchneta/config.resolved.yaml | 6 +++--- .../deployment/scratchnetb/config.resolved.yaml | 6 +++--- .../deployment/scratchnetc/config.resolved.yaml | 6 +++--- .../deployment/scratchnetd/config.resolved.yaml | 6 +++--- .../deployment/scratchnete/config.resolved.yaml | 6 +++--- cluster/expected/canton-network/expected.json | 16 ++++++++-------- cluster/expected/sv-runbook/expected.json | 8 ++++---- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/cluster/deployment/scratchneta/config.resolved.yaml b/cluster/deployment/scratchneta/config.resolved.yaml index eef82aa0de..e3b74d3e3b 100644 --- a/cluster/deployment/scratchneta/config.resolved.yaml +++ b/cluster/deployment/scratchneta/config.resolved.yaml @@ -260,15 +260,15 @@ sv: /api/scan/v0/holdings: name: 'holdings' type: 'unlimited' + /api/scan/v0/internal/reward-accounting-process: + name: 'reward-accounting-process' + type: 'unlimited' /api/scan/v0/migrations: name: 'migrations-schedule' type: 'unlimited' /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/internal/reward-accounting-process: - name: 'reward-accounting-process' - type: 'unlimited' /api/scan/v0/rewards-collected: name: 'rewards-collected' type: 'banned' diff --git a/cluster/deployment/scratchnetb/config.resolved.yaml b/cluster/deployment/scratchnetb/config.resolved.yaml index eef82aa0de..e3b74d3e3b 100644 --- a/cluster/deployment/scratchnetb/config.resolved.yaml +++ b/cluster/deployment/scratchnetb/config.resolved.yaml @@ -260,15 +260,15 @@ sv: /api/scan/v0/holdings: name: 'holdings' type: 'unlimited' + /api/scan/v0/internal/reward-accounting-process: + name: 'reward-accounting-process' + type: 'unlimited' /api/scan/v0/migrations: name: 'migrations-schedule' type: 'unlimited' /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/internal/reward-accounting-process: - name: 'reward-accounting-process' - type: 'unlimited' /api/scan/v0/rewards-collected: name: 'rewards-collected' type: 'banned' diff --git a/cluster/deployment/scratchnetc/config.resolved.yaml b/cluster/deployment/scratchnetc/config.resolved.yaml index eef82aa0de..e3b74d3e3b 100644 --- a/cluster/deployment/scratchnetc/config.resolved.yaml +++ b/cluster/deployment/scratchnetc/config.resolved.yaml @@ -260,15 +260,15 @@ sv: /api/scan/v0/holdings: name: 'holdings' type: 'unlimited' + /api/scan/v0/internal/reward-accounting-process: + name: 'reward-accounting-process' + type: 'unlimited' /api/scan/v0/migrations: name: 'migrations-schedule' type: 'unlimited' /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/internal/reward-accounting-process: - name: 'reward-accounting-process' - type: 'unlimited' /api/scan/v0/rewards-collected: name: 'rewards-collected' type: 'banned' diff --git a/cluster/deployment/scratchnetd/config.resolved.yaml b/cluster/deployment/scratchnetd/config.resolved.yaml index eef82aa0de..e3b74d3e3b 100644 --- a/cluster/deployment/scratchnetd/config.resolved.yaml +++ b/cluster/deployment/scratchnetd/config.resolved.yaml @@ -260,15 +260,15 @@ sv: /api/scan/v0/holdings: name: 'holdings' type: 'unlimited' + /api/scan/v0/internal/reward-accounting-process: + name: 'reward-accounting-process' + type: 'unlimited' /api/scan/v0/migrations: name: 'migrations-schedule' type: 'unlimited' /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/internal/reward-accounting-process: - name: 'reward-accounting-process' - type: 'unlimited' /api/scan/v0/rewards-collected: name: 'rewards-collected' type: 'banned' diff --git a/cluster/deployment/scratchnete/config.resolved.yaml b/cluster/deployment/scratchnete/config.resolved.yaml index eef82aa0de..e3b74d3e3b 100644 --- a/cluster/deployment/scratchnete/config.resolved.yaml +++ b/cluster/deployment/scratchnete/config.resolved.yaml @@ -260,15 +260,15 @@ sv: /api/scan/v0/holdings: name: 'holdings' type: 'unlimited' + /api/scan/v0/internal/reward-accounting-process: + name: 'reward-accounting-process' + type: 'unlimited' /api/scan/v0/migrations: name: 'migrations-schedule' type: 'unlimited' /api/scan/v0/open-and-issuing-mining-rounds: name: 'open-and-issuing-mining-rounds' type: 'unlimited' - /api/scan/v0/internal/reward-accounting-process: - name: 'reward-accounting-process' - type: 'unlimited' /api/scan/v0/rewards-collected: name: 'rewards-collected' type: 'banned' diff --git a/cluster/expected/canton-network/expected.json b/cluster/expected/canton-network/expected.json index 18810dc9e5..d1fd033ed4 100644 --- a/cluster/expected/canton-network/expected.json +++ b/cluster/expected/canton-network/expected.json @@ -1663,6 +1663,10 @@ "name": "holdings", "type": "unlimited" }, + "/api/scan/v0/internal/reward-accounting-process": { + "name": "reward-accounting-process", + "type": "unlimited" + }, "/api/scan/v0/migrations": { "name": "migrations-schedule", "type": "unlimited" @@ -1671,10 +1675,6 @@ "name": "open-and-issuing-mining-rounds", "type": "unlimited" }, - "/api/scan/v0/internal/reward-accounting-process": { - "name": "reward-accounting-process", - "type": "unlimited" - }, "/api/scan/v0/rewards-collected": { "name": "rewards-collected", "type": "banned" @@ -1930,6 +1930,10 @@ "name": "holdings", "type": "unlimited" }, + "/api/scan/v0/internal/reward-accounting-process": { + "name": "reward-accounting-process", + "type": "unlimited" + }, "/api/scan/v0/migrations": { "name": "migrations-schedule", "type": "unlimited" @@ -1938,10 +1942,6 @@ "name": "open-and-issuing-mining-rounds", "type": "unlimited" }, - "/api/scan/v0/internal/reward-accounting-process": { - "name": "reward-accounting-process", - "type": "unlimited" - }, "/api/scan/v0/rewards-collected": { "name": "rewards-collected", "type": "banned" diff --git a/cluster/expected/sv-runbook/expected.json b/cluster/expected/sv-runbook/expected.json index 745ae6db8b..c9b2676b89 100644 --- a/cluster/expected/sv-runbook/expected.json +++ b/cluster/expected/sv-runbook/expected.json @@ -949,6 +949,10 @@ "name": "holdings", "type": "unlimited" }, + "/api/scan/v0/internal/reward-accounting-process": { + "name": "reward-accounting-process", + "type": "unlimited" + }, "/api/scan/v0/migrations": { "name": "migrations-schedule", "type": "unlimited" @@ -957,10 +961,6 @@ "name": "open-and-issuing-mining-rounds", "type": "unlimited" }, - "/api/scan/v0/internal/reward-accounting-process": { - "name": "reward-accounting-process", - "type": "unlimited" - }, "/api/scan/v0/rewards-collected": { "name": "rewards-collected", "type": "banned" From 30e2f930502a3b4a33ad14ff233c6e9d2404707c Mon Sep 17 00:00:00 2001 From: Divam Date: Mon, 18 May 2026 08:40:42 +0000 Subject: [PATCH 8/8] [ci] Signed-off-by: Divam