示例#1
0
    def f_read_wallet(self):

        addr_list = []

        if os.path.isfile('./wallet.dat') is False:
            printL((
                '[info] Creating new wallet file..this could take up to a minute'
            ))
            SEED = None
            # For AWS test only
            if os.path.isfile('./mnemonic'):
                with open('./mnemonic', 'r') as f:
                    SEED = f.read()
                    SEED = mnemonic_to_seed(SEED.strip())

            addr_list.append(self.getnewaddress(4096, 'XMSS', SEED=SEED))
            with open("./wallet.dat", "a"
                      ) as myfile:  # add in a new call to create random_otsmss
                pickle.dump(addr_list, myfile)

        while True:
            try:
                with open('./wallet.dat', 'r') as myfile:
                    return pickle.load(myfile)
            except:
                printL(('Wallet.dat corrupted'))
                printL(('Trying to recover'))
                if self.recover_wallet():
                    continue
                printL(('Failed to Recover Wallet'))
                sys.exit()
示例#2
0
文件: wallet.py 项目: timhovius/QRL
def recover_wallet():
    data = None
    try:
        with open('./wallet.info', 'r') as myfile:
            data = pickle.load(myfile)
        if data and len(data[0]) != 5:
            printL(('wallet.info is also corrupted, cannot recover'))
            return False
    except:
        printL(('Wallet.info is corrupted'))
        return False

    with open("./wallet.dat", "w+") as myfile:
        pass
    chain.my = []
    for wallets in data:
        words = wallets[0]
        addr = getnewaddress(type='XMSS', SEED=mnemonic_to_seed(words))
        f_append_wallet(addr, True)

    return True
