Exemple #1
0
def test_request_ela_mainchain():
    wallet = Wallet(test_input['host'], test_input['port'],
                    test_input['production'])
    response = wallet.request_ela(test_input['api_key_to_use'],
                                  test_input['did_to_use'], 'mainchain',
                                  test_input['ela_to_use'])
    if response['status']:
        json_output = json.loads(response['output'])
        for i in json_output['result']:
            assert json_output['result'][
                i] is not None, "In Request Ela Mainchain-> " + response[
                    'status_message']
    assert response[
        'status'] == True, "In Request Ela Mainchain-> " + response[
            'status_message']
def main():
    host = "localhost"
    port = 8001
    production = False

    api_key = "9A5Fy8jDxsJQSDdU4thLZs9fwDmtVzBU"
    did = "iHdasfhasdflkHdasfasdfD"
    address = "EQeMkfRk3JzePY7zpUSg5ZSvNsWedzqWXN"
    address_eth = "0x282c2795B9722d638778f5a1A0045c60b330F1A0"

    try:
        wallet = Wallet(host, port, production)
        print("\n--> Request ELA")
        # Mainchain
        response = wallet.request_ela(api_key, did, 'mainchain', address)
        if response['status']:
            json_output = json.loads(response['output'])
            print("Status Message :", response['status_message'])
            for i in json_output['result']:
                print(i, ':', json_output['result'][i])
        else:
            print("Error Message: " + response['status_message'])

        # DID sidechain
        response = wallet.request_ela(api_key, did, 'did', address)
        if response['status']:
            json_output = json.loads(response['output'])
            print("Status Message :", response['status_message'])
            for i in json_output['result']:
                print(i, ':', json_output['result'][i])
        else:
            print("Error Message: " + response['status_message'])

        # Token sidechain
        response = wallet.request_ela(api_key, did, 'token', address)
        if response['status']:
            json_output = json.loads(response['output'])
            print("Status Message :", response['status_message'])
            for i in json_output['result']:
                print(i, ':', json_output['result'][i])
        else:
            print("Error Message: " + response['status_message'])

        # Eth sidechain
        response = wallet.request_ela(api_key, did, 'eth', address_eth)
        if response['status']:
            json_output = json.loads(response['output'])
            print("Status Message :", response['status_message'])
            for i in json_output['result']:
                print(i, ':', json_output['result'][i])
        else:
            print("Error Message: " + response['status_message'])
    except Exception as e:
        print(e)
    finally:
        wallet.close()
def main():
    host = "localhost"
    port = 8001
    production = False

    api_key = "9A5Fy8jDxsJQSDdU4thLZs9fwDmtVzBU"
    did = "iHdasfhasdflkHdasfasdfD"
    network = "gmunet"

    try:
        wallet = Wallet(host, port, production)
        print("\n--> Create Wallet")
        response = wallet.create_wallet(api_key, did, network)
        if response['status']:
            json_output = json.loads(response['output'])
            print("Status Message :", response['status_message'])
            for i in json_output['result']:
                print(i, ':', json_output['result'][i])
        else:
            print("Error Message: " + response['status_message'])
    except Exception as e:
        print(e)
    finally:
        wallet.close()
