Esempio n. 1
0
def reconnect(BitPAIR, USERNAME, PASS_PHRASE):

    # create fresh websocket connection
    connected = 0
    while not connected:
        # fetch fresh nodes list from subprocess and shuffle it
        nds = race_read('nodes.txt')
        if isinstance(nds, list):
            nodes = nds
        shuffle(nodes)
        node = nodes[0]
        try:
            account = Account(USERNAME,
                              bitshares_instance=BitShares(node,
                                                           num_retries=0))
            market = Market(BitPAIR,
                            bitshares_instance=BitShares(node,
                                                         num_retries=0),
                            mode='head')
            chain = Blockchain(
                bitshares_instance=BitShares(node, num_retries=0), mode='head')
            if chain.get_network()['chain_id'] != ID:
                raise ValueError('Not Mainnet Chain')
            connected = 1
        except:
            pass
    try:
        market.bitshares.wallet.unlock(PASS_PHRASE)
    except:
        pass
    return account, market, nodes, chain
Esempio n. 2
0
class Testcases(unittest.TestCase):
    def setUp(self):
        fixture_data()
        self.chain = Blockchain(mode="head")

    def test_is_irv(self):
        self.assertFalse(self.chain.is_irreversible_mode())

    def test_info(self):
        info = self.chain.info()
        for i in [
                "time",
                "dynamic_flags",
                "head_block_id",
                "head_block_number",
                "last_budget_time",
        ]:
            self.assertIn(i, info)

    def test_parameters(self):
        info = self.chain.chainParameters()
        for i in [
                "worker_budget_per_day",
                "maintenance_interval",
        ]:
            self.assertIn(i, info)

    def test_network(self):
        info = self.chain.get_network()
        for i in [
                "chain_id",
                "core_symbol",
                "prefix",
        ]:
            self.assertIn(i, info)

    def test_props(self):
        info = self.chain.get_chain_properties()
        for i in [
                "id",
                "chain_id",
                "immutable_parameters",
        ]:
            self.assertIn(i, info)

    def test_block_num(self):
        num = self.chain.get_current_block_num()
        self.assertTrue(num > 100)

    def test_block(self):
        block = self.chain.get_current_block()
        self.assertIsInstance(block, Block)
        self.chain.block_time(1)
        self.chain.block_timestamp(1)

    def test_list_accounts(self):
        for account in self.chain.get_all_accounts():
            self.assertIsInstance(account, str)
            # Break already
            break
Esempio n. 3
0
def ping(n, num, arr):  # ping the blockchain and return latency

    try:
        start = time.time()
        chain = Blockchain(bitshares_instance=BitShares(n, num_retries=0),
                           mode='head')

        # print(n,chain.rpc.chain_params["chain_id"])
        ping_latency = time.time() - start
        current_block = chain.get_current_block_num()
        blocktimestamp = abs(
            chain.block_timestamp(current_block))  # + utc_offset)
        block_latency = time.time() - blocktimestamp
        # print (blocktimestamp)
        # print (time.time())
        # print (block_latency)
        # print (ping_latency)
        # print (time.ctime())
        # print (utc_offset)
        # print (chain.get_network())
        if chain.get_network()['chain_id'] != ID:
            num.value = 333333
        elif block_latency < (ping_latency + 4):
            num.value = ping_latency
        else:
            num.value = 111111
    except:
        num.value = 222222
        pass
Esempio n. 4
0
def reconnect():

    global account, market, nodes, chain, pings
    try:
        history_text.delete("1.0", "end")
        history_text.insert(END, '\n\n CONNECTING...')
        master.update()
    except:
        pass
    print(cyan(time.ctime() + ' CONNECTING...'))
    start = time.time()

    # create fresh websocket connection
    connected = 0
    while not connected:
        # fetch fresh nodes list from subprocess and shuffle it
        metaNODE = Bitshares_Trustless_Client()
        nds = metaNODE['whitelist']
        del metaNODE
        if isinstance(nds, list):
            nodes = nds
        shuffle(nodes)
        node = nodes[0]
        print(green(node))
        pings = [0]
        try:
            account = Account(USERNAME,
                              bitshares_instance=BitShares(nodes,
                                                           num_retries=2))
            market = Market(BitPAIR,
                            bitshares_instance=BitShares(nodes, num_retries=2),
                            mode='head')
            chain = Blockchain(bitshares_instance=BitShares(nodes,
                                                            num_retries=2),
                               mode='head')
            if chain.get_network()['chain_id'] != ID:
                raise ValueError('Not Mainnet Chain')
            connected = 1
        except Exception as e:
            try:
                history_text.insert(END, '\n\n RECONNECTING...')
                master.update()
            except:
                pass
            msg = (time.ctime() + str(type(e).__name__) + str(e.args))
            print('RECONNECTING ' + msg)
            pass
    try:
        market.bitshares.wallet.unlock(PASS_PHRASE)
    except:
        # print('YOUR WALLET IS LOCKED')
        pass
    print('CONNECTION ELAPSED: ', ('%.1f' % (time.time() - start)))
