diff --git a/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/config/ConfigTransforms.scala b/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/config/ConfigTransforms.scala index 09f61da17a..af6c18e284 100644 --- a/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/config/ConfigTransforms.scala +++ b/apps/app/src/main/scala/org/lfdecentralizedtrust/splice/config/ConfigTransforms.scala @@ -809,6 +809,9 @@ object ConfigTransforms { ): ConfigTransform = updateAllSvAppFoundDsoConfigs_(c => c.copy(initialRewardConfig = Some(rewardConfig))) + def withFeaturedAppMarkers: ConfigTransform = + updateAllSvAppFoundDsoConfigs_(c => c.copy(initialRewardConfig = None)) + private def portTransform(bump: Int, c: AdminServerConfig): AdminServerConfig = c.copy(internalPort = c.internalPort.map(_ + bump)) diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/BatchedFeaturedAppActivityMarkerIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/BatchedFeaturedAppActivityMarkerIntegrationTest.scala index e09a0cc265..51da2bfed2 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/BatchedFeaturedAppActivityMarkerIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/BatchedFeaturedAppActivityMarkerIntegrationTest.scala @@ -36,6 +36,8 @@ class BatchedFeaturedAppActivityMarkerIntegrationTest override def environmentDefinition: SpliceEnvironmentDefinition = EnvironmentDefinition .simpleTopology1Sv(this.getClass.getSimpleName) + // Uses FeaturedAppMarkers: test exercises the FeaturedAppActivityMarker mechanism + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) .addConfigTransforms((_, config) => ConfigTransforms.updateAutomationConfig(ConfigTransforms.ConfigurableApp.Sv)( _.withPausedTrigger[FeaturedAppActivityMarkerTrigger] diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/ExternalPartySetupProposalIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/ExternalPartySetupProposalIntegrationTest.scala index a6b4b8fab9..9b710b1d90 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/ExternalPartySetupProposalIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/ExternalPartySetupProposalIntegrationTest.scala @@ -75,6 +75,8 @@ class ExternalPartySetupProposalIntegrationTest override def environmentDefinition: EnvironmentDefinition = { EnvironmentDefinition .simpleTopology1Sv(this.getClass.getSimpleName) + // Uses FeaturedAppMarkers: test asserts on AppRewardCoupon which TBAR replaces with RewardCouponV2 + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) .addConfigTransforms( // set renewal duration to be same as pre-approval lifetime to ensure renewal // gets triggered immediately diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/FeaturedAppActivityMarkerIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/FeaturedAppActivityMarkerIntegrationTest.scala index 8d96cd2797..30f3dfd007 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/FeaturedAppActivityMarkerIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/FeaturedAppActivityMarkerIntegrationTest.scala @@ -32,6 +32,8 @@ class FeaturedAppActivityMarkerIntegrationTest EnvironmentDefinition // Using 4Svs so that we see whether they manage to jointly complete all work .simpleTopology4Svs(this.getClass.getSimpleName) + // Uses FeaturedAppMarkers: test exercises the FeaturedAppActivityMarker mechanism + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) .addConfigTransforms((_, config) => ConfigTransforms.updateAllSvAppFoundDsoConfigs_( _.copy( diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SplitwellIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SplitwellIntegrationTest.scala index 9f18a8cec9..2e78d9c20a 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SplitwellIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SplitwellIntegrationTest.scala @@ -3,6 +3,7 @@ package org.lfdecentralizedtrust.splice.integration.tests import com.digitalasset.canton.SynchronizerAlias import org.lfdecentralizedtrust.splice.codegen.java.splice.splitwell as splitwellCodegen import org.lfdecentralizedtrust.splice.codegen.java.splice.wallet.payment as walletCodegen +import org.lfdecentralizedtrust.splice.config.ConfigTransforms import org.lfdecentralizedtrust.splice.integration.EnvironmentDefinition import org.lfdecentralizedtrust.splice.integration.tests.SpliceTests.IntegrationTest import org.lfdecentralizedtrust.splice.splitwell.automation.AcceptedAppPaymentRequestsTrigger @@ -20,6 +21,8 @@ class SplitwellIntegrationTest override def environmentDefinition: SpliceEnvironmentDefinition = EnvironmentDefinition .simpleTopology1Sv(this.getClass.getSimpleName) + // Uses FeaturedAppMarkers: test asserts on AppRewardCoupon which TBAR replaces with RewardCouponV2 + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) .withAdditionalSetup(implicit env => { aliceValidatorBackend.participantClient.upload_dar_unless_exists(splitwellDarPath) bobValidatorBackend.participantClient.upload_dar_unless_exists(splitwellDarPath) diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvExpiredRewardsCollectionTimeBasedIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvExpiredRewardsCollectionTimeBasedIntegrationTest.scala index 5c741a0841..d1e9b56e38 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvExpiredRewardsCollectionTimeBasedIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvExpiredRewardsCollectionTimeBasedIntegrationTest.scala @@ -18,13 +18,16 @@ class SvExpiredRewardsCollectionTimeBasedIntegrationTest with SvTestUtil { override def environmentDefinition = - super.environmentDefinition.addConfigTransform((_, config) => - ConfigTransforms.updateAllValidatorConfigs_( - // Bump lifetime above base duration to burn fees and generate validator rewards - _.focus(_.transferPreapproval.preapprovalLifetime) - .replace(NonNegativeFiniteDuration.ofDays(100)) - )(config) - ) + super.environmentDefinition + // Uses FeaturedAppMarkers: test asserts on AppRewardCoupon which TBAR replaces with RewardCouponV2 + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) + .addConfigTransform((_, config) => + ConfigTransforms.updateAllValidatorConfigs_( + // Bump lifetime above base duration to burn fees and generate validator rewards + _.focus(_.transferPreapproval.preapprovalLifetime) + .replace(NonNegativeFiniteDuration.ofDays(100)) + )(config) + ) "collect expired reward coupons" in { implicit env => def getRewardCoupons( diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TokenStandardAllocationIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TokenStandardAllocationIntegrationTest.scala index 432e4ffe12..7d6bd37017 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TokenStandardAllocationIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/TokenStandardAllocationIntegrationTest.scala @@ -13,6 +13,7 @@ import org.lfdecentralizedtrust.splice.codegen.java.splice.api.token.{ holdingv1, metadatav1, } +import org.lfdecentralizedtrust.splice.config.ConfigTransforms import org.lfdecentralizedtrust.splice.environment.DarResources import org.lfdecentralizedtrust.splice.integration.EnvironmentDefinition import org.lfdecentralizedtrust.splice.integration.tests.SpliceTests.{ @@ -55,6 +56,8 @@ class TokenStandardAllocationIntegrationTest override def environmentDefinition: EnvironmentDefinition = { EnvironmentDefinition .simpleTopology1Sv(this.getClass.getSimpleName) + // Uses FeaturedAppMarkers: test asserts on AppRewardCoupon which TBAR replaces with RewardCouponV2 + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) .withAdditionalSetup(implicit env => { Seq( sv1ValidatorBackend, diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/UnsupportedPackageVettingIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/UnsupportedPackageVettingIntegrationTest.scala index e981fbe357..54aa8e3a8f 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/UnsupportedPackageVettingIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/UnsupportedPackageVettingIntegrationTest.scala @@ -134,13 +134,13 @@ class UnsupportedPackageVettingIntegrationTest sv1Backend.participantClient.synchronizers.list_connected().head.synchronizerId val validatorDarsAbovePackageConfigVersion = Seq( - DarResources.wallet_0_1_18, - DarResources.walletPayments_0_1_17, - DarResources.amuletNameService_0_1_18, - DarResources.amulet_0_1_17, + DarResources.wallet_0_1_21, + DarResources.walletPayments_0_1_20, + DarResources.amuletNameService_0_1_21, + DarResources.amulet_0_1_20, ) val svDarsAbovePackageConfigVersion = Seq( - DarResources.dsoGovernance_0_1_23 + DarResources.dsoGovernance_0_1_26 ) ++ validatorDarsAbovePackageConfigVersion clue("sv1 votes to downgrade to the previous package versions") { @@ -149,12 +149,12 @@ class UnsupportedPackageVettingIntegrationTest AmuletConfigSchedule(amuletRules).getConfigAsOf(env.environment.clock.now) val downgradedPackageConfig = new PackageConfig( - DarResources.amulet_0_1_16.metadata.version.toString(), - DarResources.amuletNameService_0_1_17.metadata.version.toString(), - DarResources.dsoGovernance_0_1_22.metadata.version.toString(), + DarResources.amulet_0_1_19.metadata.version.toString(), + DarResources.amuletNameService_0_1_20.metadata.version.toString(), + DarResources.dsoGovernance_0_1_25.metadata.version.toString(), currentConfig.packageConfig.validatorLifecycle, - DarResources.wallet_0_1_17.metadata.version.toString(), - DarResources.walletPayments_0_1_16.metadata.version.toString(), + DarResources.wallet_0_1_20.metadata.version.toString(), + DarResources.walletPayments_0_1_19.metadata.version.toString(), ) val newAmuletConfig = new AmuletConfig( currentConfig.transferConfig, @@ -198,7 +198,7 @@ class UnsupportedPackageVettingIntegrationTest ) should contain allElementsOf validatorDarsAbovePackageConfigVersion.map(_.packageId) } eventually(40.seconds) { - alicesTapsWithPackageId(DarResources.amulet_0_1_16.packageId) + alicesTapsWithPackageId(DarResources.amulet_0_1_19.packageId) } } } diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogIntegrationTest.scala index f88e98f41e..a5e23efa3d 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogIntegrationTest.scala @@ -66,6 +66,8 @@ class WalletTxLogIntegrationTest // The wallet automation periodically merges amulets, which leads to non-deterministic balance changes. // We disable the automation for this suite. .withoutAutomaticRewardsCollectionAndAmuletMerging + // Uses FeaturedAppMarkers: test asserts on AppRewardCoupon which TBAR replaces with RewardCouponV2 + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) // Set a non-unit amulet price to better test CC-USD conversion. .addConfigTransform((_, config) => ConfigTransforms.setAmuletPrice(amuletPrice)(config)) .addConfigTransform((_, config) => diff --git a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogWithRewardsCollectionTimeBasedIntegrationTest.scala b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogWithRewardsCollectionTimeBasedIntegrationTest.scala index c53b46fb26..0225cc1ba5 100644 --- a/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogWithRewardsCollectionTimeBasedIntegrationTest.scala +++ b/apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTxLogWithRewardsCollectionTimeBasedIntegrationTest.scala @@ -31,6 +31,8 @@ class WalletTxLogWithRewardsCollectionTimeBasedIntegrationTest .simpleTopology1SvWithSimTime(this.getClass.getSimpleName) // Set a non-unit amulet price to better test CC-USD conversion. .addConfigTransform((_, config) => ConfigTransforms.setAmuletPrice(amuletPrice)(config)) + // Uses FeaturedAppMarkers: test asserts on AppRewardCoupon which TBAR replaces with RewardCouponV2 + .addConfigTransform((_, config) => ConfigTransforms.withFeaturedAppMarkers(config)) .addConfigTransforms( (_, config) => // without this, you can have 1 or 2 transfers in the txlog, or just 1 with different balance diff --git a/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala b/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala index 24a0054117..febe3005f4 100644 --- a/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala +++ b/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/DarResources.scala @@ -1683,7 +1683,7 @@ object DarResources { ) val amulet = PackageResource( amulet_current, - amulet_0_1_15, + amulet_0_1_19, Seq( amulet_0_1_0, amulet_0_1_1, diff --git a/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/PackageVersionSupport.scala b/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/PackageVersionSupport.scala index d349c5207a..fd8404bd13 100644 --- a/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/PackageVersionSupport.scala +++ b/apps/common/src/main/scala/org/lfdecentralizedtrust/splice/environment/PackageVersionSupport.scala @@ -79,6 +79,7 @@ trait PackageVersionSupport extends NamedLogging { now, DarResources.amulet, DarResources.amulet_0_1_16, + ignoreRedundantCheck = true, ) def supports24hSubmissionDelay( @@ -96,7 +97,7 @@ trait PackageVersionSupport extends NamedLogging { now, DarResources.amulet, DarResources.amulet_0_1_17, - ignoreRedundantCheck = false, + ignoreRedundantCheck = true, ) } @@ -152,6 +153,7 @@ trait PackageVersionSupport extends NamedLogging { now, DarResources.amulet, DarResources.amulet_0_1_19, + ignoreRedundantCheck = true, ) def supportsMintingDelegation(parties: Seq[PartyId], now: CantonTimestamp)(implicit diff --git a/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala b/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala index d3820cf5ad..88ab5c9693 100644 --- a/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala +++ b/apps/dar-resources-generator/src/main/scala/org/lfdecentralizedtrust/splice/darutils/DarResourcesGenerator.scala @@ -18,7 +18,7 @@ object DarResourcesGenerator { // TODO(tech-debt): consider moving this to a dedicated config file if it bugs us here private val minimumInitializations: Map[String, String] = Map( - "splice-amulet" -> "0.1.15", + "splice-amulet" -> "0.1.19", "splice-amulet-name-service" -> "0.1.16", "splice-dso-governance" -> "0.1.21", "splice-wallet" -> "0.1.15", diff --git a/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/config/SvAppConfig.scala b/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/config/SvAppConfig.scala index 78d9a2120c..9edd6b9a8f 100644 --- a/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/config/SvAppConfig.scala +++ b/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/config/SvAppConfig.scala @@ -117,7 +117,7 @@ object SvOnboardingConfig { developmentFundManager: Option[PartyId] = None, initialExternalPartyConfigStateTickDuration: Option[NonNegativeFiniteDuration] = None, optValidatorFaucetCap: Option[BigDecimal] = None, - initialRewardConfig: Option[InitialRewardConfig] = None, + initialRewardConfig: Option[InitialRewardConfig] = Some(InitialRewardConfig()), ) extends SvOnboardingConfig case class JoinWithKey( @@ -242,7 +242,7 @@ object SvOnboardingConfig { } final case class InitialRewardConfig( - mintingVersion: String = "RewardVersion_FeaturedAppMarkers", + mintingVersion: String = "RewardVersion_TrafficBasedAppRewards", dryRunVersion: Option[String] = None, batchSize: Long = 100, rewardCouponTimeToLiveMicros: Long = 36L * 60 * 60 * 1000000, // 36 hours diff --git a/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala b/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala index ffae525929..9e0b77b797 100644 --- a/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala +++ b/apps/sv/src/main/scala/org/lfdecentralizedtrust/splice/sv/onboarding/sv1/SV1Initializer.scala @@ -246,6 +246,12 @@ class SV1Initializer( logger, ), ).tupled + // Wait for the current amulet package to be available for command + // preprocessing. The vetting topology transaction may not yet be + // effective on the participant even though vetCurrentPackages returned. + _ <- initConnection.waitForPackages( + Set(DarResources.amulet_current.packageId) + ) storeKey = SvStore.Key(svParty, dsoParty) domainMigrationId <- resolveDomainMigrationId(Future.successful(0L)) svStore = newSvStore(