# Using Pre-compiled Binary

## Deploy a PFN using Pre-compiled binary

To deploy a Preferred Full Node (PFN) using pre-compiled binary, follow these steps:

1. Obtain the Endless-Core Software:
   * Using Pre-Compiled Binaries: Download the endless-node pre-compiled binary from [endless-releases](https://github.com/endless-labs/endless-release/releases).
2. Prepare Your System:
   * Ensure Executable Access: Place the compiled or downloaded `endless-node` binary in a directory included in your system's executable PATH.
   * Create Directories: Establish a base directory (e.g., `/home/endless/`) and within it, create a directory for your full node, such as `/home/endless/mainnet` for mainnet deployments.
3. Set Up the Full Node Environment

   * Navigate to the base directory and create necessary subdirectories:

   ```bash
   cd `/home/endless/mainnet`
   mkdir -p data genesis config
   ```

   * Download Network Files:

     * For Mainnet:

     ```bash
     curl -o ./genesis/genesis.blob \
        https://raw.githubusercontent.com/endless-labs/endless-release/main/endless-networks/mainnet/genesis.blob
     curl -o ./genesis/genesis_waypoint.txt \
        https://raw.githubusercontent.com/endless-labs/endless-release/main/endless-networks/mainnet/genesis_waypoint.txt
     ```

     * For Testnet:

     ```bash
     curl -o ./genesis/genesis.blob \
        https://raw.githubusercontent.com/endless-labs/endless-release/main/endless-networks/testnet/genesis.blob
     curl -o ./genesis/genesis_waypoint.txt \
        https://raw.githubusercontent.com/endless-labs/endless-release/main/endless-networks/testnet/genesis_waypoint.txt
     ```

     * For Other Networks: Access the appropriate genesis.blob and genesis\_waypoint.txt files from the [endless-networks](https://github.com/endless-labs/endless-release/tree/main/endless-networks) and download them into the genesis directory.
4. Configure the Full Node: Create the Configuration File: In the `config` directory, create a `fullnode.yaml` file. Edit Configuration Settings:

   * Specify the Genesis File Location: Set the path to the downloaded `genesis.blob` by modifying the `execution.genesis_file_location` parameter in `fullnode.yaml`. Ensure it points to the correct location, such as `/home/endless/mainnet/genesis/genesis.blob`.
   * Set the Waypoint File: Update the configuration to reference the `genesis_waypoint.txt` file, ensuring synchronization with the chosen network.
   * Define Data Storage Path: Configure the node to store synchronized blockchain data in the `data` directory you created earlier.

   [Sample configuration for reference](#sample-configuration-of-pfn)
5. Start your local public fullnode by running the below command:

```bash
endless-node --config ./config/fullnode.yaml
```

You have now successfully configured and started running a PFN in the Endless mainnet.

To inspect the current synchronization status by running the below command:

{% code overflow="wrap" %}

```bash
curl http://localhost:8080/v1

{"chain_id":220,"epoch":"16","ledger_version":"427179",...,"node_role":"full_node",...,"block_height":"213270",...}
```

{% endcode %}

The `chain_id` indicates the specific Endless network(current network is `Endless Mainnet`) to which you are connected.

The `epoch` and `block_height` represent the current synchronization progress, with `block_height` continually increasing as new blocks are added.

## Sample Configuration of PFN

A sample `fullnode.yaml` configuration file for typical full node

{% code overflow="wrap" %}

```yaml
base:
   role: "full_node"
   data_dir: "/home/endless/mainnet/data"
   waypoint:
      from_file: "/home/endless/mainnet/genesis/genesis_waypoint.txt"

execution:
   genesis_file_location: "/home/endless/mainnet/genesis/genesis.blob"

full_node_networks:
   - network_id: public
     seed_addrs: 
       0x415ef8d74118495935e60961806f24a8b502072378c73bdd87661d41a486ce1b:
         - /dns/chain-r-1.endless.link/tcp/6182/noise-ik/0x415ef8d74118495935e60961806f24a8b502072378c73bdd87661d41a486ce1b/handshake/0
       0xd8025b203853e3253393c80d8e81184983a4a00dfc23b432112e72ce1f827d69:
         - /dns/chain-r-2.endless.link/tcp/6182/noise-ik/0xd8025b203853e3253393c80d8e81184983a4a00dfc23b432112e72ce1f827d69/handshake/0
       0x52d09187b0bcc2e24f5aea940910ac42a645c231e6c0c9eebc65676350f1e94e:
         - /dns/chain-r-3.endless.link/tcp/6182/noise-ik/0x52d09187b0bcc2e24f5aea940910ac42a645c231e6c0c9eebc65676350f1e94e/handshake/0
       0x40cc7d84ecaf0b4afd364d7d5bb260aa71f31812c4c8f46be6fd68cccaba1d49:
         - /dns/chain-r-4.endless.link/tcp/6182/noise-ik/0x40cc7d84ecaf0b4afd364d7d5bb260aa71f31812c4c8f46be6fd68cccaba1d49/handshake/0
       0x2f9aac167b64843718a362bb2e4188b031ffcec500e80fd17582cde9437ffb07:
         - /dns/chain-r-5.endless.link/tcp/6182/noise-ik/0x2f9aac167b64843718a362bb2e4188b031ffcec500e80fd17582cde9437ffb07/handshake/0
     listen_address: /ip4/0.0.0.0/tcp/6182

api:
   enabled: true
   address: "0.0.0.0:8080"
```

{% endcode %}

{% hint style="info" %}
Don’t want to allow inbound connections?

Override the following if you do not want other PFNs connecting to yours: `listen_address: "/ip4/127.0.0.1/tcp/6182"`
{% endhint %}

### Sample configuration with index GRPC enabled

When user need to integrate `endless node` with `endless indexer`, it's necessary to enable the index GRPC feature on `endless node`.

Please add the following lines to configuration of full node, to enable index GRPC.

```yaml
state_sync:
  state_sync_driver:
    bootstrapping_mode: ExecuteOrApplyFromGenesis
    continuous_syncing_mode: ExecuteTransactionsOrApplyOutputs

storage:
  enable_indexer: true

indexer_grpc:
  enabled: true
  use_data_service_interface: true
  address: "0.0.0.0:50051"  # change to specified ipaddr:port where endless indexer is deployed 
```


---

# 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://docs.endless.link/endless/devbuild/nodes/run-a-public-fullnode/deploy-a-pfn/using-precompiled-binary.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.
