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))
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")
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))
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))
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)
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)
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)
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)
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")
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'])
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))
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))
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)