def blockbyhash(self, conf): """Query block with given hash :param conf: blockbyhash command configuration :return: result of query """ icon_client = IconClient(conf['uri']) response = icon_client.send(IconJsonrpc.getBlockByHash(conf['hash'])) if "error" in response: print('Got an error response') print(json.dumps(response, indent=4)) else: print(f"block info : {json.dumps(response, indent=4)}") return response
def sendtx(self, conf: dict): """Send transaction. :param conf: sendtx command configuration. :return: response of transfer. """ with open(conf['json_file'], 'r') as jf: payload = json.load(jf) password = conf.get('password', None) password = self._check_sendtx(conf, password) if password: sendtx = IconJsonrpc.from_key_store(conf['keyStore'], password) else: sendtx = IconJsonrpc.from_string(payload['params']['from']) params = payload['params'] params['from'] = None jsonrpc_params_to_pep_style(params) payload = sendtx.sendTransaction(**params) uri = conf['uri'] step_limit = payload['params']['stepLimit'] if step_limit is None: step_limit = conf.get('stepLimit', None) if step_limit is None: step_limit = get_enough_step(payload, uri) else: step_limit = int(step_limit, 16) payload['params']['stepLimit'] = hex(step_limit) sendtx.put_signature(payload['params']) # send request to the rpc server icon_client = IconClient(uri) response = icon_client.send(request=payload) if 'result' in response: print('Send transaction request successfully.') tx_hash = response['result'] print(f"transaction hash: {tx_hash}") else: print('Got an error response') print(json.dumps(response, indent=4)) return response
def call(conf): """Request icx_call :param conf: call command configuration. :return: response of icx_call """ icon_client = IconClient(conf['uri']) with open(conf['json_file'], 'r') as jf: payload = json.load(jf) response = icon_client.send(request=payload) if 'error' in response: print(json.dumps(response, indent=4)) else: print(f'response : {json.dumps(response, indent=4)}') return response
def scoreapi(self, conf): """Query score API of given score address. :param conf: scoreapi command configuration. :return: result of query. """ icon_client = IconClient(conf['uri']) response = icon_client.send(IconJsonrpc.getScoreApi(conf['address'])) if "error" in response: print('Got an error response') print( f"Can not get {conf['address']}'s API\n{json.dumps(response, indent=4)}" ) else: print(f"SCORE API: {json.dumps(response['result'], indent=4)}") return response
def totalsupply(conf: dict): """Query total supply of ICX :param conf: totalsupply command configuration """ icon_client = IconClient(conf['uri']) response = icon_client.send(IconJsonrpc.getTotalSupply()) if "error" in response: print('Got an error response') print(json.dumps(response, indent=4)) else: print(f'Total supply of ICX in hex: {response["result"]}') print( f'Total supply of ICX in decimal: {int(response["result"], 16)}' ) return response
def txbyhash(self, conf): """Query transaction using given transaction hash. :param conf: txbyhash command configuration. :return: result of query. """ icon_client = IconClient(conf['uri']) response = icon_client.send( IconJsonrpc.getTransactionByHash(conf['hash'])) if "error" in response: print('Got an error response') print( f"Can not get transaction \n{json.dumps(response, indent=4)}") else: print(f"Transaction: {json.dumps(response, indent=4)}") return response
def transfer(self, conf: dict): """Transfer ICX Coin. :param conf: transfer command configuration. :return: response of transfer. """ # check value type (must be int), address and keystore file # if valid, return user input password password = conf.get('password', None) password = self._check_transfer(conf, password) if password: transfer = IconJsonrpc.from_key_store(conf['keyStore'], password) else: transfer = IconJsonrpc.from_string(conf['from']) uri = conf['uri'] step_limit = conf.get('stepLimit', None) if step_limit is None: step_limit = hex(get_default_step(uri)) # make JSON-RPC 2.0 request standard format (dict type) request = transfer.sendTransaction(to=conf['to'], value=hex(int(conf['value'])), nid=conf['nid'], step_limit=step_limit) # send request to the rpc server icon_client = IconClient(uri) response = icon_client.send(request=request) if 'result' in response: print('Send transfer request successfully.') tx_hash = response['result'] print(f"transaction hash: {tx_hash}") else: print('Got an error response') print(json.dumps(response, indent=4)) return response
def deploy(self, conf: dict) -> dict: """Deploy SCORE on the server. :param conf: deploy command configuration """ if conf['contentType'] == 'tbears' and not CommandServer.is_service_running( ): raise TBearsCommandException(f'Start tbears service first') # check keystore, and get password from user's terminal input password = conf.get('password', None) password = self._check_deploy(conf, password) step_limit = conf.get('stepLimit', "0x1234000") if conf['mode'] == 'install': score_address = f'cx{"0"*40}' else: score_address = conf['to'] if conf['contentType'] == 'zip': content_type = "application/zip" # make zip and convert to hexadecimal string data(start with 0x) and return content = IconJsonrpc.gen_deploy_data_content(conf['project']) else: content_type = "application/tbears" content = os.path.abspath(conf['project']) # make IconJsonrpc instance which is used for making request(with signature) if conf['keyStore']: deploy = IconJsonrpc.from_key_store(keystore=conf['keyStore'], password=password) else: deploy = IconJsonrpc.from_string(from_=conf['from']) # make JSON-RPC 2.0 request standard format request = deploy.sendTransaction(to=score_address, nid=conf['nid'], step_limit=step_limit, data_type="deploy", data=IconJsonrpc.gen_deploy_data( params=conf.get( 'scoreParams', {}), content_type=content_type, content=content)) # send request to rpcserver icon_client = IconClient(conf['uri']) response = icon_client.send(request) if 'error' in response: print('Got an error response') print(json.dumps(response, indent=4)) else: print('Send deploy request successfully.') tx_hash = response['result'] print( f'If you want to check SCORE deployed successfully, execute txresult command' ) print(f"transaction hash: {tx_hash}") return response