コード例 #1
0
 def serialize_header(self, merkle_root_int, ntime_bin, nonce_bin):
     '''Serialize header for calculating block hash'''
     r = struct.pack(">i", self.nVersion)
     r += self.prevhash_bin
     r += util.ser_uint256_be(merkle_root_int)
     r += ntime_bin
     r += struct.pack(">I", self.nBits)
     r += nonce_bin
     return r
コード例 #2
0
 def serialize_header(self, merkle_root_int, ntime_bin, nonce_bin):
     '''Serialize header for calculating block hash'''
     r  = struct.pack(">i", self.nVersion)
     r += self.prevhash_bin
     r += util.ser_uint256_be(merkle_root_int)
     r += ntime_bin
     r += struct.pack(">I", self.nBits)
     r += nonce_bin    
     return r       
コード例 #3
0
 def serialize_header(self, merkle_root_int, ntime_bin, nonce_bin):
     """Serialize header for calculating block hash"""
     r = struct.pack(">i", self.nVersion)
     r += self.prevhash_bin
     r += util.ser_uint256_be(merkle_root_int)
     if settings.COINDAEMON_ALGO == 'riecoin':
         r += struct.pack(">I", self.nBits)
         r += ntime_bin
     else:
         r += ntime_bin
         r += struct.pack(">I", self.nBits)
     r += nonce_bin
     return r
コード例 #4
0
 def serialize_header(self, merkle_root_int, ntime_bin, nonce_bin,
                      version_rolling):
     '''Serialize header for calculating block hash'''
     version = self.nVersion
     if version_rolling and len(version_rolling) == 8:
         version |= int(version_rolling, 16)
     r = struct.pack(">i", version)
     r += self.prevhash_bin
     r += util.ser_uint256_be(merkle_root_int)
     r += ntime_bin
     r += struct.pack(">I", self.nBits)
     r += nonce_bin
     return r
コード例 #5
0
 def serialize_header(self, merkle_root_int, ntime_bin, nonce_bin):
     '''Serialize header for calculating block hash'''
     r  = struct.pack(">i", self.nVersion)
     r += self.prevhash_bin
     r += util.ser_uint256_be(merkle_root_int)
     if settings.COINDAEMON_ALGO == 'riecoin':
         r += struct.pack(">I", self.nBits)
         r += ntime_bin
     else:
         r += ntime_bin
         r += struct.pack(">I", self.nBits)
     r += nonce_bin    
     return r       
コード例 #6
0
 def serialize_header(self, merkle_root_int, ntime_bin, nonce_bin):
     '''Serialize header for calculating block hash'''
     r = struct.pack(">i", self.nVersion)
     r += self.prevhash_bin
     r += util.ser_uint256_be(merkle_root_int)
     r += ntime_bin
     r += struct.pack(">I", self.nBits)
     r += nonce_bin
     r += self.hashstateroot_bin
     r += self.hashutxoroot_bin
     r += binascii.unhexlify(
         "0000000000000000000000000000000000000000000000000000000000000000ffffffff00"
     )
     return r
コード例 #7
0
ファイル: miner.py プロジェクト: kmod/bitcoin_mining
    def verify(self, extranonce2, ntime, nonce):
        return
        coinbase = self.coinb1 + self.extranonce1 + extranonce2 + self.coinb2
        coinbase_hash_bin = doublesha(binascii.unhexlify(coinbase))
        merkle_root = build_merkle_root(self.merkle_branch, coinbase_hash_bin)
        merkle_root = ser_uint256_be(uint256_from_str(merkle_root))
        preheader = self.version + self.prevhash + merkle_root.encode("hex") + ntime + self.nbits
        preheader_bin = preheader.decode("hex")
        preheader_bin = ''.join([preheader_bin[i*4:i*4+4][::-1] for i in range(0,19)])

        hash_bin = doublesha(preheader_bin + nonce.decode("hex")[::-1])
        print hash_bin.encode("hex")
        val = struct.unpack("<I", hash_bin[-4:])[0]
        assert val < THRESH, (val, THRESH)
