Beispiel #1
0
 def test_address_from_vm_code(self):
     code = '54c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b52527ac46c766b52c30548656c6c6f87630600621a' \
            '006c766b51c300c36165230061516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756651c56b' \
            '6c766b00527ac46151c576006c766b00c3c461681553797374656d2e52756e74696d652e4e6f7469667961616c7566'
     code_address = Address.address_from_vm_code(code)
     contract_hex_address = 'd0ed0f908896b4eb916584d461ca3e8b60b52c36'
     self.assertEqual(code_address.to_hex_str(), contract_hex_address)
def deploy_cmd(m: [], arg: str):
    if "json" in str(arg):
        with open(arg, "r") as f:
            r = json.load(f,
                          object_hook=lambda d: namedtuple('X', d.keys())
                          (*d.values()))
            m["No"] = 1
            m["rpc_address"] = r.rpc_address
            m["need_storage"] = r.need_storage
            m["name"] = r.name
            m["code_version"] = r.code_version
            m["author"] = r.author
            m["email"] = r.email
            m["desp"] = r.desp
            m["payer_address"] = r.payer_address
            m["payer_password"] = r.payer_password
            m["wallet_file_path"] = r.wallet_file_path
            m["gas_limit"] = r.gas_limit
            m["gas_price"] = r.gas_price
            m["save_file"] = r.save_file
            if ".avm" in r.code:
                with open(r.code, "r") as f2:
                    m["code"] = f2.read()
            else:
                m["code"] = r.code
            m["contract_address"] = Address.address_from_vm_code(
                m["code"]).to_reverse_hex_str()
    else:
        temp = str(arg).split(",")
        m["No"] = 1
        for i in temp:
            t = str(i).split("=")
            m[t[0]] = t[1]
Beispiel #3
0
 def __get_code_from_avm(self, avm_file):
     f = open(avm_file)
     self.code = f.readline()
     code_addr_obj = Address.address_from_vm_code(self.code)
     self.code_addr = code_addr_obj.to_reverse_hex_str()
     self.contract_acc = code_addr_obj.to_base58()
     self.contract_addr = code_addr_obj.to_byte_array()
     f.close()
 def test_address_from_vm_code(self):
     sdk.set_rpc(rpc_address)
     code = '54c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b52527ac46c766b52c30548656c6c6f87630600621a' \
            '006c766b51c300c36165230061516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756651c56b' \
            '6c766b00527ac46151c576006c766b00c3c461681553797374656d2e52756e74696d652e4e6f7469667961616c7566'
     code_hex_address = '362cb5608b3eca61d4846591ebb49688900fedd0'
     code_address = Address.address_from_vm_code(code)
     self.assertEqual(code_address.to_reverse_hex_str(), code_hex_address)
Beispiel #5
0
 def generate_contract_address(avm_dir_path: str = '',
                               avm_file_name: str = '') -> str:
     if avm_dir_path == '':
         avm_dir_path = os.path.join(os.getcwd(), 'build', 'contracts')
     if not os.path.isdir(avm_dir_path):
         raise PunicaException(PunicaError.dir_path_error)
     hex_avm_code = read_avm(avm_dir_path, avm_file_name)[0]
     hex_contract_address = Address.address_from_vm_code(
         hex_avm_code).to_reverse_hex_str()
     return hex_contract_address
Beispiel #6
0
def build_tx():
    contract_address = Address.address_from_vm_code(codeStr)
    params = build_params()
    tx = sdk.neo_vm().make_invoke_transaction(contract_address.to_array(),
                                              params, None, 0, 0)
    # tx_hash = tx.hash256_bytes()
    # sig_data = acct1.generate_signature(tx_hash, acct1.get_signature_scheme())
    # sig = Sig([acct1.serialize_public_key()], 1, [sig_data])
    # tx.sigs = list()
    # tx.sigs.append(sig)
    return tx
