Esempio n. 1
0
def cli_create_pool(output_dir, pool_name: str, genesis_path: str) -> bool:
    """
    Builds batch and runs batch on Indy CLI to create a pool

    :param output_dir:
    :param pool_name:
    :param genesis_path:
    :return:
    """
    logger.info("Creating a Pool with CLI")

    batch = BatchBuilder()
    batch = cmd_create_pool(batch, pool_name, genesis_path)

    batch_str = batch.build()

    runner = CliRunner(output_dir)
    std_out = runner.run(batch_str, "indy-cli-create-pool").std_out

    if batch_execution_failed(std_out):
        pool_already_exists = get_indy_cli_command_output(
            std_out,
            "\"{}\" already exists".format(pool_name),
            return_line_offset=0)
        if not pool_already_exists:
            return False

    return True
Esempio n. 2
0
def cli_create_wallet(output_dir,
                      wallet_name: str,
                      wallet_key: str = None) -> bool:
    """
    Builds batch and runs batch on Indy CLI to create a wallet

    :param output_dir:
    :param wallet_name:
    :param wallet_key:
    :return:
    """
    logger.info("Creating a Wallet with CLI")

    batch = BatchBuilder()
    cmd_create_wallet(batch, wallet_name, wallet_key)

    batch_str = batch.build()

    runner = CliRunner(output_dir)
    std_out = runner.run(batch_str, "indy-cli-create-wallet").std_out

    if batch_execution_failed(std_out):
        wallet_already_exists = get_indy_cli_command_output(
            std_out,
            "\"{}\" already exists".format(wallet_name),
            return_line_offset=0)
        if not wallet_already_exists:
            return False

    return True
Esempio n. 3
0
def batch_execution_failed(std_out):
    status = get_indy_cli_command_output(std_out,
                                         "Batch execution failed",
                                         return_line_offset=0)
    if status:
        logger.warn("CLI batch execution failed, see out file for more info")
        return True
    else:
        return False
Esempio n. 4
0
def cli_get_payment_sources(output_dir: str,
                            from_payment_addresses: List[str],
                            payment_lib: str,
                            payment_lib_initializer: str,
                            pool_name: str,
                            wallet_name: str,
                            wallet_key: str = None,
                            payment_method: str = 'null') -> List[str]:
    """
    Builds batch and runs batch on Indy CLI to get list of payment sources from
    a list of payment addresses.
    :param output_dir: str
    :param from_payment_addresses: List[str]
    :payment_lib: str
    :payment_lib_initializer: str
    :param pool_name: str
    :param wallet_name: str
    :param wallet_key: str=None
    :payment_method: str="null"
    :return: List[str]
    """
    logger.info("Getting payment sources from addresses in wallet %s",
                wallet_name)

    batch = BatchBuilder()
    with cmd_open_pool_and_wallet(batch,
                                  pool_name,
                                  wallet_name,
                                  wallet_key=wallet_key):
        cmd_load_plugin(batch, payment_lib, payment_lib_initializer)
        for payment_address in from_payment_addresses:
            logger.info("Getting payment sources from address %s",
                        payment_address)
            batch.add_command(
                "ledger get-payment-sources payment_address={}\n".format(
                    payment_address))

    batch_str = batch.build()

    std_out = CliRunner(output_dir).run(batch_str,
                                        "indy-cli-payment-sources-get").std_out

    payment_address_sources = []
    if batch_execution_failed(std_out):
        raise BatchExecutionFailedException
    else:
        payment_address_sources = get_indy_cli_command_output(
            std_out,
            "txo:{}".format(payment_method),
            return_line_offset=0,
            multi=True)
    return parse_payment_sources(payment_address_sources)
Esempio n. 5
0
def cli_generate_payment_addresses(
        output_dir: str,
        payment_lib: str,
        payment_lib_initializer: str,
        wallet_name: str,
        wallet_key: str = None,
        payment_method: str = "null",
        number_of_addresses: Union[int, str] = 1) -> List[str]:
    """
    Builds batch and runs batch on Indy CLI to generate a given number of
    payment addresses in the given wallet
    :param output_dir: str
    :payment_lib: str
    :payment_lib_initializer: str
    :param wallet_name: str
    :param wallet_key: str=None
    :payment_method: str="null"
    :number_of_addresses: Union[int,str]=1
    :return: List[str]
    """
    logger.info("Getting payment addresses from wallet %s", wallet_name)

    batch = BatchBuilder()
    with cmd_open_wallet(batch, wallet_name, wallet_key=wallet_key):
        cmd_load_plugin(batch, payment_lib, payment_lib_initializer)
        for i in range(0, int(number_of_addresses)):
            batch.add_command(
                "payment-address create payment_method={}\n".format(
                    payment_method))

    batch_str = batch.build()

    std_out = CliRunner(output_dir).run(
        batch_str, "indy-cli-payment-address-generate").std_out

    payment_address_generate = []
    if batch_execution_failed(std_out):
        raise BatchExecutionFailedException
    else:
        payment_address_generate = get_indy_cli_command_output(
            std_out,
            "Payment Address has been created",
            return_line_offset=0,
            multi=True)
    return parse_payment_addresses(payment_address_generate, "\"", 1)