示例#3
0
    def parse_cmd(self, data):

        data = data.split()
        args = data[1:]

        if len(data) != 0:
            if data[0] in self.cmd_list:

                if data[0] == 'getnewaddress':
                    self.getnewaddress(args)
                    return

                if data[0] == 'hexseed':
                    for x in self.factory.chain.my:
                        if type(x[1]) == list:
                            pass
                        else:
                            if x[1].type == 'XMSS':
                                self.transport.write('Address: ' +
                                                     x[1].address + '\r\n')
                                self.transport.write('Recovery seed: ' +
                                                     x[1].hexSEED + '\r\n')
                    return

                if data[0] == 'seed':
                    for x in self.factory.chain.my:
                        if type(x[1]) == list:
                            pass
                        else:
                            if x[1].type == 'XMSS':
                                self.transport.write('Address: ' +
                                                     x[1].address + '\r\n')
                                self.transport.write('Recovery seed: ' +
                                                     x[1].mnemonic + '\r\n')
                    return

                elif data[0] == 'search':
                    if not args:
                        self.transport.write(
                            '>>> Usage: search <txhash or Q-address>' + '\r\n')
                        return
                    for result in self.factory.chain.search_telnet(args[0],
                                                                   long=0):
                        self.transport.write(result + '\r\n')
                    return

                elif data[0] == 'json_search':
                    if not args:
                        self.transport.write(
                            '>>>Usage: search <txhash or Q-address>' + '\r\n')
                        return
                    for result in self.factory.chain.search_telnet(args[0],
                                                                   long=1):
                        self.transport.write(result + '\r\n')
                    return

                elif data[0] == 'json_block':

                    if not args:
                        # chain.json_printL(((chain.m_get_last_block())
                        self.transport.write(
                            helper.json_print_telnet(
                                self.factory.chain.m_get_last_block()) +
                            '\r\n')
                        return
                    try:
                        int(args[0])
                    except:
                        self.transport.write(
                            '>>> Try "json_block <block number>" ' + '\r\n')
                        return

                    if int(args[0]) > self.factory.chain.m_blockheight():
                        self.transport.write('>>> Block > Blockheight' +
                                             '\r\n')
                        return

                    self.transport.write(
                        helper.json_print_telnet(
                            self.factory.chain.m_get_block(int(args[0]))) +
                        '\r\n')
                    return

                elif data[0] == 'savenewaddress':
                    self.savenewaddress()

                elif data[0] == 'recoverfromhexseed':
                    if not args or not hexseed_to_seed(args[0]):
                        self.transport.write(
                            '>>> Usage: recoverfromhexseed <paste in hexseed>'
                            + '\r\n')
                        self.transport.write(
                            '>>> Could take up to a minute..' + '\r\n')
                        self.transport.write(
                            '>>> savenewaddress if Qaddress matches expectations..'
                            + '\r\n')
                        return

                    self.transport.write(
                        '>>> trying.. this could take up to a minute..' +
                        '\r\n')
                    addr = self.factory.chain.wallet.getnewaddress(
                        type='XMSS', SEED=hexseed_to_seed(args[0]))
                    self.factory.newaddress = addr
                    self.transport.write('>>> Recovery address: ' +
                                         addr[1].address + '\r\n')
                    self.transport.write('>>> Recovery seed phrase: ' +
                                         addr[1].mnemonic + '\r\n')
                    self.transport.write('>>> hexSEED confirm: ' +
                                         addr[1].hexSEED + '\r\n')
                    self.transport.write(
                        '>>> savenewaddress if Qaddress matches expectations..'
                        + '\r\n')
                    return

                elif data[0] == 'recoverfromwords':
                    if not args:
                        self.transport.write(
                            '>>> Usage: recoverfromwords <paste in 32 mnemonic words>'
                            + '\r\n')
                        return
                    self.transport.write(
                        '>>> trying..this could take up to a minute..' +
                        '\r\n')
                    if len(args) != 32:
                        self.transport.write(
                            '>>> Usage: recoverfromwords <paste in 32 mnemonic words>'
                            + '\r\n')
                        return
                    args = ' '.join(args)
                    addr = self.factory.chain.wallet.getnewaddress(
                        type='XMSS', SEED=mnemonic_to_seed(args))
                    self.factory.newaddress = addr
                    self.transport.write('>>> Recovery address: ' +
                                         addr[1].address + '\r\n')
                    self.transport.write('>>> Recovery hexSEED: ' +
                                         addr[1].hexSEED + '\r\n')
                    self.transport.write('>>> Mnemonic confirm: ' +
                                         addr[1].mnemonic + '\r\n')
                    self.transport.write(
                        '>>> savenewaddress if Qaddress matches expectations..'
                        + '\r\n')
                    return

                elif data[0] == 'stake':
                    self.transport.write(
                        '>> Toggling stake from: ' +
                        str(self.factory.p2pFactory.stake) + ' to: ' +
                        str(not self.factory.p2pFactory.stake) + '\r\n')
                    self.factory.p2pFactory.stake = not self.factory.p2pFactory.stake
                    printL(('STAKING set to: ', self.factory.p2pFactory.stake))
                    return

                elif data[0] == 'stakenextepoch':
                    self.transport.write(
                        '>>> Sending a stake transaction for address: ' +
                        self.factory.chain.mining_address +
                        ' to activate next epoch(' +
                        str(c.blocks_per_epoch -
                            (self.factory.chain.m_blockchain[-1].blockheader.
                             blocknumber -
                             (self.factory.chain.m_blockchain[-1].blockheader.
                              epoch * c.blocks_per_epoch))) + ' blocks time)' +
                        '\r\n')
                    printL(('STAKE for address:',
                            self.factory.chain.mining_address))
                    self.factory.p2pFactory.send_st_to_peers(
                        StakeTransaction().create_stake_transaction(
                            self.factory.chain.mining_address,
                            self.factory.chain.block_chain_buffer.height() + 1,
                            self.factory.chain.my[0][1],
                            balance=self.factory.chain.state.state_balance(
                                self.factory.chain.mining_address)))
                    return

                elif data[0] == 'send':
                    self.send_tx(args)

                elif data[0] == 'mempool':
                    self.transport.write(
                        '>>> Number of transactions in memory pool: ' +
                        str(len(self.factory.chain.transaction_pool)) + '\r\n')

                elif data[0] == 'help':
                    self.transport.write(
                        '>>> QRL ledger help: try quit, wallet, send, getnewaddress, search, recoverfromhexseed, recoverfromwords, stake, stakenextepoch, mempool, json_block, json_search, seed, hexseed, getinfo, peers, or blockheight'
                        + '\r\n')
                # removed 'hrs, hrs_check,'
                elif data[0] == 'quit' or data[0] == 'exit':
                    self.transport.loseConnection()

                elif data[0] == 'listaddresses':
                    addresses, num_sigs, types = self.factory.chain.wallet.inspect_wallet(
                    )

                    for x in range(len(addresses)):
                        self.transport.write(
                            str(x) + ', ' + addresses[x] + '\r\n')

                elif data[0] == 'wallet':
                    self.wallet()

                elif data[0] == 'getinfo':
                    self.transport.write('>>> Version: ' +
                                         self.factory.chain.version_number +
                                         '\r\n')
                    self.transport.write('>>> Uptime: ' +
                                         str(time.time() -
                                             self.factory.start_time) + '\r\n')
                    self.transport.write(
                        '>>> Nodes connected: ' +
                        str(len(self.factory.p2pFactory.peers)) + '\r\n')
                    self.transport.write('>>> Staking set to: ' +
                                         str(self.factory.p2pFactory.stake) +
                                         '\r\n')
                    self.transport.write(
                        '>>> Sync status: ' +
                        self.factory.p2pFactory.nodeState.state + '\r\n')

                elif data[0] == 'blockheight':
                    self.transport.write(
                        '>>> Blockheight: ' +
                        str(self.factory.chain.m_blockheight()) + '\r\n')
                    self.transport.write('>>> Headerhash: ' +
                                         self.factory.chain.m_blockchain[-1].
                                         blockheader.headerhash + '\r\n')

                elif data[0] == 'peers':
                    self.transport.write('>>> Connected Peers:\r\n')
                    for peer in self.factory.p2pFactory.peers:
                        self.transport.write('>>> ' + peer.identity + " [" +
                                             peer.version +
                                             "]  blockheight: " +
                                             str(peer.blockheight) + '\r\n')

                elif data[0] == 'reboot':
                    if len(args) < 1:
                        self.transport.write('>>> reboot <password>\r\n')
                        self.transport.write('>>> or\r\n')
                        self.transport.write(
                            '>>> reboot <password> <nonce>\r\n')
                        self.transport.write('>>> or\r\n')
                        self.transport.write(
                            '>>> reboot <password> <nonce> <trim_blocknum>\r\n'
                        )
                        return
                    json_hash, err = None, None
                    if len(args) == 3:
                        json_hash, status = self.factory.chain.generate_reboot_hash(
                            args[0], args[1], args[2])
                        self.transport.write(
                            str(args[0]) + str(args[1]) + str(args[2]))
                    elif len(args) == 2:
                        json_hash, status = self.factory.chain.generate_reboot_hash(
                            args[0], args[1])
                    else:
                        json_hash, status = self.factory.chain.generate_reboot_hash(
                            args[0])

                    if json_hash:
                        self.factory.p2pFactory.send_reboot(json_hash)
                        #self.factory.state.update('synced')
                    self.transport.write(status)

        else:
            return False

        return True