work on pow

master
Kevin Froman 2018-02-25 20:30:43 -06:00
parent 152f9e7dee
commit cf3af5b8c6
No known key found for this signature in database
GPG Key ID: 0D414D0FE405B63B
4 changed files with 31 additions and 7 deletions

@ -1 +1 @@
Subproject commit d179f625b3a1bf1b6fc544e65a81c103ab01ec7c Subproject commit 90d5edad0c017cec1a3b190d9b0cd08321840ed8

View File

@ -36,3 +36,9 @@ class OnionrBTC:
self.node.connect () self.node.connect ()
self.node.loop () self.node.loop ()
if __name__ == "__main__":
torPort = int(sys.argv[1])
bitcoin = OnionrBTC(torPort)
while True:
print(bitcoin.node.getBlockHash(bitcoin.node.getLastBlockHeight())) # Using print on purpose, do not change to logger
time.sleep(5)

View File

@ -22,7 +22,7 @@ import sqlite3, os, sys, time, math, base64, tarfile, getpass, simplecrypt, hash
#from Crypto import Random #from Crypto import Random
import netcontroller import netcontroller
import onionrutils, onionrcrypto import onionrutils, onionrcrypto, btc
if sys.version_info < (3, 6): if sys.version_info < (3, 6):
try: try:

View File

@ -18,6 +18,7 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
''' '''
import nacl.encoding, nacl.hash, nacl.utils, time, math, threading, binascii, logger import nacl.encoding, nacl.hash, nacl.utils, time, math, threading, binascii, logger
import btc
class POW: class POW:
def pow(self): def pow(self):
startTime = math.floor(time.time()) startTime = math.floor(time.time())
@ -27,11 +28,13 @@ class POW:
heartbeat = 200000 heartbeat = 200000
hbCount = 0 hbCount = 0
while self.hashing: while self.hashing:
block = self.bitcoinNode.getBlockHash(self.bitcoinNode.getLastBlockHeight())
if hbCount == heartbeat: if hbCount == heartbeat:
logger.info('hb') logger.debug('hb')
logger.debug('using bitcoin block: ' + block)
hbCount = 0 hbCount = 0
hbCount += 1 hbCount += 1
token = nacl.hash.blake2b(nacl.utils.random()).decode() token = nacl.hash.blake2b(nacl.utils.random() + block.encode()).decode()
if self.mainHash[0:self.difficulty] == token[0:self.difficulty]: if self.mainHash[0:self.difficulty] == token[0:self.difficulty]:
self.hashing = False self.hashing = False
iFound = True iFound = True
@ -40,16 +43,18 @@ class POW:
logger.info('Found token ' + token) logger.info('Found token ' + token)
endTime = math.floor(time.time()) endTime = math.floor(time.time())
logger.info('took ' + str(endTime - startTime)) logger.info('took ' + str(endTime - startTime))
self.result = token
def __init__(self, difficulty): def __init__(self, difficulty, bitcoinNode):
self.foundHash = False self.foundHash = False
self.difficulty = difficulty self.difficulty = difficulty
logger.info('Computing difficulty of ' + str(self.difficulty)) logger.debug('Computing difficulty of ' + str(self.difficulty))
self.mainHash = nacl.hash.blake2b(nacl.utils.random()).decode() self.mainHash = nacl.hash.blake2b(nacl.utils.random()).decode()
self.puzzle = self.mainHash[0:self.difficulty] self.puzzle = self.mainHash[0:self.difficulty]
logger.info('trying to find ' + str(self.mainHash)) self.bitcoinNode = bitcoinNode
logger.debug('trying to find ' + str(self.mainHash))
tOne = threading.Thread(name='one', target=self.pow) tOne = threading.Thread(name='one', target=self.pow)
tTwo = threading.Thread(name='two', target=self.pow) tTwo = threading.Thread(name='two', target=self.pow)
tThree = threading.Thread(name='three', target=self.pow) tThree = threading.Thread(name='three', target=self.pow)
@ -60,3 +65,16 @@ class POW:
def shutdown(self): def shutdown(self):
self.hashing = False self.hashing = False
self.puzzle = ''
def changeDifficulty(self, newDiff):
self.difficulty = newDiff
def getResult(self):
'''Returns the result then sets to false, useful to automatically clear the result'''
try:
retVal = self.result
except AttributeError:
retVal = False
self.result = False
return retVal