コード例 #1
0
    def show_wallet(self, arguments):
        if not self.Wallet:
            print("Please open a wallet")
            return

        item = get_arg(arguments)

        if not item:
            print("Wallet %s " % json.dumps(self.Wallet.ToJson(), indent=4))
            return

        if item in ['v', '--v', 'verbose']:
            print("Wallet %s " %
                  json.dumps(self.Wallet.ToJson(verbose=True), indent=4))
            return
        elif item == 'migrate' and self.Wallet is not None:
            self.Wallet.Migrate()
            print("Migrated wallet")
        elif item == 'delete_addr':
            addr_to_delete = get_arg(arguments, 1)
            DeleteAddress(self, self.Wallet, addr_to_delete)
        elif item == 'delete_token':
            token_to_delete = get_arg(arguments, 1)
            DeleteToken(self.Wallet, token_to_delete)
        elif item == 'close':
            self.do_close_wallet()
        elif item == 'claim':
            ClaimGas(self.Wallet, True, arguments[1:])
        elif item == 'rebuild':
            self.Wallet.Rebuild()
            try:
                item2 = int(get_arg(arguments, 1))
                if item2 and item2 > 0:
                    print("Restarting at %s" % item2)
                    self.Wallet._current_height = item2
            except Exception as e:
                pass
        elif item == 'tkn_send':
            token_send(self.Wallet, arguments[1:])
        elif item == 'tkn_send_from':
            token_send_from(self.Wallet, arguments[1:])
        elif item == 'tkn_send_blog':
            token_send_blog(self.Wallet, arguments[1:])
        elif item == 'tkn_approve':
            token_approve_allowance(self.Wallet, arguments[1:])
        elif item == 'tkn_allowance':
            token_get_allowance(self.Wallet, arguments[1:], verbose=True)
        elif item == 'tkn_mint':
            token_mint(self.Wallet, arguments[1:])
        elif item == 'tkn_register':
            token_crowdsale_register(self.Wallet, arguments[1:])
        elif item == 'unspent':
            ShowUnspentCoins(self.Wallet, arguments[1:])
        elif item == 'alias':
            if len(arguments) == 3:
                AddAlias(self.Wallet, arguments[1], arguments[2])
            else:
                print("Please supply an address and title")
        else:
            print("Wallet: '{}' is an invalid parameter".format(item))
コード例 #2
0
    def show_wallet(self, arguments):

        if not self.Wallet:
            print("please open a wallet")
            return

        item = get_arg(arguments)

        if not item:
            print("Wallet %s " % json.dumps(self.Wallet.ToJson(), indent=4))
            return

        if item in ['v', '--v', 'verbose']:
            print("Wallet %s " %
                  json.dumps(self.Wallet.ToJson(verbose=True), indent=4))
            return
        elif item == 'migrate' and self.Wallet is not None:
            self.Wallet.Migrate()
            print("migrated wallet")
        elif item == 'delete_addr':
            addr_to_delete = get_arg(arguments, 1)
            DeleteAddress(self, self.Wallet, addr_to_delete)
        elif item == 'delete_token':
            token_to_delete = get_arg(arguments, 1)
            DeleteToken(self.Wallet, token_to_delete)
        elif item == 'close':
            self.do_close_wallet()
        elif item == 'claim':
            ClaimGas(self.Wallet)
        elif item == 'rebuild':
            self.Wallet.Rebuild()
            #            self._walletdb_loop = task.LoopingCall(self.Wallet.ProcessBlocks)
            #            self._walletdb_loop.start(1)
            try:
                item2 = int(get_arg(arguments, 1))
                if item2 and item2 > 0:
                    print('restarting at %s ' % item2)
                    self.Wallet._current_height = item2
            except Exception as e:
                pass
        elif item == 'tkn_send':
            token_send(self.Wallet, arguments[1:])
        elif item == 'tkn_send_from':
            token_send_from(self.Wallet, arguments[1:])
        elif item == 'tkn_approve':
            token_approve_allowance(self.Wallet, arguments[1:])
        elif item == 'tkn_allowance':
            token_get_allowance(self.Wallet, arguments[1:], verbose=True)
        elif item == 'tkn_mint':
            token_mint(self.Wallet, arguments[1:])
        elif item == 'tkn_register':
            token_crowdsale_register(self.Wallet, arguments[1:])
        elif item == 'alias':
            if len(arguments) == 3:
                AddAlias(self.Wallet, arguments[1], arguments[2])
            else:
                print("Please supply an address and title")
