Skip to content
This repository was archived by the owner on Jan 24, 2025. It is now read-only.

Commit 4cce1bd

Browse files
authored
Merge pull request #967 from iotaledger/fix/speedup-docker-tests
Speedup docker tests
2 parents 104870d + 64f0f73 commit 4cce1bd

25 files changed

+1314
-946
lines changed

pkg/protocol/sybilprotection/sybilprotectionv1/sybilprotection.go

+9-8
Original file line numberDiff line numberDiff line change
@@ -128,18 +128,19 @@ func (o *SybilProtection) TrackBlock(block *blocks.Block) {
128128
return
129129
}
130130

131-
blockEpoch := o.apiProvider.APIForSlot(block.ID().Slot()).TimeProvider().EpochFromSlot(block.ID().Slot())
131+
blockSlot := block.ID().Slot()
132+
blockAPI := o.apiProvider.APIForSlot(blockSlot)
133+
blockEpoch := blockAPI.TimeProvider().EpochFromSlot(blockSlot)
132134

133-
// if the block is issued before the stake end epoch, then it's not a valid validator or candidate block
134-
if accountData.StakeEndEpoch() < blockEpoch {
135+
// if the block is issued in or after the stake end epoch,
136+
// then don't consider it because the validator can't be part of the committee in the next epoch.
137+
if blockEpoch >= accountData.StakeEndEpoch() {
135138
return
136139
}
137140

138-
// if a candidate block is issued in the stake end epoch,
139-
// or if block is issued after EpochEndSlot - EpochNearingThreshold, because candidates can register only until that point.
140-
// then don't consider it because the validator can't be part of the committee in the next epoch
141-
if accountData.StakeEndEpoch() == blockEpoch ||
142-
block.ID().Slot()+o.apiProvider.APIForSlot(block.ID().Slot()).ProtocolParameters().EpochNearingThreshold() > o.apiProvider.APIForSlot(block.ID().Slot()).TimeProvider().EpochEnd(blockEpoch) {
141+
// if block is issued after EpochEndSlot - EpochNearingThreshold, because candidates can register only until that point.
142+
// then also don't consider it because the validator can't be part of the committee in the next epoch.
143+
if blockSlot+blockAPI.ProtocolParameters().EpochNearingThreshold() > blockAPI.TimeProvider().EpochEnd(blockEpoch) {
143144
return
144145
}
145146

pkg/tests/combined_account_transition_test.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -48,32 +48,32 @@ func Test_AccountStateTransition(t *testing.T) {
4848
ts.AssertTransactionsInCacheAccepted(wallet.Transactions("TX1"), true, node1, node2)
4949
}
5050

51-
// create the account1 from TX1:0 with wallet "first"
51+
// create the account-1 from TX1:0 with wallet "account-1"
5252
// generated (block1, TX2)
53-
ts.AddWallet("first", node1, iotago.EmptyAccountID)
53+
ts.AddWallet("account-1", node1, iotago.EmptyAccountID)
5454
createFullAccount(ts)
5555

56-
// create the account2, from implicit to full account from TX1:1 with wallet "second"
56+
// create the account-2, from implicit to full account from TX1:1 with wallet "account-2"
5757
// generated (block2, TX3), (block3, TX4)
58-
ts.AddWallet("second", node1, iotago.EmptyAccountID)
58+
ts.AddWallet("account-2", node1, iotago.EmptyAccountID)
5959
account2ID := createImplicitToFullAccount(ts)
6060

61-
// send funds to account2, with TX1:2
61+
// send funds to account-2, with TX1:2
6262
// generated (block4, TX5)
6363
sendFunds(ts)
6464

65-
// allot 1000 mana to account2 with TX1:3
65+
// allot 1000 mana to account-2 with TX1:3
6666
// generated (block5, TX6)
6767
allotManaTo(ts, account2ID)
6868

69-
// create native token from "TX5:0" and account2 (TX4:0)
69+
// create native token from "TX5:0" and account-2 (TX4:0)
7070
// generated (block6, TX7)
7171
createNativetoken(ts)
7272
}
7373

7474
func createFullAccount(ts *testsuite.TestSuite) iotago.AccountID {
7575
node1 := ts.Node("node1")
76-
newUserWallet := ts.Wallet("first")
76+
newUserWallet := ts.Wallet("account-1")
7777

7878
// CREATE NEW ACCOUNT WITH BLOCK ISSUER FROM BASIC UTXO
7979
newAccountBlockIssuerKey := tpkg.RandBlockIssuerKey()
@@ -125,7 +125,7 @@ func createFullAccount(ts *testsuite.TestSuite) iotago.AccountID {
125125

126126
func createImplicitToFullAccount(ts *testsuite.TestSuite) iotago.AccountID {
127127
node1 := ts.Node("node1")
128-
newUserWallet := ts.Wallet("second")
128+
newUserWallet := ts.Wallet("account-2")
129129

130130
// CREATE IMPLICIT ACCOUNT FROM GENESIS BASIC UTXO, SENT TO A NEW USER WALLET.
131131
// a default wallet, already registered in the ledger, will issue the transaction and block.
@@ -198,7 +198,7 @@ func sendFunds(ts *testsuite.TestSuite) {
198198
node1 := ts.Node("node1")
199199
node2 := ts.Node("node2")
200200
wallet := ts.DefaultWallet()
201-
secondWallet := ts.Wallet("second")
201+
secondWallet := ts.Wallet("account-2")
202202

203203
// send funds from defaultWallet to secondWallet
204204
tx := wallet.SendFundsToWallet("TX5", secondWallet, "TX1:2")
@@ -246,7 +246,7 @@ func allotManaTo(ts *testsuite.TestSuite, to iotago.AccountID) {
246246

247247
// createNativetoken creates a native token from the given input and account.
248248
func createNativetoken(ts *testsuite.TestSuite) {
249-
wallet := ts.Wallet("second")
249+
wallet := ts.Wallet("account-2")
250250
node1 := ts.Node("node1")
251251
node2 := ts.Node("node2")
252252

pkg/testsuite/mock/blockissuer.go

+11-40
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,7 @@ type BlockIssuer struct {
4646
keyManager *wallet.KeyManager
4747
Client Client
4848

49-
// latestBlockIssuanceResp is the cached response from the latest query to the block issuance endpoint.
50-
latestBlockIssuanceResp *api.IssuanceBlockHeaderResponse
51-
blockIssuanceResponseUsed bool
52-
mutex syncutils.RWMutex
49+
mutex syncutils.RWMutex
5350

5451
AccountData *AccountData
5552
}
@@ -65,13 +62,12 @@ func NewBlockIssuer(t *testing.T, name string, keyManager *wallet.KeyManager, cl
6562
accountData.ID.RegisterAlias(name)
6663

6764
return options.Apply(&BlockIssuer{
68-
Testing: t,
69-
Name: name,
70-
Validator: validator,
71-
keyManager: keyManager,
72-
Client: client,
73-
blockIssuanceResponseUsed: true,
74-
AccountData: accountData,
65+
Testing: t,
66+
Name: name,
67+
Validator: validator,
68+
keyManager: keyManager,
69+
Client: client,
70+
AccountData: accountData,
7571
}, opts)
7672
}
7773

@@ -216,13 +212,14 @@ func (i *BlockIssuer) CreateAndSubmitValidationBlock(ctx context.Context, alias
216212
func (i *BlockIssuer) CreateBasicBlock(ctx context.Context, alias string, opts ...options.Option[BasicBlockParams]) (*blocks.Block, error) {
217213
blockParams := options.Apply(&BasicBlockParams{BlockHeader: &BlockHeaderParams{}}, opts)
218214

219-
blockIssuanceInfo := i.latestBlockIssuanceResponse(ctx)
215+
blockIssuanceInfo, err := i.Client.BlockIssuance(ctx)
216+
require.NoError(i.Testing, err)
220217

221218
if blockParams.BlockHeader.References == nil {
222219
blockParams.BlockHeader.References = referencesFromBlockIssuanceResponse(blockIssuanceInfo)
223220
}
224221

225-
err := i.setDefaultBlockParams(ctx, blockParams.BlockHeader)
222+
err = i.setDefaultBlockParams(ctx, blockParams.BlockHeader)
226223
require.NoError(i.Testing, err)
227224

228225
api := i.Client.APIForTime(*blockParams.BlockHeader.IssuingTime)
@@ -270,9 +267,6 @@ func (i *BlockIssuer) CreateBasicBlock(ctx context.Context, alias string, opts .
270267

271268
modelBlock.ID().RegisterAlias(alias)
272269

273-
// mark the response as used so that the next time we query the node for the latest block issuance.
274-
i.blockIssuanceResponseUsed = true
275-
276270
return blocks.NewBlock(modelBlock), err
277271
}
278272

@@ -405,31 +399,8 @@ func (i *BlockIssuer) retrieveAPI(blockParams *BlockHeaderParams) iotago.API {
405399
}
406400

407401
func (i *BlockIssuer) GetNewBlockIssuanceResponse() *api.IssuanceBlockHeaderResponse {
408-
i.mutex.Lock()
409-
defer i.mutex.Unlock()
410-
411-
i.blockIssuanceResponseUsed = false
412402
resp, err := i.Client.BlockIssuance(context.Background())
413403
require.NoError(i.Testing, err)
414-
i.latestBlockIssuanceResp = resp
415-
416-
return i.latestBlockIssuanceResp
417-
}
418-
419-
func (i *BlockIssuer) latestBlockIssuanceResponse(context context.Context) *api.IssuanceBlockHeaderResponse {
420-
i.mutex.Lock()
421-
defer i.mutex.Unlock()
422-
423-
// If the response was already used to issue a block, we need to get a new response from the node.
424-
// Otherwise we can reuse the cached response. For transactions with commitment inputs, we want to get a fresh response
425-
// for the transaction creation, and then reuse that response for the block issuance, so we only mark the response as used
426-
// if it was used for block issuance.
427-
if i.blockIssuanceResponseUsed {
428-
i.blockIssuanceResponseUsed = false
429-
resp, err := i.Client.BlockIssuance(context)
430-
require.NoError(i.Testing, err)
431-
i.latestBlockIssuanceResp = resp
432-
}
433404

434-
return i.latestBlockIssuanceResp
405+
return resp
435406
}

pkg/testsuite/mock/wallet.go

+25
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,31 @@ func NewAccountData(accountID iotago.AccountID, optAddressIndex ...uint32) *Acco
6262
}
6363
}
6464

65+
type AccountWithWallet struct {
66+
account *AccountData
67+
wallet *Wallet
68+
}
69+
70+
func NewAccountWithWallet(account *AccountData, wallet *Wallet) *AccountWithWallet {
71+
return &AccountWithWallet{
72+
account: account,
73+
wallet: wallet,
74+
}
75+
}
76+
77+
func (a *AccountWithWallet) Account() *AccountData {
78+
return a.account
79+
}
80+
81+
func (a *AccountWithWallet) UpdateAccount(updatedAccount *AccountData) {
82+
a.account = updatedAccount
83+
a.wallet.SetBlockIssuer(updatedAccount)
84+
}
85+
86+
func (a *AccountWithWallet) Wallet() *Wallet {
87+
return a.wallet
88+
}
89+
6590
// WalletClock is an interface that provides the current slot.
6691
type WalletClock interface {
6792
SetCurrentSlot(slot iotago.SlotIndex)

tools/docker-network/.env

+1-6
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,7 @@ COMMON_CONFIG="
88
--profiling.bindAddress=0.0.0.0:6061
99
--restAPI.publicRoutes=/health,/api/routes,/api/core/v3/info,/api/core/v3/network*,/api/core/v3/blocks*,/api/core/v3/transactions*,/api/core/v3/commitments*,/api/core/v3/outputs*,/api/core/v3/accounts*,/api/core/v3/validators*,/api/core/v3/rewards*,/api/core/v3/committee*,/api/debug/v2/*,/api/indexer/v2/*,/api/mqtt/v2,/api/blockissuer/v1/*,/api/management/v1/*
1010
--debugAPI.enabled=false
11-
--p2p.autopeering.maxPeers=5
12-
--p2p.autopeering.allowLocalIPs=true
13-
"
14-
15-
AUTOPEERING_CONFIG="
16-
--p2p.autopeering.bootstrapPeers=/dns/node-1-validator/tcp/15600/p2p/12D3KooWRVt4Engu27jHnF2RjfX48EqiAqJbgLfFdHNt3Vn6BtJK
11+
--p2p.autopeering.maxPeers=0
1712
"
1813

1914
# admin/admin

tools/docker-network/docker-compose.yml

+16-5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ services:
3030
--db.path==${DB_PATH_V1:-/app/data/database}
3131
--protocol.snapshot.path=${SNAPSHOT_PATH_V1:-/app/data/snapshots/snapshot.bin}
3232
--p2p.identityPrivateKey=08735375679f3d8031353e94282ed1d65119e5c288fe56d6639d9184a3f978fee8febfedff11cc376daea0f59c395ae2e9a870a25ac4e36093000fbf4d0e8f18
33+
--p2p.peers=/dns/node-2-validator/tcp/15600/p2p/12D3KooWCropDmzpoLy8UrFg59M1oUx7k1UmQmuHrmN5RDgp6pVL,/dns/node-3-validator/tcp/15600/p2p/12D3KooWPr1mW33PGhv3oRbPQQDesN4THBB3WgnYsNzCfnQLr5QR,/dns/node-4-validator/tcp/15600/p2p/12D3KooWRxDSg2H7ThEJyn4HNkL1ixsqm6PgjCtkTG1hm7NpYG4Q,/dns/node-5/tcp/15600/p2p/12D3KooWG9S868XrL1wzeUbMXDtBTAaxwuqktAzUodFFES8uoTGz,/dns/node-6/tcp/15600/p2p/12D3KooWFatFVM1wyGnMUwJrMW7YwD6j32iq5SCA9S7e386biZ73
34+
--p2p.peerAliases=node-2-validator,node-3-validator,node-4-validator,node-5,node-6
3335
--node.alias=node-1-validator
3436
--inx.enabled=true
3537
--inx.bindAddress=0.0.0.0:9029
@@ -62,10 +64,11 @@ services:
6264
- ./config.json:/app/config.json:ro
6365
command: >
6466
${COMMON_CONFIG}
65-
${AUTOPEERING_CONFIG}
6667
--db.path==${DB_PATH_V2:-/app/data/database}
6768
--protocol.snapshot.path=${SNAPSHOT_PATH_V2:-/app/data/snapshots/snapshot.bin}
6869
--p2p.identityPrivateKey=ba771419c52132a0dfb2521ed18667813f398da159010a55a0a482af939affb92d3338789ad4a07a7631b91791deb11f82ed5dc612822f24275e9f7a313b691f
70+
--p2p.peers=/dns/node-1-validator/tcp/15600/p2p/12D3KooWRVt4Engu27jHnF2RjfX48EqiAqJbgLfFdHNt3Vn6BtJK,/dns/node-3-validator/tcp/15600/p2p/12D3KooWPr1mW33PGhv3oRbPQQDesN4THBB3WgnYsNzCfnQLr5QR,/dns/node-4-validator/tcp/15600/p2p/12D3KooWRxDSg2H7ThEJyn4HNkL1ixsqm6PgjCtkTG1hm7NpYG4Q,/dns/node-5/tcp/15600/p2p/12D3KooWG9S868XrL1wzeUbMXDtBTAaxwuqktAzUodFFES8uoTGz,/dns/node-6/tcp/15600/p2p/12D3KooWFatFVM1wyGnMUwJrMW7YwD6j32iq5SCA9S7e386biZ73
71+
--p2p.peerAliases=node-1-validator,node-3-validator,node-4-validator,node-5,node-6
6972
--node.alias=node-2-validator
7073
--inx.enabled=true
7174
--inx.bindAddress=0.0.0.0:9029
@@ -96,10 +99,11 @@ services:
9699
- ./config.json:/app/config.json:ro
97100
command: >
98101
${COMMON_CONFIG}
99-
${AUTOPEERING_CONFIG}
100102
--db.path==${DB_PATH_V3:-/app/data/database}
101103
--protocol.snapshot.path=${SNAPSHOT_PATH_V3:-/app/data/snapshots/snapshot.bin}
102104
--p2p.identityPrivateKey=a6261ac049755675ff1437654ca9f83b305055f01ff08c4f039209ef5a4a7d96d06fb61df77a8815209a8f4d204226dee593e50d0ec897ec440a2c1fbde77656
105+
--p2p.peers=/dns/node-1-validator/tcp/15600/p2p/12D3KooWRVt4Engu27jHnF2RjfX48EqiAqJbgLfFdHNt3Vn6BtJK,/dns/node-2-validator/tcp/15600/p2p/12D3KooWCropDmzpoLy8UrFg59M1oUx7k1UmQmuHrmN5RDgp6pVL,/dns/node-4-validator/tcp/15600/p2p/12D3KooWRxDSg2H7ThEJyn4HNkL1ixsqm6PgjCtkTG1hm7NpYG4Q,/dns/node-5/tcp/15600/p2p/12D3KooWG9S868XrL1wzeUbMXDtBTAaxwuqktAzUodFFES8uoTGz,/dns/node-6/tcp/15600/p2p/12D3KooWFatFVM1wyGnMUwJrMW7YwD6j32iq5SCA9S7e386biZ73
106+
--p2p.peerAliases=node-1-validator,node-2-validator,node-4-validator,node-5,node-6
103107
--node.alias=node-3-validator
104108
--inx.enabled=true
105109
--inx.bindAddress=0.0.0.0:9029
@@ -130,10 +134,11 @@ services:
130134
- ./config.json:/app/config.json:ro
131135
command: >
132136
${COMMON_CONFIG}
133-
${AUTOPEERING_CONFIG}
134137
--db.path==${DB_PATH_V4:-/app/data/database}
135138
--protocol.snapshot.path=${SNAPSHOT_PATH_V4:-/app/data/snapshots/snapshot.bin}
136139
--p2p.identityPrivateKey=f205f6c4525069f71f9c7e987d72421a16c7900056b494a2b85fdf7942cf906aefbdc580f5d1ce4ae3f86ccfe109c6cd76df9b0e710a437b2aa964358c7b9449
140+
--p2p.peers=/dns/node-1-validator/tcp/15600/p2p/12D3KooWRVt4Engu27jHnF2RjfX48EqiAqJbgLfFdHNt3Vn6BtJK,/dns/node-2-validator/tcp/15600/p2p/12D3KooWCropDmzpoLy8UrFg59M1oUx7k1UmQmuHrmN5RDgp6pVL,/dns/node-3-validator/tcp/15600/p2p/12D3KooWPr1mW33PGhv3oRbPQQDesN4THBB3WgnYsNzCfnQLr5QR,/dns/node-5/tcp/15600/p2p/12D3KooWG9S868XrL1wzeUbMXDtBTAaxwuqktAzUodFFES8uoTGz,/dns/node-6/tcp/15600/p2p/12D3KooWFatFVM1wyGnMUwJrMW7YwD6j32iq5SCA9S7e386biZ73
141+
--p2p.peerAliases=node-1-validator,node-2-validator,node-3-validator,node-5,node-6
137142
--node.alias=node-4-validator
138143
--inx.enabled=true
139144
--inx.bindAddress=0.0.0.0:9029
@@ -162,10 +167,11 @@ services:
162167
- ./config.json:/app/config.json:ro
163168
command: >
164169
${COMMON_CONFIG}
165-
${AUTOPEERING_CONFIG}
166170
--db.path==${DB_PATH_node5:-/app/data/database}
167171
--protocol.snapshot.path=${SNAPSHOT_PATH_node5:-/app/data/snapshots/snapshot.bin}
168172
--p2p.identityPrivateKey=03feb3bcd25e57f75697bb329e6e0100680431e4c45c85bc013da2aea9e9d0345e08a0c37407dc62369deebc64cb0fb3ea26127d19d141ee7fb8eaa6b92019d7
173+
--p2p.peers=/dns/node-1-validator/tcp/15600/p2p/12D3KooWRVt4Engu27jHnF2RjfX48EqiAqJbgLfFdHNt3Vn6BtJK,/dns/node-2-validator/tcp/15600/p2p/12D3KooWCropDmzpoLy8UrFg59M1oUx7k1UmQmuHrmN5RDgp6pVL,/dns/node-3-validator/tcp/15600/p2p/12D3KooWPr1mW33PGhv3oRbPQQDesN4THBB3WgnYsNzCfnQLr5QR,/dns/node-4-validator/tcp/15600/p2p/12D3KooWRxDSg2H7ThEJyn4HNkL1ixsqm6PgjCtkTG1hm7NpYG4Q,/dns/node-6/tcp/15600/p2p/12D3KooWFatFVM1wyGnMUwJrMW7YwD6j32iq5SCA9S7e386biZ73
174+
--p2p.peerAliases=node-1-validator,node-2-validator,node-3-validator,node-4-validator,node-6
169175
--node.alias=node-5
170176
--inx.enabled=true
171177
--inx.bindAddress=0.0.0.0:9029
@@ -196,10 +202,11 @@ services:
196202
- ./config.json:/app/config.json:ro
197203
command: >
198204
${COMMON_CONFIG}
199-
${AUTOPEERING_CONFIG}
200205
--db.path==${DB_PATH_node6:-/app/data/database}
201206
--protocol.snapshot.path=${SNAPSHOT_PATH_node6:-/app/data/snapshots/snapshot.bin}
202207
--p2p.identityPrivateKey=7d1491df3ef334dee988d6cdfc4b430b996d520bd63375a01d6754f8cee979b855b200fbea8c936ea1937a27e6ad72a7c9a21c1b17c2bd3c11f1f6994d813446
208+
--p2p.peers=/dns/node-1-validator/tcp/15600/p2p/12D3KooWRVt4Engu27jHnF2RjfX48EqiAqJbgLfFdHNt3Vn6BtJK,/dns/node-2-validator/tcp/15600/p2p/12D3KooWCropDmzpoLy8UrFg59M1oUx7k1UmQmuHrmN5RDgp6pVL,/dns/node-3-validator/tcp/15600/p2p/12D3KooWPr1mW33PGhv3oRbPQQDesN4THBB3WgnYsNzCfnQLr5QR,/dns/node-4-validator/tcp/15600/p2p/12D3KooWRxDSg2H7ThEJyn4HNkL1ixsqm6PgjCtkTG1hm7NpYG4Q,/dns/node-5/tcp/15600/p2p/12D3KooWG9S868XrL1wzeUbMXDtBTAaxwuqktAzUodFFES8uoTGz
209+
--p2p.peerAliases=node-1-validator,node-2-validator,node-3-validator,node-4-validator,node-5
203210
--node.alias=node-6
204211
--inx.enabled=true
205212
--inx.bindAddress=0.0.0.0:9029
@@ -356,6 +363,7 @@ services:
356363
--inx.address=node-1-validator:9029
357364
--validator.ignoreBootstrapped=true
358365
--validator.accountAddress=rms1pzg8cqhfxqhq7pt37y8cs4v5u4kcc48lquy2k73ehsdhf5ukhya3y5rx2w6
366+
--validator.candidacyRetryInterval=${CANDIDACY_RETRY_INTERVAL:-10s}
359367
--validator.issueCandidacyPayload=${ISSUE_CANDIDACY_PAYLOAD_V1:-true}
360368
profiles:
361369
- minimal
@@ -376,6 +384,7 @@ services:
376384
--logger.level=debug
377385
--inx.address=node-2-validator:9029
378386
--validator.accountAddress=rms1pqm4xk8e9ny5w5rxjkvtp249tfhlwvcshyr3pc0665jvp7g3hc875k538hl
387+
--validator.candidacyRetryInterval=${CANDIDACY_RETRY_INTERVAL:-10s}
379388
--validator.issueCandidacyPayload=${ISSUE_CANDIDACY_PAYLOAD_V2:-true}
380389
profiles:
381390
- full
@@ -395,6 +404,7 @@ services:
395404
--logger.level=debug
396405
--inx.address=node-3-validator:9029
397406
--validator.accountAddress=rms1pp4wuuz0y42caz48vv876qfpmffswsvg40zz8v79sy8cp0jfxm4kunflcgt
407+
--validator.candidacyRetryInterval=${CANDIDACY_RETRY_INTERVAL:-10s}
398408
--validator.issueCandidacyPayload=${ISSUE_CANDIDACY_PAYLOAD_V3:-true}
399409
profiles:
400410
- full
@@ -414,6 +424,7 @@ services:
414424
--logger.level=debug
415425
--inx.address=node-4-validator:9029
416426
--validator.accountAddress=rms1pr8cxs3dzu9xh4cduff4dd4cxdthpjkpwmz2244f75m0urslrsvtsshrrjw
427+
--validator.candidacyRetryInterval=${CANDIDACY_RETRY_INTERVAL:-10s}
417428
--validator.issueCandidacyPayload=${ISSUE_CANDIDACY_PAYLOAD_V4:-true}
418429
profiles:
419430
- full

0 commit comments

Comments
 (0)