Exemple #4
0
def main():
    parser = argparse.ArgumentParser(description="sample.py", add_help=False)
    parser.add_argument(
        '-h',
        '--help',
        action='help',
        default=argparse.SUPPRESS,
        help=
        'Types of services supported: generate_api_key, get_api_key, node_rpc_methods, '
        'upload_and_sign, verify_and_show, create_wallet, view_wallet, request_ela, '
        'deploy_eth_contract, watch_eth_contract')
    parser.add_argument('-s', action="store", dest="service")

    results = parser.parse_args()
    service = results.service

    host = config('GRPC_SERVER_HOST')
    port = config('GRPC_SERVER_PORT')
    production = config('PRODUCTION', default=False, cast=bool)

    network = "gmunet"
    ela_to_use = 'EQeMkfRk3JzePY7zpUSg5ZSvNsWedzqWXN'
    ela_eth_to_use = '0x48F01b2f2b1a546927ee99dD03dCa37ff19cB84e'
    did_to_use = 'n84dqvIK9O0LIPXi27uL0aRnoR45Exdxl218eQyPDD4lW8RPov'
    api_key_to_use = '1htfwNmjePvE6blvXPc3YjD8Iqkst53ZF8EwnCZxbvyIcOoHt8wQHxPq4y501awz'
    private_key_to_use = '1F54BCD5592709B695E85F83EBDA515971723AFF56B32E175F14A158D5AC0D99'

    # Check whether grpc server is healthy first
    try:
        health_check = HealthCheck(host, port, production)
        print("--> Checking the health status of grpc server")
        response = health_check.check()
        if response.status != health_check_pb2.HealthCheckResponse.SERVING:
            print("grpc server is not running properly")
        else:
            print("grpc server is running")
    except Exception as e:
        print(e)
        print("grpc server is not running properly")
        sys.exit(1)

    if service == "node_rpc_methods":
        try:
            node_rpc = NodeRpc(host, port, production)
            print("--> Get current height")
            current_height = node_rpc.get_current_height(
                api_key_to_use, did_to_use, network, "mainchain")
            print("Current Height - mainchain: ", current_height)
            current_height = node_rpc.get_current_height(
                api_key_to_use, did_to_use, network, "did")
            print("Current Height - did sidechain: ", current_height)
            current_height = node_rpc.get_current_height(
                api_key_to_use, did_to_use, network, "token")
            print("Current Height - token sidechain: ", current_height)
            current_height = node_rpc.get_current_height(
                api_key_to_use, did_to_use, network, "eth")
            print("Current Height - eth sidechain: ", current_height)

            print("--> Get current block info")
            current_block_info = node_rpc.get_current_block_info(
                api_key_to_use, did_to_use, network, "mainchain")
            print("Current block info - mainchain: ", current_block_info)
            current_block_info = node_rpc.get_current_block_info(
                api_key_to_use, did_to_use, network, "did")
            print("Current block info - did sidechain: ", current_block_info)
            current_block_info = node_rpc.get_current_block_info(
                api_key_to_use, did_to_use, network, "token")
            print("Current block info - token sidechain: ", current_block_info)
            current_block_info = node_rpc.get_current_block_info(
                api_key_to_use, did_to_use, network, "eth")
            print("Current block info - eth sidechain: ", current_block_info)

            print("--> Get current mining info - mainchain")
            current_mining_info = node_rpc.get_current_mining_info(
                api_key_to_use, did_to_use, network)
            print("Current mining info: ", current_mining_info)
        except Exception as e:
            print(e)
        finally:
            node_rpc.close()
    elif service == "generate_api_key":
        try:
            common = Common(host, port, production)
            # Generate API Key
            print("--> Generate API Key - SHARED_SECRET_ADENINE")
            response = common.generate_api_request(
                config('SHARED_SECRET_ADENINE'), did_to_use)
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            common.close()
    elif service == "get_api_key":
        try:
            common = Common(host, port, production)
            # Get API Key
            print("--> Get API Key - SHARED_SECRET_ADENINE")
            response = common.get_api_key_request(
                config('SHARED_SECRET_ADENINE'), did_to_use)
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            common.close()
    elif service == "upload_and_sign":
        try:
            hive = Hive(host, port, production)
            # Upload and Sign
            print("\n--> Upload and Sign")
            response = hive.upload_and_sign(api_key_to_use, did_to_use,
                                            network, private_key_to_use,
                                            'test/sample.txt')
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            hive.close()
    elif service == "verify_and_show":
        try:
            hive = Hive(host, port, production)
            # Verify and Show
            print("\n--> Verify and Show")
            request_input = {
                "msg":
                "516D5A445272666E76485648354E363277674C505171316D3575586D7459684A5A4475666D4679594B476F745535",
                "pub":
                "022316EB57646B0444CB97BE166FBE66454EB00631422E03893EE49143B4718AB8",
                "sig":
                "327C64F47047B71F1AA235CE465D5A80EB823648C7355E8A3EFBF3DE9AA25D443588E101EE0E693BE80A4C7D200CBB65ED838296EE3A8088401C342C0FBCD4E7",
                "hash": "QmZDRrfnvHVH5N62wgLPQq1m5uXmtYhJZDufmFyYKGotU5",
                "privateKey": private_key_to_use
            }
            response = hive.verify_and_show(api_key_to_use, did_to_use,
                                            network, request_input)

            if response['status']:
                download_path = 'test/sample_from_hive.txt'
                print("Status Message :", response['status_message'])
                print("File Path :", download_path)

                with open(download_path, 'wb') as file:
                    file.write(response['file_content'])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            hive.close()
    elif service == "create_wallet":
        try:
            wallet = Wallet(host, port, production)
            print("\n--> Create Wallet")
            response = wallet.create_wallet(api_key_to_use, did_to_use,
                                            network)
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            wallet.close()
    elif service == "view_wallet":
        try:
            node_rpc = NodeRpc(host, port, production)
            print("\n--> View Wallet")

            print("--> Get current balance")
            current_balance = node_rpc.get_current_balance(
                api_key_to_use, did_to_use, network, "mainchain", ela_to_use)
            print("Current balance - mainchain:", current_balance)
            current_balance = node_rpc.get_current_balance(
                api_key_to_use, did_to_use, network, "did", ela_to_use)
            print("Current balance - did sidechain:", current_balance)
            current_balance = node_rpc.get_current_balance(
                api_key_to_use, did_to_use, network, "token", ela_to_use)
            print("Current balance - token sidechain:", current_balance)
            current_balance = node_rpc.get_current_balance(
                api_key_to_use, did_to_use, network, "eth", ela_eth_to_use)
            print("Current balance - eth sidechain:", current_balance)
        except Exception as e:
            print(e)
        finally:
            node_rpc.close()
    elif service == "request_ela":
        try:
            wallet = Wallet(host, port, production)
            print("\n--> Request ELA")
            # Mainchain
            response = wallet.request_ela(api_key_to_use, did_to_use,
                                          'mainchain', ela_to_use)
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])

            # DID sidechain
            response = wallet.request_ela(api_key_to_use, did_to_use, 'did',
                                          ela_to_use)
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])

            # Token sidechain
            response = wallet.request_ela(api_key_to_use, did_to_use, 'token',
                                          ela_to_use)
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])

            # Eth sidechain
            response = wallet.request_ela(api_key_to_use, did_to_use, 'eth',
                                          ela_eth_to_use)
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            wallet.close()
    elif service == "deploy_eth_contract":
        try:
            sidechain_eth = SidechainEth(host, port, production)
            # Deploy ETH Contract
            # The eth account addresses below is used from that of privatenet. In order to test this,
            # you must first run https://github.com/cyber-republic/elastos-privnet locally
            # For production GMUnet, this won't work
            print("\n--> Deploy ETH Contract")
            response = sidechain_eth.deploy_eth_contract(
                api_key_to_use, did_to_use, network, ela_eth_to_use,
                '0x35a12175385b24b2f906d6027d440aac7bd31e1097311fa8e3cf21ceac7c4809',
                2000000, 'test/HelloWorld.sol')
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            sidechain_eth.close()
    elif service == "watch_eth_contract":
        try:
            sidechain_eth = SidechainEth(host, port, production)
            print("\n--> Watch ETH Contract")
            response = sidechain_eth.watch_eth_contract(
                api_key_to_use, did_to_use, network,
                '0xc0ba7D9CF73c0410FfC9FB5b768F5257906B13c1', 'HelloWorld',
                'QmXYqHg8gRnDkDreZtXJgqkzmjujvrAr5n6KXexmfTGqHd')
            if response['status']:
                json_output = json.loads(response['output'])
                print("Status Message :", response['status_message'])
                for i in json_output['result']:
                    print(i, ':', json_output['result'][i])
            else:
                print("Error Message: " + response['status_message'])
        except Exception as e:
            print(e)
        finally:
            sidechain_eth.close()
