diff --git a/gpbft/gpbft.go b/gpbft/gpbft.go index e7c5d5a7..4e0f4a28 100644 --- a/gpbft/gpbft.go +++ b/gpbft/gpbft.go @@ -460,7 +460,7 @@ func (i *instance) tryCurrentPhase() error { // It must be safe for concurrent use. func ValidateMessage(powerTable *PowerTable, beacon []byte, host Host, msg *GMessage) error { // Check sender is eligible. - senderPower, _, senderPubKey := powerTable.Get(msg.Sender) + senderPower, senderPubKey := powerTable.Get(msg.Sender) if senderPower == 0 { return xerrors.Errorf("sender %d with zero power or not in power table", msg.Sender) } @@ -1150,7 +1150,7 @@ func (q *quorumState) receiveSender(sender ActorID) (uint16, bool) { return 0, false } q.senders[sender] = struct{}{} - senderPower, _, _ := q.powerTable.Get(sender) + senderPower, _ := q.powerTable.Get(sender) q.sendersTotalPower += senderPower return senderPower, true } @@ -1433,9 +1433,9 @@ func (c *convergeState) FindMaxTicketProposal(table PowerTable) ConvergeValue { for key, value := range c.values { for _, ticket := range c.tickets[key] { - _, senderPower, _ := table.Get(ticket.Sender) + senderPower, _ := table.Get(ticket.Sender) ticketAsInt := new(big.Int).SetBytes(ticket.Ticket) - weightedTicket := new(big.Int).Mul(ticketAsInt, senderPower) + weightedTicket := new(big.Int).Mul(ticketAsInt, big.NewInt(int64(senderPower))) if maxTicket == nil || weightedTicket.Cmp(maxTicket) > 0 { maxTicket = weightedTicket maxValue = value diff --git a/gpbft/message_builder.go b/gpbft/message_builder.go index aac8f8b9..77f1782e 100644 --- a/gpbft/message_builder.go +++ b/gpbft/message_builder.go @@ -2,7 +2,6 @@ package gpbft import ( "errors" - "math/big" xerrors "golang.org/x/xerrors" ) @@ -68,7 +67,7 @@ func (mb *MessageBuilder) SetSigningMarshaler(sm SigningMarshaler) { } type powerTableAccessor interface { - Get(ActorID) (uint16, *big.Int, PubKey) + Get(ActorID) (uint16, PubKey) } type SignerWithMarshaler interface { @@ -105,7 +104,7 @@ type SignatureBuilder struct { } func (mb *MessageBuilder) PrepareSigningInputs(id ActorID) (*SignatureBuilder, error) { - effectivePower, _, pubKey := mb.powerTable.Get(id) + effectivePower, pubKey := mb.powerTable.Get(id) if pubKey == nil || effectivePower == 0 { return nil, xerrors.Errorf("could not find pubkey for actor %d: %w", id, ErrNoPower) } diff --git a/gpbft/powertable.go b/gpbft/powertable.go index def2d9e5..440badc8 100644 --- a/gpbft/powertable.go +++ b/gpbft/powertable.go @@ -132,13 +132,13 @@ func (p *PowerTable) rescale() error { // Get retrieves the scaled power, unscaled StoragePower and PubKey for the given id, if present in // the table. Otherwise, returns 0/nil. -func (p *PowerTable) Get(id ActorID) (uint16, *StoragePower, PubKey) { +func (p *PowerTable) Get(id ActorID) (uint16, PubKey) { if index, ok := p.Lookup[id]; ok { - entry := p.Entries[index] + key := p.Entries[index].PubKey scaledPower := p.ScaledPower[index] - return scaledPower, entry.Power, entry.PubKey + return scaledPower, key } - return 0, nil, nil + return 0, nil } // Has check whether this PowerTable contains an entry for the given id. diff --git a/gpbft/powertable_test.go b/gpbft/powertable_test.go index a82d7f91..1194f025 100644 --- a/gpbft/powertable_test.go +++ b/gpbft/powertable_test.go @@ -26,8 +26,8 @@ func TestPowerTable(t *testing.T) { }) t.Run("gets nil", func(t *testing.T) { subject := gpbft.NewPowerTable() - _, gotPower, gotKey := subject.Get(1413) - require.Nil(t, gotPower) + gotPower, gotKey := subject.Get(1413) + require.Zero(t, gotPower) require.Nil(t, gotKey) }) }) @@ -199,7 +199,8 @@ func TestPowerTable(t *testing.T) { func requireAddedToPowerTable(t *testing.T, subject *gpbft.PowerTable, entry gpbft.PowerEntry) { t.Helper() require.True(t, subject.Has(entry.ID)) - _, gotPower, gotKey := subject.Get(entry.ID) + _, gotKey := subject.Get(entry.ID) + gotPower := subject.Entries[subject.Lookup[entry.ID]].Power require.Equal(t, entry.Power, gotPower) require.Equal(t, entry.PubKey, gotKey) } diff --git a/sim/adversary/decide.go b/sim/adversary/decide.go index 86a57455..f34b5c9e 100644 --- a/sim/adversary/decide.go +++ b/sim/adversary/decide.go @@ -61,7 +61,7 @@ func (i *ImmediateDecide) StartInstance(instance uint64) error { SupplementalData: *supplementalData, } sigPayload := i.host.MarshalPayloadForSigning(i.host.NetworkName(), &justificationPayload) - _, _, pubkey := powertable.Get(i.id) + _, pubkey := powertable.Get(i.id) sig, err := i.host.Sign(pubkey, sigPayload) if err != nil { panic(err)