def listaccount(self, inputparams): accountlist = list_files("bin/accounts/*.keystore") for name in accountlist: print(name) accountlist = list_files("bin/accounts/*.pem") for name in accountlist: print(name) accountlist = list_files("bin/accounts/*.json") for name in accountlist: print(name)
def call(self, inputparams): if len(inputparams) == 0: sols = list_files(contracts_dir + "/*.sol") for sol in sols: print(sol + ".sol") return common.check_param_num(inputparams, 3) paramsname = ["contractname", "address", "func"] params = fill_params(inputparams, paramsname) contractname = params["contractname"] address = params["address"] if address == "last" or address == "latest": address = ContractNote.get_last(contractname) if address is None: sys.exit("can not get last address for [{}],break;".format( contractname)) tx_client = transaction_common.TransactionCommon( address, contracts_dir, contractname) fn_name = params["func"] fn_args = inputparams[3:] print("INFO>> client info: {}".format(tx_client.getinfo())) print("INFO >> call {} , address: {}, func: {}, args:{}".format( contractname, address, fn_name, fn_args)) try: result = tx_client.call_and_decode(fn_name, fn_args) common.print_tx_result(result) except Exception as e: common.print_error_msg("call", e)
def deploy(self, inputparams): print(inputparams) if len(inputparams) == 0: sols = list_files(contracts_dir + "/*.sol") for sol in sols: print(sol + ".sol") return """deploy abi bin file""" # must be at least 2 params common.check_param_num(inputparams, 1) contractname = inputparams[0].strip() # need save address whether or not needSaveAddress = True args_len = len(inputparams) # need save address whether or not needSaveAddress = False args_len = len(inputparams) if inputparams[-1] == "save": needSaveAddress = True args_len = len(inputparams) - 1 # get the args fn_args = inputparams[1:args_len] tx_client = transaction_common.TransactionCommon( "", contracts_dir, contractname) try: receipt = tx_client.send_transaction_getReceipt(None, fn_args, deploy=True)[0] print("INFO >> client info: {}".format(tx_client.getinfo())) print("deploy result for [{}] is:\n {}".format( contractname, json.dumps(receipt, indent=4))) name = contractname address = receipt["contractAddress"] blocknum = int(receipt["blockNumber"], 16) txhash = receipt["transactionHash"] ContractNote.save_contract_address(name, address) print("on block : {},address: {} ".format(blocknum, address)) if needSaveAddress is True: ContractNote.save_address_to_contract_note(name, address) print("address save to file: ", client_config.contract_info_file) else: print("""\nNOTE : if want to save new address as last address for (call/sendtx)\nadd 'save' to cmdline and run again""" ) ContractNote.save_history(name, address, blocknum, txhash) data_parser = DatatypeParser(default_abi_file(contractname)) # 解析receipt里的log 和 相关的tx ,output print_receipt_logs_and_txoutput(tx_client, receipt, "", data_parser) except Exception as e: print("deploy exception! ", e) traceback.print_exc() tx_client.finish()
def sendtx(self, inputparams): if len(inputparams) == 0: sols = list_files(contracts_dir + "/*.sol") for sol in sols: print(sol + ".sol") return common.check_param_num(inputparams, 3) paramsname = ["contractname", "address", "func"] params = fill_params(inputparams, paramsname) contractname = params["contractname"] address = params["address"] if address == "last" or address == "latest": address = ContractNote.get_last(contractname) if address is None: sys.exit("can not get last address for [{}],break;".format( contractname)) tx_client = transaction_common.TransactionCommon( address, contracts_dir, contractname) fn_name = params["func"] fn_args = inputparams[3:] print("INFO>> client info: {}".format(tx_client.getinfo())) print("INFO >> sendtx {} , address: {}, func: {}, args:{}".format( contractname, address, fn_name, fn_args)) try: from_account_signer = None # from_account_signer = Signer_ECDSA.from_key_file( # "bin/accounts/tester.keystore", "123456") # print(keypair.address) # 不指定from账户,如需指定,参考上面的加载,或者创建一个新的account, # 参见国密(client.GM_Account)和非国密的account管理类LocalAccount (receipt, output) = tx_client.send_transaction_getReceipt( fn_name, fn_args, from_account_signer=from_account_signer) data_parser = DatatypeParser(tx_client.contract_abi_path) # 解析receipt里的log 和 相关的tx ,output print_receipt_logs_and_txoutput(tx_client, receipt, "", data_parser) except Exception as e: common.print_error_msg("sendtx", e)