def test_method_has_keys(self): """Case when a dictionary data in a keystore file have all of keys correctly. """ target_data = { 'address': 'hxfd7e4560ba363f5aabd32caac7317feeee70ea57', 'crypto': { 'cipher': 'aes-128-ctr', 'cipherparams': { 'iv': '952dc6c2e7d4ed5df45f4ddeac817dfb' }, 'ciphertext': 'c5482f14fcdae4848b74be65593452efe11c106fac2fe82801cb7735d5fa9b55', 'kdf': 'pbkdf2', 'kdfparams': { 'c': 262144, 'dklen': 32, 'prf': 'hmac-sha256', 'salt': '65fa9a3d6e8991a01f883990b0b0ca91' }, 'mac': '380e8daf36daff0e02949e4a40c0c8263890978071f0794581025b8e41e589a4' }, 'id': 'dd9fd4f9-3279-42d1-96f1-9ef637ddb6e6', 'version': 3, 'coinType': 'icx' } root_keys = ["version", "id", "address", "crypto", "coinType"] crypto_keys = ["ciphertext", "cipherparams", "cipher", "kdf", "kdfparams", "mac"] crypto_cipherparams_keys = ["iv"] crypto_kdfparams_keys = ["dklen", "salt", "c", "prf"] self.assertTrue(has_keys(target_data, root_keys)) self.assertTrue(has_keys(target_data["crypto"], crypto_keys)) self.assertTrue(has_keys(target_data["crypto"]["cipherparams"], crypto_cipherparams_keys)) self.assertTrue(has_keys(target_data["crypto"]["kdfparams"], crypto_kdfparams_keys))
def _is_message_transaction(self, params: dict) -> bool: """Checks `MessageTransaction` in dict has right format.""" inner_key_of_params = ['data_type', 'data'] return self._is_basic_transaction(params) \ and has_keys(params, inner_key_of_params) \ and isinstance(params["data"], str) \ and is_0x_prefixed(params["data"]) \ and params["data_type"] == "message"
def _is_deploy_transaction(self, params: dict) -> bool: """Checks `DeployTransaction` in dict has right format.""" inner_key_of_params = [ 'params', 'content_type', 'content', 'data_type' ] return self._is_basic_transaction(params) \ and has_keys(params, inner_key_of_params) \ and params['data_type'] == 'deploy' \ and isinstance(params['content'], bytes) \ and not params['value']
def _is_basic_transaction(self, params: dict) -> bool: """ Checks `Transaction` in dict has right format. Every types of `Transaction` like icx transaction, deploy transaction, call transaction and message transaction is checked by this method. """ inner_key_of_params = [ 'version', 'from_', 'to', 'step_limit', 'timestamp', 'nid', 'nonce', 'value' ] return has_keys(params, inner_key_of_params)
def _is_deposit_transaction(self, params: dict) -> bool: """Checks `DepositTransaction` in dict has right format.""" inner_key_of_params = ['action'] try: if params['action'] == 'withdraw': inner_key_of_params.append('id') return self._is_basic_transaction(params) \ and has_keys(params, inner_key_of_params) \ and params["action"] in ('add', 'withdraw') \ and params['data_type'] == "deposit" except KeyError: return False
def _is_call_transaction(self, params: dict) -> bool: """Checks `CallTransaction` in dict has right format.""" inner_key_of_params = ['data_type', 'params', 'method'] return self._is_basic_transaction(params) \ and has_keys(params, inner_key_of_params) \ and params["data_type"] == "call"