added --debug, few small fixes
authorForrest Voight <forrest@forre.st>
Mon, 25 Jul 2011 16:30:44 +0000 (12:30 -0400)
committerForrest Voight <forrest@forre.st>
Mon, 25 Jul 2011 16:30:44 +0000 (12:30 -0400)
p2pool/__init__.py
p2pool/bitcoin/data.py
p2pool/data.py
p2pool/main.py

index d5c401a..d52d625 100644 (file)
@@ -9,3 +9,5 @@ try:
 except:
     __version__ = 'unknown'
 os.chdir(prev)
+
+DEBUG = False
index 456977b..f49d1c9 100644 (file)
@@ -6,7 +6,8 @@ import itertools
 import warnings
 
 from . import base58
-from p2pool.util import bases, math, skiplist
+from p2pool.util import bases, math, skiplist, intern2
+import p2pool
 
 class EarlyEnd(Exception):
     pass
@@ -58,17 +59,20 @@ class Type(object):
     def unpack(self, data):
         obj = self._unpack(data)
         
-        if __debug__:
+        if p2pool.DEBUG:
             data2 = self._pack(obj)
             if data2 != data:
-                assert self._unpack(data2) == obj
+                if self._unpack(data2) != obj:
+                    raise AssertionError()
         
         return obj
     
     def pack(self, obj):
         data = self._pack(obj)
         
-        assert self._unpack(data) == obj
+        if p2pool.DEBUG:
+            if self._unpack(data) != obj:
+                raise AssertionError()
         
         return data
     
@@ -272,9 +276,10 @@ class FloatingIntegerType(Type):
     def read(self, file):
         bits, file = self._inner.read(file)
         target = self._bits_to_target(bits)
-        if __debug__:
+        if p2pool.DEBUG:
             if self._target_to_bits(target) != bits:
                 raise ValueError('bits in non-canonical form')
+        target = intern2.intern2(target)
         return target, file
     
     def write(self, file, item):
@@ -285,8 +290,9 @@ class FloatingIntegerType(Type):
     
     def _bits_to_target(self, bits2):
         target = math.shift_left(bits2 & 0x00ffffff, 8 * ((bits2 >> 24) - 3))
-        assert target == self._bits_to_target1(struct.pack('<I', bits2))
-        assert self._target_to_bits(target, _check=False) == bits2
+        if p2pool.DEBUG:
+            assert target == self._bits_to_target1(struct.pack('<I', bits2))
+            assert self._target_to_bits(target, _check=False) == bits2
         return target
     
     def _bits_to_target1(self, bits):
@@ -550,7 +556,7 @@ class Tracker(object):
         if not self.reverse_shares[share.previous_hash]:
             self.reverse_shares.pop(share.previous_hash)
         
-        assert self.test() is None
+        #assert self.test() is None
     
     def get_height(self, share_hash):
         height, work, last = self.get_height_work_and_last(share_hash)
index 49859c2..3176fcc 100644 (file)
@@ -212,8 +212,6 @@ def get_pool_attempts_per_second(tracker, previous_share_hash, net):
     return attempts//time
 
 def generate_transaction(tracker, previous_share_hash, new_script, subsidy, nonce, block_target, net):
-    if __debug__:
-        print "start generate_transaction"
     height, last = tracker.get_height_and_last(previous_share_hash)
     if height < net.TARGET_LOOKBEHIND:
         target = bitcoin_data.FloatingIntegerType().truncate_to(2**256//2**20 - 1)
@@ -268,9 +266,6 @@ def generate_transaction(tracker, previous_share_hash, new_script, subsidy, nonc
     dests = sorted(pre_dests, key=lambda script: (script == new_script, script))
     assert dests[-1] == new_script
     
-    if __debug__:
-        print "end generate_transaction"
-    
     return dict(
         version=1,
         tx_ins=[dict(
@@ -318,9 +313,6 @@ class OkayTracker(bitcoin_data.Tracker):
             return True
     
     def think(self, ht, previous_block, now):
-        if __debug__:
-            print "start think"
-        
         desired = set()
         
         # O(len(self.heads))
@@ -387,13 +379,9 @@ class OkayTracker(bitcoin_data.Tracker):
         if best is not None:
             best_share = self.verified.shares[best]
             if ht.get_min_height(best_share.header['previous_block']) < ht.get_min_height(previous_block) and best_share.bitcoin_hash != previous_block and best_share.peer is not None:
-                if __debug__:
-                    print "stale detected!"
+                print "Stale detected!"
                 best = best_share.previous_hash
         
-        if __debug__:
-            print "end think"
-        
         return best, desired
     
     @memoize.memoize_with_backing(expiring_dict.ExpiringDict(5, get_touches=False))
index d286c8c..fa7dcf6 100644 (file)
@@ -156,6 +156,9 @@ def main(args):
             share.flag_shared()
         
         def p2p_shares(shares, peer=None):
+            if len(shares) > 5:
+                print "Processing %i shares..." % (len(shares),)
+            
             for share in shares:
                 if share.hash in tracker.shares:
                     #print 'Got duplicate share, ignoring. Hash: %x' % (share.hash % 2**32,)
@@ -190,6 +193,9 @@ def main(args):
                 w = dict(current_work.value)
                 w['best_share_hash'] = best
                 current_work.set(w)
+            
+            if len(shares) > 5:
+                print "... done processing %i shares." % (len(shares),)
         
         def p2p_share_hashes(share_hashes, peer):
             get_hashes = []
@@ -271,7 +277,6 @@ def main(args):
         
         def compute(state, all_targets):
             start = time.time()
-            start = time.time()
             pre_extra_txs = [tx for tx in tx_pool.itervalues() if tx.is_good()]
             pre_extra_txs = pre_extra_txs[:2**16 - 1] # merkle_branch limit
             extra_txs = []
@@ -341,7 +346,7 @@ def main(args):
                     return False
                 share = p2pool.Share.from_block(block)
                 my_shares.add(share.hash)
-                print 'GOT SHARE! %x %x' % (share.hash, 0 if share.previous_hash is None else share.previous_hash), "DEAD ON ARRIVAL" if share.previous_hash != current_work.value['best_share_hash'] else "", time.time() - times[share.nonce]
+                print 'GOT SHARE! %x %x' % (share.hash % 2**32, 0 if share.previous_hash is None else share.previous_hash), "DEAD ON ARRIVAL" if share.previous_hash != current_work.value['best_share_hash'] else "", time.time() - times[share.nonce]
                 p2p_shares([share])
             except:
                 print
@@ -501,14 +506,14 @@ def main(args):
         reactor.stop()
 
 def run():
-    if __debug__:
-        defer.setDebugging(True)
-    
     parser = argparse.ArgumentParser(description='p2pool (version %s)' % (p2pool_init.__version__,))
     parser.add_argument('--version', action='version', version=p2pool_init.__version__)
     parser.add_argument('--testnet',
         help='use the testnet',
         action='store_const', const=p2pool.Testnet, default=p2pool.Mainnet, dest='net')
+    parser.add_argument('--debug',
+        help='debugging mode',
+        action='store_const', const=True, default=False, dest='debug')
     parser.add_argument('-a', '--address',
         help='generate to this address (defaults to requesting one from bitcoind)',
         type=str, action='store', default=None, dest='address')
@@ -549,6 +554,9 @@ def run():
     
     args = parser.parse_args()
     
+    if args.debug:
+        p2pool_init.DEBUG = True
+    
     if args.bitcoind_p2p_port is None:
         args.bitcoind_p2p_port = args.net.BITCOIN_P2P_PORT