# Deploy Public Rinkeby Node

### Deploy Rinkeby Node

Rinkeby is a Proof of Authority public Ethereum test network, used by developers to test their dApps.

The following manifest describes an Ethereum node that joins rinkeby network `network: rinkeby`, and uses Hyperledger Besu client `client: besu`:

{% code title="rinkeby.yaml" %}

```yaml
apiVersion: ethereum.kotal.io/v1alpha1
kind: Node
metadata:
  name: rinkeby-besu-node
spec:
  network: rinkeby
  client: besu
```

{% endcode %}

{% hint style="info" %}
Joining any Ethereum network is as easy as setting node's `spec.network` value, which accepts values like `mainnet`, `rinkeby`, `goerli`, `xdai` ... etc. After the node is created, you can't change `spec.network`.
{% endhint %}

Apply `rinkeby.yaml` manifest:

```bash
kubectl apply -f rinkeby.yaml
```

Kotal operator will notice your `rinkeby-besu-node` and will create all the necessary pods, persistent volumes, services, configmaps, and secrets neccessary.

You can fetch the deployed Ethereum `Node` using:

```bash
kubectl get nodes.ethereum
```

It will return an output similar to the following:

```bash
NAME                 CLIENT   Consensus   Network
rinkeby-besu-node    besu     poa         rinkeby
```

### Fetch Node Logs

Get the pods that has been created by Kotal for the node:

```bash
kubectl get pods
```

It will return an output similar to the following:

```bash
NAME                  READY   STATUS    RESTARTS   AGE
rinkeby-besu-node-0   1/1     Running   0          1m
```

{% hint style="info" %}
If pod `STATUS` is `Pending`, most probably it's due to not enough cpu and memory, because Kotal allocates lots of cpu cores and memory for public nodes. The required node resources can be changed using `spec.resources.cpu`, `spec.resources.memory`, and `spec.resources.storage`.
{% endhint %}

Get the logs of the running node:

```bash
kubectl logs -f rinkeby-besu-node-0
```

### Call JSON-RPC Method

Let's update our node by enabling JSON-RPC HTTP server:

{% code title="rinkeby.yaml" %}

```yaml
apiVersion: ethereum.kotal.io/v1alpha1
kind: Node
metadata:
  name: rinkeby-besu-node
spec:
  network: rinkeby
  client: besu
  rpc: true
```

{% endcode %}

{% hint style="info" %}
Kotal defaults node missing spec parameters like:

* JSON-RPC HTTP server port is defaulted to 8545.
* JSON-RPC HTTP server enabled modules are defaulted to: eth, net, and web3.
* Blocks Synchronization mode is defauled to `fast` in public networks.

For a comprehensive reference on Ethereum `Node` and default spec parameter values, check our [ethereum reference](https://docs.kotal.co/reference/ethereum)
{% endhint %}

Apply the new version of `rinkeby.yaml`:

```bash
kubectl apply -f rinkeby.yaml
```

Forward localhost:8545 calls to the node pod:

```bash
kubectl port-forward rinkeby-besu-node-0 8545
```

In another terminal window call `eth_syncing` JSON-RPC method

```bash
curl -X POST -H 'content-type: application/json' --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":32}' http://127.0.0.1:8545
```

You will get JSON result similar to the following:

```json
{
  "jsonrpc" : "2.0",
  "id" : 32,
  "result" : {
    "startingBlock" : "0x0",
    "currentBlock" : "0x1518",
    "highestBlock" : "0x9567a3",
    "pulledStates" : "0x203ca",
    "knownStates" : "0x200636"
  }
}
```

Finally you can delete the node by:

```bash
kubectl delete -f rinkeby.yaml

node.ethereum.kotal.io "rinkeby-besu-node" deleted
```

Kubernetes garbage collector will delete all the resources that has been created by Kotal Ethereum `Node` controller.


---

# 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.kotal.co/tutorials/ethereum/public.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.