Esempio n. 6
0
def cli_get_payment_addresses(output_dir: str,
                              wallet_name: str,
                              wallet_key: str = None,
                              payment_scheme: str = "pay",
                              payment_method: str = "null") -> List[str]:
    """
    Builds batch and runs batch on Indy CLI to get a list of payment addresses
    from a wallet
    :param output_dir: str
    :param wallet_name: str
    :param wallet_key: str
    :payment_scheme: str="pay"
    :payment_method: str="null"
    :return: List[str]
    """
    logger.debug("Getting payment addresses from wallet %s", wallet_name)

    batch = BatchBuilder()
    with cmd_open_wallet(batch, wallet_name, wallet_key=wallet_key):
        batch.add_command("payment-address list\n")

    batch_str = batch.build()

    std_out = CliRunner(output_dir).run(
        batch_str, "indy-cli-payment-address-list").std_out

    payment_address_list = []
    if batch_execution_failed(std_out):
        raise BatchExecutionFailedException
    else:
        payment_address_list = get_indy_cli_command_output(
            std_out,
            "{}:{}:".format(payment_scheme, payment_method),
            return_line_offset=0,
            multi=True)
    return parse_payment_addresses(payment_address_list, "|", 1)
Esempio n. 7
0
def cli_mint_tokens(output_dir: str,
                    sending_did: str,
                    trustee_did_list: str,
                    payment_address: str,
                    token_num: str,
                    payment_lib: str,
                    payment_lib_initializer: str,
                    pool_name: str,
                    wallet_name: str,
                    wallet_key: str = None):
    """
    Builds batch and runs batch on Indy CLI to mint tokens
    :param output_dir:
    :param sending_did:
    :param trustee_did_list:
    :param payment_address:
    :param token_num:
    :param payment_lib:
    :param payment_lib_initializer:
    :param pool_name:
    :param wallet_name:
    :param wallet_key:
    :return:
    """
    logger.info("Minting tokens with CLI")

    batch = BatchBuilder()
    with cmd_open_wallet(batch, wallet_name, wallet_key=wallet_key):
        cmd_load_plugin(batch, payment_lib, payment_lib_initializer)
        cmd_use_did(batch, sending_did)
        batch.add_command("ledger mint-prepare outputs=({},{})".format(
            payment_address, token_num))

    batch_str = batch.build()

    std_out = CliRunner(output_dir).run(batch_str,
                                        "indy-cli-prepare-mint").std_out

    mint_txn = get_indy_cli_command_output(
        std_out, "MINT transaction has been created:")
    if isinstance(mint_txn, str):
        mint_txn = mint_txn.strip()

    for trustee_did in trustee_did_list:
        batch = BatchBuilder()
        with cmd_open_wallet(batch, wallet_name, wallet_key=wallet_key):
            cmd_load_plugin(batch, payment_lib, payment_lib_initializer)
            cmd_use_did(batch, trustee_did)
            batch.add_command("ledger sign-multi txn={}\n".format(mint_txn))

        batch_str = batch.build()

        std_out = CliRunner(output_dir).run(batch_str,
                                            "indy-cli-sign-mint").std_out

        if batch_execution_failed(std_out):
            return False

        mint_txn = get_indy_cli_command_output(std_out,
                                               "Transaction has been signed",
                                               return_line_offset=1)
        if isinstance(mint_txn, str):
            mint_txn = mint_txn.strip()

    batch = BatchBuilder()
    with cmd_open_pool_and_wallet(batch,
                                  pool_name,
                                  wallet_name,
                                  wallet_key=wallet_key):
        cmd_use_did(batch, sending_did)
        batch.add_command("ledger custom {}".format(mint_txn))

    batch_str = batch.build()

    std_out = CliRunner(output_dir).run(batch_str,
                                        "indy-cli-submit-mint").std_out

    if batch_execution_failed(std_out):
        return False

    return True