# Get Seal

### Summary:

The script queries a smart contract deployed on the Hedera network to retrieve information about a seal using a specific hash. It showcases how to send queries to the smart contract and process the query results.

### 1. Imports and Environment Setup:

```javascript
const {
    Client,
    ContractFunctionParameters,
    ContractCallQuery,
    Hbar, PrivateKey
} = require("@hashgraph/sdk");
require('dotenv').config({ path: 'SmartContract_Service/.env' });
```

* It imports necessary modules from the Hedera JavaScript SDK (`@hashgraph/sdk`) and the `dotenv` module to load environment variables from a `.env` file located in the `SmartContract_Service` directory.

### 2. Environment Variables Retrieval and Validation:

```javascript
const myAccountId = process.env.MY_ACCOUNT_ID;
const myPrivateKey = PrivateKey.fromString(process.env.MY_PRIVATE_KEY);
const contractId = process.env.CONTRACT_ID;
const hash = process.env.HASH;

if (myAccountId == null || myPrivateKey == null) {
    throw new Error("Environment variables myAccountId and myPrivateKey must be present");
}
```

* It retrieves the account ID, private key, contract ID, and hash from the `.env` file.
* It checks whether these variables are present; otherwise, it throws an error.

### 3. Client Setup:

```javascript
const client = Client.forTestnet();
client.setOperator(myAccountId, myPrivateKey);
```

* It creates a client instance for the Hedera testnet and sets the operator account using the user's account ID and private key.

### 4. Main Function:

```javascript
async function main() {
    //Query the contract for the contract message
    const contractCallQuery = new ContractCallQuery()
        .setContractId(contractId)
        .setGas(100000)
        .setFunction("getSeal", new ContractFunctionParameters().addString(hash))
        .setQueryPayment(new Hbar(10));

    const contractQuerySubmit = await contractCallQuery.execute(client);
    const sealedBlock = contractQuerySubmit.getUint256(0);
    const revokedBlock = contractQuerySubmit.getUint256(1);
    const sealOwner = contractQuerySubmit.getAddress(2);

    console.log("The seal was created by the address " + sealOwner + " on block #" + sealedBlock + " and got revoked at block #" +revokedBlock);

    process.exit();
}
```

* It defines the `main()` function, which is the entry point of the script.
* It creates a query to call the `getSeal` function of the smart contract with the provided hash parameter.
* The query is submitted to the Hedera network, and the result is retrieved.
* The sealed block, revoked block, and seal owner are extracted from the query result and logged to the console.

### 5. Execution:

```javascript
main();
```

* This line calls the `main()` function to start the execution of the script.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://abc.bharatblockchain.io/hedera/tutorials/smartcontract-service/get-seal.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