Beispiel #7
0
 def test_invoke_transaction(self):
     sdk.set_rpc(rpc_address)
     code = '54c56b6c766b00527ac46c766b51527ac4616c766b00c36c766b52527ac46c766b52c30548656c6c6f87630600621a' \
            '006c766b51c300c36165230061516c766b53527ac4620e00006c766b53527ac46203006c766b53c3616c756651c56b' \
            '6c766b00527ac46151c576006c766b00c3c461681553797374656d2e52756e74696d652e4e6f7469667961616c7566'
     abi_str = '{"hash":"0x362cb5608b3eca61d4846591ebb49688900fedd0","entrypoint":"Main","functions":[{' \
               '"name":"Main","parameters":[{"name":"operation","type":"String"},{"name":"args","type":"Array"}],' \
               '"returntype":"Any"},{"name":"Hello","parameters":[{"name":"msg","type":"String"}],' \
               '"returntype":"Void"}],"events":[]} '
     abi = json.loads(abi_str,
                      object_hook=lambda d: namedtuple('X', d.keys())
                      (*d.values()))
     abi_info = AbiInfo(abi.hash, abi.entrypoint, abi.functions, abi.events)
     func = abi_info.get_function("Hello")
     func.set_params_value("value")
     contract_address = Address.address_from_vm_code(code).to_byte_array()
     res = sdk.neo_vm().send_transaction(contract_address, None, None, 0, 0,
                                         func, True)
     self.assertEqual(res, '01')
Beispiel #8
0
 def test_address_from_vm_code(self):
     code = '55c56b6a00527ac46a51527ac46a00c30548656c6c6f7d9c7c756419006a51c300c36a52527ac46a52c3650d006c7' \
            '566620300006c756652c56b6a00527ac46a00c3681553797374656d2e52756e74696d652e4e6f74696679516c7566'
     code_address = Address.address_from_vm_code(code)
     contract_address = 'f2b6efc3e4360e69b8ff5db8ce8ac73651d07a12'
     self.assertEqual(contract_address, code_address.to_hex_str())
     self.assertEqual(contract_address, bytes.hex(code_address.to_bytes()))
     self.assertEqual(contract_address,
                      bytearray.hex(code_address.to_bytearray()))
     self.assertEqual(
         contract_address,
         ContractDataParser.to_reserve_hex_str(
             code_address.to_reverse_hex_str()))
     self.assertEqual(contract_address,
                      sdk.neo_vm.avm_code_to_hex_contract_address(code))
     bytes_address = sdk.neo_vm.avm_code_to_bytes_contract_address(code)
     self.assertEqual(contract_address, bytes.hex(bytes_address))
     bytearray_address = sdk.neo_vm.avm_code_to_bytearray_contract_address(
         code)
     self.assertEqual(contract_address, bytearray.hex(bytearray_address))
