Ejemplo n.º 1
0
    def proc_block(self, block):
        miner_hash = block.get('miner_hash')
        miner_ok = RSASign.RSASign().find_ok(miner_hash)

        try:
            verif_block, block = RSASign.RSASign().verif_sign_block(block, miner_ok)
            print(' Verification BLOCK OK')
        except Exception:
            print(' Verification BLOCK failed')
            return 0
        else:
            trans = block.get('tx')
            if self.proc_block_transaction(trans):
                chain_len = len(os.listdir(self.path+'\\chain'))
                with open(self.path+'\\chain\\block'+str(chain_len)+'.txt', 'w') as block_file:
                    block_file.write(json.dumps(block, sort_keys=True))
                self.create_input(block)
                tx = block.get('tx')
                for i in tx:
                    tx_i = json.loads(i)
                    hash_from = tx_i.get('from')
                    value = tx_i.get('value')
                    count = self.get_money(hash_from, value)
                    self.delete_used_inputs(hash_from, count, value)
                return True
Ejemplo n.º 2
0
    def collecting_block(self, block_size):
        block = {}
        with open(self.hash + '.txt', 'r') as key_file:
            info = key_file.readline()
        info = json.loads(info)
        ok = json.loads(info.get('ok'))
        ck = json.loads(info.get('ck'))
        miner_hash = info.get('hash')
        ok = rsa.PublicKey(e=ok.get('e'), n=ok.get('n'))
        ck = rsa.PrivateKey(e=ck.get('e'),
                            n=ck.get('n'),
                            d=ck.get('d'),
                            p=ck.get('p'),
                            q=ck.get('q'))
        tx_for_block = []
        tx = []
        with open('tx_buffer.txt', 'r') as tx_buffer:
            header = tx_buffer.readline()
            for i in range(block_size):
                row = tx_buffer.readline()
                if not row:
                    break
                else:
                    tx.append(json.loads(row))
        if not tx:
            return False
        else:
            print(tx)
            for current_tx in tx:
                hash_from = current_tx.get('from')
                ok_from = RSASign.RSASign().find_ok(hash_from)
                try:
                    print('trans_for_block', current_tx)
                    RSASign.RSASign().verif_sign_trans(current_tx, ok_from)
                except:
                    print('MAINING: TRANS VERIF -- FAIL')
                else:
                    tx_for_block.append(json.dumps(current_tx, sort_keys=True))
        chain_len = len(
            os.listdir(
                'C:\\Users\\USER\\PycharmProjects\\Blockchain-master\\chain'))
        block.update({'number': chain_len})
        block.update({'tx': tx_for_block})
        block.update({'miner_hash': miner_hash})
        pre_hash = self.get_prehash()
        block.update({'pre_hash': pre_hash})
        block.update({'nonce': '0'})
        block = self.count_nonce(block)
        block.update({'time': time.time()})

        # подписали блок
        block = RSASign.RSASign().get_sign(block, ck)
        block.update({'type': "block"})
        print('MAINING BLOCK:', block)
        self.send_block(block)
        self.delete_proof_transacton(tx_for_block)
Ejemplo n.º 3
0
 def proc_block_transaction(self, trans):
     for i in range(len(trans)):
         current_tx = json.loads(trans[i])
         hash = current_tx.get('from')
         ok = RSASign.RSASign().find_ok(hash)
         try:
             verif = RSASign.RSASign().verif_sign_trans(current_tx, ok)
         except Exception:
             print('Verification failed')
             return False
     return True
Ejemplo n.º 4
0
 def proc_transaction(self, trans):
     '''
     проверка подписи транзакции
     '''
     hash = trans.get('from')
     ok = RSASign.RSASign().find_ok(hash)
     try:
         verif = RSASign.RSASign().verif_sign_trans(trans, ok)
     except Exception:
         print('Verification failed')
         verif = False
     else:
         if verif:
             with open('tx_buffer.txt', 'a') as buffer:
                 buffer.write(json.dumps(trans, sort_keys=True) + '\n')
     return verif
Ejemplo n.º 5
0
    def proc_block(self, block):
        miner_hash = block.get('miner_hash')
        miner_ok = RSASign.RSASign().find_ok(miner_hash)

        try:
            verif_block, block = RSASign.RSASign().verif_sign_block(
                block, miner_ok)
            print(' Verification BLOCK OK')
        except Exception:
            print(' Verification BLOCK failed')
            return 0
        else:
            trans = block.get('tx')
            if self.proc_block_transaction(trans):
                chain_len = len(
                    os.listdir(
                        'C:\\Users\\USER\\PycharmProjects\\Blockchain-master\\chain'
                    ))
                with open(
                        'C:\\Users\\USER\\PycharmProjects\\Blockchain-master\\chain\\block'
                        + str(chain_len + 1) + '.txt', 'w') as block_file:
                    block_file.write(json.dumps(block, sort_keys=True))
Ejemplo n.º 6
0
 def money_transfer(self, hash_to, value, hash_from):
     rsasign = RSASign.RSASign()
     tx = {'from': hash_from, 'to': hash_to, 'value': value}
     if self.get_money(hash_from, value):
         _tx = json.dumps(tx)
         _tx = json.dumps(tx).encode()
         private = self.get_priv_key(hash_from)
         tx = rsasign.get_sign(tx, private)
         # sign = rsa.sign(_tx, self.get_priv_key(hash_from), 'SHA-256')
         # sign = b64encode(sign).decode()
         # tx.update({'sign': sign})
         tx.update({'type': 'tx'})
         # net = Network.Network()
         # net.send_message(tx)
         return tx
     else:
         return False
Ejemplo n.º 7
0
import Network
import json
import rsa
import hashlib
import RSASign

rsasign = RSASign.RSASign()
net = Network.Network()
# net.add_new_ip('192.168.40.198')
# net.get_all_ip()
hash = 'ae0250e67d0810a36e089bd8a06262fa0337ed927696ae7806efd9d1e58b720f'
with open(hash + '.txt', 'r') as key_file:
    keys = key_file.readline()
keys = json.loads(keys)
my_hash = keys.get('hash')
private = json.loads(keys.get('ck'))
public = json.loads(keys.get('ok'))
slava_hash = 'c6b62c8393f4bcf4a74a7435f49377e4fd256297473d3cdcd2e9b8a2f6647c60'
private = rsa.PrivateKey(private.get('n'), private.get('e'), private.get('d'),
                         private.get('p'), private.get('q'))
for i in range(1, 7):
    tx = {'from': my_hash, 'to': slava_hash, 'value': str(i * 10)}
    tx = rsasign.get_sign(tx, private)
    # print(tx.get('sign'))
    tx.update({'type': 'tx'})
    net.send_message(tx)
Ejemplo n.º 8
0
ok, ck = rsa.newkeys(512)
_ok = str(ok.e) + ' ' + str(ok.n)

for i in range(10):
    data = {'fio': 'Oksana', 'OKo': _ok, 'role': '1'}
    trans = {
        'code': str(1),
        'ok': _ok,
        'data': json.dumps(data, sort_keys=True)
    }

    for_sign = trans.copy()

    #берет словарь / возвращает словарь
    # print('Только создали транзакцию')
    trans = RSASign.RSASign().get_sign(for_sign, ck)

    time.sleep(0.25)

    trans.update({'type': 'transaction'})
    trans = enc(trans)

    #берет битовую строку
    Network.Network().send_message(trans)

# block = enc(block)
# Network.Network().send_message(block)
#
#
# m = Maining.Maining()
# m.collecting_block(1)