Skip to content

Commit a2cdfd3

Browse files
committed
Remove NIPoST and NodeID from types.ActivationTx (#5870)
## Motivation Trimming down types.ActivationTx from unwanted fields. Prerequisite for ATX V2.
1 parent 213a585 commit a2cdfd3

25 files changed

+158
-340
lines changed

activation/activation_multi_test.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"golang.org/x/sync/errgroup"
1414

1515
"github.com/spacemeshos/go-spacemesh/activation/wire"
16+
"github.com/spacemeshos/go-spacemesh/codec"
1617
"github.com/spacemeshos/go-spacemesh/common/types"
1718
"github.com/spacemeshos/go-spacemesh/p2p/pubsub"
1819
"github.com/spacemeshos/go-spacemesh/sql"
@@ -409,7 +410,7 @@ func Test_Builder_Multi_HappyPath(t *testing.T) {
409410
atxChan := make(chan struct{})
410411
atxStep := make(map[types.NodeID]chan struct{})
411412
var atxMtx sync.Mutex
412-
atxs := make(map[types.NodeID]types.ActivationTx)
413+
atxs := make(map[types.NodeID]wire.ActivationTxV1)
413414
endChan := make(chan struct{})
414415
for _, sig := range tab.signers {
415416
ch := make(chan struct{})
@@ -429,9 +430,9 @@ func Test_Builder_Multi_HappyPath(t *testing.T) {
429430
func(ctx context.Context, _ string, got []byte) error {
430431
atxMtx.Lock()
431432
defer atxMtx.Unlock()
432-
atx, err := wire.ActivationTxFromBytes(got)
433-
require.NoError(t, err)
434-
atxs[atx.SmesherID] = *atx
433+
var atx wire.ActivationTxV1
434+
codec.MustDecode(got, &atx)
435+
atxs[atx.SmesherID] = atx
435436
return nil
436437
},
437438
)
@@ -488,21 +489,21 @@ func Test_Builder_Multi_HappyPath(t *testing.T) {
488489

489490
for _, sig := range tab.signers {
490491
atx := atxs[sig.NodeID()]
491-
require.Equal(t, initialPost[sig.NodeID()].Nonce, atx.NIPostChallenge.InitialPost.Nonce)
492-
require.Equal(t, initialPost[sig.NodeID()].Pow, atx.NIPostChallenge.InitialPost.Pow)
493-
require.Equal(t, initialPost[sig.NodeID()].Indices, atx.NIPostChallenge.InitialPost.Indices)
492+
require.Equal(t, initialPost[sig.NodeID()].Nonce, atx.InitialPost.Nonce)
493+
require.Equal(t, initialPost[sig.NodeID()].Pow, atx.InitialPost.Pow)
494+
require.Equal(t, initialPost[sig.NodeID()].Indices, atx.InitialPost.Indices)
494495

495-
require.Equal(t, initialPost[sig.NodeID()].CommitmentATX, *atx.NIPostChallenge.CommitmentATX)
496-
require.Equal(t, postGenesisEpoch+1, atx.NIPostChallenge.PublishEpoch)
497-
require.Equal(t, types.EmptyATXID, atx.NIPostChallenge.PrevATXID)
498-
require.Equal(t, tab.goldenATXID, atx.NIPostChallenge.PositioningATX)
499-
require.Equal(t, uint64(0), atx.NIPostChallenge.Sequence)
496+
require.Equal(t, initialPost[sig.NodeID()].CommitmentATX, *atx.CommitmentATXID)
497+
require.Equal(t, postGenesisEpoch+1, atx.PublishEpoch)
498+
require.Equal(t, types.EmptyATXID, atx.PrevATXID)
499+
require.Equal(t, tab.goldenATXID, atx.PositioningATXID)
500+
require.Equal(t, uint64(0), atx.Sequence)
500501

501502
require.Equal(t, types.Address{}, atx.Coinbase)
502503
require.Equal(t, nipostState[sig.NodeID()].NumUnits, atx.NumUnits)
503-
require.Equal(t, nipostState[sig.NodeID()].NIPost, atx.NIPost)
504+
require.Equal(t, nipostState[sig.NodeID()].NIPost, wire.NiPostFromWireV1(atx.NIPost))
504505
require.Equal(t, sig.NodeID(), *atx.NodeID)
505-
require.Equal(t, nipostState[sig.NodeID()].VRFNonce, *atx.VRFNonce)
506+
require.Equal(t, uint64(nipostState[sig.NodeID()].VRFNonce), *atx.VRFNonce)
506507
}
507508

508509
// stop smeshing

activation/activation_test.go

Lines changed: 38 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"golang.org/x/sync/errgroup"
2222

2323
"github.com/spacemeshos/go-spacemesh/activation/wire"
24+
"github.com/spacemeshos/go-spacemesh/codec"
2425
"github.com/spacemeshos/go-spacemesh/common/types"
2526
"github.com/spacemeshos/go-spacemesh/events"
2627
"github.com/spacemeshos/go-spacemesh/p2p/pubsub"
@@ -51,11 +52,10 @@ func TestMain(m *testing.M) {
5152

5253
func newAtx(
5354
challenge types.NIPostChallenge,
54-
nipost *types.NIPost,
5555
numUnits uint32,
5656
coinbase types.Address,
5757
) *types.ActivationTx {
58-
atx := types.NewActivationTx(challenge, coinbase, nipost, numUnits, nil)
58+
atx := types.NewActivationTx(challenge, coinbase, numUnits, nil)
5959
atx.SetEffectiveNumUnits(numUnits)
6060
atx.SetReceived(time.Now())
6161
atx.SetValidity(types.Valid)
@@ -353,8 +353,7 @@ func TestBuilder_PublishActivationTx_HappyFlow(t *testing.T) {
353353
PositioningATX: tab.goldenATXID,
354354
CommitmentATX: &tab.goldenATXID,
355355
}
356-
nipostData := newNIPostWithPoet(t, []byte("66666"))
357-
prevAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
356+
prevAtx := newAtx(ch, 2, types.Address{})
358357
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
359358
vPrevAtx, err := prevAtx.Verify(0, 1)
360359
require.NoError(t, err)
@@ -396,8 +395,7 @@ func TestBuilder_Loop_WaitsOnStaleChallenge(t *testing.T) {
396395
PositioningATX: tab.goldenATXID,
397396
CommitmentATX: &tab.goldenATXID,
398397
}
399-
nipostData := newNIPostWithPoet(t, []byte("66666"))
400-
prevAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
398+
prevAtx := newAtx(ch, 2, types.Address{})
401399
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
402400
vPrevAtx, err := prevAtx.Verify(0, 1)
403401
require.NoError(t, err)
@@ -454,8 +452,7 @@ func TestBuilder_PublishActivationTx_FaultyNet(t *testing.T) {
454452
PositioningATX: tab.goldenATXID,
455453
CommitmentATX: &tab.goldenATXID,
456454
}
457-
nipostData := newNIPostWithPoet(t, []byte("66666"))
458-
prevAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
455+
prevAtx := newAtx(ch, 2, types.Address{})
459456
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
460457
vPrevAtx, err := prevAtx.Verify(0, 1)
461458
require.NoError(t, err)
@@ -543,8 +540,7 @@ func TestBuilder_PublishActivationTx_UsesExistingChallengeOnLatePublish(t *testi
543540
PositioningATX: types.ATXID{1, 2, 3},
544541
CommitmentATX: nil,
545542
}
546-
nipostData := newNIPostWithPoet(t, []byte("66666"))
547-
prevAtx := newAtx(challenge, nipostData.NIPost, posEpoch.Uint32(), types.Address{})
543+
prevAtx := newAtx(challenge, posEpoch.Uint32(), types.Address{})
548544
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
549545
vPrevAtx, err := prevAtx.Verify(0, 1)
550546
require.NoError(t, err)
@@ -628,8 +624,7 @@ func TestBuilder_PublishActivationTx_RebuildNIPostWhenTargetEpochPassed(t *testi
628624
PositioningATX: types.ATXID{1, 2, 3},
629625
CommitmentATX: nil,
630626
}
631-
nipostData := newNIPostWithPoet(t, []byte("66666"))
632-
prevAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
627+
prevAtx := newAtx(ch, 2, types.Address{})
633628
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
634629
vPrevAtx, err := prevAtx.Verify(0, 1)
635630
require.NoError(t, err)
@@ -700,7 +695,7 @@ func TestBuilder_PublishActivationTx_RebuildNIPostWhenTargetEpochPassed(t *testi
700695
PositioningATX: types.ATXID{1, 2, 3},
701696
CommitmentATX: nil,
702697
}
703-
posAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
698+
posAtx := newAtx(ch, 2, types.Address{})
704699
require.NoError(t, SignAndFinalizeAtx(sig, posAtx))
705700
vPosAtx, err := posAtx.Verify(0, 1)
706701
require.NoError(t, err)
@@ -731,10 +726,9 @@ func TestBuilder_PublishActivationTx_NoPrevATX(t *testing.T) {
731726
PositioningATX: types.ATXID{1, 2, 3},
732727
CommitmentATX: nil,
733728
}
734-
nipostData := newNIPostWithPoet(t, []byte("66666"))
735729
otherSigner, err := signing.NewEdSigner()
736730
require.NoError(t, err)
737-
posAtx := newAtx(challenge, nipostData.NIPost, 2, types.Address{})
731+
posAtx := newAtx(challenge, 2, types.Address{})
738732
require.NoError(t, SignAndFinalizeAtx(otherSigner, posAtx))
739733
vPosAtx, err := posAtx.Verify(0, 1)
740734
require.NoError(t, err)
@@ -786,10 +780,9 @@ func TestBuilder_PublishActivationTx_NoPrevATX_PublishFails_InitialPost_preserve
786780
PositioningATX: types.ATXID{1, 2, 3},
787781
CommitmentATX: nil,
788782
}
789-
nipostData := newNIPostWithPoet(t, []byte("66666"))
790783
otherSigner, err := signing.NewEdSigner()
791784
require.NoError(t, err)
792-
posAtx := newAtx(challenge, nipostData.NIPost, 2, types.Address{})
785+
posAtx := newAtx(challenge, 2, types.Address{})
793786
require.NoError(t, SignAndFinalizeAtx(otherSigner, posAtx))
794787
vPosAtx, err := posAtx.Verify(0, 1)
795788
require.NoError(t, err)
@@ -894,8 +887,7 @@ func TestBuilder_PublishActivationTx_PrevATXWithoutPrevATX(t *testing.T) {
894887
CommitmentATX: &tab.goldenATXID,
895888
}
896889
poetBytes := []byte("66666")
897-
nipostData := newNIPostWithPoet(t, poetBytes)
898-
posAtx := newAtx(challenge, nipostData.NIPost, 2, types.Address{})
890+
posAtx := newAtx(challenge, 2, types.Address{})
899891
require.NoError(t, SignAndFinalizeAtx(otherSigner, posAtx))
900892
vPosAtx, err := posAtx.Verify(0, 2)
901893
r.NoError(err)
@@ -909,7 +901,7 @@ func TestBuilder_PublishActivationTx_PrevATXWithoutPrevATX(t *testing.T) {
909901
CommitmentATX: nil,
910902
}
911903
challenge.InitialPost = initialPost
912-
prevAtx := newAtx(challenge, nipostData.NIPost, 2, types.Address{})
904+
prevAtx := newAtx(challenge, 2, types.Address{})
913905
prevAtx.InitialPost = initialPost
914906
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
915907
vPrevAtx, err := prevAtx.Verify(0, 1)
@@ -956,31 +948,22 @@ func TestBuilder_PublishActivationTx_PrevATXWithoutPrevATX(t *testing.T) {
956948
tab.mpub.EXPECT().
957949
Publish(gomock.Any(), gomock.Any(), gomock.Any()).
958950
DoAndReturn(func(ctx context.Context, _ string, msg []byte) error {
959-
atx, err := wire.ActivationTxFromBytes(msg)
960-
require.NoError(t, err)
961-
atx.SetReceived(time.Now().Local())
962-
963-
atx.SetEffectiveNumUnits(atx.NumUnits)
964-
vAtx, err := atx.Verify(0, 1)
965-
r.NoError(err)
966-
r.Equal(sig.NodeID(), vAtx.SmesherID)
967-
968-
r.NoError(atxs.Add(tab.db, vAtx))
951+
var atx wire.ActivationTxV1
952+
codec.MustDecode(msg, &atx)
969953

954+
r.Equal(sig.NodeID(), atx.SmesherID)
970955
r.Equal(prevAtx.Sequence+1, atx.Sequence)
971956
r.Equal(prevAtx.ID(), atx.PrevATXID)
972957
r.Nil(atx.InitialPost)
973-
r.Nil(atx.CommitmentATX)
958+
r.Nil(atx.CommitmentATXID)
974959
r.Nil(atx.VRFNonce)
975-
976-
r.Equal(posAtx.ID(), atx.PositioningATX)
960+
r.Equal(posAtx.ID(), atx.PositioningATXID)
977961
r.Equal(postAtxPubEpoch+1, atx.PublishEpoch)
978-
r.Equal(types.BytesToHash(poetBytes), atx.GetPoetProofRef())
979-
962+
r.Equal(poetBytes, atx.NIPost.PostMetadata.Challenge)
980963
return nil
981964
})
982965

983-
tab.mnipost.EXPECT().ResetState(sig.NodeID()).Return(nil)
966+
tab.mnipost.EXPECT().ResetState(sig.NodeID())
984967

985968
r.NoError(tab.PublishActivationTx(context.Background(), sig))
986969

@@ -1009,8 +992,7 @@ func TestBuilder_PublishActivationTx_TargetsEpochBasedOnPosAtx(t *testing.T) {
1009992
CommitmentATX: &types.ATXID{4, 5, 6},
1010993
}
1011994
poetBytes := []byte("66666")
1012-
nipostData := newNIPostWithPoet(t, poetBytes)
1013-
posAtx := newAtx(challenge, nipostData.NIPost, 2, types.Address{})
995+
posAtx := newAtx(challenge, 2, types.Address{})
1014996
require.NoError(t, SignAndFinalizeAtx(otherSigner, posAtx))
1015997
vPosAtx, err := posAtx.Verify(0, 1)
1016998
r.NoError(err)
@@ -1055,24 +1037,16 @@ func TestBuilder_PublishActivationTx_TargetsEpochBasedOnPosAtx(t *testing.T) {
10551037
tab.mpub.EXPECT().
10561038
Publish(gomock.Any(), gomock.Any(), gomock.Any()).
10571039
DoAndReturn(func(ctx context.Context, _ string, msg []byte) error {
1058-
atx, err := wire.ActivationTxFromBytes(msg)
1059-
require.NoError(t, err)
1060-
atx.SetReceived(time.Now().Local())
1061-
1062-
atx.SetEffectiveNumUnits(atx.NumUnits)
1063-
vAtx, err := atx.Verify(0, 1)
1064-
r.NoError(err)
1065-
r.Equal(sig.NodeID(), vAtx.SmesherID)
1066-
1067-
r.NoError(atxs.Add(tab.db, vAtx))
1040+
var atx wire.ActivationTxV1
1041+
codec.MustDecode(msg, &atx)
10681042

1043+
r.Equal(sig.NodeID(), atx.SmesherID)
10691044
r.Zero(atx.Sequence)
10701045
r.Equal(types.EmptyATXID, atx.PrevATXID)
10711046
r.NotNil(atx.InitialPost)
1072-
1073-
r.Equal(posAtx.ID(), atx.PositioningATX)
1047+
r.Equal(posAtx.ID(), atx.PositioningATXID)
10741048
r.Equal(posEpoch+1, atx.PublishEpoch)
1075-
r.Equal(types.BytesToHash(poetBytes), atx.GetPoetProofRef())
1049+
r.Equal(poetBytes, atx.NIPost.PostMetadata.Challenge)
10761050

10771051
return nil
10781052
})
@@ -1120,8 +1094,7 @@ func TestBuilder_PublishActivationTx_FailsWhenNIPostBuilderFails(t *testing.T) {
11201094
PositioningATX: types.ATXID{1, 2, 3},
11211095
CommitmentATX: nil,
11221096
}
1123-
nipostData := newNIPostWithPoet(t, []byte("66666"))
1124-
posAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
1097+
posAtx := newAtx(ch, 2, types.Address{})
11251098
require.NoError(t, SignAndFinalizeAtx(sig, posAtx))
11261099
vPosAtx, err := posAtx.Verify(0, 1)
11271100
require.NoError(t, err)
@@ -1157,8 +1130,7 @@ func TestBuilder_SignAtx(t *testing.T) {
11571130
PositioningATX: prevAtx,
11581131
CommitmentATX: nil,
11591132
}
1160-
nipost := newNIPostWithPoet(t, []byte("66666"))
1161-
atx := newAtx(challenge, nipost.NIPost, 100, types.Address{})
1133+
atx := newAtx(challenge, 100, types.Address{})
11621134
require.NoError(t, SignAndFinalizeAtx(sig, atx))
11631135

11641136
msg := wire.ActivationTxToWireV1(atx).SignedBytes()
@@ -1196,8 +1168,7 @@ func TestBuilder_RetryPublishActivationTx(t *testing.T) {
11961168
CommitmentATX: nil,
11971169
}
11981170
poetBytes := []byte("66666")
1199-
nipostData := newNIPostWithPoet(t, poetBytes)
1200-
prevAtx := newAtx(challenge, nipostData.NIPost, 2, types.Address{})
1171+
prevAtx := newAtx(challenge, 2, types.Address{})
12011172
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
12021173
vPrevAtx, err := prevAtx.Verify(0, 1)
12031174
require.NoError(t, err)
@@ -1354,9 +1325,7 @@ func TestBuilder_InitialProofGeneratedOnce(t *testing.T) {
13541325
PositioningATX: tab.goldenATXID,
13551326
CommitmentATX: &tab.goldenATXID,
13561327
}
1357-
poetByte := []byte("66666")
1358-
nipost := newNIPostWithPoet(t, poetByte)
1359-
prevAtx := newAtx(challenge, nipost.NIPost, 2, types.Address{})
1328+
prevAtx := newAtx(challenge, 2, types.Address{})
13601329
require.NoError(t, SignAndFinalizeAtx(sig, prevAtx))
13611330
vPrevAtx, err := prevAtx.Verify(0, 1)
13621331
require.NoError(t, err)
@@ -1375,7 +1344,6 @@ func TestBuilder_InitialProofGeneratedOnce(t *testing.T) {
13751344
require.Nil(t, atx.VRFNonce)
13761345
require.Equal(t, vPrevAtx.ID(), atx.PositioningATX)
13771346
require.Equal(t, vPrevAtx.PublishEpoch+1, atx.PublishEpoch)
1378-
require.Equal(t, types.BytesToHash(poetByte), atx.GetPoetProofRef())
13791347

13801348
// postClient.Proof() should not be called again
13811349
require.NoError(t, tab.buildInitialPost(context.Background(), sig.NodeID()))
@@ -1579,28 +1547,21 @@ func TestGetPositioningAtxPicksAtxWithValidChain(t *testing.T) {
15791547
// Invalid chain with high height
15801548
sigInvalid, err := signing.NewEdSigner()
15811549
require.NoError(t, err)
1582-
ch := types.NIPostChallenge{
1583-
Sequence: 1,
1584-
PrevATXID: types.EmptyATXID,
1585-
PublishEpoch: postGenesisEpoch,
1586-
PositioningATX: tab.goldenATXID,
1587-
CommitmentATX: &tab.goldenATXID,
1588-
}
1589-
nipostData := newNIPostWithPoet(t, []byte("0"))
1590-
invalidAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
1591-
require.NoError(t, SignAndFinalizeAtx(sigInvalid, invalidAtx))
1592-
vInvalidAtx, err := invalidAtx.Verify(0, 100)
1550+
invalidAtx := newInitialATXv1(t, tab.goldenATXID)
1551+
invalidAtx.Sign(sigInvalid)
1552+
vInvalidAtx := toVerifiedAtx(t, invalidAtx)
1553+
vInvalidAtx, err = vInvalidAtx.Verify(0, 100)
15931554
require.NoError(t, err)
15941555
require.NoError(t, atxs.Add(tab.db, vInvalidAtx))
15951556

15961557
// Valid chain with lower height
15971558
sigValid, err := signing.NewEdSigner()
15981559
require.NoError(t, err)
1599-
nipostData = newNIPostWithPoet(t, []byte("1"))
1600-
validAtx := newAtx(ch, nipostData.NIPost, 2, types.Address{})
1601-
require.NoError(t, SignAndFinalizeAtx(sigValid, validAtx))
1602-
vValidAtx, err := validAtx.Verify(0, 1)
1603-
require.NoError(t, err)
1560+
validAtx := newInitialATXv1(t, tab.goldenATXID)
1561+
validAtx.NumUnits += 10
1562+
validAtx.Sign(sigValid)
1563+
vValidAtx := toVerifiedAtx(t, validAtx)
1564+
vValidAtx.Verify(0, 1)
16041565
require.NoError(t, atxs.Add(tab.db, vValidAtx))
16051566

16061567
tab.mValidator.EXPECT().

0 commit comments

Comments
 (0)