コード例 #3
0
    def test_token_send_bad_token(self):
        wallet = self.GetWallet1(recreate=True)
        addr_from = wallet.GetDefaultContract().Address
        addr_to = self.watch_addr_str

        with self.assertRaises(ValueError) as context:
            token_send(wallet,
                       "Blah",
                       addr_from,
                       addr_to,
                       1300,
                       prompt_passwd=False)

        self.assertIn("does not represent a known NEP5 token",
                      str(context.exception))
コード例 #4
0
    def test_token_send_bad_args(self):  # too few args
        wallet = self.GetWallet1(recreate=True)
        token = self.get_token(wallet)
        addr_from = wallet.GetDefaultContract().Address
        addr_to = self.watch_addr_str

        with self.assertRaises(ValueError) as context:
            token_send(wallet,
                       token.symbol,
                       addr_from,
                       addr_to,
                       None,
                       prompt_passwd=False)

        self.assertIn("not a valid amount", str(context.exception))
コード例 #5
0
    def show_wallet(self, arguments):

        if not self.Wallet:
            print("please open a wallet")
            return

        item = get_arg(arguments)

        if not item:
            print("Wallet %s " % json.dumps(self.Wallet.ToJson(), indent=4))
            return

        if item in ['v', '--v', 'verbose']:
            print("Wallet %s " %
                  json.dumps(self.Wallet.ToJson(verbose=True), indent=4))
            return
        elif item == 'migrate' and self.Wallet is not None:
            self.Wallet.Migrate()
            print("migrated wallet")
        elif item == 'delete_addr':
            addr_to_delete = get_arg(arguments, 1)
            DeleteAddress(self, self.Wallet, addr_to_delete)
        elif item == 'delete_token':
            token_to_delete = get_arg(arguments, 1)
            DeleteToken(self.Wallet, token_to_delete)
        elif item == 'close':
            self.do_close_wallet()
        elif item == 'claim':
            ClaimGas(self.Wallet)
        elif item == 'rebuild':
            self.Wallet.Rebuild()
            try:
                item2 = int(get_arg(arguments, 1))
                if item2 and item2 > 0:
                    print('restarting at %s ' % item2)
                    self.Wallet._current_height = item2
            except Exception as e:
                pass
        elif item == 'tkn_send':
            token_send(self.Wallet, arguments[1:])
        elif item == 'tkn_send_from':
            token_send_from(self.Wallet, arguments[1:])
        elif item == 'tkn_approve':
            token_approve_allowance(self.Wallet, arguments[1:])
        elif item == 'tkn_allowance':
            token_get_allowance(self.Wallet, arguments[1:], verbose=True)
コード例 #6
0
    def test_token_send_bad_password(self):
        with patch('neo.Prompt.Commands.Tokens.prompt', side_effect=["blah"]):
            wallet = self.GetWallet1(recreate=True)
            token = self.get_token(wallet)
            addr_from = wallet.GetDefaultContract().Address
            addr_to = self.watch_addr_str

            send = token_send(wallet, token.symbol, addr_from, addr_to, 1300)

            self.assertFalse(send)
コード例 #7
0
    def test_token_send_no_tx(self):
        with patch('neo.Wallets.NEP5Token.NEP5Token.Transfer',
                   return_value=(None, 0, None)):
            wallet = self.GetWallet1(recreate=True)
            token = self.get_token(wallet)
            addr_from = wallet.GetDefaultContract().Address
            addr_to = self.watch_addr_str

            send = token_send(wallet,
                              token.symbol,
                              addr_from,
                              addr_to,
                              1300,
                              prompt_passwd=False)

            self.assertFalse(send)