Beispiel #9
0
def main(argv):
    try:
        opts, args = getopt.getopt(argv, "hm:i:", ["migrate=", "invoke="])
    except getopt.GetoptError:
        print('test.py [-m|--migrate] [-i|--invoke] ')
        sys.exit(2)
    m = {}
    for opt, arg in opts:
        if opt == '-h':
            print('test.py [-m|--migrate] [-i|--invoke] ')
            sys.exit()
        elif opt in ("-m", "--migrate"):
            m["func"] = "migrate"
            if "json" in str(arg):
                with open(arg, "r") as f:
                    r = json.load(
                        f,
                        object_hook=lambda d: namedtuple('X', d.keys())
                        (*d.values()))
                    m["rpc_address"] = r.rpc_address
                    m["need_storage"] = r.need_storage
                    m["name"] = r.name
                    m["code_version"] = r.code_version
                    m["author"] = r.author
                    m["email"] = r.email
                    m["desp"] = r.desp
                    m["payer_address"] = r.payer_address
                    m["payer_password"] = r.payer_password
                    m["wallet_file_path"] = r.wallet_file_path
                    m["gas_limit"] = r.gas_limit
                    m["gas_price"] = r.gas_price
                    m["save_file"] = r.save_file
                    if ".avm" in r.code:
                        with open(r.code, "r") as f2:
                            m["code"] = f2.read()
                    else:
                        m["code"] = r.code
                    m["contract_address"] = Address.address_from_vm_code(
                        m["code"]).to_hex_str()
            else:
                temp = str(arg).split(",")
                for i in temp:
                    t = str(i).split("=")
                    m[t[0]] = t[1]
        elif opt in ("-i", "--invoke"):
            m["func"] = "invoke"
            if "json" in str(arg):
                with open(arg, "r") as f:
                    r = json.load(
                        f,
                        object_hook=lambda d: namedtuple('X', d.keys())
                        (*d.values()))
                    m["rpc_address"] = r.rpc_address
                    m["acct_address"] = r.acct_address
                    m["acct_password"] = r.acct_password
                    m["payer_address"] = r.payer_address
                    m["payer_password"] = r.payer_password
                    m["wallet_file_path"] = r.wallet_file_path
                    m["gas_limit"] = r.gas_limit
                    m["gas_price"] = r.gas_price
                    m["abi_path"] = r.abi_path
                    m["save_file"] = r.save_file
                    m["function"] = r.function
            else:
                temp = str(arg).split(",")
                for i in temp:
                    t = str(i).split("=")
                    m[t[0]] = t[1]
        else:
            print('test.py [-m|--migrate] [-i|--invoke] ')
            sys.exit()

    sdk = OntologySdk()
    sdk.set_rpc(m["rpc_address"])
    if m["func"] is "migrate":
        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 == "":
                    continue
                else:
                    print("deploy success")
                    break
            save_file(m, "success")
        except Exception as e:
            print(e)
            save_file(m, e)
    elif m["func"] is "invoke":
        func_map = {}
        t = 0
        for i in list(m["function"]):
            func_list = []
            func_list.append(i.function_name)
            func_list.append(i.pre_exec)
            for j in list(i.function_param):
                func_list.append(j)
            func_map["function" + str(t)] = func_list
            t = t + 1
        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"])
            acct = sdk.wallet_manager.get_account(m["acct_address"],
                                                  m["acct_password"])
            payer = sdk.wallet_manager.get_account(m["payer_address"],
                                                   m["payer_password"])
            func_l = []
            for func_info in func_map.values():
                func = abi_info.get_function(func_info[0])
                params = []
                l = []
                l.append(func_info[0])
                l.append(func_info[1])
                temp_l = ""
                for i in range(len(func_info)):
                    if i == 0 or i == 1:
                        continue
                    temp_l += func_info[i] + ":"
                    if func.parameters[i - 2].type == "String":
                        params.append(str(func_info[i]))
                    if func.parameters[i - 2].type == "ByteArray":
                        params.append(bytearray(func_info[i].encode()))
                    if func.parameters[i - 2].type == "Integer":
                        params.append(func_info[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])
                pre_exec = False
                if func_info[1] == "true":
                    pre_exec = True
                try:
                    print("")
                    print("invoking, please waiting ...")
                    print("method: " + func_info[0])
                    res = sdk.neo_vm().send_transaction(
                        contract_address, acct, payer, m["gas_limit"],
                        m["gas_price"], func, pre_exec)
                    if not pre_exec:
                        time.sleep(6)
                        print("txhash:", res)
                        print("Event:",
                              sdk.rpc.get_smart_contract_event_by_tx_hash(res))
                        l.append(res)
                    else:
                        print(res)
                        print("res:", (bytearray.fromhex(res)).decode('utf-8'))
                        l.append((bytearray.fromhex(res)).decode('utf-8'))
                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")
