Skip to content

Commit b0063b1

Browse files
authored
Merge pull request #1526 from onetechnical/onetechnical/relstable2.1.5
Onetechnical/relstable2.1.5
2 parents 65e359d + d75df79 commit b0063b1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1338
-492
lines changed

agreement/abstractions.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,14 @@ type LedgerReader interface {
128128
// protocol may lose liveness.
129129
Seed(basics.Round) (committee.Seed, error)
130130

131-
// BalanceRecord returns the BalanceRecord associated with some Address
131+
// Lookup returns the AccountData associated with some Address
132132
// at the conclusion of a given round.
133133
//
134134
// This method returns an error if the given Round has not yet been
135135
// confirmed. It may also return an error if the given Round is
136136
// unavailable by the storage device. In that case, the agreement
137137
// protocol may lose liveness.
138-
BalanceRecord(basics.Round, basics.Address) (basics.BalanceRecord, error)
138+
Lookup(basics.Round, basics.Address) (basics.AccountData, error)
139139

140140
// Circulation returns the total amount of money in circulation at the
141141
// conclusion of a given round.

agreement/agreementtest/simulate_test.go

+12-15
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,12 @@ type testLedger struct {
104104
nextRound basics.Round
105105

106106
// constant
107-
state map[basics.Address]basics.BalanceRecord
107+
state map[basics.Address]basics.AccountData
108108

109109
notifications map[basics.Round]signal
110110
}
111111

112-
func makeTestLedger(state map[basics.Address]basics.BalanceRecord) agreement.Ledger {
112+
func makeTestLedger(state map[basics.Address]basics.AccountData) agreement.Ledger {
113113
l := new(testLedger)
114114
l.entries = make(map[basics.Round]bookkeeping.Block)
115115
l.certs = make(map[basics.Round]agreement.Certificate)
@@ -124,7 +124,7 @@ func (l *testLedger) copy() *testLedger {
124124

125125
dup.entries = make(map[basics.Round]bookkeeping.Block)
126126
dup.certs = make(map[basics.Round]agreement.Certificate)
127-
dup.state = make(map[basics.Address]basics.BalanceRecord)
127+
dup.state = make(map[basics.Address]basics.AccountData)
128128
dup.notifications = make(map[basics.Round]signal)
129129

130130
for k, v := range l.entries {
@@ -202,12 +202,12 @@ func (l *testLedger) LookupDigest(r basics.Round) (crypto.Digest, error) {
202202
return l.entries[r].Digest(), nil
203203
}
204204

205-
func (l *testLedger) BalanceRecord(r basics.Round, a basics.Address) (basics.BalanceRecord, error) {
205+
func (l *testLedger) Lookup(r basics.Round, a basics.Address) (basics.AccountData, error) {
206206
l.mu.Lock()
207207
defer l.mu.Unlock()
208208

209209
if r >= l.nextRound {
210-
err := fmt.Errorf("BalanceRecord called on future round: %v > %v! (this is probably a bug)", r, l.nextRound)
210+
err := fmt.Errorf("Lookup called on future round: %v > %v! (this is probably a bug)", r, l.nextRound)
211211
panic(err)
212212
}
213213
return l.state[a], nil
@@ -305,24 +305,21 @@ func TestSimulate(t *testing.T) {
305305
E := basics.Round(50) // max round
306306

307307
// generate accounts
308-
genesis := make(map[basics.Address]basics.BalanceRecord)
308+
genesis := make(map[basics.Address]basics.AccountData)
309309
incentivePoolAtStart := uint64(1000 * 1000)
310310
accData := basics.MakeAccountData(basics.NotParticipating, basics.MicroAlgos{Raw: incentivePoolAtStart})
311-
genesis[poolAddr] = basics.BalanceRecord{Addr: poolAddr, AccountData: accData}
311+
genesis[poolAddr] = accData
312312
gen := rand.New(rand.NewSource(2))
313313

314314
_, accs, release := generateNAccounts(t, numAccounts, 0, E, minMoneyAtStart)
315315
defer release()
316316
for _, account := range accs {
317317
amount := basics.MicroAlgos{Raw: uint64(minMoneyAtStart + (gen.Int() % (maxMoneyAtStart - minMoneyAtStart)))}
318-
genesis[account.Address()] = basics.BalanceRecord{
319-
Addr: account.Address(),
320-
AccountData: basics.AccountData{
321-
Status: basics.Online,
322-
MicroAlgos: amount,
323-
SelectionID: account.VRFSecrets().PK,
324-
VoteID: account.VotingSecrets().OneTimeSignatureVerifier,
325-
},
318+
genesis[account.Address()] = basics.AccountData{
319+
Status: basics.Online,
320+
MicroAlgos: amount,
321+
SelectionID: account.VRFSecrets().PK,
322+
VoteID: account.VotingSecrets().OneTimeSignatureVerifier,
326323
}
327324
}
328325

agreement/common_test.go

+15-18
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ const keyBatchesForward = 10
4040
const minMoneyAtStart = 10000
4141
const maxMoneyAtStart = 100000
4242

43-
var readOnlyGenesis10 map[basics.Address]basics.BalanceRecord
43+
var readOnlyGenesis10 map[basics.Address]basics.AccountData
4444
var readOnlyAddrs10 []basics.Address
4545
var readOnlyVRF10 []*crypto.VRFSecrets
4646
var readOnlyOT10 []crypto.OneTimeSigner
4747

48-
var readOnlyGenesis100 map[basics.Address]basics.BalanceRecord
48+
var readOnlyGenesis100 map[basics.Address]basics.AccountData
4949
var readOnlyAddrs100 []basics.Address
5050
var readOnlyVRF100 []*crypto.VRFSecrets
5151
var readOnlyOT100 []crypto.OneTimeSigner
5252

53-
var readOnlyGenesis7000 map[basics.Address]basics.BalanceRecord
53+
var readOnlyGenesis7000 map[basics.Address]basics.AccountData
5454
var readOnlyAddrs7000 []basics.Address
5555
var readOnlyVRF7000 []*crypto.VRFSecrets
5656
var readOnlyOT7000 []crypto.OneTimeSigner
@@ -93,8 +93,8 @@ func generateKeys(latest basics.Round, keyBatchesForward uint) (basics.Address,
9393
return addr, v, o
9494
}
9595

96-
func generateEnvironment(numAccounts int) (map[basics.Address]basics.BalanceRecord, []basics.Address, []*crypto.VRFSecrets, []crypto.OneTimeSigner) {
97-
genesis := make(map[basics.Address]basics.BalanceRecord)
96+
func generateEnvironment(numAccounts int) (map[basics.Address]basics.AccountData, []basics.Address, []*crypto.VRFSecrets, []crypto.OneTimeSigner) {
97+
genesis := make(map[basics.Address]basics.AccountData)
9898
gen := rand.New(rand.NewSource(2))
9999
addrs := make([]basics.Address, numAccounts)
100100
vrfSecrets := make([]*crypto.VRFSecrets, numAccounts)
@@ -107,14 +107,11 @@ func generateEnvironment(numAccounts int) (map[basics.Address]basics.BalanceReco
107107
otSecrets[i].OneTimeSignatureSecrets = otSec
108108

109109
startamt := uint64(minMoneyAtStart + (gen.Int() % (maxMoneyAtStart - minMoneyAtStart)))
110-
genesis[addr] = basics.BalanceRecord{
111-
Addr: addr,
112-
AccountData: basics.AccountData{
113-
Status: basics.Online,
114-
MicroAlgos: basics.MicroAlgos{Raw: startamt},
115-
SelectionID: vrfSec.PK,
116-
VoteID: otSec.OneTimeSignatureVerifier,
117-
},
110+
genesis[addr] = basics.AccountData{
111+
Status: basics.Online,
112+
MicroAlgos: basics.MicroAlgos{Raw: startamt},
113+
SelectionID: vrfSec.PK,
114+
VoteID: otSec.OneTimeSignatureVerifier,
118115
}
119116
total.Raw += startamt
120117
}
@@ -196,19 +193,19 @@ type testLedger struct {
196193
nextRound basics.Round
197194

198195
// constant
199-
state map[basics.Address]basics.BalanceRecord
196+
state map[basics.Address]basics.AccountData
200197

201198
notifications map[basics.Round]signal
202199
}
203200

204-
func makeTestLedger(state map[basics.Address]basics.BalanceRecord) Ledger {
201+
func makeTestLedger(state map[basics.Address]basics.AccountData) Ledger {
205202
l := new(testLedger)
206203
l.entries = make(map[basics.Round]bookkeeping.Block)
207204
l.certs = make(map[basics.Round]Certificate)
208205
l.nextRound = 1
209206

210207
// deep copy of state
211-
l.state = make(map[basics.Address]basics.BalanceRecord)
208+
l.state = make(map[basics.Address]basics.AccountData)
212209
for k, v := range state {
213210
l.state[k] = v
214211
}
@@ -274,12 +271,12 @@ func (l *testLedger) LookupDigest(r basics.Round) (crypto.Digest, error) {
274271
return l.entries[r].Digest(), nil
275272
}
276273

277-
func (l *testLedger) BalanceRecord(r basics.Round, a basics.Address) (basics.BalanceRecord, error) {
274+
func (l *testLedger) Lookup(r basics.Round, a basics.Address) (basics.AccountData, error) {
278275
l.mu.Lock()
279276
defer l.mu.Unlock()
280277

281278
if r >= l.nextRound {
282-
err := fmt.Errorf("BalanceRecord called on future round: %v >= %v! (this is probably a bug)", r, l.nextRound)
279+
err := fmt.Errorf("Lookup called on future round: %v >= %v! (this is probably a bug)", r, l.nextRound)
283280
panic(err)
284281
}
285282
return l.state[a], nil

agreement/demux_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -481,9 +481,9 @@ func (t *demuxTester) LookupDigest(basics.Round) (crypto.Digest, error) {
481481
}
482482

483483
// implement Ledger
484-
func (t *demuxTester) BalanceRecord(basics.Round, basics.Address) (basics.BalanceRecord, error) {
484+
func (t *demuxTester) Lookup(basics.Round, basics.Address) (basics.AccountData, error) {
485485
// we don't care about this function in this test.
486-
return basics.BalanceRecord{}, nil
486+
return basics.AccountData{}, nil
487487
}
488488

489489
// implement Ledger

agreement/fuzzer/fuzzer_test.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ type Fuzzer struct {
5252
router *Router
5353
log logging.Logger
5454
accounts []account.Participation
55-
balances map[basics.Address]basics.BalanceRecord
55+
balances map[basics.Address]basics.AccountData
5656
accountAccessors []db.Accessor
5757
ledgers []*testLedger
5858
tickGranularity time.Duration
@@ -83,7 +83,7 @@ func MakeFuzzer(config FuzzerConfig) *Fuzzer {
8383
disconnected: make([][]bool, config.NodesCount),
8484
crashAccessors: make([]db.Accessor, config.NodesCount),
8585
accounts: make([]account.Participation, config.NodesCount),
86-
balances: make(map[basics.Address]basics.BalanceRecord),
86+
balances: make(map[basics.Address]basics.AccountData),
8787
accountAccessors: make([]db.Accessor, config.NodesCount*2),
8888
ledgers: make([]*testLedger, config.NodesCount),
8989
agreementParams: make([]agreement.Parameters, config.NodesCount),
@@ -239,10 +239,7 @@ func (n *Fuzzer) initAccountsAndBalances(rootSeed []byte, onlineNodes []bool) er
239239
acctData.Status = basics.Offline
240240
}
241241
}
242-
n.balances[rootAddress] = basics.BalanceRecord{
243-
Addr: rootAddress,
244-
AccountData: acctData,
245-
}
242+
n.balances[rootAddress] = acctData
246243
}
247244
return nil
248245
}

agreement/fuzzer/ledger_test.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ type testLedger struct {
124124
nextRound basics.Round
125125

126126
// constant
127-
state map[basics.Address]basics.BalanceRecord
127+
state map[basics.Address]basics.AccountData
128128

129129
notifications map[basics.Round]signal
130130

@@ -137,15 +137,15 @@ type testLedger struct {
137137
catchingUp bool
138138
}
139139

140-
func makeTestLedger(state map[basics.Address]basics.BalanceRecord, sync testLedgerSyncFunc) *testLedger {
140+
func makeTestLedger(state map[basics.Address]basics.AccountData, sync testLedgerSyncFunc) *testLedger {
141141
l := new(testLedger)
142142
l.Sync = sync
143143
l.entries = make(map[basics.Round]bookkeeping.Block)
144144
l.certs = make(map[basics.Round]agreement.Certificate)
145145
l.nextRound = 1
146146

147147
// deep copy of state
148-
l.state = make(map[basics.Address]basics.BalanceRecord)
148+
l.state = make(map[basics.Address]basics.AccountData)
149149
for k, v := range state {
150150
l.state[k] = v
151151
}
@@ -226,12 +226,12 @@ func (l *testLedger) LookupDigest(r basics.Round) (crypto.Digest, error) {
226226
return l.entries[r].Digest(), nil
227227
}
228228

229-
func (l *testLedger) BalanceRecord(r basics.Round, a basics.Address) (basics.BalanceRecord, error) {
229+
func (l *testLedger) Lookup(r basics.Round, a basics.Address) (basics.AccountData, error) {
230230
l.mu.Lock()
231231
defer l.mu.Unlock()
232232

233233
if r >= l.nextRound {
234-
err := fmt.Errorf("BalanceRecord called on future round: %d >= %d! (this is probably a bug)", r, l.nextRound)
234+
err := fmt.Errorf("Lookup called on future round: %d >= %d! (this is probably a bug)", r, l.nextRound)
235235
panic(err)
236236
}
237237
return l.state[a], nil

agreement/proposal.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func deriveNewSeed(address basics.Address, vrf *crypto.VRFSecrets, rnd round, pe
133133

134134
cparams, err := ledger.ConsensusParams(ParamsRound(rnd))
135135
if err != nil {
136-
err = fmt.Errorf("failed to obtain consensus parameters in round %d: %v", ParamsRound(rnd), err)
136+
reterr = fmt.Errorf("failed to obtain consensus parameters in round %d: %v", ParamsRound(rnd), err)
137137
return
138138
}
139139
var alpha crypto.Digest
@@ -184,7 +184,7 @@ func verifyNewSeed(p unauthenticatedProposal, ledger LedgerReader) error {
184184
}
185185

186186
balanceRound := balanceRound(rnd, cparams)
187-
proposerRecord, err := ledger.BalanceRecord(balanceRound, value.OriginalProposer)
187+
proposerRecord, err := ledger.Lookup(balanceRound, value.OriginalProposer)
188188
if err != nil {
189189
return fmt.Errorf("failed to obtain balance record for address %v in round %d: %v", value.OriginalProposer, balanceRound, err)
190190
}
@@ -201,13 +201,15 @@ func verifyNewSeed(p unauthenticatedProposal, ledger LedgerReader) error {
201201
if !ok {
202202
return fmt.Errorf("payload seed proof malformed (%v, %v)", prevSeed, p.SeedProof)
203203
}
204+
// TODO remove the following Hash() call,
205+
// redundant with the Verify() call above.
204206
vrfOut, ok = p.SeedProof.Hash()
205207
if !ok {
206208
// If proof2hash fails on a proof we produced with VRF Prove, this indicates our VRF code has a dangerous bug.
207209
// Panicking is the only safe thing to do.
208210
logging.Base().Panicf("VrfProof.Hash() failed on a proof we ourselves generated; this indicates a bug in the VRF code: %v", p.SeedProof)
209211
}
210-
alpha = crypto.HashObj(proposerSeed{Addr: proposerRecord.Addr, VRF: vrfOut})
212+
alpha = crypto.HashObj(proposerSeed{Addr: value.OriginalProposer, VRF: vrfOut})
211213
} else {
212214
alpha = crypto.HashObj(prevSeed)
213215
}

agreement/selector.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func membership(l LedgerReader, addr basics.Address, r basics.Round, p period, s
6464
balanceRound := balanceRound(r, cparams)
6565
seedRound := seedRound(r, cparams)
6666

67-
record, err := l.BalanceRecord(balanceRound, addr)
67+
record, err := l.Lookup(balanceRound, addr)
6868
if err != nil {
6969
err = fmt.Errorf("Service.initializeVote (r=%d): Failed to obtain balance record for address %v in round %d: %v", r, addr, balanceRound, err)
7070
return
@@ -82,7 +82,7 @@ func membership(l LedgerReader, addr basics.Address, r basics.Round, p period, s
8282
return
8383
}
8484

85-
m.Record = record
85+
m.Record = committee.BalanceRecord{AccountData: record, Addr: addr}
8686
m.Selector = selector{Seed: seed, Round: r, Period: p, Step: s}
8787
m.TotalMoney = total
8888
return m, nil

agreement/service_test.go

+6-9
Original file line numberDiff line numberDiff line change
@@ -636,12 +636,12 @@ func generatePseudoRandomVRF(keynum int) *crypto.VRFSecrets {
636636
}
637637
}
638638

639-
func createTestAccountsAndBalances(t *testing.T, numNodes int, rootSeed []byte) (accounts []account.Participation, balances map[basics.Address]basics.BalanceRecord) {
639+
func createTestAccountsAndBalances(t *testing.T, numNodes int, rootSeed []byte) (accounts []account.Participation, balances map[basics.Address]basics.AccountData) {
640640
off := int(rand.Uint32() >> 2) // prevent name collision from running tests more than once
641641

642642
// system state setup: keygen, stake initialization
643643
accounts = make([]account.Participation, numNodes)
644-
balances = make(map[basics.Address]basics.BalanceRecord, numNodes)
644+
balances = make(map[basics.Address]basics.AccountData, numNodes)
645645
var seed crypto.Seed
646646
copy(seed[:], rootSeed)
647647

@@ -703,10 +703,7 @@ func createTestAccountsAndBalances(t *testing.T, numNodes int, rootSeed []byte)
703703
VoteID: accounts[i].VotingSecrets().OneTimeSignatureVerifier,
704704
SelectionID: accounts[i].VRFSecrets().PK,
705705
}
706-
balances[rootAddress] = basics.BalanceRecord{
707-
Addr: rootAddress,
708-
AccountData: acctData,
709-
}
706+
balances[rootAddress] = acctData
710707
}
711708
return
712709
}
@@ -725,12 +722,12 @@ func (testingRand) Uint64() uint64 {
725722
return maxuint64 / 2
726723
}
727724

728-
func setupAgreement(t *testing.T, numNodes int, traceLevel traceLevel, ledgerFactory func(map[basics.Address]basics.BalanceRecord) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock, []Ledger, *activityMonitor) {
725+
func setupAgreement(t *testing.T, numNodes int, traceLevel traceLevel, ledgerFactory func(map[basics.Address]basics.AccountData) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock, []Ledger, *activityMonitor) {
729726
var validator testBlockValidator
730727
return setupAgreementWithValidator(t, numNodes, traceLevel, validator, ledgerFactory)
731728
}
732729

733-
func setupAgreementWithValidator(t *testing.T, numNodes int, traceLevel traceLevel, validator BlockValidator, ledgerFactory func(map[basics.Address]basics.BalanceRecord) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock, []Ledger, *activityMonitor) {
730+
func setupAgreementWithValidator(t *testing.T, numNodes int, traceLevel traceLevel, validator BlockValidator, ledgerFactory func(map[basics.Address]basics.AccountData) Ledger) (*testingNetwork, Ledger, func(), []*Service, []timers.Clock, []Ledger, *activityMonitor) {
734731
bufCap := 1000 // max number of buffered messages
735732

736733
// system state setup: keygen, stake initialization
@@ -895,7 +892,7 @@ func simulateAgreement(t *testing.T, numNodes int, numRounds int, traceLevel tra
895892
simulateAgreementWithLedgerFactory(t, numNodes, numRounds, traceLevel, makeTestLedger)
896893
}
897894

898-
func simulateAgreementWithLedgerFactory(t *testing.T, numNodes int, numRounds int, traceLevel traceLevel, ledgerFactory func(map[basics.Address]basics.BalanceRecord) Ledger) {
895+
func simulateAgreementWithLedgerFactory(t *testing.T, numNodes int, numRounds int, traceLevel traceLevel, ledgerFactory func(map[basics.Address]basics.AccountData) Ledger) {
899896
_, baseLedger, cleanupFn, services, clocks, ledgers, activityMonitor := setupAgreement(t, numNodes, traceLevel, ledgerFactory)
900897
startRound := baseLedger.NextRound()
901898
defer cleanupFn()

buildnumber.dat

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
4
1+
5

catchup/service_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -557,8 +557,8 @@ func (m *mockedLedger) Block(r basics.Round) (bookkeeping.Block, error) {
557557
return m.blocks[r], nil
558558
}
559559

560-
func (m *mockedLedger) BalanceRecord(basics.Round, basics.Address) (basics.BalanceRecord, error) {
561-
return basics.BalanceRecord{}, errors.New("not needed for mockedLedger")
560+
func (m *mockedLedger) Lookup(basics.Round, basics.Address) (basics.AccountData, error) {
561+
return basics.AccountData{}, errors.New("not needed for mockedLedger")
562562
}
563563
func (m *mockedLedger) Circulation(basics.Round) (basics.MicroAlgos, error) {
564564
return basics.MicroAlgos{}, errors.New("not needed for mockedLedger")

0 commit comments

Comments
 (0)