Ejemplo n.º 1
0
async def sign_raw_tx(request):
    post = await web_base.content_type_json_check(request)
    try:
        binary = unhexlify(post['hex'].encode())
        other_pairs = dict()
        for sk in post.get('pairs', list()):
            pk = public_key(sk=sk)
            ck = get_address(pk=pk, prefix=V.BLOCK_PREFIX)
            other_pairs[ck] = (pk, sign(msg=binary, sk=sk, pk=pk))
        tx = TX(binary=binary)
        for txhash, txindex in tx.inputs:
            input_tx = tx_builder.get_tx(txhash)
            address, coin_id, amount = input_tx.outputs[txindex]
            try:
                tx.signature.append(
                    message2signature(raw=tx.b, address=address))
            except BlockChainError:
                if address not in other_pairs:
                    raise BlockChainError(
                        'Not found secret key "{}"'.format(address))
                tx.signature.append(other_pairs[address])
        data = tx.getinfo()
        return web_base.json_res({
            'hash': data['hash'],
            'signature': data['signature'],
            'hex': hexlify(tx.b).decode()
        })
    except BaseException:
        return web_base.error_res()
Ejemplo n.º 2
0
 def sign(self, data):
     data_byte = unhexlify(data.encode('utf8'))
     sig = sign(msg=data_byte, sk=self.sk, pk=self.pk)
     return hexlify(sig).decode()
Ejemplo n.º 3
0
 def sign_tx(unsigned_tx, private_key):
     pub_key = public_key(private_key)
     signature = sign(unsigned_tx, private_key, pub_key)
     return {'data': unsigned_tx.hex(), 'signature': signature.hex()}