A very experimental PLC implementation which uses BFT consensus for decentralization
at main 58 lines 2.5 kB view raw
1package abciapp 2 3import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7) 8 9func TestComputeReputationDecrease(t *testing.T) { 10 const ui = UpdateValidatorsBlockInterval 11 const ag = ReputationGainPerProvenBlock - ReputationEntropyLossPerBlock 12 const h = ui * 100 13 const ogRep = ag * ui * 50 14 decrease, err := computeReputationDecrease(h, ogRep, ui*99+5, 0, false) 15 require.NoError(t, err) 16 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui), decrease) 17 18 decrease, err = computeReputationDecrease(h, ogRep, ui*99+5, UpdateValidatorsBlockInterval-10, true) 19 require.NoError(t, err) 20 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui), decrease) 21 22 decrease, err = computeReputationDecrease(h, ogRep, ui*99+5, 7*UpdateValidatorsBlockInterval/10, true) 23 require.NoError(t, err) 24 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui), decrease) 25 26 decrease, err = computeReputationDecrease(h, ogRep, ui*99+5, 4*UpdateValidatorsBlockInterval/10, true) 27 require.NoError(t, err) 28 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui+5*ui*ReputationGainPerProvenBlock/2), decrease) 29 30 decrease, err = computeReputationDecrease(h, ogRep, ui*99+5, UpdateValidatorsBlockInterval/10, true) 31 require.NoError(t, err) 32 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui+5*ui*ReputationGainPerProvenBlock), decrease) 33 34 // zero missed epochs -> no penalty 35 decrease, err = computeReputationDecrease(h, ogRep, ui*99+5, 0, true) 36 require.NoError(t, err) 37 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui+5*ui*ReputationGainPerProvenBlock), decrease) 38 39 // one missed epoch -> no penalty 40 decrease, err = computeReputationDecrease(h, ogRep, ui*98+ui/2, 0, false) 41 require.NoError(t, err) 42 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui), decrease) 43 44 // two missed epochs -> lose 3% of reputation 45 decrease, err = computeReputationDecrease(h, ogRep, ui*97+ui/2, 0, false) 46 require.NoError(t, err) 47 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui+3*ogRep/100), decrease) 48 49 // three missed epochs -> lose an additional 6% of reputation 50 decrease, err = computeReputationDecrease(h, ogRep, ui*96+ui/2, 0, false) 51 require.NoError(t, err) 52 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui+6*ogRep/100), decrease) 53 54 // many missed epochs -> lose a max of an additional 15% of reputation (on each epoch) 55 decrease, err = computeReputationDecrease(h, ogRep, ui*60, 0, false) 56 require.NoError(t, err) 57 require.Equal(t, uint64(ReputationEntropyLossPerBlock*ui+15*ogRep/100), decrease) 58}