~ubuntu-branches/debian/stretch/electrum/stretch

« back to all changes in this revision

Viewing changes to lib/coinchooser.py

  • Committer: Package Import Robot
  • Author(s): Tristan Seligmann
  • Date: 2016-05-22 03:59:05 UTC
  • mfrom: (1.1.11)
  • Revision ID: package-import@ubuntu.com-20160522035905-qqyic10kne7x3ifu
Tags: 2.6.4-1
* New upstream release.
* Bump Standards-Version to 3.9.8 (no changes).

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
from collections import defaultdict, namedtuple
27
27
from math import floor, log10
28
 
import struct
29
28
 
30
29
from bitcoin import sha256, COIN, TYPE_ADDRESS
31
30
from transaction import Transaction
50
49
        result, self.pool = self.pool[:n], self.pool[n:]
51
50
        return result
52
51
 
53
 
    def random(self):
54
 
        # Returns random double in [0, 1)
55
 
        four = self.get_bytes(4)
56
 
        return struct.unpack("I", four)[0] / 4294967296.0
57
 
 
58
52
    def randint(self, start, end):
59
53
        # Returns random integer in [start, end)
60
 
        return start + int(self.random() * (end - start))
 
54
        n = end - start
 
55
        r = 0
 
56
        p = 1
 
57
        while p < n:
 
58
            r = self.get_bytes(1)[0] + (r << 8)
 
59
            p = p << 8
 
60
        return start + (r % n)
61
61
 
62
62
    def choice(self, seq):
63
 
        return seq[int(self.random() * len(seq))]
 
63
        return seq[self.randint(0, len(seq))]
64
64
 
65
65
    def shuffle(self, x):
66
66
        for i in reversed(xrange(1, len(x))):
67
67
            # pick an element in x[:i+1] with which to exchange x[i]
68
 
            j = int(self.random() * (i+1))
 
68
            j = self.randint(0, i+1)
69
69
            x[i], x[j] = x[j], x[i]
70
70
 
71
71