def __init__(self): self.accounts = [None, None] self.hardware = True # Init account with default address to compare with ledger for i in range(2): HD = self.getPrivateKey(self._mnemonic(), i, 0, 0) key = keys.PrivateKey(HD.PrivateKey()) diffieHellman = ec.derive_private_key(int.from_bytes(HD.PrivateKey(), "big"), ec.SECP256K1(), default_backend()) self.accounts[i] = { "path": parse_bip32_path("44'/195'/{}'/0/0".format(i)), "privateKeyHex": HD.PrivateKey().hex(), "key": key, "addressHex": "41" + key.public_key.to_checksum_address()[2:].upper(), "publicKey": key.public_key.to_hex().upper(), "dh": diffieHellman, }
#!/usr/bin/env python from ledgerblue.comm import getDongle import argparse from base import parse_bip32_path import binascii parser = argparse.ArgumentParser() parser.add_argument('--path', help="BIP32 path to retrieve. e.g. \"44'/195'/0'/0/0\".") args = parser.parse_args() if args.path == None: args.path = "44'/195'/0'/0/0" donglePath = parse_bip32_path(args.path) transactionRaw = "0a02ee332208c90c7f40dfbdc51540e0dfe3ada62d5a860108041281010a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e7472616374124d0a15417773ff0ebd2d2c85761db01ae2b00c417bf1539312190a154167e39013be3cdd3814bed152d7439fb5b6791409100212190a1541c189fa6fc9ed7a3580c3fe291915d5c6a6259be710027089a2e0ada62d" transactionRawFIRST = "0a02ee332208c90c7f40dfbdc51540e0dfe3ada62d5a860108041281010a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e7472616374124d0a15417773ff0ebd2d2c85761db01ae2b00c417bf1539312190a154167e39013be3cdd3814" transactionRawEND = "bed152d7439fb5b6791409100212190a1541c189fa6fc9ed7a3580c3fe291915d5c6a6259be710027089a2e0ada62d" transactionBIG1 = "0a02edd92208ac1579fd507b8c8b40b0a2d3ada62d5af301080412ee010a30747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e566f74655769746e657373436f6e747261637412b9010a15417773ff0ebd2d2c85761db01ae2b00c417bf1539312190a154167e39013be3cdd38" transactionBIG2 = "14bed152d7439fb5b6791409100112190a15414d1ef8673f916debb7e2515a8f3ecaf2611034aa100112190a154184399fc6c110" transactionBIG3 = "1541b3ee0112190aa98edc11a6efb146e86a3e153d0a0933100112190a1541496e85711fa3b7ba5a093af635269a67230ac2c714" transactionBIG4 = "81e8864f0fc1f601b836b74c40548287100112190a1541c189fa6fc9ed7a3580c3fe291915d5c6a6259be710017082f1cfada62d" signatureTest = "7b74891516d57580ab669d8d4dd84cbf202108affd9d7102b33b6d81c8fa3796678512f6e6db923bac96f20fa3ba5f06fab3007678ce354f0a4ef7d37e3f7dcd01" # Create APDU message. # CLA 0xE0 # INS 0x04 SIGN
0xA0 | 0x08 | (0x00 + len(tokenSignature) - 1), 0x00, None, chunkList[len(chunkList) - 1])) else: result = dongle.exchange( apduMessage(0x04, 0x90, 0x00, None, chunkList[len(chunkList) - 1])) return raw_tx, result def address_hex(address): return base58.b58decode_check(address).hex().upper() accounts = [{ "path": parse_bip32_path("44'/195'/0'/0/0"), }, { "path": parse_bip32_path("44'/195'/1'/0/0"), }] # Get Addresses logger.debug('-= Tron Ledger =-') logger.debug('Requesting Public Keys...') dongle = getDongle(True) for i in range(2): result = dongle.exchange( apduMessage(0x02, 0x00, 0x00, accounts[i]['path'], "")) size = result[0] if size == 65: accounts[i]['publicKey'] = result[1:1 + size].hex() size = result[size + 1]
# Start Channel and WalletStub channel = grpc.insecure_channel("vtest.infragrid.v.network:50051") stub = WalletStub(channel) logger.debug(''' Vision MultiSign tests ''') tx = stub.CreateTransaction2( contract.TransferContract( owner_address=bytes.fromhex( address_hex("VUEZSdKsoDHQMeZwihtdoBiN46zxhGWYdH")), to_address=bytes.fromhex( address_hex("VPnYqC2ukKyhEDAjqRRobSVygMAb8nAcXM")), amount=100000)) # use permission 2 tx.transaction.raw_data.contract[0].Permission_id = 2 raw_tx, sign1 = ledgerSign(parse_bip32_path("44'/195'/0'/0/0"), tx.transaction) raw_tx, sign2 = ledgerSign(parse_bip32_path("44'/195'/1'/0/0"), tx.transaction) tx.transaction.signature.extend([bytes(sign1[0:65])]) tx.transaction.signature.extend([bytes(sign2[0:65])]) r = stub.BroadcastTransaction(tx.transaction) if r.result == True: print("Success") else: print("Fail")