コード例 #8
0
ファイル: miner.py プロジェクト: sycomix/bitcoin_mining
    def verify(self, extranonce2, ntime, nonce):
        return
        coinbase = self.coinb1 + self.extranonce1 + extranonce2 + self.coinb2
        coinbase_hash_bin = doublesha(binascii.unhexlify(coinbase))
        merkle_root = build_merkle_root(self.merkle_branch, coinbase_hash_bin)
        merkle_root = ser_uint256_be(uint256_from_str(merkle_root))
        preheader = self.version + self.prevhash + merkle_root.encode(
            "hex") + ntime + self.nbits
        preheader_bin = preheader.decode("hex")
        preheader_bin = ''.join(
            [preheader_bin[i * 4:i * 4 + 4][::-1] for i in range(0, 19)])

        hash_bin = doublesha(preheader_bin + nonce.decode("hex")[::-1])
        print hash_bin.encode("hex")
        val = struct.unpack("<I", hash_bin[-4:])[0]
        assert val < THRESH, (val, THRESH)
コード例 #9
0
 def serialize_header(self, merkle_root_int, ntime_bin, nonce_bin):
     '''Serialize header for calculating block hash'''
     r = struct.pack(">i", self.nVersion)
     r += self.prevhash_bin
     r += util.ser_uint256_be(merkle_root_int)
     if settings.COINDAEMON_ALGO == 'riecoin':
         r += struct.pack(">I", self.nBits)
         r += ntime_bin
     else:
         r += ntime_bin
         r += struct.pack(">I", self.nBits)
     r += nonce_bin
     if settings.COINDAEMON_ALGO == 'jackpotcoin':
         r += struct.pack(">i",
                          self.nSuperBlock)  # serialize with BE for JACKPOT
         r += struct.pack(">i",
                          self.nRoundMask)  # serialize with BE for JACKPT
     return r
コード例 #10
0
 def serialize_header(self, merkle_root_int, ntime, nnonce):
     '''Serialize header for calculating block hash'''
     if settings.COINDAEMON_ALGO == 'heavy':
         r = struct.pack("<i", self.nVersion)
         r += ''.join([
             self.prevhash_bin[i * 4:i * 4 + 4][::-1] for i in range(0, 64)
         ])
         r += util.ser_uint256_le(merkle_root_int)
         r += struct.pack("<I", ntime)
         r += struct.pack("<I", self.nBits)
         r += struct.pack("<I", nnonce)
     else:
         r = struct.pack(">i", self.nVersion)
         r += self.prevhash_bin
         r += util.ser_uint256_be(merkle_root_int)
         r += struct.pack(">I", nntime)
         r += struct.pack(">I", self.nBits)
         r += struct.pack(">I", nnonce)
     return r
コード例 #11
0
 def serialize_header(self, merkle_root_int, ntime, nnonce, nvote = None):
     '''Serialize header for calculating block hash'''
     if settings.COINDAEMON_ALGO == 'heavy':
         r  = struct.pack("<i", self.nVersion)
         r += ''.join([ self.prevhash_bin[i*4:i*4+4][::-1] for i in range(0, 64) ])
         r += util.ser_uint256_le(merkle_root_int)
         r += struct.pack("<I", ntime)
         r += struct.pack("<I", self.nBits)
         r += struct.pack("<I", nnonce)
         r += struct.pack("<H", nvote)
         r += struct.pack("<H", self.nReward)
     else:
         r  = struct.pack(">i", self.nVersion)
         r += self.prevhash_bin
         r += util.ser_uint256_be(merkle_root_int)
         r += struct.pack(">I", nntime)
         r += struct.pack(">I", self.nBits)
         r += struct.pack(">I", nnonce)
     return r
