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
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