'''Various helper methods. It probably needs some cleanup.''' import struct import StringIO import binascii from hashlib import sha256 from ltc_scrypt import getPoWHash def deser_string(f): nit = struct.unpack(">= 32 return rs def uint256_from_str(s): r = 0L t = struct.unpack("IIIIIIII", s[:32]) for i in xrange(8): r += t[i] << (i * 32) return r def uint256_from_compact(c): nbytes = (c >> 24) & 0xFF v = (c & 0xFFFFFFL) << (8 * (nbytes - 3)) return v def deser_vector(f, c): nit = struct.unpack("= 256: div, mod = divmod(long_value, 256) result = chr(mod) + result long_value = div result = chr(long_value) + result nPad = 0 for c in v: if c == __b58chars[0]: nPad += 1 else: break result = chr(0)*nPad + result if length is not None and len(result) != length: return None return result def b58encode(value): """ encode integer 'value' as a base58 string; returns string """ encoded = '' while value >= __b58base: div, mod = divmod(value, __b58base) encoded = __b58chars[mod] + encoded # add to left value = div encoded = __b58chars[value] + encoded # most significant remainder return encoded def reverse_hash(h): # This only revert byte order, nothing more if len(h) != 64: raise Exception('hash must have 64 hexa chars') return ''.join([ h[56-i:64-i] for i in range(0, 64, 8) ]) def doublesha(b): return sha256(sha256(b).digest()).digest() def scrypt(b): return getPoWHash(b) def bits_to_target(bits): return struct.unpack('I", u & 0xFFFFFFFFL) u >>= 32 return rs def deser_uint256_be(f): r = 0L for i in xrange(8): t = struct.unpack(">I", f.read(4))[0] r += t << (i * 32) return r def ser_number(n): # For encoding nHeight into coinbase s = bytearray(b'\1') while n > 127: s[0] += 1 s.append(n % 256) n //= 256 s.append(n) return bytes(s) def script_to_address(addr): d = address_to_pubkeyhash(addr) if not d: raise ValueError('invalid address') (ver, pubkeyhash) = d return b'\x76\xa9\x14' + pubkeyhash + b'\x88\xac'