diff --git a/packages/binary/drng/state/state.go b/packages/binary/drng/state/state.go index b0a89b50702d0dbfd7959072482dc1fd05638a56..f29f2253f764e2420a731addcfe28a4a8e4173c0 100644 --- a/packages/binary/drng/state/state.go +++ b/packages/binary/drng/state/state.go @@ -1,6 +1,7 @@ package state import ( + "encoding/binary" "sync" "time" @@ -13,6 +14,11 @@ type Randomness struct { Timestamp time.Time } +// Float64 returns a float64 [0.0,1.0) rapresentation of the randomness byte slice +func (r Randomness) Float64() float64 { + return float64(binary.BigEndian.Uint64(r.Randomness[:8])>>11) / (1 << 53) +} + type Committee struct { InstanceID uint32 Threshold uint8 @@ -21,7 +27,7 @@ type Committee struct { } type State struct { randomness *Randomness - committe *Committee + committee *Committee mutex sync.RWMutex } @@ -34,7 +40,7 @@ func New(setters ...Option) *State { } return &State{ randomness: args.Randomness, - committe: args.Committee, + committee: args.Committee, } } @@ -56,14 +62,14 @@ func (s *State) Randomness() Randomness { func (s *State) SetCommittee(c *Committee) { s.mutex.Lock() defer s.mutex.Unlock() - s.committe = c + s.committee = c } func (s *State) Committee() Committee { s.mutex.RLock() defer s.mutex.RUnlock() - if s.committe == nil { + if s.committee == nil { return Committee{} } - return *s.committe + return *s.committee } diff --git a/packages/binary/drng/state/state_test.go b/packages/binary/drng/state/state_test.go index 314241eddcee6ee5e5738fb968d7c781bb1bed3d..ac8c881bba65d4b3c4178509ec57d9ec68d7a13c 100644 --- a/packages/binary/drng/state/state_test.go +++ b/packages/binary/drng/state/state_test.go @@ -40,3 +40,12 @@ func TestState(t *testing.T) { stateTest.SetRandomness(newRandomness) require.Equal(t, *newRandomness, stateTest.Randomness()) } + +func TestFloat64(t *testing.T) { + + max := []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff} + r := &Randomness{1, max, time.Now()} + stateTest := New(SetRandomness(r)) + require.Equal(t, 0.9999999999999999, stateTest.Randomness().Float64()) + +}