Skip to content

Commit f2319a9

Browse files
authored
feat: use the scaled power for winning tickets (#375)
This brings us in-line with the FIP.
1 parent 2ddf410 commit f2319a9

File tree

5 files changed

+15
-15
lines changed

5 files changed

+15
-15
lines changed

gpbft/gpbft.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ func (i *instance) tryCurrentPhase() error {
460460
// It must be safe for concurrent use.
461461
func ValidateMessage(powerTable *PowerTable, beacon []byte, host Host, msg *GMessage) error {
462462
// Check sender is eligible.
463-
senderPower, _, senderPubKey := powerTable.Get(msg.Sender)
463+
senderPower, senderPubKey := powerTable.Get(msg.Sender)
464464
if senderPower == 0 {
465465
return xerrors.Errorf("sender %d with zero power or not in power table", msg.Sender)
466466
}
@@ -1150,7 +1150,7 @@ func (q *quorumState) receiveSender(sender ActorID) (uint16, bool) {
11501150
return 0, false
11511151
}
11521152
q.senders[sender] = struct{}{}
1153-
senderPower, _, _ := q.powerTable.Get(sender)
1153+
senderPower, _ := q.powerTable.Get(sender)
11541154
q.sendersTotalPower += senderPower
11551155
return senderPower, true
11561156
}
@@ -1433,9 +1433,9 @@ func (c *convergeState) FindMaxTicketProposal(table PowerTable) ConvergeValue {
14331433

14341434
for key, value := range c.values {
14351435
for _, ticket := range c.tickets[key] {
1436-
_, senderPower, _ := table.Get(ticket.Sender)
1436+
senderPower, _ := table.Get(ticket.Sender)
14371437
ticketAsInt := new(big.Int).SetBytes(ticket.Ticket)
1438-
weightedTicket := new(big.Int).Mul(ticketAsInt, senderPower)
1438+
weightedTicket := new(big.Int).Mul(ticketAsInt, big.NewInt(int64(senderPower)))
14391439
if maxTicket == nil || weightedTicket.Cmp(maxTicket) > 0 {
14401440
maxTicket = weightedTicket
14411441
maxValue = value

gpbft/message_builder.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package gpbft
22

33
import (
44
"errors"
5-
"math/big"
65

76
xerrors "golang.org/x/xerrors"
87
)
@@ -68,7 +67,7 @@ func (mb *MessageBuilder) SetSigningMarshaler(sm SigningMarshaler) {
6867
}
6968

7069
type powerTableAccessor interface {
71-
Get(ActorID) (uint16, *big.Int, PubKey)
70+
Get(ActorID) (uint16, PubKey)
7271
}
7372

7473
type SignerWithMarshaler interface {
@@ -105,7 +104,7 @@ type SignatureBuilder struct {
105104
}
106105

107106
func (mb *MessageBuilder) PrepareSigningInputs(id ActorID) (*SignatureBuilder, error) {
108-
effectivePower, _, pubKey := mb.powerTable.Get(id)
107+
effectivePower, pubKey := mb.powerTable.Get(id)
109108
if pubKey == nil || effectivePower == 0 {
110109
return nil, xerrors.Errorf("could not find pubkey for actor %d: %w", id, ErrNoPower)
111110
}

gpbft/powertable.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,13 @@ func (p *PowerTable) rescale() error {
132132

133133
// Get retrieves the scaled power, unscaled StoragePower and PubKey for the given id, if present in
134134
// the table. Otherwise, returns 0/nil.
135-
func (p *PowerTable) Get(id ActorID) (uint16, *StoragePower, PubKey) {
135+
func (p *PowerTable) Get(id ActorID) (uint16, PubKey) {
136136
if index, ok := p.Lookup[id]; ok {
137-
entry := p.Entries[index]
137+
key := p.Entries[index].PubKey
138138
scaledPower := p.ScaledPower[index]
139-
return scaledPower, entry.Power, entry.PubKey
139+
return scaledPower, key
140140
}
141-
return 0, nil, nil
141+
return 0, nil
142142
}
143143

144144
// Has check whether this PowerTable contains an entry for the given id.

gpbft/powertable_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ func TestPowerTable(t *testing.T) {
2626
})
2727
t.Run("gets nil", func(t *testing.T) {
2828
subject := gpbft.NewPowerTable()
29-
_, gotPower, gotKey := subject.Get(1413)
30-
require.Nil(t, gotPower)
29+
gotPower, gotKey := subject.Get(1413)
30+
require.Zero(t, gotPower)
3131
require.Nil(t, gotKey)
3232
})
3333
})
@@ -199,7 +199,8 @@ func TestPowerTable(t *testing.T) {
199199
func requireAddedToPowerTable(t *testing.T, subject *gpbft.PowerTable, entry gpbft.PowerEntry) {
200200
t.Helper()
201201
require.True(t, subject.Has(entry.ID))
202-
_, gotPower, gotKey := subject.Get(entry.ID)
202+
_, gotKey := subject.Get(entry.ID)
203+
gotPower := subject.Entries[subject.Lookup[entry.ID]].Power
203204
require.Equal(t, entry.Power, gotPower)
204205
require.Equal(t, entry.PubKey, gotKey)
205206
}

sim/adversary/decide.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func (i *ImmediateDecide) StartInstance(instance uint64) error {
6161
SupplementalData: *supplementalData,
6262
}
6363
sigPayload := i.host.MarshalPayloadForSigning(i.host.NetworkName(), &justificationPayload)
64-
_, _, pubkey := powertable.Get(i.id)
64+
_, pubkey := powertable.Get(i.id)
6565
sig, err := i.host.Sign(pubkey, sigPayload)
6666
if err != nil {
6767
panic(err)

0 commit comments

Comments
 (0)