def request_ela(request):
    did = request.session['did']
    track_page_visit(did, 'Request ELA', 'service:request_ela', True)
    recent_services = get_recent_services(did)
    sample_code = {}
    module_dir = os.path.dirname(__file__)
    with open(os.path.join(module_dir, 'sample_code/python/request_ela.py'), 'r') as myfile:
        sample_code['python'] = myfile.read()
    with open(os.path.join(module_dir, 'sample_code/go/request_ela.go'), 'r') as myfile:
        sample_code['go'] = myfile.read()
    form_to_display = {
        'mainchain': RequestELAForm(initial={'api_key': request.session['api_key'], 'chain': 'mainchain',
                                             'address': request.session['address_mainchain']}),
        'did': RequestELAForm(
            initial={'api_key': request.session['api_key'], 'chain': 'did', 'address': request.session['address_did']}),
        'token': RequestELAForm(initial={'api_key': request.session['api_key'], 'chain': 'token',
                                         'address': request.session['address_mainchain']}),
        'eth': RequestELAForm(
            initial={'api_key': request.session['api_key'], 'chain': 'eth', 'address': request.session['address_eth']})
    }
    output = {
        'mainchain': False,
        'did': False,
        'token': False,
        'eth': False
    }
    if request.method == "POST":
        address = {
            'mainchain': '',
            'did': '',
            'token': '',
            'eth': ''
        }
        deposit_amount = {
            'mainchain': 0,
            'did': 0,
            'token': 0,
            'eth': 0
        }
        if 'submit_mainchain' in request.POST:
            chain = 'mainchain'
            form = RequestELAForm(request.POST, initial={'chain': chain})
        elif 'submit_did' in request.POST:
            chain = 'did'
            form = RequestELAForm(request.POST, initial={'chain': chain})
        elif 'submit_token' in request.POST:
            chain = 'token'
            form = RequestELAForm(request.POST, initial={'chain': chain})
        elif 'submit_eth' in request.POST:
            chain = 'eth'
            form = RequestELAForm(request.POST, initial={'chain': chain})

        if form.is_valid():
            network = form.cleaned_data.get('network')
            api_key = form.cleaned_data.get('api_key')
            addr = form.cleaned_data.get('address')
            try:
                wallet = Wallet(GRPC_SERVER_HOST, GRPC_SERVER_PORT, PRODUCTION)
                response = wallet.request_ela(api_key, did, chain, addr)
                if response['status']:
                    output[chain] = True
                    content = json.loads(response['output'])['result']
                    address[chain] = content['address']
                    deposit_amount[chain] = content['deposit_amount']
                    track_page_visit(did, 'Request ELA', 'service:request_ela', True, True, chain)
                    return render(request, "service/request_ela.html", {'output': output, 'form': form_to_display,
                                                                        'address': address,
                                                                        'deposit_amount': deposit_amount,
                                                                        'sample_code': sample_code,
                                                                        'recent_services': recent_services})
                else:
                    messages.success(request, response['status_message'])
                    return redirect(reverse('service:request_ela'))
            except Exception as e:
                logging.debug(f"did: {did} Method: request_ela Error: {e}")
                messages.success(request, "Could not view wallet at this time. Please try again")
                return redirect(reverse('service:request_ela'))
            finally:
                wallet.close()
    else:
        return render(request, 'service/request_ela.html',
                      {'output': output, 'form': form_to_display, 'sample_code': sample_code,
                       'recent_services': recent_services})
