Beispiel #1
0
 def update(self):
     x = ''.join(
         chain(str(self.author), str(self.index),
               [str(f) for f in self.froms], [str(f) for f in self.outs],
               [str(f) for f in self.outns], str(self.timestamp)))
     self.hash = cg.h(str(x))
     return self.hash
Beispiel #2
0
 def update(self):
     """Updates hash"""
     self.sort()
     h = ''.join([str(self.prevhash)] + [str(self.powhash)] +
                 [str(t.hash)
                  for t in self.txs] + [str(sc) for sc in self.contracts] +
                 [str(e) for e in self.powminers] +
                 [str(e) for e in self.pocminers])
     self.h = cg.h(str(h))
Beispiel #3
0
def poc_mining(b, bch):
    """Proofs-of-capacity mining"""
    # miner[0] - n, miner[1] - miner's public key, miner[2] - xs miner has calculated
    miners = bch[-1].pocminers
    if len(miners) == 0:
        raise NoValidMinersError
    for i in range(len(miners)):
        miners[i] = [len(miners[i][2]) * 20 + miners[i][0]] + miners[i]
    miners.sort()
    try:
        i = ((int(bch[-1].txs[-1].hash) + int(bch[-1].txs[-2].hash)) %
             int(len(miners)**0.5))**2
    except IndexError:
        raise TooLessTxsError
    i1 = i
    miner = miners[i]
    y = [((int(bch[-1].txs[-1].hash) * k + k)**k) % miner[1]
         for k in range(100)]
    v = True
    while v:
        for x, k in miner[3]:
            print(86, k, x,
                  (int(cg.h(str(x + len(bch)))) + int(cg.h(str(miner[2])))) %
                  miner[1], y[k], len(bch), miner[1])
            if (int(cg.h(str(x + len(bch)))) +
                    int(cg.h(str(miner[2])))) % miner[1] != y[k]:
                break
        else:
            v = False
        if v:
            miners.remove(miner)
            if i == i1:
                raise NoValidMinersError
            if i == len(bch):
                i = i - len(bch) + 1
            miner = miners[i]
            y = [((int(bch[-1].txs[-1].hash) * i + i)**i) % miner[1]
                 for i in range(100)]
    b.creators.append(miner[2])
    b.update()
    return b
Beispiel #4
0
def poc_mine(n, bch, myaddr):
    xs = []
    file = open('poc_mining.txt', 'w')
    file.close()
    file = open('poc_mining.txt', 'a')
    f = []
    y = [((int(bch[-1].txs[-1].hash) * k + k)**k) % n for k in range(100)]
    for i in range(n):
        f.append(
            str((int(cg.h(str(i + len(bch)))) + int(cg.h(str(myaddr)))) % n) +
            '\n')
    file.writelines(f)
    file.close()
    with open('poc_mining.txt', 'r') as file:
        f = [int(i) for i in file.readlines()]
    for i in range(len(y)):
        try:
            xs.append([f.index(y[i]), i])
        except:
            pass
    return xs
Beispiel #5
0
def validate_poc(bch, n):
    bl = bch[n]
    miners = bch[n - 1].pocminers
    if n < 0:
        n = len(bch) + n
    for i in range(len(miners)):
        miners[i] = [len(miners[i][2]) * 20 + miners[i][0]] + miners[i]
    miners.sort()
    print(bch[n - 1].txs)
    i = ((int(bch[n - 1].txs[-1].hash) + int(bch[n - 1].txs[-2].hash)) %
         int(len(miners)**0.5))**2
    i1 = i
    miner = miners[i]
    y = [((int(bch[n - 1].txs[-1].hash) * k + k)**k) % miner[1]
         for k in range(100)]
    v = True
    while v:
        for p in miners[i][3]:
            x = p[0]
            k = p[1]
            if (int(cg.h(str(x + n))) +
                    int(cg.h(str(miner[2])))) % miner[1] != y[k]:
                print(i, k, x,
                      (int(cg.h(str(x + n))) + int(cg.h(str(miner[2])))) %
                      miner[1], y[k], n, miner[1])
                break
        else:
            v = False
        if v:
            miners.remove(miner)
            if i == i1:
                raise NoValidMinersError
            if i == len(bch):
                i = i - len(bch) + 1
            miner = miners[i]
            y = [((int(bch[n - 1].txs[-1].hash) * i + i)**i) % miner[1]
                 for i in range(100)]
    if not miners[i][2] == bl.creators[1]:
        return False
    return True
Beispiel #6
0
 def calc_pow_hash(self):
     try:
         h = ''.join([str(self.timestamp), str(self.n), self.creators[0]])
     except IndexError:
         h = ''.join([str(self.timestamp), str(self.n)])
     return cg.h(str(h))