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)
示例#2
0
 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
示例#3
0
 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
示例#4
0
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()
示例#5
0
    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)
示例#6
0
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")