# Generating block producer keys

## 1) Generate node, VRF, and KES keys

```bash
04a_genNodeKeys.sh myPool cli
04b_genVRFKeys.sh myPool cli
04c_genKESKeys.sh myPool cli
04d_genNodeOpCert.sh myPool

ls -al myPool*
```

![](/files/-MTH1dBuxaXH1LlP-G8Z)

## 2) Generate the pool certificate

Run the certificate generation script:

```bash
05a_genStakepoolCert.sh myPool
```

This creates a JSON template (`myPool.pool.json`). Edit it with your pool's details:

```bash
nano myPool.pool.json
```

![](/files/-MTH2H4UDjpUlXeDJxaf)

Example configuration for a single-owner pool:

| Parameter             | Example value                                      |
| --------------------- | -------------------------------------------------- |
| Pledge                | 1,000,000 ADA                                      |
| Fixed fee             | 340 ADA (current minimum)                          |
| Margin                | 5%                                                 |
| Relays                | IP-based: 89.191.111.111:3001, 89.191.111.112:3001 |
| Ticker                | XPOOL                                              |
| Metadata URL          | <https://yoursite.com/pool.metadata.json>          |
| Extended metadata URL | <https://yoursite.com/pool.extended.json>          |

![](/files/-MTH5p12tAKxbthQ9OXU)

After editing, re-run the certificate generation:

```bash
05a_genStakepoolCert.sh myPool
```

![](/files/-MTHA76QuSah8rVLBtA9)

The script creates an extended metadata template. Edit it:

```bash
nano myPool.additional-metadata.json
```

![](/files/-MTHAKJTnFe7_eE6wtkQ)

Run the certificate generation one final time:

```bash
05a_genStakepoolCert.sh myPool
```

![](/files/-MTHAz3k8p09ttoXuDLS)

## 3) Upload metadata files

The script generates two metadata files that **must be uploaded to your web server** before proceeding:

| File                            | Upload to                                         |
| ------------------------------- | ------------------------------------------------- |
| `myPool.metadata.json`          | Your metadata URL (defined in pool.json)          |
| `myPool.extended-metadata.json` | Your extended metadata URL (defined in pool.json) |

Rename and upload them:

```bash
cp myPool.metadata.json pool.metadata.json
cp myPool.extended-metadata.json pool.extended.json
```

Upload via SCP, SFTP, or any method you prefer. Verify the URLs are accessible before continuing.

## 4) Create the delegation certificate

Delegate to your own pool:

```bash
05b_genDelegationCert.sh myPool poolOwner
```

## 5) Fund the pledge address

Send your pledged amount to the `poolOwner.payment` address:

```bash
cat poolOwner.payment.addr
```

![](/files/-MTHGlsQ7xWkZjFx1Rf4)

Send your pledge to this address and verify it has arrived:

```bash
01_queryAddress.sh poolOwner.payment
```

![](/files/-MTHGNpZOGDDzl5i2BOC)

## 6) Register the stake pool on-chain

Register the pool. `myWallet` pays the transaction fee and 500 ADA deposit:

```bash
05c_regStakepoolCert.sh myPool myWallet
```

![](/files/-MTHHgo-cjJwiuTpBYx9)

After registration propagates (minutes to hours), the pool will appear in wallets like Daedalus:

![](/files/-MTHM7RAxihndKNkmkSr)


---

# 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://cardano-node-installation.stakepool247.eu/cardano-block-producer-configuration/generating-cardano-block-producer-keys.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.
