Skip to content

Commit 615250d

Browse files
committed
Merge remote-tracking branch 'origin/main' into isegall/migrate-issues
Signed-off-by: Itai Segall <[email protected]>
2 parents 566c16d + 5108619 commit 615250d

File tree

74 files changed

+1491
-499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

74 files changed

+1491
-499
lines changed

.github/workflows/build.docs.yml

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,29 +38,30 @@ jobs:
3838
# as it finishes fastest and we want to ensure that it includes test sources.
3939
cmd: "Test/compile docs/bundle"
4040

41-
- name: Push documentation
42-
uses: ./.github/actions/nix/run_bash_command_in_nix
43-
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
44-
env:
45-
GH_USER: ${{ github.actor }}
46-
GH_TOKEN: ${{ secrets.GH_ISSUES }}
47-
with:
48-
additional_nix_args: "--keep GH_USER --keep GH_TOKEN"
49-
cmd: |
50-
REPO_DIR="$(mktemp -d)"
51-
export GIT_SSH_COMMAND="/usr/bin/ssh"
52-
git config --global user.email "[email protected]"
53-
git config --global user.name "DA Automation"
54-
git clone https://$GH_USER:[email protected]/digital-asset/decentralized-canton-sync.git "$REPO_DIR" -b docs
55-
# Given that we just wanna overwrite anything an rm + cp seems more straightforward than an rsync.
56-
rm -rf "$REPO_DIR/docs"
57-
cp -r "docs/html/html" "$REPO_DIR/docs"
58-
# Required to make GH service the _static directory properly.
59-
touch "$REPO_DIR/docs/.nojekyll"
60-
cd "$REPO_DIR"
61-
git add .
62-
git commit -m 'Update documentation'
63-
git push origin docs
41+
# TODO(#1028): Reenable this
42+
# - name: Push documentation
43+
# uses: ./.github/actions/nix/run_bash_command_in_nix
44+
# if: github.ref == 'refs/heads/main' && github.event_name == 'push'
45+
# env:
46+
# GH_USER: ${{ github.actor }}
47+
# GH_TOKEN: ${{ secrets.GH_ISSUES }}
48+
# with:
49+
# additional_nix_args: "--keep GH_USER --keep GH_TOKEN"
50+
# cmd: |
51+
# REPO_DIR="$(mktemp -d)"
52+
# export GIT_SSH_COMMAND="/usr/bin/ssh"
53+
# git config --global user.email "[email protected]"
54+
# git config --global user.name "DA Automation"
55+
# git clone https://$GH_USER:[email protected]/digital-asset/decentralized-canton-sync.git "$REPO_DIR" -b docs
56+
# # Given that we just wanna overwrite anything an rm + cp seems more straightforward than an rsync.
57+
# rm -rf "$REPO_DIR/docs"
58+
# cp -r "docs/html/html" "$REPO_DIR/docs"
59+
# # Required to make GH service the _static directory properly.
60+
# touch "$REPO_DIR/docs/.nojekyll"
61+
# cd "$REPO_DIR"
62+
# git add .
63+
# git commit -m 'Update documentation'
64+
# git push origin docs
6465

6566
- name: Post-SBT job
6667
uses: ./.github/actions/sbt/post_sbt

TESTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ If you have never used `lnav` to inspect Canton or CometBFT logs, then we recomm
323323
3. Create the following symlinks to automatically keep the format definitions up to date:
324324
```
325325
ln -sf $PWD/canton/canton-json.lnav.json $LNAV_CONFIG_DIR/formats/installed/canton_logstash_json.json
326-
ln -sf $PWD/support/cometbft-json.lnav.json $LNAV_CONFIG_DIR/formats/installed/cometbft-json.json
326+
ln -sf $PWD/network-health/cometbft-json.lnav.json $LNAV_CONFIG_DIR/formats/installed/cometbft-json.json
327327
```
328328
4. Type `lnav log/canton_network_test.clog` to inspect the test logs.
329329
5. Take the time to familiarize yourself with docs for the `lnav` [UI](https://docs.lnav.org/en/latest/ui.html#ui)

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/plugins/TokenStandardCliSanityCheckPlugin.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ class TokenStandardCliSanityCheckPlugin(
131131
token: String,
132132
participantPort: Int,
133133
extraArgs: Seq[String],
134+
retries: Int = 3,
134135
)(implicit
135136
tc: TraceContext
136137
): String = {
@@ -159,8 +160,16 @@ class TokenStandardCliSanityCheckPlugin(
159160
if (exitCodeTry.toOption.exists(_ != 0) || exitCodeTry.isFailure) {
160161
logger.error(s"Failed to run $args: $exitCodeTry. Dumping output.")(TraceContext.empty)
161162
readLines.foreach(logger.error(_)(TraceContext.empty))
162-
// sometimes readlines is empty...?
163-
throw new RuntimeException(s"$args failed: ${readLines}")
163+
if (retries > 0) {
164+
// node commands sometimes give no logs whatsoever, and sometimes they segfault and dump a native stack trace,
165+
// so retrying seems like the best solution.
166+
// If the cause of the error is not-node-related, it should fail quick enough that it won't slow down tests too much.
167+
logger.info(s"Retrying command $args")
168+
runCommand(command, partyId, token, participantPort, extraArgs, retries - 1)
169+
} else {
170+
// sometimes readlines is empty...?
171+
throw new RuntimeException(s"$args failed: ${readLines}")
172+
}
164173
}
165174
val result = readLines
166175
.dropWhile(line => !line.startsWith("[") && !line.startsWith("{")) // remove npm noise

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/Ans4SvsIntegrationTest.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import org.lfdecentralizedtrust.splice.sv.automation.delegatebased.TerminatedSub
77
import org.lfdecentralizedtrust.splice.util.{DisclosedContracts, TriggerTestUtil, WalletTestUtil}
88
import org.lfdecentralizedtrust.splice.validator.automation.ReconcileSequencerConnectionsTrigger
99
import org.lfdecentralizedtrust.splice.wallet.admin.api.client.commands.HttpWalletAppClient
10+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.{
11+
pauseAllDsoDelegateTriggers,
12+
resumeAllDsoDelegateTriggers,
13+
}
1014
import org.scalatest.Assertion
1115

1216
class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with TriggerTestUtil {
@@ -18,9 +22,6 @@ class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with Tr
1822
// TODO(#787): incorporate this test into AnsIntegrationTest
1923
"ans" should {
2024
"terminated subscriptions are archived" in { implicit env =>
21-
val leaderTerminatedSubscriptionTrigger =
22-
sv1Backend.dsoDelegateBasedAutomation.trigger[TerminatedSubscriptionTrigger]
23-
2425
setTriggersWithin[Assertion](
2526
// Figure out how to make the `onboardUser` part of `onboardWalletUser` not time out
2627
// in the even of an untimely domain disconnect
@@ -72,7 +73,7 @@ class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with Tr
7273
)
7374

7475
clue("Pausing TerminatedSubscriptionTrigger") {
75-
leaderTerminatedSubscriptionTrigger.pause().futureValue
76+
pauseAllDsoDelegateTriggers[TerminatedSubscriptionTrigger]
7677
}
7778

7879
actAndCheck(
@@ -92,7 +93,7 @@ class Ans4SvsIntegrationTest extends IntegrationTest with WalletTestUtil with Tr
9293
) should not be empty
9394
}
9495
clue("Resuming TerminatedSubscriptionTrigger") {
95-
leaderTerminatedSubscriptionTrigger.resume()
96+
resumeAllDsoDelegateTriggers[TerminatedSubscriptionTrigger]
9697
}
9798

9899
eventually() {

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/AnsIntegrationTest.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@ import com.digitalasset.canton.console.CommandFailure
2828
import com.digitalasset.canton.logging.SuppressionRule
2929
import com.digitalasset.canton.topology.PartyId
3030
import org.scalatest.Assertion
31+
import org.scalatest.concurrent.PatienceConfiguration
3132
import org.slf4j.event.Level
3233

3334
import java.time.{Instant, OffsetDateTime, ZoneOffset}
3435
import java.time.temporal.ChronoUnit
36+
import scala.concurrent.duration.FiniteDuration
3537
import scala.jdk.CollectionConverters.*
3638

3739
class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with TriggerTestUtil {
@@ -60,8 +62,8 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
6062
)(config)
6163
)
6264

63-
def dsoDelegateExpiredAnsEntryTrigger(implicit env: SpliceTestConsoleEnvironment) =
64-
sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredAnsEntryTrigger]
65+
def dsoDelegateExpiredAnsEntryTriggers(implicit env: SpliceTestConsoleEnvironment) =
66+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredAnsEntryTrigger])
6567

6668
// created by the expiry test
6769
override protected lazy val sanityChecksIgnoredRootCreates: Seq[Identifier] = Seq(
@@ -87,7 +89,7 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
8789
bobRefs,
8890
).parTraverse { ref =>
8991
Future { requestAndPayForEntry(ref, testEntryName) }
90-
}.futureValue,
92+
}.futureValue(timeout = PatienceConfiguration.Timeout(FiniteDuration(40, "seconds"))),
9193
lines => {
9294
forAll(lines) { line =>
9395
line.message should (include(s"entry already exists and owned by") or include(
@@ -360,7 +362,7 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
360362

361363
setTriggersWithin[Assertion](
362364
triggersToPauseAtStart = Seq(aliceSubscriptionReadyForPaymentTrigger),
363-
triggersToResumeAtStart = Seq(dsoDelegateExpiredAnsEntryTrigger),
365+
triggersToResumeAtStart = dsoDelegateExpiredAnsEntryTriggers,
364366
) {
365367

366368
val ansRules = sv1ScanBackend.getAnsRules()
@@ -411,7 +413,7 @@ class AnsIntegrationTest extends IntegrationTest with WalletTestUtil with Trigge
411413
setTriggersWithin(
412414
Seq.empty,
413415
triggersToResumeAtStart =
414-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredAnsSubscriptionTrigger]),
416+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredAnsSubscriptionTrigger]),
415417
) {
416418
withClue("contracts removed with subscription trigger reenabled") {
417419
// Wait for subscription to be expired.

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvExpiredRewardsCollectionTimeBasedIntegrationTest.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class SvExpiredRewardsCollectionTimeBasedIntegrationTest
4141
aliceWalletClient.tap(100.0)
4242
bobWalletClient.tap(100.0)
4343

44-
actAndCheck(
44+
actAndCheck()(
4545
"Generate some reward coupons by executing a few direct transfers", {
4646
p2pTransfer(aliceWalletClient, bobWalletClient, bobParty, 10.0)
4747
p2pTransfer(aliceWalletClient, bobWalletClient, bobParty, 10.0)
@@ -57,7 +57,6 @@ class SvExpiredRewardsCollectionTimeBasedIntegrationTest
5757
) should have length 8 // 4 app rewards + 4 validator
5858
},
5959
)
60-
6160
actAndCheck(
6261
timeUntilSuccess = 30.seconds
6362
)(
@@ -76,7 +75,9 @@ class SvExpiredRewardsCollectionTimeBasedIntegrationTest
7675
.getClosedRounds()
7776
.filter(r => r.payload.round.number == round.payload.round.number) should be(empty)
7877
val (lastRound, _) = sv1ScanBackend.getRoundOfLatestData()
79-
sv1WalletClient.listSvRewardCoupons().filter(_.payload.round.number <= lastRound) should be(
78+
sv1WalletClient
79+
.listSvRewardCoupons()
80+
.filter(_.payload.round.number <= lastRound) should be(
8081
empty
8182
)
8283
},

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvMergeDuplicatedValidatorLicenseIntegrationTest.scala

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import org.lfdecentralizedtrust.splice.codegen.java.splice.validatorlicense.Vali
66
import org.lfdecentralizedtrust.splice.integration.EnvironmentDefinition
77
import org.lfdecentralizedtrust.splice.sv.automation.delegatebased.MergeValidatorLicenseContractsTrigger
88
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil
9+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.{
10+
pauseAllDsoDelegateTriggers,
11+
resumeAllDsoDelegateTriggers,
12+
}
913
import org.slf4j.event.Level
1014

1115
import scala.jdk.CollectionConverters.*
@@ -42,7 +46,7 @@ class SvMergeDuplicatedValidatorLicenseIntegrationTest
4246
}
4347
setTriggersWithin(
4448
triggersToPauseAtStart =
45-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[MergeValidatorLicenseContractsTrigger]),
49+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[MergeValidatorLicenseContractsTrigger]),
4650
triggersToResumeAtStart = Seq.empty,
4751
) {
4852
actAndCheck(
@@ -61,20 +65,15 @@ class SvMergeDuplicatedValidatorLicenseIntegrationTest
6165
// The trigger can process both validator licenses in parallel so we might get multiple log messages.
6266
loggerFactory.assertLogsSeq(SuppressionRule.LevelAndAbove(Level.WARN))(
6367
{
64-
sv1Backend.dsoDelegateBasedAutomation
65-
.trigger[MergeValidatorLicenseContractsTrigger]
66-
.resume()
68+
resumeAllDsoDelegateTriggers[MergeValidatorLicenseContractsTrigger]
6769
clue("Trigger merges the duplicated validator licenses contracts") {
6870
eventually() {
6971
val newValidatorLicenses = getValidatorLicenses()
7072
newValidatorLicenses should have size 1
7173
}
7274
}
7375
// Pause to make sure we don't get more log messages.
74-
sv1Backend.dsoDelegateBasedAutomation
75-
.trigger[MergeValidatorLicenseContractsTrigger]
76-
.pause()
77-
.futureValue
76+
pauseAllDsoDelegateTriggers[MergeValidatorLicenseContractsTrigger]
7877
},
7978
forAll(_)(
8079
_.warningMessage should include(

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvMergeSvRewardStateIntegrationTest.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.lfdecentralizedtrust.splice.integration.EnvironmentDefinition
55
import org.lfdecentralizedtrust.splice.codegen.java.splice.dso.svstate.SvRewardState
66
import org.lfdecentralizedtrust.splice.sv.automation.delegatebased.MergeSvRewardStateContractsTrigger
77
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil
8+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.resumeAllDsoDelegateTriggers
89

910
import scala.jdk.CollectionConverters.*
1011

@@ -38,7 +39,7 @@ class SvMergeSvRewardStateIntegrationTest extends SvIntegrationTestBase with Tri
3839
}
3940
setTriggersWithin(
4041
triggersToPauseAtStart =
41-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[MergeSvRewardStateContractsTrigger]),
42+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[MergeSvRewardStateContractsTrigger]),
4243
triggersToResumeAtStart = Seq.empty,
4344
) {
4445
actAndCheck(
@@ -56,7 +57,7 @@ class SvMergeSvRewardStateIntegrationTest extends SvIntegrationTestBase with Tri
5657
)
5758
loggerFactory.assertLogs(
5859
{
59-
sv1Backend.dsoDelegateBasedAutomation.trigger[MergeSvRewardStateContractsTrigger].resume()
60+
resumeAllDsoDelegateTriggers[MergeSvRewardStateContractsTrigger]
6061
clue("Trigger merges SvRewardState contracts") {
6162
eventually() {
6263
val newRewardStates = getRewardStates()

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvOffboardingIntegrationTest.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,6 @@
33

44
package org.lfdecentralizedtrust.splice.integration.tests
55

6-
import cats.instances.future.*
7-
import cats.instances.seq.*
8-
import cats.syntax.foldable.*
96
import com.digitalasset.canton.config.RequireTypes.PositiveInt
107
import com.digitalasset.canton.topology.{MediatorId, SequencerId}
118
import com.digitalasset.canton.topology.admin.grpc.TopologyStoreId
@@ -35,6 +32,13 @@ import org.lfdecentralizedtrust.splice.sv.automation.singlesv.offboarding.{
3532
}
3633
import org.lfdecentralizedtrust.splice.util.{ProcessTestUtil, StandaloneCanton}
3734
import org.scalatest.time.{Minute, Span}
35+
import cats.syntax.foldable.*
36+
import cats.instances.future.*
37+
import cats.instances.seq.*
38+
import org.lfdecentralizedtrust.splice.util.TriggerTestUtil.{
39+
pauseAllDsoDelegateTriggers,
40+
resumeAllDsoDelegateTriggers,
41+
}
3842

3943
import java.time.Instant
4044
import java.time.temporal.ChronoUnit
@@ -96,10 +100,8 @@ class SvOffboardingIntegrationTest
96100
)
97101
}
98102

99-
sv1Backend.dsoDelegateBasedAutomation
100-
.trigger[ExecuteConfirmedActionTrigger]
101-
.pause()
102-
.futureValue
103+
pauseAllDsoDelegateTriggers[ExecuteConfirmedActionTrigger]
104+
103105
val externalPartyAmuletRules = sv1ScanBackend.getExternalPartyAmuletRules()
104106
// Create TransferCommand to trigger creation of confirmations for creating the transfer command counter.
105107
// We don't want to test external parties in this test so we just create it directly from SV1.
@@ -240,7 +242,7 @@ class SvOffboardingIntegrationTest
240242
) shouldBe None
241243
actAndCheck(timeUntilSuccess = 60.seconds)(
242244
"Resume ExecuteConfirmedActionTrigger",
243-
sv1Backend.dsoDelegateBasedAutomation.trigger[ExecuteConfirmedActionTrigger].resume(),
245+
resumeAllDsoDelegateTriggers[ExecuteConfirmedActionTrigger],
244246
)(
245247
"TransferCommandCounter gets created",
246248
(_: Unit) =>

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/SvStateManagementIntegrationTest.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ class SvStateManagementIntegrationTest extends SvIntegrationTestBase with Trigge
326326
setTriggersWithin(
327327
// Pause so SV3 can be stopped before it gets offboarded
328328
triggersToPauseAtStart =
329-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger])
329+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger])
330330
) {
331331
// We need SV3's vote here for immediate offboarding
332332
Seq(sv2Backend, sv3Backend, sv4Backend).foreach { sv =>
@@ -612,7 +612,9 @@ class SvStateManagementIntegrationTest extends SvIntegrationTestBase with Trigge
612612
}
613613
}
614614
clue("Pausing vote request expiration automation") {
615-
sv1Backend.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].pause().futureValue
615+
Seq(sv1Backend, sv2Backend).foreach(
616+
_.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].pause().futureValue
617+
)
616618
}
617619
actAndCheck(
618620
"SV2 creates a vote request for removing SV1", {
@@ -640,7 +642,9 @@ class SvStateManagementIntegrationTest extends SvIntegrationTestBase with Trigge
640642
},
641643
)
642644
clue("Resuming vote request expiration automation") {
643-
sv1Backend.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].resume()
645+
Seq(sv1Backend, sv2Backend).foreach(
646+
_.dsoDelegateBasedAutomation.trigger[CloseVoteRequestTrigger].resume()
647+
)
644648
}
645649
clue("Eventually the vote request expires and gets archived") {
646650
eventually() {

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletExpirationsIntegrationTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ class WalletExpirationsIntegrationTest
177177
setTriggersWithin(
178178
Seq.empty,
179179
triggersToResumeAtStart =
180-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredAmuletTrigger]),
180+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredAmuletTrigger]),
181181
) {
182182
clue("Check wallet after advancing to next 2 rounds") {
183183
eventually()(aliceWalletClient.list().amulets shouldBe empty)

apps/app/src/test/scala/org/lfdecentralizedtrust/splice/integration/tests/WalletTimeBasedIntegrationTest.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,10 @@ class WalletTimeBasedIntegrationTest
9898
},
9999
cancelAllSubscriptions(aliceWalletClient),
100100
) {
101-
val ansSubscriptionRenewalPaymentTrigger =
102-
sv1Backend.dsoDelegateBasedAutomation.trigger[AnsSubscriptionRenewalPaymentTrigger]
101+
val ansSubscriptionRenewalPaymentTriggers =
102+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[AnsSubscriptionRenewalPaymentTrigger])
103103
setTriggersWithin(
104-
triggersToPauseAtStart = Seq(ansSubscriptionRenewalPaymentTrigger),
104+
triggersToPauseAtStart = ansSubscriptionRenewalPaymentTriggers,
105105
triggersToResumeAtStart = Seq.empty,
106106
) {
107107
actAndCheck(
@@ -204,7 +204,7 @@ class WalletTimeBasedIntegrationTest
204204
setTriggersWithin(
205205
Seq.empty,
206206
triggersToResumeAtStart =
207-
Seq(sv1Backend.dsoDelegateBasedAutomation.trigger[ExpiredLockedAmuletTrigger]),
207+
activeSvs.map(_.dsoDelegateBasedAutomation.trigger[ExpiredLockedAmuletTrigger]),
208208
) {
209209
clue("Check wallet after advancing to next 2 rounds") {
210210
eventually()(aliceWalletClient.list().lockedAmulets shouldBe empty)

0 commit comments

Comments
 (0)