コード例 #8
0
    def test_4_token_send(self):

        wallet = self.GetWallet1(recreate=True)

        ImportToken(wallet, self.token_hash_str)

        token = self.get_token(wallet)

        addr_from = wallet.GetDefaultContract().Address

        addr_to = self.watch_addr_str

        args = [token.symbol, addr_from, addr_to, '1300']

        # this should fail, since it is more than current balance
        send = token_send(wallet, args, prompt_passwd=False)

        self.assertTrue(send)
コード例 #9
0
    def test_4_token_send(self):

        wallet = self.GetWallet1(recreate=True)

        ImportToken(wallet, self.token_hash_str)

        token = self.get_token(wallet)

        addr_from = wallet.GetDefaultContract().Address

        addr_to = self.watch_addr_str

        args = [token.symbol, addr_from, addr_to, '1300']

        # this should fail, since it is more than current balance
        send = token_send(wallet, args, prompt_passwd=False)

        self.assertTrue(send)
コード例 #10
0
    def test_token_send_good(self):
        with patch('neo.Prompt.Commands.Tokens.prompt',
                   side_effect=[UserWalletTestCase.wallet_1_pass()]):
            wallet = self.GetWallet1(recreate=True)
            token = self.get_token(wallet)
            addr_from = wallet.GetDefaultContract().Address
            addr_to = self.watch_addr_str

            send = token_send(wallet,
                              token.symbol,
                              addr_from,
                              addr_to,
                              1300,
                              prompt_passwd=True)

            self.assertTrue(send)
            res = send.ToJson()
            self.assertEqual(res["vout"][0]["address"],
                             "AJQ6FoaSXDFzA6wLnyZ1nFN7SGSN2oNTc3")
            self.assertEqual(res["net_fee"], "0.0001")
コード例 #11
0
    def test_token_send_bad_user_attributes(self):
        with patch('neo.Prompt.Commands.Tokens.prompt',
                   side_effect=[UserWalletTestCase.wallet_1_pass()]):
            wallet = self.GetWallet1(recreate=True)
            token = self.get_token(wallet)
            addr_from = wallet.GetDefaultContract().Address
            addr_to = self.watch_addr_str

            _, attributes = get_tx_attr_from_args(
                ['--tx-attr=[{"usa:241,"data":"This is a remark"}]'])
            send = token_send(wallet,
                              token.symbol,
                              addr_from,
                              addr_to,
                              100,
                              user_tx_attributes=attributes,
                              prompt_passwd=True)

            self.assertTrue(send)
            res = send.ToJson()
            self.assertEqual(1, len(res['attributes']))
            self.assertNotEqual(241, res['attributes'][0]['usage'])
