From fca4ff6d44a018b5d5138afe6c4bb55ce534962f Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Tue, 5 Mar 2024 20:51:49 +0300 Subject: [PATCH] dbft: replace setters with extended constructor for dbft.PrepareResponse A part of #84. Signed-off-by: Anna Shaleva --- config.go | 4 ++-- dbft_test.go | 5 ++--- internal/payload/constructors.go | 6 ++++-- internal/payload/prepare_response.go | 5 ----- prepare_response.go | 2 -- send.go | 3 +-- 6 files changed, 9 insertions(+), 16 deletions(-) diff --git a/config.go b/config.go index 5307e942..5a6610e2 100644 --- a/config.go +++ b/config.go @@ -64,7 +64,7 @@ type Config[H Hash, A Address] struct { // NewPrepareRequest is a constructor for payload.PrepareRequest. NewPrepareRequest func(ts uint64, nonce uint64, nextConsensus A, transactionHashes []H) PrepareRequest[H, A] // NewPrepareResponse is a constructor for payload.PrepareResponse. - NewPrepareResponse func() PrepareResponse[H] + NewPrepareResponse func(preparationHash H) PrepareResponse[H] // NewChangeView is a constructor for payload.ChangeView. NewChangeView func(newViewNumber byte, reason ChangeViewReason, timestamp uint64) ChangeView // NewCommit is a constructor for payload.Commit. @@ -313,7 +313,7 @@ func WithNewPrepareRequest[H Hash, A Address](f func(ts uint64, nonce uint64, ne } // WithNewPrepareResponse sets NewPrepareResponse. -func WithNewPrepareResponse[H Hash, A Address](f func() PrepareResponse[H]) func(config *Config[H, A]) { +func WithNewPrepareResponse[H Hash, A Address](f func(preparationHash H) PrepareResponse[H]) func(config *Config[H, A]) { return func(cfg *Config[H, A]) { cfg.NewPrepareResponse = f } diff --git a/dbft_test.go b/dbft_test.go index 8f122f31..a6f59720 100644 --- a/dbft_test.go +++ b/dbft_test.go @@ -468,7 +468,7 @@ func TestDBFT_Invalid(t *testing.T) { require.Nil(t, dbft.New(opts...)) }) - opts = append(opts, dbft.WithNewPrepareResponse[crypto.Uint256, crypto.Uint160](func() dbft.PrepareResponse[crypto.Uint256] { + opts = append(opts, dbft.WithNewPrepareResponse[crypto.Uint256, crypto.Uint160](func(crypto.Uint256) dbft.PrepareResponse[crypto.Uint256] { return nil })) t.Run("without NewChangeView", func(t *testing.T) { @@ -749,8 +749,7 @@ func (s testState) getCommit(from uint16, sign []byte) Payload { } func (s testState) getPrepareResponse(from uint16, phash crypto.Uint256) Payload { - resp := payload.NewPrepareResponse() - resp.SetPreparationHash(phash) + resp := payload.NewPrepareResponse(phash) p := payload.NewConsensusPayload(dbft.PrepareResponseType, s.currHeight+1, from, 0, resp) return p diff --git a/internal/payload/constructors.go b/internal/payload/constructors.go index 4b6e0603..0adb4e86 100644 --- a/internal/payload/constructors.go +++ b/internal/payload/constructors.go @@ -29,8 +29,10 @@ func NewPrepareRequest(ts uint64, nonce uint64, nextConsensus crypto.Uint160, tr } // NewPrepareResponse returns minimal PrepareResponse implementation. -func NewPrepareResponse() dbft.PrepareResponse[crypto.Uint256] { - return new(prepareResponse) +func NewPrepareResponse(preparationHash crypto.Uint256) dbft.PrepareResponse[crypto.Uint256] { + return &prepareResponse{ + preparationHash: preparationHash, + } } // NewChangeView returns minimal ChangeView implementation. diff --git a/internal/payload/prepare_response.go b/internal/payload/prepare_response.go index fb49bfe5..2d5d5e47 100644 --- a/internal/payload/prepare_response.go +++ b/internal/payload/prepare_response.go @@ -41,8 +41,3 @@ func (p *prepareResponse) DecodeBinary(r *gob.Decoder) error { func (p *prepareResponse) PreparationHash() crypto.Uint256 { return p.preparationHash } - -// SetPreparationHash implements PrepareResponse interface. -func (p *prepareResponse) SetPreparationHash(h crypto.Uint256) { - p.preparationHash = h -} diff --git a/prepare_response.go b/prepare_response.go index 917e1e2c..1675d185 100644 --- a/prepare_response.go +++ b/prepare_response.go @@ -5,6 +5,4 @@ type PrepareResponse[H Hash] interface { // PreparationHash returns the hash of PrepareRequest payload // for this epoch. PreparationHash() H - // SetPreparationHash sets preparations hash. - SetPreparationHash(h H) } diff --git a/send.go b/send.go index f4e1f5ec..675e9d37 100644 --- a/send.go +++ b/send.go @@ -84,8 +84,7 @@ func (d *DBFT[H, A]) sendChangeView(reason ChangeViewReason) { } func (c *Context[H, A]) makePrepareResponse() ConsensusPayload[H, A] { - resp := c.Config.NewPrepareResponse() - resp.SetPreparationHash(c.PreparationPayloads[c.PrimaryIndex].Hash()) + resp := c.Config.NewPrepareResponse(c.PreparationPayloads[c.PrimaryIndex].Hash()) msg := c.Config.NewConsensusPayload(c, PrepareResponseType, resp) c.PreparationPayloads[c.MyIndex] = msg