Beispiel #10
0
from ontology.common.address import Address
avm = "0131c56b6a00527ac46a51527ac46a00c3044e616d659c6409006599096c7566616a00c30b546f74616c537570706c799c640900655e096c7566616a00c304496e69749c640900650b086c7566616a00c30653796d626f6c9c64090065e1076c7566616a00c3085472616e736665729c6440006a51c3c0539e640700006c7566616a51c300c36a52527ac46a51c351c36a53527ac46a51c352c36a54527ac46a52c36a53c36a54c3527265e4056c7566616a00c30d5472616e736665724d756c74699c640c006a51c36545056c7566616a00c307417070726f76659c6440006a51c3c0539e640700006c7566616a51c300c36a55527ac46a51c351c36a56527ac46a51c352c36a54527ac46a55c36a56c36a54c3527265ff036c7566616a00c30c5472616e7366657246726f6d9c645f006a51c3c0549e640700006c7566616a51c300c36a56527ac46a51c351c36a52527ac46a51c352c36a53527ac46a51c353c36a54527ac46a56c36a52c36a53c36a54c35379517955727551727552795279547275527275655c016c7566616a00c30942616c616e63654f669c6424006a51c3c0519e640700006c7566616a51c300c36a57527ac46a57c365d6006c7566616a00c307446563696d616c9c64090065b1006c7566616a00c309416c6c6f77616e63659c6432006a51c3c0529e640700006c7566616a51c300c36a55527ac46a51c351c36a56527ac46a55c36a56c37c650b006c756661006c756658c56b6a00527ac46a51527ac4681953797374656d2e53746f726167652e476574436f6e74657874616a52527ac40202206a53527ac46a53c36a00c37e6a51c37e6a54527ac46a52c36a54c37c681253797374656d2e53746f726167652e476574616c756654c56b586a00527ac46a00c36c756656c56b6a00527ac4681953797374656d2e53746f726167652e476574436f6e74657874616a51527ac401016a52527ac46a51c36a52c36a00c37e7c681253797374656d2e53746f726167652e476574616c75660122c56b6a00527ac46a51527ac46a52527ac46a53527ac4681953797374656d2e53746f726167652e476574436f6e74657874616a54527ac401016a55527ac40202206a56527ac46a53c3009f640700006c7566616a00c3681b53797374656d2e52756e74696d652e436865636b5769746e65737361009c640700006c7566616a56c36a51c37e6a00c37e6a57527ac46a54c36a57c37c681253797374656d2e53746f726167652e476574616a58527ac46a58c36a53c39f640700006c7566616a58c36a53c39c6425006a54c36a57c37c681553797374656d2e53746f726167652e44656c65746561622800616a54c36a57c36a58c36a53c3945272681253797374656d2e53746f726167652e50757461616a52c3c001149e640700006c7566616a55c36a51c37e6a59527ac46a54c36a59c37c681253797374656d2e53746f726167652e476574616a5a527ac46a5ac36a53c39f640700006c7566616a5ac36a53c39c6425006a54c36a59c37c681553797374656d2e53746f726167652e44656c65746561622800616a54c36a59c36a5ac36a53c3945272681253797374656d2e53746f726167652e50757461616a55c36a52c37e6a5b527ac46a54c36a5bc37c681253797374656d2e53746f726167652e476574616a5c527ac46a54c36a5bc36a5cc36a53c3935272681253797374656d2e53746f726167652e50757461087472616e736665726a51c36a52c36a53c354c176c9681553797374656d2e52756e74696d652e4e6f7469667961516c756660c56b6a00527ac46a51527ac46a52527ac4681953797374656d2e53746f726167652e476574436f6e74657874616a53527ac40202206a54527ac46a52c3009f640700006c7566616a00c3681b53797374656d2e52756e74696d652e436865636b5769746e65737361009c640700006c7566616a54c36a00c37e6a51c37e6a55527ac46a53c36a55c37c681253797374656d2e53746f726167652e476574616a56527ac46a53c36a55c36a52c36a56c3935272681253797374656d2e53746f726167652e5075746107617070726f76656a00c36a51c36a52c354c176c9681553797374656d2e52756e74696d652e4e6f7469667961516c756659c56b6a00527ac4006a52527ac46a00c3c06a53527ac4616a52c36a53c39f645a006a00c36a52c3c36a51527ac46a52c351936a52527ac46a51c3c0539e640700006c7566616a51c300c36a51c351c36a51c352c35272652900009c64bbff155472616e736665724d756c7469206661696c65642ef062a1ff616161516c7566011dc56b6a00527ac46a51527ac46a52527ac4681953797374656d2e53746f726167652e476574436f6e74657874616a53527ac401016a54527ac46a00c36a51c39c640700516c7566616a52c3009c640700516c7566616a52c3009f640700006c7566616a00c3681b53797374656d2e52756e74696d652e436865636b5769746e65737361009c640700006c7566616a51c3c001149e640700006c7566616a54c36a00c37e6a55527ac46a53c36a55c37c681253797374656d2e53746f726167652e476574616a56527ac46a56c36a52c39f640700006c7566616a56c36a52c39c6425006a53c36a55c37c681553797374656d2e53746f726167652e44656c65746561622800616a53c36a55c36a56c36a52c3945272681253797374656d2e53746f726167652e50757461616a54c36a51c37e6a57527ac46a53c36a57c37c681253797374656d2e53746f726167652e476574616a58527ac46a53c36a57c36a58c36a52c3935272681253797374656d2e53746f726167652e50757461087472616e736665726a00c36a51c36a52c354c176c9681553797374656d2e52756e74696d652e4e6f7469667961516c756654c56b0653796d626f6c6a00527ac46a00c36c756660c56b681953797374656d2e53746f726167652e476574436f6e74657874616a00527ac40400e1f5056a51527ac414616f2a4a38396ff203ea01e6c070ae421bb8ce2d6a52527ac40400ca9a3b6a53527ac401016a54527ac40c746f746f616c537570706c796a55527ac46a00c36a55c37c681253797374656d2e53746f726167652e4765746164340014416c726561647920696e697469616c697a656421681553797374656d2e52756e74696d652e4e6f7469667961006c7566616a53c36a51c3956a56527ac46a00c36a55c36a56c35272681253797374656d2e53746f726167652e507574616a00c36a54c36a52c37e6a56c35272681253797374656d2e53746f726167652e50757461087472616e73666572006a52c36a56c354c176c9681553797374656d2e52756e74696d652e4e6f7469667961516c7566006c756655c56b0400e1f5056a00527ac40400ca9a3b6a51527ac46a51c36a00c3956c756654c56b09546f6b656e4e616d656a00527ac46a00c36c75665ec56b6a00527ac46a51527ac46a51c36a00c3946a52527ac46a52c3c56a53527ac4006a54527ac46a00c36a55527ac461616a00c36a51c39f6433006a54c36a55c3936a56527ac46a56c36a53c36a54c37bc46a54c351936a54527ac46a55c36a54c3936a00527ac462c8ff6161616a53c36c7566"