コード例 #12
0
ファイル: miner.py プロジェクト: sycomix/bitcoin_mining
    def run(self):
        difficulty = 1
        while True:
            s = self.f.readline()
            if not s:
                break

            if TEST:
                s = """{"params": ["bf", "4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000",
        "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff20020862062f503253482f04b8864e5008",
        "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000", [],
        "00000002", "1c2ac4af", "504e86b9", false], "id": null, "method": "mining.notify"}"""
                extranonce1 = "08000002"

            s = s.strip()
            assert s
            d = simplejson.loads(s)

            # if d.get('method', None) == "mining.notify" and self.done:
            # continue

            print d

            if d.get('error', None):
                raise Exception()

            if d['id'] == 1 and 'method' not in d:
                subscription, extranonce1, extranonce2_size = d['result']

            elif d.get('method', None) == "mining.set_difficulty":
                difficulty = d['params'][0]

            elif d.get('method', None) == "mining.notify":
                print "stopping worker"
                self.w.stop()
                print "stopped"

                params, clean_jobs = d['params'][:-1], d['params'][:-1]
                j = JobInfo(extranonce1, *params)
                self.jobs[j.id] = j

                extranonce2 = (
                    (int(time.time()) << 16) + os.getpid()) & 0xffffffff
                extranonce2 = struct.pack(">I", extranonce2).encode("hex")
                if TEST:
                    extranonce2 = "00000001"
                print "extranonce2 = %s" % extranonce2

                coinbase = j.coinb1 + extranonce1 + extranonce2 + j.coinb2
                coinbase_hash_bin = doublesha(binascii.unhexlify(coinbase))
                merkle_root = build_merkle_root(j.merkle_branch,
                                                coinbase_hash_bin)
                merkle_root = ser_uint256_be(uint256_from_str(merkle_root))

                # ntime = "504e86ed"
                ntime = j.ntime
                if TEST:
                    ntime = "504e86ed"

                preheader = j.version + j.prevhash + merkle_root.encode(
                    "hex") + ntime + j.nbits
                preheader_bin = preheader.decode("hex")
                preheader_bin = ''.join([
                    preheader_bin[i * 4:i * 4 + 4][::-1] for i in range(0, 19)
                ])

                self.w.start(difficulty, j.id, extranonce2, ntime,
                             preheader_bin)

            else:
                assert d['id'] < self.mid
コード例 #13
0
ファイル: miner.py プロジェクト: kmod/bitcoin_mining
    def run(self):
        difficulty = 1
        while True:
            s = self.f.readline()
            if not s:
                break

            if TEST:
                s = """{"params": ["bf", "4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000",
        "01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff20020862062f503253482f04b8864e5008",
        "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000", [],
        "00000002", "1c2ac4af", "504e86b9", false], "id": null, "method": "mining.notify"}"""
                extranonce1 = "08000002"

            s = s.strip()
            assert s
            d = simplejson.loads(s)

            # if d.get('method', None) == "mining.notify" and self.done:
                # continue

            print d

            if d.get('error', None):
                raise Exception()

            if d['id'] == 1 and 'method' not in d:
                subscription, extranonce1, extranonce2_size = d['result']

            elif d.get('method', None) == "mining.set_difficulty":
                difficulty = d['params'][0]

            elif d.get('method', None) == "mining.notify":
                print "stopping worker"
                self.w.stop()
                print "stopped"

                params, clean_jobs = d['params'][:-1], d['params'][:-1]
                j = JobInfo(extranonce1, *params)
                self.jobs[j.id] = j

                extranonce2 = ((int(time.time()) << 16) + os.getpid()) & 0xffffffff
                extranonce2 = struct.pack(">I", extranonce2).encode("hex")
                if TEST:
                    extranonce2 = "00000001"
                print "extranonce2 = %s" % extranonce2

                coinbase = j.coinb1 + extranonce1 + extranonce2 + j.coinb2
                coinbase_hash_bin = doublesha(binascii.unhexlify(coinbase))
                merkle_root = build_merkle_root(j.merkle_branch, coinbase_hash_bin)
                merkle_root = ser_uint256_be(uint256_from_str(merkle_root))

                # ntime = "504e86ed"
                ntime = j.ntime
                if TEST:
                    ntime = "504e86ed"

                preheader = j.version + j.prevhash + merkle_root.encode("hex") + ntime + j.nbits
                preheader_bin = preheader.decode("hex")
                preheader_bin = ''.join([preheader_bin[i*4:i*4+4][::-1] for i in range(0,19)])

                self.w.start(difficulty, j.id, extranonce2, ntime, preheader_bin)

            else:
                assert d['id'] < self.mid