Example #1
0
def produce_transactions(path, cnt=None):
    clients = {}
    transactions = []
    with open(path) as fp:
        lines = fp.read().split("\n")[:-1]
        id = 0
        for line in lines[1:]:
            print("Reading line:", line)
            id += 1
            if cnt is not None and id > cnt:
                break
            fields = line.split('\t')
            trans_id = int(fields[0])
            trans = Transaction(trans_id)
            outputs = {}
            for field in fields[1:]:
                if field.startswith("intput"):
                    input_ip = int(field.split(':')[1])
                    add_client(clients, input_ip)
                elif field.startswith("outputindex"):
                    output_index = int(field.split(':')[1])
                elif field.startswith("output"):
                    output_num = field.split(':')[0][6:]
                    if output_num == "":
                        output_num = 1
                    else:
                        output_num = int(output_num)
                    output_ip = int(field.split(':')[1])
                    add_client(clients, output_ip)
                    if output_num in outputs:
                        outputs[output_num] = (output_ip,
                                               outputs[output_num][1])
                    else:
                        outputs[output_num] = (output_ip, None)
                elif field.startswith("value"):
                    output_num = field.split(':')[0][5:]
                    if output_num == "":
                        output_num = 1
                    else:
                        output_num = int(output_num)
                    value = float(field.split(':')[1])
                    if output_num in outputs:
                        outputs[output_num] = (outputs[output_num][0], value)
                    else:
                        outputs[output_num] = (None, value)
            for op in outputs.values():
                trans.add_output(op)
            trans.add_input((input_ip, None))
            transactions.append(trans)
            signature = clients[input_ip].private_key.sign(
                data=trans.__str__().encode('utf-8'),
                padding=padding.PSS(mgf=padding.MGF1(hashes.SHA256()),
                                    salt_length=padding.PSS.MAX_LENGTH),
                algorithm=hashes.SHA256())
            # trans.add_signature(signature)
    return transactions, clients
Example #2
0
    def make_block(self):
        """
        Creates a block with height and coinbase from rpc call.
        Uses decode raw transaction to generate txid.
        :return: BTE Block object
        """
        block_template = self.get_block_template()

        coinbase_tx = Transaction(
            height=block_template['height'],
            coinbase_amount=block_template['coinbasevalue'])
        txid = self.decode_raw_transaction(coinbase_tx.__str__())['txid']
        block = Block(
            previous_block_header_hash=block_template['previousblockhash'],
            time=block_template['curtime'],
            nbits=block_template['bits'],
            nonce=0,
            raw_coinbase=coinbase_tx.__str__(),
            target=block_template['target'],
            merkle_root_hash=txid)

        return block