Esempio n. 5
0
def get_network(api_key: hug.types.text, request, hug_timer=5):
	"""Bitshares current chain network!"""
	if (check_api_token(api_key) == True): # Check the api key
		# API KEY VALID
		google_analytics(request, 'get_network')
		chain = Blockchain()
		chain_get_network = chain.get_network()

		return {'get_network': chain_get_network,
				'valid_key': True,
				'took': float(hug_timer)}
	else:
	# API KEY INVALID!
		return {'valid_key': False,
				'took': float(hug_timer)}
Esempio n. 6
0
def main():

    global stopwatch, USERNAME, BitPAIR, PASS_PHRASE
    global master, lock
    global header_text, bid_text, ask_text, history_text, orders_text
    global update_id, ping, pings, account_text
    global account, market, nodes, chain
    global buy_price, buy_amount, sell_price, sell_amount, login

    colors()

    race_write(doc='microDEX_log.txt', text=time.ctime())
    stopwatch = time.time()

    print("\033c")
    sys.stdout.write('\x1b]2;' + 'Bitshares microDEX' +
                     '\x07')  # terminal #title
    # Encoded Compressed Bitshares ASCII Logo
    b = b'x\x9c\xad\xd4M\n\xc4 \x0c\x05\xe0}O1P\x12B\x10\xbc\x82\xf7?\xd5\xf8\xaf\x83F\xe3\xe0[t\xf9\xf5%\xda>\x9f\x1c\xf7\x7f\x9e\xb9\x01\x17\x0cc\xec\x05\xe3@Y\x18\xc6(\'Z\x1a\xca.\x1bC\xa5l\r\x85\xa20\xb6\x8a\xca\xd8,W0\xec\x05\xc3\xdf\xd4_\xe3\r\x11(q\x16\xec\x95l\x04\x06\x0f\x0c\xc3\xddD\x9dq\xd2#\xa4NT\x0c/\x10\xd1{b\xd4\x89\x92\x91\x84\x11\xd9\x9d-\x87.\xe4\x1cB\x15|\xe0\xc8\x88\x13\xa5\xbc\xd4\xa21\x8e"\x18\xdc\xd2\x0e\xd3\xb6\xa0\xc6h\xa3\xd4\xde\xd0\x19\x9a\x1e\xd8\xddr\x0e\xcf\xf8n\xe0Y\rq\x1fP:p\x92\xf2\xdbaB,v\xda\x84j\xc4.\x03\xb1>\x97\xee{\x99oSa\x00\x0f\xc6\x84\xd8\xdf\x0f\xb4e\xa7$\xfdE\xae\xde\xb1/\x1d\xfc\x96\x8a'
    print(cyan(zlib.decompress(b).decode()))
    print(
        blue('''
                                       ______   ________  ____  ____
                                      (_   _ `.(_   __  |(_  _)(_  _)
       __  __  ____  ___  ____   ___    | | `. \ | |_ \_|  \ \__/ /
      (  \/  )(_  _)/ __)(  _ \ / _ \   | |  | | |  _) _    ) __ (
       )    (  _||_( (__  )   /( (_) ) _| |_.' /_| |__/ | _/ /  \ \_
      (_/\/\_)(____)\___)(_)\_) \___/ (______.'(________|(____)(____)
    ===================================================================
          '''))
    print(cyan('           Bitshares Minimalist UI ' + VERSION))
    print(
        blue('''
    ===================================================================
          '''))
    time.sleep(0.3)
    print(cyan('GATHERING live curated DEX data from the metaNODE...'))
    time.sleep(0.3)
    try:
        metaNODE = Bitshares_Trustless_Client()
        nodes = metaNODE['whitelist']
        account_name = metaNODE['account_name']
        asset = metaNODE['asset']
        currency = metaNODE['currency']
        del metaNODE
        print('')
        print('      metaNODE = Bitshares_Trustless_Client()')
    except:
        raise ValueError('metaNODE not found')
    print('')
    time.sleep(0.3)
    print(cyan('CHOOSING whitelisted public API...'))
    time.sleep(0.3)
    print('')
    print('      ' + green(nodes[0]))
    print('')
    print(cyan('CONNECTING to DEX account...'))
    print('')

    valid = 0
    while not valid:
        try:
            USERNAME = account_name
            account = Account(USERNAME,
                              bitshares_instance=BitShares(nodes,
                                                           num_retries=5))
            valid = 1
        except Exception as e:
            print(type(e).__name__, 'try again...')
            pass
    print('      Welcome Back: ', green(USERNAME), blue(str(account)))
    print('')
    print(cyan('CONNECTING to DEX market...'))
    valid = 0
    while not valid:
        try:
            BitPAIR = asset + ':' + currency
            BitASSET = BitPAIR.split(':')[0]
            BitCURRENCY = BitPAIR.split(':')[1]
            market = Market(BitPAIR,
                            bitshares_instance=BitShares(nodes, num_retries=5),
                            mode='head')
            valid = 1
        except Exception as e:
            print(type(e).__name__, 'try again...')
            pass
    print('')
    print('   You are Trading: ', green(BitPAIR))
    print('')
    print(
        yellow(
            'Enter PASS PHRASE below to AUTHENTICATE or press ENTER to skip'))
    print(red(' YOU SHOULD UNDERSTAND THE SCRIPT BEFORE ENTERING PASS PHRASE'))

    print('')
    valid = 0
    default = ''
    while not valid:
        try:
            PASS_PHRASE = getpass(prompt='       PASS PHRASE: ') or default
            print("\033[F       PASS PHRASE: " +
                  green('********************************'))
            if PASS_PHRASE != '':
                print('')
                print(cyan('AUTHENTICATING to DEX wallet...'))
                market.bitshares.wallet.unlock(PASS_PHRASE)
                print('')
                print(red('*****************'))
                print(
                    red('**AUTHENTICATED**') +
                    yellow(' YOUR WALLET IS UNLOCKED'))
                print(red('*****************'))
                valid = 1
            else:
                print('')
                print(yellow('SKIP AUTHENTICATION - YOUR WALLET IS LOCKED'))
                valid = 1
        except Exception as e:
            print(type(e).__name__, 'try again...')
            pass
    time.sleep(0.3)
    print('')
    print(cyan('VALIDATING mainnet DEX chain...'))
    print('')
    chain = Blockchain(bitshares_instance=BitShares(nodes, num_retries=5),
                       mode='head')
    chain_id = chain.get_network()['chain_id']
    if chain_id != ID:
        print(cyan('INVALID CHAIN reconnecting...'))
        reconnect()
    print(' BITSHARES MAINNET: ', blue(chain_id))
    print('')
    time.sleep(0.3)
    print(cyan('LAUNCHING microDEX user interface...'))

    master = Tk()
    # master.geometry("650x950")
    master['bg'] = '#262626'
    master.title('microDEX - Bitshares Minimalist UI')

    elapsed('master')
    lock = StringVar()
    lock.set('AUTHENTICATED')
    if market.bitshares.wallet.locked():
        lock.set('WALLET LOCKED')
    elapsed('lock')

    header_text = Text(master, height=5, width=90, fg=blue2, bg=gray3)
    header_text.insert(END, '')
    header_text.grid(row=0, column=0, columnspan=4)

    bid_text = Text(master, height=30, width=45, fg=green1, bg=gray3)
    bid_text.insert(END, '')
    bid_text.grid(row=1, column=0, columnspan=2)
    bid_text.tag_configure("right", justify="right")
    bid_text.tag_configure("left", justify="left")

    ask_text = Text(master, height=30, width=45, fg=red1, bg=gray3)
    ask_text.insert(END, '')
    ask_text.grid(row=1, column=2, columnspan=2)

    orders_text = Text(master, height=11, width=45, fg=yellow1, bg=gray3)
    orders_text.insert(END, '')
    orders_text.grid(row=2, column=0, columnspan=2)

    history_text = Text(master, height=11, width=45, fg=gray1, bg=gray3)
    history_text.insert(END, '')
    history_text.grid(row=2, column=2, columnspan=2)

    account_text = Text(master, height=4, width=90, fg=blue1, bg=gray3)
    account_text.insert(END, '')
    account_text.grid(row=3, columnspan=4)

    elapsed('wireframe')

    Label(master, text="PRICE:", fg=gray1, bg=gray3).grid(row=4,
                                                          column=0,
                                                          sticky=E)
    Label(master, text="AMOUNT:", fg=gray1, bg=gray3).grid(row=5,
                                                           column=0,
                                                           sticky=E)
    Label(master, text="PRICE:", fg=gray1, bg=gray3).grid(row=4,
                                                          column=2,
                                                          sticky=E)
    Label(master, text="AMOUNT:", fg=gray1, bg=gray3).grid(row=5,
                                                           column=2,
                                                           sticky=E)
    Label(master, text="litepresence2018", fg=gray2, bg=gray3).grid(row=9,
                                                                    column=3,
                                                                    sticky=SE)
    Label(master,
          text=
          "   *ORDERS TAKE A FEW SECONDS TO APPEAR; CLICK ONCE, THEN CONFIRM*",
          fg='#C0C0C0',
          bg='#262626').grid(row=9, column=0, columnspan=4, sticky=W)

    try:
        # add bitshares logo to gui via imgur
        def downloadImage(imageUrl, localFileName):
            response = requests.get(imageUrl)
            with open(localFileName, 'wb') as fo:
                for chunk in response.iter_content(4096):
                    fo.write(chunk)

        try:
            photo = PhotoImage(file="bitshares_logo.gif")
        except:
            downloadImage('https://i.imgur.com/fvCE86Z.gif',
                          'bitshares_logo.gif')
            photo = PhotoImage(file="bitshares_logo.gif")
        label = Label(image=photo)
        label.image = photo
        label.grid(row=0, column=3, sticky=E)

    except:
        pass

    buy_price = Entry(master, fg=gray1, bg=gray2)
    buy_amount = Entry(master, fg=gray1, bg=gray2)
    sell_price = Entry(master, fg=gray1, bg=gray2)
    sell_amount = Entry(master, fg=gray1, bg=gray2)
    login = Entry(master, fg=gray1, bg=gray2)

    buy_price.grid(row=4, column=1)
    buy_amount.grid(row=5, column=1)
    sell_price.grid(row=4, column=3)
    sell_amount.grid(row=5, column=3)
    login.grid(row=8, column=1)
    elapsed('entry')

    Button(master,
           text='BUY',
           command=dex_buy,
           fg=gray1,
           bg=gray3,
           activebackground=green2,
           highlightbackground=green1).grid(
               row=7,
               column=1,
               # sticky=E,
               pady=4)
    Button(master,
           text='SELL',
           command=dex_sell,
           fg=gray1,
           bg=gray3,
           activebackground=red2,
           highlightbackground=red1).grid(
               row=7,
               column=3,
               # sticky=E,
               pady=4)
    Button(master,
           text='CANCEL ALL',
           command=dex_cancel,
           fg=gray1,
           bg=gray3,
           activebackground=yellow2,
           highlightbackground=yellow1).grid(row=7, column=0, sticky=E, pady=4)
    Button(master,
           text='LOCK/UNLOCK',
           command=dex_auth_gui,
           fg=gray1,
           bg=gray3,
           activebackground=blue2,
           highlightbackground=blue1).grid(row=8, column=0, sticky=E, pady=4)
    elapsed('button')
    Button(master,
           text='SWITCH NODE',
           command=switch,
           fg=gray1,
           bg=gray3,
           activebackground=blue2,
           highlightbackground=blue1).grid(row=8, column=3, sticky=E, pady=4)
    elapsed('button')

    update_id = 0
    ping = 0
    pings = [0]
    print(
        blue('''
    ===================================================================
          '''))
    print(cyan('           ' + time.ctime()))
    print(
        blue('''
    ===================================================================
          '''))
    print('')

    master.geometry('+9999+9999')
    master.after(1, update)
    master.mainloop()