def create_wallet(request):
    did = request.session['did']
    track_page_visit(did, 'Create Wallet', 'service:create_wallet', True)
    recent_services = get_recent_services(did)
    sample_code = {}
    module_dir = os.path.dirname(__file__)
    with open(os.path.join(module_dir, 'sample_code/python/create_wallet.py'), 'r') as myfile:
        sample_code['python'] = myfile.read()
    with open(os.path.join(module_dir, 'sample_code/go/create_wallet.go'), 'r') as myfile:
        sample_code['go'] = myfile.read()
    if request.method == "POST":
        if not request.session['create_wallet_submit']:
            form = CreateWalletForm(request.POST)
            if form.is_valid():
                network = form.cleaned_data.get('network')
                api_key = form.cleaned_data.get('api_key')
                try:
                    wallet = Wallet(GRPC_SERVER_HOST, GRPC_SERVER_PORT, PRODUCTION)
                    response = wallet.create_wallet(api_key, did, network)
                    if response['status']:
                        request.session['create_wallet_submit'] = True
                        content = json.loads(response['output'])['result']
                        wallet_mainchain = content['mainchain']
                        wallet_did = content['sidechain']['did']
                        wallet_token = content['sidechain']['token']
                        wallet_eth = content['sidechain']['eth']
                        if network == 'gmunet':
                            obj, created = UserServiceSessionVars.objects.update_or_create(did=did,
                                                                                           defaults={'did': did,
                                                                                                     'api_key': api_key,
                                                                                                     'mnemonic_mainchain':
                                                                                                         wallet_mainchain[
                                                                                                             'mnemonic'],
                                                                                                     'public_key_mainchain':
                                                                                                         wallet_mainchain[
                                                                                                             'public_key'],
                                                                                                     'private_key_mainchain':
                                                                                                         wallet_mainchain[
                                                                                                             'private_key'],
                                                                                                     'address_mainchain':
                                                                                                         wallet_mainchain[
                                                                                                             'address'],
                                                                                                     'private_key_did':
                                                                                                         wallet_did[
                                                                                                             'private_key'],
                                                                                                     'public_key_did':
                                                                                                         wallet_did[
                                                                                                             'public_key'],
                                                                                                     'address_did':
                                                                                                         wallet_did[
                                                                                                             'address'],
                                                                                                     'did_did':
                                                                                                         wallet_did[
                                                                                                             'did'],
                                                                                                     'address_eth':
                                                                                                         wallet_eth[
                                                                                                             'address'],
                                                                                                     'private_key_eth':
                                                                                                         wallet_eth[
                                                                                                             'private_key']})
                            obj.save()
                        populate_session_vars_from_database(request, did)
                        track_page_visit(did, 'Create Wallet', "service:create_wallet", True, True)
                        return render(request, "service/create_wallet.html",
                                      {'output': True, 'wallet_mainchain': wallet_mainchain,
                                       'wallet_did': wallet_did, 'wallet_token': wallet_token, 'wallet_eth': wallet_eth,
                                       'sample_code': sample_code, 'recent_services': recent_services})
                    else:
                        messages.success(request, response['status_message'])
                        return redirect(reverse('service:create_wallet'))
                except Exception as e:
                    logging.debug(f"did: {did} Method: create_wallet Error: {e}")
                    messages.success(request, "Could not create wallet at this time. Please try again")
                    return redirect(reverse('service:create_wallet'))
                finally:
                    wallet.close()
        else:
            return redirect(reverse('service:create_wallet'))
    else:
        request.session['create_wallet_submit'] = False
        form = CreateWalletForm(initial={'api_key': request.session['api_key']})
        return render(request, 'service/create_wallet.html',
                      {'output': False, 'form': form, 'sample_code': sample_code, 'recent_services': recent_services})