Addr = Address.address_from_vm_code(avm)
print("contract hash is ", Addr.to_reverse_hex_str())
 def avm_code_to_bytearray_contract_address(avm_code: str):
     bytearray_contract_address = Address.address_from_vm_code(
         avm_code).to_bytearray()
     return bytearray_contract_address
 def avm_code_to_hex_contract_address(avm_code: str):
     hex_contract_address = Address.address_from_vm_code(
         avm_code).to_hex_str()
     return hex_contract_address
Beispiel #13
0
def main(argv):
    try:
        opts, args = getopt.getopt(argv, "-h-m:-i:-p", [
            "migrate=",
            "invoke=",
        ])
    except getopt.GetoptError:
        print('test.py [-m|--migrate] [-i|--invoke] ')
        sys.exit(2)
    m = {}
    invoke_func_name = ""
    pre_exec = False
    for opt, arg in opts:
        if opt == '-h':
            print('test.py [-m|--migrate] [-i|--invoke] ')
            sys.exit()
        elif opt in ("-m", "--migrate"):
            m["func"] = "migrate"
            if "json" in str(arg):
                with open(arg, "r") as f:
                    r = json.load(
                        f,
                        object_hook=lambda d: namedtuple('X', d.keys())
                        (*d.values()))
                    #print("r_json_content is ", r)
                    m["rpc_address"] = r.rpc_address
                    m["need_storage"] = r.need_storage
                    m["name"] = r.name
                    m["code_version"] = r.code_version
                    m["author"] = r.author
                    m["email"] = r.email
                    m["desp"] = r.desp
                    m["payer_address"] = r.payer_address
                    m["payer_password"] = r.payer_password
                    m["wallet_file_path"] = r.wallet_file_path
                    m["gas_limit"] = r.gas_limit
                    m["gas_price"] = r.gas_price
                    m["save_file"] = r.save_file
                    if ".avm" in r.code:
                        with open(r.code, "r") as f2:
                            m["code"] = f2.read()
                    else:
                        m["code"] = r.code
                    m["contract_address"] = Address.address_from_vm_code(
                        m["code"]).to_hex_str()
            else:
                temp = str(arg).split(",")
                for i in temp:
                    t = str(i).split("=")
                    m[t[0]] = t[1]
        elif opt in ("-i", "--invoke"):
            invoke_func_name = arg
            print('invoke_function is ', invoke_func_name)
            m["func"] = "invoke"
            invoke_json_path = './invoke.json'
            if "json" in str(invoke_json_path):
                with open(invoke_json_path, "r") as f:
                    r = json.load(
                        f,
                        object_hook=lambda d: namedtuple('X', d.keys())
                        (*d.values()))
                    m["rpc_address"] = r.rpc_address
                    m["acct_address"] = r.acct_address
                    m["acct_password"] = r.acct_password
                    m["payer_address"] = r.payer_address
                    m["payer_password"] = r.payer_password
                    m["wallet_file_path"] = r.wallet_file_path
                    m["gas_limit"] = r.gas_limit
                    m["gas_price"] = r.gas_price
                    #m["abi_path"] = r.abi_path
                    m["save_file"] = r.save_file
                    print('m_save_file is ', m["save_file"])
                    #m["function"] = r.function
                    if "abi.json" in r.abi:
                        with open(r.abi, "r") as f:
                            m["abi"] = f.read()
                    else:
                        m["abi"] = r.abi
            else:
                temp = str(invoke_json_path).split(",")
                for i in temp:
                    t = str(i).split("=")
                    m[t[0]] = t[1]
        elif opt in ("-p", "--pre"):
            pre_exec = True
            print('pre_exec is True')
        else:
            print('test.py [-m|--migrate] [-i|--invoke] ')
            sys.exit()
    sdk = OntologySdk()
    sdk.set_rpc(m["rpc_address"])
    if m["func"] is "migrate":
        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"])

        print('acct.address', acct.get_address_base58())

        sdk.sign_transaction(tx, acct)
        sdk.set_rpc(m["rpc_address"])
        try:
            print("deploying,please waiting ...")
            r = sdk.rpc.send_raw_transaction(tx)
            print("txhash:", r)
            for i in range(10):
                time.sleep(1)
                r = sdk.rpc.get_smart_contract(m["contract_address"])
                if r == "":
                    continue
                else:
                    print("deploy success")
                    break
            save_file(m, "success")
        except Exception as e:
            print(e)
            save_file(m, e)
    elif m["func"] is "invoke":
        res_abi = json.loads(m["abi"],
                             object_hook=lambda d: namedtuple('X', d.keys())
                             (*d.values()))
        abi_info = AbiInfo(res_abi.hash, res_abi.entrypoint, res_abi.functions,
                           res_abi.events)
        contract_address = bytearray.fromhex(str(res_abi.hash)[2:])
        contract_address.reverse()
        #print("contract_address is ", contract_address)
        sdk.wallet_manager.open_wallet(m["wallet_file_path"])
        acct = sdk.wallet_manager.get_account(m["acct_address"],
                                              m["acct_password"])
        payer = sdk.wallet_manager.get_account(m["payer_address"],
                                               m["payer_password"])
        print('res_abi.hash is ', res_abi.hash)
        #print('res_abi.entrypoint is ', res_abi.entrypoint)
        #print('res_abi.function is ', res_abi.functions, type(res_abi.functions), len(res_abi.functions))
        invoke_func = abi_info.get_function(invoke_func_name)
        func_params = {}

        for function in res_abi.functions:
            if function.name == invoke_func_name:
                func_params = function.parameters
        func_params_map = {}
        for param in func_params:
            hinter = 'Pls input ' + param.name + ' (' + param.type + ')' + ': '
            raw_input = input(hinter)
            if param.type == 'String':
                invoke_func.parameters.append(str(raw_input))
            if param.type == 'ByteArray':
                invoke_func.parameters.append(bytearray(raw_input))
            if param.type == 'Integer':
                invoke_func.parameters.append(int(raw_input))
        try:
            print("")
            print("invoking '" + invoke_func_name + "', please waiting ...")
            #print("method: " + invoke_func_name)
            res = sdk.neo_vm().send_transaction(contract_address, acct, payer,
                                                m["gas_limit"], m["gas_price"],
                                                invoke_func, pre_exec)
            if not pre_exec:
                time.sleep(6)
                print("txhash:", res)
                print("Event:",
                      sdk.rpc.get_smart_contract_event_by_tx_hash(res))
            else:
                print(res)
                print("res:", (bytearray.fromhex(res)).decode('utf-8'))
                #l.append((bytearray.fromhex(res)).decode('utf-8'))
        except Exception as e:
            print("Error:", e)
            #l.append(e)
        #func_l.append(l)
    else:
        print('only support migrate and invoke')