/**
 * # Crypto Service
 * A service defining transactions and queries related to accounts.
 *
 * This includes transactions for HBAR transfers and balance queries as well as
 * transactions to manage "allowances" which permit a third party to spend a
 * portion of the HBAR balance in an account.<br/>
 * Basic account, record, and receipt queries are also defined in this service.
 *
 * Transactions and queries relating to tokens _other than HBAR_ are defined
 * in the Token Service.
 *
 * ### Keywords
 * The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
 * "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
 * document are to be interpreted as described in
 * [RFC2119](https://www.ietf.org/rfc/rfc2119) and clarified in
 * [RFC8174](https://www.ietf.org/rfc/rfc8174).
 */
syntax = "proto3";

package proto;

// SPDX-License-Identifier: Apache-2.0
option java_package = "com.hederahashgraph.service.proto.java";
// <<<pbj.java_package = "com.hedera.hapi.node.token">>> This comment is special code for setting PBJ Compiler java package

import "services_query.proto";
import "services_response.proto";
import "services_transaction_response.proto";
import "services_transaction.proto";

/**
 * Transactions and queries for the Hedera Crypto Service.
 */
service CryptoService {
    // The following queries are permanently removed.
    // getStakersByAccountID, getFastTransactionRecord

    /**
     * Create a new account by submitting the transaction
     */
    rpc createAccount (Transaction) returns (TransactionResponse);

    /**
     * Update an account by submitting the transaction
     */
    rpc updateAccount (Transaction) returns (TransactionResponse);

    /**
     * Initiate a transfer by submitting the transaction
     */
    rpc cryptoTransfer (Transaction) returns (TransactionResponse);

    /**
     * Delete an account by submitting the transaction
     */
    rpc cryptoDelete (Transaction) returns (TransactionResponse);

    /**
     * Add one or more approved allowances for spenders to transfer the paying
     * account's hbar or tokens.
     */
    rpc approveAllowances (Transaction) returns (TransactionResponse);

    /**
     * Delete one or more of the specific approved NFT serial numbers on an
     * owner account.
     */
    rpc deleteAllowances (Transaction) returns (TransactionResponse);

    /**
     * Add a livehash
     * <blockquote>Important<blockquote>
     * This transaction is obsolete, not supported, and SHALL fail with a
     * pre-check result of `NOT_SUPPORTED`.</blockquote></blockquote>
     */
    rpc addLiveHash (Transaction) returns (TransactionResponse) {option deprecated = true;};

    /**
     * Delete a livehash
     * <blockquote>Important<blockquote>
     * This transaction is obsolete, not supported, and SHALL fail with a
     * pre-check result of `NOT_SUPPORTED`.</blockquote></blockquote>
     */
    rpc deleteLiveHash (Transaction) returns (TransactionResponse) {option deprecated = true;};

    /**
     * Retrieve a livehash for an account
     * <blockquote>Important<blockquote>
     * This query is obsolete, not supported, and SHALL fail with a pre-check
     * result of `NOT_SUPPORTED`.</blockquote></blockquote>
     */
    rpc getLiveHash (Query) returns (Response) {option deprecated = true;};

    /**
     * Return all transactions in the last 180s of consensus time for which
     * the given account was the effective payer **and** network property
     * `ledger.keepRecordsInState` was `true`.
     */
    rpc getAccountRecords (Query) returns (Response);

    /**
     * Retrieve the balance of an account
     */
    rpc cryptoGetBalance (Query) returns (Response);

    /**
     * Retrieve the metadata of an account
     */
    rpc getAccountInfo (Query) returns (Response);

    /**
     * Retrieve the latest receipt for a transaction that is either awaiting
     * consensus, or reached consensus in the last 180 seconds
     */
    rpc getTransactionReceipts (Query) returns (Response);

    /**
     * Retrieve the record of a transaction that is either awaiting consensus,
     * or reached consensus in the last 180 seconds
     */
    rpc getTxRecordByTxID (Query) returns (Response);
}
