def test_get_account(self): wm = WalletManager() password = '******' acct = wm.create_account('', password) self.assertTrue(isinstance(acct, AccountData)) b58_address = wm.wallet_in_mem.default_account_address print(b58_address) acct = wm.get_account(b58_address, password) self.assertEqual(acct.get_address_base58(), b58_address)
def unlock_account(b58_address: str, wallet_manager: WalletManager): print('\tUnlock account: {}'.format(b58_address)) while True: try: acct_password = getpass.getpass('\tPlease input account password: '******'\tUnlock successful...') break except AssertionError: print('\tPassword uncorrected...') return acct
def generate_signer_acct_list(b58_signers: list, wallet_manager: WalletManager): print('Unlock signer accounts...') signer_acct_list = list() for b58_signer in b58_signers: while True: try: print('\tUnlock signer account {}...'.format(b58_signer)) signer_password = getpass.getpass('\tPlease input account password: '******'\tUnlock successful...') break except AssertionError: print('\tPassword uncorrected...') return signer_acct_list
import os import unittest from ontology.wallet.wallet_manager import WalletManager from src.crypto.ecies import ECIES root_folder = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) wallet_path = os.path.join(root_folder, 'wallet', 'wallet.json') wallet_manager = WalletManager() wallet_manager.open_wallet(wallet_path) password = input('password: '******'AKeDu9QW6hfAhwpvCwNNwkEQt1LkUQpBpW', password) ont_id_acct = wallet_manager.get_account('did:ont:AHBB3LQNpqXjCLathy7vTNgmQ1cGSj8S9Z', password) class TestCrypto(unittest.TestCase): def test_encrypt_with_ont_id_in_cbc(self): ipfs_address = 'QmaxL3ixbfG1mwQeKRdBPnYxqiESv5nkKg5UoppdvtZPfn' ipfs_address_bytes = ipfs_address.encode('ascii') aes_iv, encode_g_tilde, cipher_text = ECIES.encrypt_with_ont_id_in_cbc(ipfs_address_bytes, ont_id_acct) decrypted_text_bytes = ECIES.decrypt_with_ont_id_in_cbc(aes_iv, encode_g_tilde, cipher_text, ont_id_acct) self.assertEqual(ipfs_address_bytes, decrypted_text_bytes) if __name__ == '__main__': unittest.main()
WALLET_PATH, CONTRACT_ABI, ONT_RPC_ADDRESS, CONTRACT_ADDRESS_HEX ) from pot.invoke_saving_pot import InvokeSavingPot ontology = OntologySdk() remote_rpc_address = 'http://polaris3.ont.io:20336' ontology.set_rpc(remote_rpc_address) wallet_manager = WalletManager() wallet_manager.open_wallet(WALLET_PATH) password = input('password: '******'AKeDu9QW6hfAhwpvCwNNwkEQt1LkUQpBpW', password) saving_pot = InvokeSavingPot(ontology, CONTRACT_ABI, CONTRACT_ADDRESS_HEX) class TestInvokeSavingPot(unittest.TestCase): def test_create_ont_pot(self): time_limit = 60 tx_hash = saving_pot.create_ont_pot(acct, time_limit, GAS_LIMIT, GAS_PRICE) self.assertEqual(64, len(tx_hash)) def test_create_ong_pot(self): time_limit = 60 tx_hash = saving_pot.create_ong_pot(acct, time_limit, GAS_LIMIT, GAS_PRICE) self.assertEqual(64, len(tx_hash)) print(tx_hash)
def execute(m:[], function_name=None): sdk = OntologySdk() sdk.set_rpc(m["rpc_address"]) if m["func"] is "migrate": # 判断是否已经部署 code = sdk.rpc.get_smart_contract(m["contract_address"]) if code != "unknow contract": print("contract have been deployed") print("contract_address:", m["contract_address"]) return need_storage = False if m["need_storage"] is 'true': need_storage = True tx = sdk.neo_vm().make_deploy_transaction(m["code"], need_storage, m["name"], m["code_version"], m["author"] , m["email"], m["desp"], m["payer_address"], m["gas_limit"], m["gas_price"]) sdk.wallet_manager.open_wallet(m["wallet_file_path"]) acct = sdk.wallet_manager.get_account(m["payer_address"], m["payer_password"]) sdk.sign_transaction(tx, acct) sdk.set_rpc(m["rpc_address"]) try: print("deploying,please waiting ...") res = sdk.rpc.send_raw_transaction(tx) print("txhash:", res) for i in range(10): time.sleep(1) res = sdk.rpc.get_smart_contract(m["contract_address"]) if res == "unknow contract" or res == "": continue else: print("deploy success") save_file(m, "success") return print("deployed failed") save_file(m, "deployed failed") except Exception as e: print(e) save_file(m, e) elif m["func"] is "invoke": func_maps = {} for i in list(m["function"]): func_map = {} param_list = [] func_map["function_name"] = i.function_name func_map["pre_exec"] = i.pre_exec try: for j in list(i.function_param): param_list.append(j) func_map["param_list"] = param_list except Exception as e: pass if not i.pre_exec: try: func_map["signers"] = i.signers except AttributeError as e: func_map["signers"] = None func_maps[i.function_name] = func_map with open(str(m["abi_path"]), "r") as f: abi = json.loads(f.read(), object_hook=lambda d: namedtuple('X', d.keys())(*d.values())) abi_info = AbiInfo(abi.hash, abi.entrypoint, abi.functions, abi.events) contract_address = bytearray.fromhex(str(abi.hash)[2:]) m["contract_address"] = contract_address.hex() contract_address.reverse() sdk.wallet_manager.open_wallet(m["wallet_file_path"]) payer = sdk.wallet_manager.get_account(m["payer_address"], m["payer_password"]) func_l = [] no = 0 for func_map in func_maps.values(): if function_name is not None: if function_name != func_map["function_name"]: continue func = abi_info.get_function(func_map["function_name"]) func_map["return_type"] = func.return_type params = [] l = [] l.append(no) no = no + 1 l.append(func_map["function_name"]) l.append(func_map["pre_exec"]) temp_l = "" # 用来放参数 for i in range(len(func_map["param_list"])): temp_l = "" if type(func_map["param_list"][i]) is int: temp_l += str(func_map["param_list"][i]) + ":" else: temp_l += func_map["param_list"][i] + ":" if func.parameters[i].type == "String": params.append(str(func_map["param_list"][i])) if func.parameters[i].type == "ByteArray": if func_map["param_list"][i].startswith("A"): params.append(Address.b58decode(func_map["param_list"][i], False).to_array()) else: params.append(bytearray(func_map["param_list"][i].encode())) if func.parameters[i].type == "Integer": params.append(func_map["param_list"][i]) l.append(temp_l[:len(temp_l) - 1]) if len(params) == 1: func.set_params_value(params[0]) elif len(params) == 2: func.set_params_value(params[0], params[1]) elif len(params) == 3: func.set_params_value(params[0], params[1], params[2]) elif len(params) == 4: func.set_params_value(params[0], params[1], params[2], params[3]) elif len(params) == 5: func.set_params_value(params[0], params[1], params[2], params[3], params[4]) elif len(params) == 6: func.set_params_value(params[0], params[1], params[2], params[3], params[4], params[5]) elif len(params) == 7: func.set_params_value(params[0], params[1], params[2], params[3], params[4], params[5], params[6]) try: print("") print("invoking, please waiting ...") print("method: " + func_map["function_name"]) if func_map["pre_exec"]: res = sdk.neo_vm().send_transaction(contract_address, None, None, 0, 0, func, True) if res["error"] != 0: print(res["desc"]) l.append(res["desc"]) else: if res["result"]["Result"] == None or res["result"]["Result"] == "": print("res:", res["result"]["Result"]) l.append("") else: if func_map["return_type"] == "Integer": value = bytearray.fromhex(res["result"]["Result"]) value.reverse() print("res:", int(value.hex(), 16)) l.append(int(value.hex(), 16)) else: print("res:", (bytearray.fromhex(res["result"]["Result"])).decode('utf-8')) l.append((bytearray.fromhex(res["result"]["Result"])).decode('utf-8')) else: res = "" if func_map["signers"] != None: wm = WalletManager() wm.open_wallet(func_map["signers"].signer.walletpath) signer = wm.get_account(func_map["signers"].signer.address, func_map["signers"].signer.password) print(wm.wallet_in_mem.accounts[0].address) print(signer) res = sdk.neo_vm().send_transaction(contract_address, signer, payer, m["gas_limit"], m["gas_price"], func, False) else: res = sdk.neo_vm().send_transaction(contract_address, payer, payer, m["gas_limit"], m["gas_price"], func, False) for i in range(10): time.sleep(1) event = sdk.rpc.get_smart_contract_event_by_tx_hash(res) if event != None: print("txhash:", res) print("event:", event) break l.append(res) except Exception as e: print("Error:", e) l.append(e) func_l.append(l) save_file(m, "", func_l) else: print("only support migrate and invoke")