Skip to content

Commit

Permalink
Deterministic Seeding Function
Browse files Browse the repository at this point in the history
  • Loading branch information
super3 committed May 31, 2015
1 parent 0490806 commit e27a09f
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 6 deletions.
21 changes: 16 additions & 5 deletions dataserv/Challenge.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,27 @@
import random
from dataserv.Farmer import sha256


class Challenge:
def seed_list(self, height):
def __init__(self, btc_addr, height):
self.btc_addr = btc_addr
self.height = height

self.seeds = self.gen_seeds()
self.challenge = None

def gen_seeds(self):
"""Generate a list of seeds for challenges based on the Bitcoin address."""
seeds = []
last_seed = sha256(self.btc_addr)
for i in range(height+1):
for i in range(self.height):
seeds.append(last_seed)
last_seed =sha256(last_seed)
return seeds

def gen_challenge(self):
def pick_seed(self):
"""Generate a random challenge for the Farmer."""
iter_seed = random.randrange(0, len(app.config['SEED_HEIGHT']))
seeds = self.seed_list(app.config['SEED_HEIGHT'])
return random.choice(self.seeds)

def get_seeds(self):
return self.seeds
2 changes: 1 addition & 1 deletion dataserv/Farmer.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class Farmer(db.Model):
last_seen = db.Column(DateTime, default=datetime.utcnow)
last_audit = db.Column(DateTime, default=datetime.utcnow)

iter_seed = db.Column(db.Integer)
seed = db.Column(db.Integer)
response = db.Column(db.String(128))

def __init__(self, btc_addr, last_seen=None, last_audit=None):
Expand Down
21 changes: 21 additions & 0 deletions tests/test_Challenge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import unittest
from dataserv.Challenge import Challenge

class ChallengeTest(unittest.TestCase):

def test_seeds(self):
addr = '191GVvAaTRxLmz3rW3nU5jAV1rF186VxQc'
chal = Challenge(addr, 100)

iter0 = '66357e60899acae95ce1e31def3d7b32a73d34b2f12ece73cdca025a26e17e32'
iter3 = '96a6cb8668775a1751d7cf1d59cd0a8d3bc67e8ed5e6f5fce0376d5e04284071'

seeds = chal.get_seeds()
self.assertEqual(len(seeds), 100)
self.assertEqual(iter0, seeds[0])
self.assertEqual(iter3, seeds[3])

def test_challenge(self):
addr = '191GVvAaTRxLmz3rW3nU5jAV1rF186VxQc'
chal = Challenge(addr, 100)
self.assertTrue(chal.pick_seed() in chal.get_seeds())

0 comments on commit e27a09f

Please sign in to comment.