class Testcases(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.bts = BitShares(
            "wss://node.testnet.bitshares.eu",
            nobroadcast=True,
        )
        self.bts.set_default_account("init0")
        set_shared_bitshares_instance(self.bts)
        self.chain = Blockchain(mode="head")

    def test_is_irv(self):
        self.assertFalse(self.chain.is_irreversible_mode())

    def test_info(self):
        info = self.chain.info()
        for i in [
                "time", "dynamic_flags", "head_block_id", "head_block_number",
                "last_budget_time"
        ]:
            self.assertIn(i, info)

    def test_parameters(self):
        info = self.chain.chainParameters()
        for i in [
                "worker_budget_per_day",
                "maintenance_interval",
        ]:
            self.assertIn(i, info)

    def test_network(self):
        info = self.chain.get_network()
        for i in [
                "chain_id",
                "core_symbol",
                "prefix",
        ]:
            self.assertIn(i, info)

    def test_props(self):
        info = self.chain.get_chain_properties()
        for i in [
                "id",
                "chain_id",
                "immutable_parameters",
        ]:
            self.assertIn(i, info)

    def test_block_num(self):
        num = self.chain.get_current_block_num()
        self.assertTrue(num > 100)

    def test_block(self):
        block = self.chain.get_current_block()
        self.assertIsInstance(block, Block)
        self.chain.block_time(1)
        self.chain.block_timestamp(1)

    def test_list_accounts(self):
        for account in self.chain.get_all_accounts():
            self.assertIsInstance(account, str)
            # Break already
            break