Skip to content

Commit 716e500

Browse files
authored
Remove AddActionValidators (iotexproject#1692)
1 parent b40055e commit 716e500

16 files changed

+54
-54
lines changed

action/protocol/context.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ type RunActionsCtx struct {
4545
Nonce uint64
4646
// History indicates whether to save account/contract history or not
4747
History bool
48-
// Registry is the pointer protocol registry
48+
// Registry is the pointer of protocol registry
4949
Registry *Registry
5050
}
5151

@@ -59,6 +59,8 @@ type ValidateActionsCtx struct {
5959
Caller address.Address
6060
// Genesis is a copy of current genesis
6161
Genesis genesis.Genesis
62+
// Registry is the pointer of protocol registry
63+
Registry *Registry
6264
}
6365

6466
// WithRunActionsCtx add RunActionsCtx into context.

action/protocol/execution/protocol_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,6 @@ func (sct *SmartContractTest) prepareBlockchain(
303303

304304
r.NotNil(bc)
305305
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
306-
bc.Validator().AddActionValidators(account.NewProtocol(), NewProtocol(bc.BlockDAO().GetBlockHash), reward)
307306
sf := bc.Factory()
308307
r.NotNil(sf)
309308
execution := NewProtocol(bc.BlockDAO().GetBlockHash)
@@ -489,7 +488,6 @@ func TestProtocol_Handle(t *testing.T) {
489488
exeProtocol := NewProtocol(bc.BlockDAO().GetBlockHash)
490489
require.NoError(registry.Register(ProtocolID, exeProtocol))
491490
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
492-
bc.Validator().AddActionValidators(account.NewProtocol(), exeProtocol)
493491
sf := bc.Factory()
494492
require.NotNil(sf)
495493
require.NoError(bc.Start(ctx))

action/protocol/generic_validator_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func TestActionProto(t *testing.T) {
2626
require := require.New(t)
2727
caller, err := address.FromString("io1mflp9m6hcgm2qcghchsdqj3z3eccrnekx9p0ms")
2828
require.NoError(err)
29-
ctx := ValidateActionsCtx{1, "io1emxf8zzqckhgjde6dqd97ts0y3q496gm3fdrl6", caller, config.Default.Genesis}
29+
ctx := ValidateActionsCtx{1, "io1emxf8zzqckhgjde6dqd97ts0y3q496gm3fdrl6", caller, config.Default.Genesis, &Registry{}}
3030
c := WithValidateActionsCtx(context.Background(), ctx)
3131
valid := NewGenericValidator(func(addr string) (uint64, error) {
3232
if strings.EqualFold("io1emxf8zzqckhgjde6dqd97ts0y3q496gm3fdrl6", addr) {
@@ -70,7 +70,7 @@ func TestActionProto(t *testing.T) {
7070
{
7171
caller, err := address.FromString("io1emxf8zzqckhgjde6dqd97ts0y3q496gm3fdrl6")
7272
require.NoError(err)
73-
ctx := ValidateActionsCtx{1, "io1emxf8zzqckhgjde6dqd97ts0y3q496gm3fdrl6", caller, config.Default.Genesis}
73+
ctx := ValidateActionsCtx{1, "io1emxf8zzqckhgjde6dqd97ts0y3q496gm3fdrl6", caller, config.Default.Genesis, &Registry{}}
7474
c := WithValidateActionsCtx(context.Background(), ctx)
7575
v, err := action.NewExecution("", 0, big.NewInt(10), uint64(10), big.NewInt(10), data)
7676
require.NoError(err)

api/api_test.go

-1
Original file line numberDiff line numberDiff line change
@@ -1813,7 +1813,6 @@ func setupChain(cfg config.Config) (blockchain.Blockchain, blockdao.BlockDAO, bl
18131813
return nil, nil, nil, nil, err
18141814
}
18151815
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
1816-
bc.Validator().AddActionValidators(acc, evm, r)
18171816

18181817
return bc, dao, indexer, &registry, nil
18191818
}

blockchain/blockchain.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,6 @@ func NewBlockchain(cfg config.Config, dao blockdao.BlockDAO, opts ...Option) Blo
283283
validatorAddr: cfg.ProducerAddress().String(),
284284
senderBlackList: senderBlackList,
285285
}
286-
287286
if chain.dao != nil {
288287
chain.lifecycle.Add(chain.dao)
289288
}
@@ -728,7 +727,7 @@ func (bc *blockchain) validateBlock(blk *block.Block) error {
728727
}
729728
ctx := protocol.WithValidateActionsCtx(
730729
context.Background(),
731-
protocol.ValidateActionsCtx{Genesis: bc.config.Genesis},
730+
protocol.ValidateActionsCtx{Genesis: bc.config.Genesis, Registry: bc.registry},
732731
)
733732

734733
err := bc.validator.Validate(ctx, blk, bc.tipHeight, prevBlkHash)

blockchain/blockchain_test.go

+7-9
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,6 @@ func TestCreateBlockchain(t *testing.T) {
430430
exec := execution.NewProtocol(bc.BlockDAO().GetBlockHash)
431431
require.NoError(registry.Register(execution.ProtocolID, exec))
432432
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
433-
bc.Validator().AddActionValidators(acc, exec)
434433
require.NoError(bc.Start(ctx))
435434
require.NotNil(bc)
436435
height := bc.TipHeight()
@@ -462,7 +461,6 @@ func TestBlockchain_MintNewBlock(t *testing.T) {
462461
exec := execution.NewProtocol(bc.BlockDAO().GetBlockHash)
463462
require.NoError(t, registry.Register(execution.ProtocolID, exec))
464463
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
465-
bc.Validator().AddActionValidators(acc, exec)
466464
require.NoError(t, bc.Start(ctx))
467465
defer func() {
468466
require.NoError(t, bc.Stop(ctx))
@@ -526,7 +524,6 @@ func TestBlockchain_MintNewBlock_PopAccount(t *testing.T) {
526524
exec := execution.NewProtocol(bc.BlockDAO().GetBlockHash)
527525
require.NoError(t, registry.Register(execution.ProtocolID, exec))
528526
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
529-
bc.Validator().AddActionValidators(acc, exec)
530527
require.NoError(t, bc.Start(ctx))
531528
defer func() {
532529
require.NoError(t, bc.Stop(ctx))
@@ -624,7 +621,6 @@ func TestConstantinople(t *testing.T) {
624621
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
625622
exec := execution.NewProtocol(bc.BlockDAO().GetBlockHash)
626623
require.NoError(registry.Register(execution.ProtocolID, exec))
627-
bc.Validator().AddActionValidators(acc, exec)
628624
require.NoError(bc.Start(ctx))
629625
require.NoError(addCreatorToFactory(cfg, sf, &registry))
630626
defer func() {
@@ -782,7 +778,6 @@ func TestLoadBlockchainfromDB(t *testing.T) {
782778
exec := execution.NewProtocol(bc.BlockDAO().GetBlockHash)
783779
require.NoError(registry.Register(execution.ProtocolID, exec))
784780
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
785-
bc.Validator().AddActionValidators(acc, exec)
786781
require.NoError(bc.Start(ctx))
787782
require.NoError(addCreatorToFactory(cfg, sf, &registry))
788783

@@ -815,7 +810,6 @@ func TestLoadBlockchainfromDB(t *testing.T) {
815810
rewardingProtocol := rewarding.NewProtocol(bc, rolldposProtocol)
816811
require.NoError(registry.Register(rewarding.ProtocolID, rewardingProtocol))
817812
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
818-
bc.Validator().AddActionValidators(accountProtocol)
819813
require.NoError(bc.Start(ctx))
820814
defer func() {
821815
require.NoError(bc.Stop(ctx))
@@ -1162,9 +1156,14 @@ func TestActions(t *testing.T) {
11621156
t.Skip()
11631157
require := require.New(t)
11641158
cfg := config.Default
1159+
1160+
registry := protocol.Registry{}
1161+
acc := account.NewProtocol()
1162+
require.NoError(registry.Register(account.ProtocolID, acc))
1163+
11651164
ctx := protocol.WithValidateActionsCtx(
11661165
context.Background(),
1167-
protocol.ValidateActionsCtx{Genesis: cfg.Genesis},
1166+
protocol.ValidateActionsCtx{Genesis: cfg.Genesis, Registry: &registry},
11681167
)
11691168
testTrieFile, _ := ioutil.TempFile(os.TempDir(), "trie")
11701169
testTriePath := testTrieFile.Name()
@@ -1180,7 +1179,7 @@ func TestActions(t *testing.T) {
11801179
sf, _ := factory.NewFactory(cfg, factory.InMemTrieOption())
11811180

11821181
// Create a blockchain from scratch
1183-
bc := NewBlockchain(cfg, nil, PrecreatedStateFactoryOption(sf), BoltDBDaoOption())
1182+
bc := NewBlockchain(cfg, nil, PrecreatedStateFactoryOption(sf), BoltDBDaoOption(), RegistryOption(&registry))
11841183
require.NoError(bc.Start(context.Background()))
11851184
defer func() {
11861185
require.NoError(bc.Stop(context.Background()))
@@ -1209,7 +1208,6 @@ func TestActions(t *testing.T) {
12091208
require.NoError(sf.Commit(ws))
12101209

12111210
bc.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
1212-
bc.Validator().AddActionValidators(account.NewProtocol())
12131211
actionMap := make(map[string][]action.SealedEnvelope)
12141212
for i := 0; i < 5000; i++ {
12151213
tsf, err := testutil.SignedTransfer(c, priKeyA, 1, big.NewInt(2), []byte{}, testutil.TestGasLimit, big.NewInt(testutil.TestGasPriceInt64))

blockchain/blockvalidator.go

+2-9
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ import (
2727
type Validator interface {
2828
// Validate validates the given block's content
2929
Validate(ctx context.Context, block *block.Block, tipHeight uint64, tipHash hash.Hash256) error
30-
// AddActionValidators add validators
31-
AddActionValidators(...protocol.ActionValidator)
30+
// AddActionEnvelopeValidators add validators
3231
AddActionEnvelopeValidators(...protocol.ActionEnvelopeValidator)
3332

3433
// SetActPool set ActPoolManager
@@ -39,7 +38,6 @@ type validator struct {
3938
sf factory.Factory
4039
validatorAddr string
4140
actionEnvelopeValidators []protocol.ActionEnvelopeValidator
42-
actionValidators []protocol.ActionValidator
4341
senderBlackList map[string]bool
4442
actPool ActPoolManager
4543
}
@@ -73,11 +71,6 @@ func (v *validator) Validate(ctx context.Context, blk *block.Block, tipHeight ui
7371
return v.validateActionsOnly(ctx, blk)
7472
}
7573

76-
// AddActionValidators add validators
77-
func (v *validator) AddActionValidators(validators ...protocol.ActionValidator) {
78-
v.actionValidators = append(v.actionValidators, validators...)
79-
}
80-
8174
// AddActionEnvelopeValidators add action envelope validators
8275
func (v *validator) AddActionEnvelopeValidators(validators ...protocol.ActionEnvelopeValidator) {
8376
v.actionEnvelopeValidators = append(v.actionEnvelopeValidators, validators...)
@@ -188,7 +181,7 @@ func (v *validator) validateActions(
188181
}(validator, selp)
189182
}
190183

191-
for _, validator := range v.actionValidators {
184+
for _, validator := range vaCtx.Registry.All() {
192185
wg.Add(1)
193186
go func(validator protocol.ActionValidator, act action.Action) {
194187
defer wg.Done()

blockchain/blockvalidator_test.go

+29-15
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,14 @@ func TestSignBlock(t *testing.T) {
8686

8787
func TestWrongNonce(t *testing.T) {
8888
cfg := config.Default
89+
90+
require := require.New(t)
91+
registry := protocol.Registry{}
92+
require.NoError(registry.Register(account.ProtocolID, account.NewProtocol()))
93+
8994
ctx := protocol.WithValidateActionsCtx(
9095
context.Background(),
91-
protocol.ValidateActionsCtx{Genesis: cfg.Genesis},
96+
protocol.ValidateActionsCtx{Genesis: cfg.Genesis, Registry: &registry},
9297
)
9398
testTrieFile, _ := ioutil.TempFile(os.TempDir(), "trie")
9499
testTriePath := testTrieFile.Name()
@@ -100,11 +105,8 @@ func TestWrongNonce(t *testing.T) {
100105
testIndexPath := testIndexFile.Name()
101106
cfg.Chain.IndexDBPath = testIndexPath
102107

103-
require := require.New(t)
104108
sf, err := factory.NewFactory(cfg, factory.DefaultTrieOption())
105109
require.NoError(err)
106-
registry := protocol.Registry{}
107-
require.NoError(registry.Register(account.ProtocolID, account.NewProtocol()))
108110

109111
// Create a blockchain from scratch
110112
bc := NewBlockchain(cfg, nil, PrecreatedStateFactoryOption(sf), BoltDBDaoOption())
@@ -117,7 +119,6 @@ func TestWrongNonce(t *testing.T) {
117119

118120
val := &validator{sf: sf, validatorAddr: ""}
119121
val.AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
120-
val.AddActionValidators(account.NewProtocol())
121122

122123
// correct nonce
123124

@@ -250,20 +251,26 @@ func TestWrongNonce(t *testing.T) {
250251

251252
func TestWrongAddress(t *testing.T) {
252253
cfg := config.Default
253-
ctx := protocol.WithValidateActionsCtx(
254-
context.Background(),
255-
protocol.ValidateActionsCtx{Genesis: cfg.Genesis},
256-
)
254+
255+
ctx := context.Background()
257256
bc := NewBlockchain(cfg, nil, InMemStateFactoryOption(), InMemDaoOption())
258257
require.NoError(t, bc.Start(ctx))
259258
require.NotNil(t, bc)
260259
defer func() {
261260
err := bc.Stop(ctx)
262261
require.NoError(t, err)
263262
}()
263+
registry := protocol.Registry{}
264+
require.NoError(t, registry.Register(account.ProtocolID, account.NewProtocol()))
265+
require.NoError(t, registry.Register(execution.ProtocolID, execution.NewProtocol(bc.BlockDAO().GetBlockHash)))
266+
267+
ctx = protocol.WithValidateActionsCtx(
268+
ctx,
269+
protocol.ValidateActionsCtx{Genesis: cfg.Genesis, Registry: &registry},
270+
)
271+
264272
val := &validator{sf: bc.Factory(), validatorAddr: ""}
265273
val.AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
266-
val.AddActionValidators(account.NewProtocol(), execution.NewProtocol(bc.BlockDAO().GetBlockHash))
267274

268275
invalidRecipient := "io1qyqsyqcyq5narhapakcsrhksfajfcpl24us3xp38zwvsep"
269276
tsf, err := action.NewTransfer(1, big.NewInt(1), invalidRecipient, []byte{}, uint64(100000), big.NewInt(10))
@@ -308,10 +315,8 @@ func TestWrongAddress(t *testing.T) {
308315

309316
func TestBlackListAddress(t *testing.T) {
310317
cfg := config.Default
311-
ctx := protocol.WithValidateActionsCtx(
312-
context.Background(),
313-
protocol.ValidateActionsCtx{Genesis: cfg.Genesis},
314-
)
318+
319+
ctx := context.Background()
315320
recipientAddr := identityset.Address(28)
316321
senderKey := identityset.PrivateKey(27)
317322
addr, err := address.FromBytes(senderKey.PublicKey().Hash())
@@ -324,13 +329,22 @@ func TestBlackListAddress(t *testing.T) {
324329
err := bc.Stop(ctx)
325330
require.NoError(t, err)
326331
}()
332+
333+
registry := protocol.Registry{}
334+
require.NoError(t, registry.Register(account.ProtocolID, account.NewProtocol()))
335+
require.NoError(t, registry.Register(execution.ProtocolID, execution.NewProtocol(bc.BlockDAO().GetBlockHash)))
336+
337+
ctx = protocol.WithValidateActionsCtx(
338+
ctx,
339+
protocol.ValidateActionsCtx{Genesis: cfg.Genesis, Registry: &registry},
340+
)
341+
327342
senderBlackList := make(map[string]bool)
328343
for _, bannedSender := range cfg.ActPool.BlackList {
329344
senderBlackList[bannedSender] = true
330345
}
331346
val := &validator{sf: bc.Factory(), validatorAddr: "", senderBlackList: senderBlackList}
332347
val.AddActionEnvelopeValidators(protocol.NewGenericValidator(bc.Factory().Nonce))
333-
val.AddActionValidators(account.NewProtocol(), execution.NewProtocol(bc.BlockDAO().GetBlockHash))
334348
tsf, err := action.NewTransfer(1, big.NewInt(1), recipientAddr.String(), []byte{}, uint64(100000), big.NewInt(10))
335349
require.NoError(t, err)
336350
bd := &action.EnvelopeBuilder{}

blocksync/blocksync_test.go

+8-5
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ func TestBlockSyncerProcessBlockTipHeight(t *testing.T) {
176176
cfg, err := newTestConfig()
177177
require.Nil(err)
178178
registry := protocol.Registry{}
179+
acc := account.NewProtocol()
180+
require.NoError(registry.Register(account.ProtocolID, acc))
179181
rp := rolldpos.NewProtocol(cfg.Genesis.NumCandidateDelegates, cfg.Genesis.NumDelegates, cfg.Genesis.NumSubEpochs)
180182
require.NoError(registry.Register(rolldpos.ProtocolID, rp))
181183
chain := bc.NewBlockchain(
@@ -186,7 +188,6 @@ func TestBlockSyncerProcessBlockTipHeight(t *testing.T) {
186188
bc.RegistryOption(&registry),
187189
)
188190
chain.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(chain.Factory().Nonce))
189-
chain.Validator().AddActionValidators(account.NewProtocol())
190191
require.NoError(chain.Start(ctx))
191192
require.NotNil(chain)
192193
ap, err := actpool.NewActPool(chain, cfg.ActPool, actpool.EnableExperimentalActions())
@@ -234,6 +235,8 @@ func TestBlockSyncerProcessBlockOutOfOrder(t *testing.T) {
234235
cfg, err := newTestConfig()
235236
require.Nil(err)
236237
registry := protocol.Registry{}
238+
acc := account.NewProtocol()
239+
require.NoError(registry.Register(account.ProtocolID, acc))
237240
rp := rolldpos.NewProtocol(cfg.Genesis.NumCandidateDelegates, cfg.Genesis.NumDelegates, cfg.Genesis.NumSubEpochs)
238241
require.NoError(registry.Register(rolldpos.ProtocolID, rp))
239242
chain1 := bc.NewBlockchain(
@@ -245,7 +248,6 @@ func TestBlockSyncerProcessBlockOutOfOrder(t *testing.T) {
245248
)
246249
require.NotNil(chain1)
247250
chain1.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(chain1.Factory().Nonce))
248-
chain1.Validator().AddActionValidators(account.NewProtocol())
249251
require.NoError(chain1.Start(ctx))
250252
ap1, err := actpool.NewActPool(chain1, cfg.ActPool, actpool.EnableExperimentalActions())
251253
require.NotNil(ap1)
@@ -257,6 +259,7 @@ func TestBlockSyncerProcessBlockOutOfOrder(t *testing.T) {
257259
bs1, err := NewBlockSyncer(cfg, chain1, ap1, cs1, opts...)
258260
require.Nil(err)
259261
registry2 := protocol.Registry{}
262+
require.NoError(registry2.Register(account.ProtocolID, acc))
260263
require.NoError(registry2.Register(rolldpos.ProtocolID, rp))
261264
chain2 := bc.NewBlockchain(
262265
cfg,
@@ -267,7 +270,6 @@ func TestBlockSyncerProcessBlockOutOfOrder(t *testing.T) {
267270
)
268271
require.NotNil(chain2)
269272
chain2.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(chain2.Factory().Nonce))
270-
chain2.Validator().AddActionValidators(account.NewProtocol())
271273
require.NoError(chain2.Start(ctx))
272274
ap2, err := actpool.NewActPool(chain2, cfg.ActPool, actpool.EnableExperimentalActions())
273275
require.NotNil(ap2)
@@ -325,6 +327,8 @@ func TestBlockSyncerProcessBlockSync(t *testing.T) {
325327
cfg, err := newTestConfig()
326328
require.Nil(err)
327329
registry := protocol.Registry{}
330+
acc := account.NewProtocol()
331+
require.NoError(registry.Register(account.ProtocolID, acc))
328332
rolldposProtocol := rolldpos.NewProtocol(
329333
cfg.Genesis.NumCandidateDelegates,
330334
cfg.Genesis.NumDelegates,
@@ -339,7 +343,6 @@ func TestBlockSyncerProcessBlockSync(t *testing.T) {
339343
bc.RegistryOption(&registry),
340344
)
341345
chain1.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(chain1.Factory().Nonce))
342-
chain1.Validator().AddActionValidators(account.NewProtocol())
343346
require.NoError(chain1.Start(ctx))
344347
require.NotNil(chain1)
345348
ap1, err := actpool.NewActPool(chain1, cfg.ActPool)
@@ -351,6 +354,7 @@ func TestBlockSyncerProcessBlockSync(t *testing.T) {
351354
bs1, err := NewBlockSyncer(cfg, chain1, ap1, cs1, opts...)
352355
require.Nil(err)
353356
registry2 := protocol.Registry{}
357+
require.NoError(registry2.Register(account.ProtocolID, acc))
354358
require.NoError(registry2.Register(rolldpos.ProtocolID, rolldposProtocol))
355359
chain2 := bc.NewBlockchain(
356360
cfg,
@@ -360,7 +364,6 @@ func TestBlockSyncerProcessBlockSync(t *testing.T) {
360364
bc.RegistryOption(&registry2),
361365
)
362366
chain2.Validator().AddActionEnvelopeValidators(protocol.NewGenericValidator(chain2.Factory().Nonce))
363-
chain2.Validator().AddActionValidators(account.NewProtocol())
364367
require.NoError(chain2.Start(ctx))
365368
require.NotNil(chain2)
366369
ap2, err := actpool.NewActPool(chain2, cfg.ActPool, actpool.EnableExperimentalActions())

0 commit comments

Comments
 (0)