diff options
author | Bas van Kervel <bas@ethdev.com> | 2016-02-19 19:06:58 +0800 |
---|---|---|
committer | Bas van Kervel <bas@ethdev.com> | 2016-02-19 19:55:31 +0800 |
commit | 6777531a2d3367ef3cee933d7a36945eecb37090 (patch) | |
tree | c07fe639278781727413c1d4cd340151959e3001 /jsre | |
parent | aa36a6ae4f24f07e2c470a21c93ff37ad5861982 (diff) | |
download | go-tangerine-6777531a2d3367ef3cee933d7a36945eecb37090.tar.gz go-tangerine-6777531a2d3367ef3cee933d7a36945eecb37090.tar.zst go-tangerine-6777531a2d3367ef3cee933d7a36945eecb37090.zip |
console: seed random number generator
Diffstat (limited to 'jsre')
-rw-r--r-- | jsre/jsre.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/jsre/jsre.go b/jsre/jsre.go index a4c9d970b..f4464910d 100644 --- a/jsre/jsre.go +++ b/jsre/jsre.go @@ -18,8 +18,11 @@ package jsre import ( + crand "crypto/rand" + "encoding/binary" "fmt" "io/ioutil" + "math/rand" "sync" "time" @@ -70,6 +73,18 @@ func New(assetPath string) *JSRE { return re } +// randomSource returns a pseudo random value generator. +func randomSource() *rand.Rand { + bytes := make([]byte, 8) + seed := time.Now().UnixNano() + if _, err := crand.Read(bytes); err == nil { + seed = int64(binary.LittleEndian.Uint64(bytes)) + } + + src := rand.NewSource(seed) + return rand.New(src) +} + // This function runs the main event loop from a goroutine that is started // when JSRE is created. Use Stop() before exiting to properly stop it. // The event loop processes vm access requests from the evalQueue in a @@ -81,6 +96,9 @@ func New(assetPath string) *JSRE { // called from JS through an RPC call. func (self *JSRE) runEventLoop() { vm := otto.New() + r := randomSource() + vm.SetRandomSource(r.Float64) + registry := map[*jsTimer]*jsTimer{} ready := make(chan *jsTimer) |