コード例 #12
0
ファイル: prompt.py プロジェクト: LuoRyan/neo-python
    def show_wallet(self, arguments):
        if not self.Wallet:
            print("Please open a wallet")
            return

        item = get_arg(arguments)

        if not item:
            print("Wallet %s " % json.dumps(self.Wallet.ToJson(), indent=4))
            return

        if item in ['v', '--v', 'verbose']:
            print("Wallet %s " % json.dumps(self.Wallet.ToJson(verbose=True), indent=4))
            return
        elif item == 'migrate' and self.Wallet is not None:
            self.Wallet.Migrate()
            print("Migrated wallet")
        elif item == 'delete_addr':
            addr_to_delete = get_arg(arguments, 1)
            DeleteAddress(self, self.Wallet, addr_to_delete)
        elif item == 'delete_token':
            token_to_delete = get_arg(arguments, 1)
            DeleteToken(self.Wallet, token_to_delete)
        elif item == 'close':
            self.do_close_wallet()
        elif item == 'claim':
            ClaimGas(self.Wallet, True, arguments[1:])
        elif item == 'rebuild':
            self.stop_wallet_loop()
            try:
                self.Wallet.Rebuild()
            finally:
                self.start_wallet_loop()
            try:
                item2 = int(get_arg(arguments, 1))
                if item2 and item2 > 0:
                    print("Restarting at %s" % item2)
                    self.Wallet._current_height = item2
            except Exception as e:
                pass
        elif item == 'tkn_send':
            token_send(self.Wallet, arguments[1:])
        elif item == 'tkn_send_from':
            token_send_from(self.Wallet, arguments[1:])
        elif item == 'tkn_approve':
            token_approve_allowance(self.Wallet, arguments[1:])
        elif item == 'tkn_allowance':
            token_get_allowance(self.Wallet, arguments[1:], verbose=True)
        elif item == 'tkn_mint':
            token_mint(self.Wallet, arguments[1:])
        elif item == 'tkn_register':
            token_crowdsale_register(self.Wallet, arguments[1:])
        elif item == 'unspent':
            ShowUnspentCoins(self.Wallet, arguments[1:])
        elif item == 'alias':
            if len(arguments) == 3:
                AddAlias(self.Wallet, arguments[1], arguments[2])
            else:
                print("Please supply an address and title")
        else:
            print("Wallet: '{}' is an invalid parameter".format(item))
コード例 #13
0
    def show_wallet(self, arguments):
        if not self.Wallet:
            print("Please open a wallet")
            return

        item = get_arg(arguments)

        if not item:
            print("Wallet %s " % json.dumps(self.Wallet.ToJson(), indent=4))
            return

        if item in ['v', '--v', 'verbose']:
            print("Wallet %s " %
                  json.dumps(self.Wallet.ToJson(verbose=True), indent=4))
            return
        elif item == 'migrate' and self.Wallet is not None:
            self.Wallet.Migrate()
            print("Migrated wallet")
        elif item == 'delete_addr':
            addr_to_delete = get_arg(arguments, 1)
            DeleteAddress(self, self.Wallet, addr_to_delete)
        elif item == 'delete_token':
            token_to_delete = get_arg(arguments, 1)
            DeleteToken(self.Wallet, token_to_delete)
        elif item == 'close':
            self.do_close_wallet()
        elif item == 'claim':
            ClaimGas(self.Wallet, True, arguments[1:])
        elif item == 'rebuild':
            self.Wallet.Rebuild()
            try:
                item2 = int(get_arg(arguments, 1))
                item2 = Blockchain.Default().Height
                if item2 and item2 > 0:
                    print("Restarting at %s" % item2)
                    self.Wallet._current_height = item2

                #TODO - NeoCompiler.io syncing process - BEGINS
                print(
                    "Waiting, at least, 30 seconds, for wallet to sync and rebuild..."
                )
                #time.sleep(30)
                timenow = time.time()
                timebase = time.time()
                while (timenow - timebase < 30):
                    timenow = time.time()
                walletheight = self.Wallet._current_height
                blockchainheight = max(Blockchain.Default().HeaderHeight,
                                       Blockchain.Default().Height)
                while (walletheight < blockchainheight):
                    walletheight = self.Wallet._current_height
                    blockchainheight = max(Blockchain.Default().HeaderHeight,
                                           Blockchain.Default().Height)
                #TODO - NeoCompiler.io syncing process - ENDS
            except Exception as e:
                print("Problems happened when rebuilding %s" % e)
                pass
        elif item == 'tkn_send':
            token_send(self.Wallet, arguments[1:])
        elif item == 'tkn_send_from':
            token_send_from(self.Wallet, arguments[1:])
        elif item == 'tkn_approve':
            token_approve_allowance(self.Wallet, arguments[1:])
        elif item == 'tkn_allowance':
            token_get_allowance(self.Wallet, arguments[1:], verbose=True)
        elif item == 'tkn_mint':
            token_mint(self.Wallet, arguments[1:])
        elif item == 'tkn_register':
            token_crowdsale_register(self.Wallet, arguments[1:])
        elif item == 'unspent':
            ShowUnspentCoins(self.Wallet, arguments[1:])
        elif item == 'alias':
            if len(arguments) == 3:
                AddAlias(self.Wallet, arguments[1], arguments[2])
            else:
                print("Please supply an address and title")
        else:
            print("Wallet: '{}' is an invalid parameter".format(item))
