OSDN Git Service

add get_tx_id
authorChengcheng Zhang <943420582@qq.com>
Tue, 12 Mar 2019 06:48:33 +0000 (14:48 +0800)
committerChengcheng Zhang <943420582@qq.com>
Tue, 12 Mar 2019 06:48:33 +0000 (14:48 +0800)
app/model/transaction.py

index e41c2ba..fc8fd48 100644 (file)
@@ -105,6 +105,12 @@ def get_output_id(prepare_output_id_hexstr):
     return output_id_hexstr
 
 
+def get_tx_id(prepare_tx_id_hexstr):
+    innerhash_bytes = sha3_256(bytes.fromhex(prepare_tx_id_hexstr)).digest()
+    tx_id_hexstr = sha3_256(b'entryid:txheader:' + innerhash_bytes).hexdigest()
+    return tx_id_hexstr
+
+
 '''
 decode_raw_tx decode raw transaction
 testdata 1:
@@ -178,6 +184,7 @@ def decode_raw_tx(raw_tx_str, network_str):
     tx_input_amount, length = get_uvarint(raw_tx_str[offset:offset+8])
     offset = offset + 2 * length
     prepare_mux_hexstr = (tx_input_amount).to_bytes((tx_input_amount.bit_length() + 7) // 8, 'little').hex()
+    prepare_tx_id_hexstr = (tx['version']).to_bytes(8, 'little').hex() + (tx['time_range']).to_bytes(8, 'little').hex()
     for _ in range(tx_input_amount):
         tx_input = {
             "address": "",
@@ -238,6 +245,7 @@ def decode_raw_tx(raw_tx_str, network_str):
     offset = offset + 2 * length
     prepare_mux_hexstr += '0100000000000000' + '0151'
     mux_id_hexstr = get_mux_id(prepare_mux_hexstr)
+    prepare_tx_id_hexstr += (tx_output_amount).to_bytes((tx_output_amount.bit_length() + 7) // 8, 'little').hex()
     for i in range(tx_output_amount):
         tx_output = {
             "address": "",
@@ -270,5 +278,7 @@ def decode_raw_tx(raw_tx_str, network_str):
         offset = offset + 2 * length
         prepare_output_id_hexstr = mux_id_hexstr + tx_output['asset_id'] + (tx_output['amount']).to_bytes(8, byteorder='little').hex() + (i).to_bytes(8, byteorder='little').hex() + '0100000000000000' + (control_program_length).to_bytes((control_program_length.bit_length() + 7) // 8, 'little').hex() + tx_output['control_program']
         tx_output['id'] = get_output_id(prepare_output_id_hexstr)
+        prepare_tx_id_hexstr += tx_output['id']
         tx['outputs'].append(tx_output)
+    tx['tx_id'] = get_tx_id(prepare_tx_id_hexstr)
     return tx