コード例 #14
0
    def test_wallet_token_send(self):

        with self.OpenWallet1():
            # test with no parameters
            with patch('sys.stdout', new=StringIO()) as mock_print:
                args = ['token', 'send']
                res = CommandWallet().execute(args)
                self.assertFalse(res)
                self.assertIn("specify the required parameter",
                              mock_print.getvalue())

            # test with insufficient parameters
            with patch('sys.stdout', new=StringIO()) as mock_print:
                args = ['token', 'send', 'arg1']
                res = CommandWallet().execute(args)
                self.assertFalse(res)
                self.assertIn("specify the required parameter",
                              mock_print.getvalue())

            # test with too many parameters (max is 4 mandatory + 1 optional)
            with patch('sys.stdout', new=StringIO()) as mock_print:
                args = [
                    'token', 'send', 'arg1', 'arg2', 'arg3', 'arg4', 'arg5',
                    'arg6'
                ]
                res = CommandWallet().execute(args)
                self.assertFalse(res)
                self.assertIn("Too many parameters supplied",
                              mock_print.getvalue())

            # test with invalid token argument
            with patch('sys.stdout', new=StringIO()) as mock_print:
                args = [
                    'token', 'send', 'invalid_token_name', 'arg2', 'arg3', '10'
                ]
                res = CommandWallet().execute(args)
                self.assertFalse(res)
                self.assertIn("does not represent a known NEP5 token",
                              mock_print.getvalue())

            # test with valid token arg, but invalid from_addr
            with patch('sys.stdout', new=StringIO()) as mock_print:
                args = [
                    'token', 'send', 'NXT4', 'invalid_from_addr', 'arg3', '10'
                ]
                res = CommandWallet().execute(args)
                self.assertFalse(res)
                self.assertIn("not a valid address", mock_print.getvalue())

            # test with valid token and from_addr, but invalid to_addr
            with patch('sys.stdout', new=StringIO()) as mock_print:
                args = [
                    'token', 'send', 'NXT4',
                    'AZfFBeBqtJvaTK9JqG8uk6N7FppQY6byEg', 'invalid_to_addr',
                    '10'
                ]
                res = CommandWallet().execute(args)
                self.assertFalse(res)
                self.assertIn("not a valid address", mock_print.getvalue())

            # test with invalid amount
            with patch('sys.stdout', new=StringIO()) as mock_print:
                args = [
                    'token', 'send', 'NXT4',
                    'AZfFBeBqtJvaTK9JqG8uk6N7FppQY6byEg',
                    'AZfFBeBqtJvaTK9JqG8uk6N7FppQY6byEg', 'invalid_amount'
                ]
                res = CommandWallet().execute(args)
                self.assertFalse(res)
                self.assertIn("not a valid amount", mock_print.getvalue())

            # Note that there is no test for invalid tx-attributes. Invalid attributes result in an empty attribute list being
            # passed to the underlying function thus having no effect.

            # test with a good transfer
            # we don't really send anything becausing testing of the internal `do_token_transfer()` already happens in `test_token_send_good()`
            # we return an object to represent the Transaction that's normally returned
            with patch('neo.Prompt.Commands.Tokens.do_token_transfer',
                       side_effect=[object()]):
                token = self.get_token(PromptData.Wallet)
                addr_from = PromptData.Wallet.GetDefaultContract().Address
                addr_to = self.watch_addr_str

                send = token_send(PromptData.Wallet,
                                  token.symbol,
                                  addr_from,
                                  addr_to,
                                  13,
                                  prompt_passwd=False)
                self.assertTrue(send)