# 0G DA Node

## 0G DA Node Setup

```yaml
# Current version used in doc
Binary: server
Version: 1.1.2
Service Name: 0gda.service
```

#### ⚙️ **Hardware Requirement** <a href="#hardware-requirement" id="hardware-requirement"></a>

```yaml
- Memory: 16 GB
- CPU: 8 cores
- Disk: 1 TB NVME SSD
- Bandwidth: 100 MBps for Download / Upload
```

#### Install dependencies

```bash
sudo apt-get update
sudo apt-get install pkg-config
sudo apt-get install libssl-dev
sudo apt-get install protobuf-compiler
sudo apt-get install clang
sudo apt-get install llvm llvm-dev
```

#### Installation

{% hint style="info" %}
You might encounter an error during compiling. We will use 0xQuark's method to solve the issue.&#x20;
{% endhint %}

```bash
# clone official DA node repo
git clone https://github.com/0glabs/0g-da-node.git
# checkout to latest branch
git checkout tags/v1.1.2 -b v1.1.2
# compile server binanry
cargo build --release
```

#### (Optional) Change paramenter in build.rs if error is encounted during cargo build

```bash
sed -i '/\.protoc_arg("--experimental_allow_proto3_optional")/d' /root/0g-da-node/grpc/build.rs
```

#### Download pre-built parameters

```bash
# run download param script
$HOME/0g-da-node/dev_support/download_params.sh
```

#### Create a copy of config.toml file

```bash
cp $HOME/0g-da-node/config_example.toml $HOME/0g-da-node/config.toml
```

#### Set 0G DA node variables

```bash
# pull variables
JSON_PORT=$(sed -n '/\[json-rpc\]/,/^address/ s/address = "0.0.0.0:\([0-9]*\)".*/\1/p' $HOME/.0gchain/config/app.toml)
ETH_RPC_ENDPOINT=http://$(wget -qO- eth0.me):$JSON_PORT
SOCKET_ADDRESS=http://$(wget -qO- eth0.me):34000

# print variables
echo JSON PORT:$JSON_PORT
echo ETH_RPC_ENDPOINT:$ETH_RPC_ENDPOINT
echo SOCKET_ADDRESS:$SOCKET_ADDRESS
```

#### Export private key temporary

```bash
PRIVATE_KEY=$(0gchaind keys unsafe-export-eth-key $WALLET_NAME)
echo $PRIVATE_KEY
```

#### \[IMPORTANT] Generate BLS key for 0G DA node

remember to save this key as you will be submitting the key to smart contract and will require it to run DA node

```bash
# generate new BLS key
cd $HOME/0g-da-node
cargo run --bin key-gen

#copy the BLS key generated and paste here to set key for next step
read -sp "Enter your extracted bls private key: " BLS_PRIVATE_KEY && echo
```

#### Configure config.toml with variables set

```bash
sed -i "s|eth_rpc_endpoint = .*|eth_rpc_endpoint = \"$ETH_RPC_ENDPOINT\"|" $HOME/0g-da-node/config.toml
sed -i "s|socket_address = .*|socket_address = \"$SOCKET_ADDRESS\"|" $HOME/0g-da-node/config.toml
sed -i "s|da_entrance_address = .*|da_entrance_address = \"0x857C0A28A8634614BB2C96039Cf4a20AFF709Aa9\"|" $HOME/0g-da-node/config.toml
sed -i "s|start_block_number = .*|start_block_number = 940000|" $HOME/0g-da-node/config.toml
sed -i "s|signer_bls_private_key = .*|signer_bls_private_key = \"$BLS_PRIVATE_KEY\"|" $HOME/0g-da-node/config.toml
sed -i "s|signer_eth_private_key = .*|signer_eth_private_key = \"$PRIVATE_KEY\"|" $HOME/0g-da-node/config.toml
```

#### Create 0gda service to run in the background

```bash
sudo tee /etc/systemd/system/0gda.service > /dev/null <<EOF
[Unit]
Description=DA Node
After=network.target
[Service]
User=$HOME
WorkingDirectory=$HOME/0g-da-node/target/release
ExecStart=$HOME/0g-da-node/target/release/server --config $HOME/0g-da-node/config.toml
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
```

#### Start 0G DA Node

```bash
sudo systemctl daemon-reload && \
sudo systemctl enable 0gda && \
sudo systemctl start 0gda && \
sudo journalctl -u 0gda -f -o cat
```

#### Stop 0G DA node

```bash
sudo systemctl stop 0gda
```

#### Check 0G DA Logs

```bash
sudo journalctl -u 0gda -f -o cat
```

#### Log examples

```yaml
2024-07-31T03:34:24.845407Z  INFO chain_state::da_handler: checking da entrance logs from 468665 to 468665 block..
2024-07-31T03:34:29.868067Z  INFO chain_state::da_handler: checking da entrance logs from 468666 to 468666 block..
2024-07-31T03:34:34.906116Z  INFO chain_state::da_handler: checking da entrance logs from 468667 to 468667 block..
2024-07-31T03:34:39.928655Z  INFO chain_state::da_handler: checking da entrance logs from 468668 to 468668 block..
2024-07-31T03:34:50.031114Z  INFO chain_state::da_handler: checking da entrance logs from 468669 to 468669 block..
2024-07-31T03:34:55.136151Z  INFO chain_state::da_handler: checking da entrance logs from 468670 to 468670 block..
2024-07-31T03:35:00.178691Z  INFO chain_state::da_handler: checking da entrance logs from 468671 to 468671 block..
2024-07-31T03:35:00.186358Z  INFO chain_state::da_handler: new file found, epoch: 81, quorum_id: 0, data_root: [B, 39, D1, 35, BF, 3B, 55, C9, 30, 13, 78, 53, D, 5, 8, C4, 90, 28, C7, 6E, 8A, 2F, 98, DD, 85, FF, 9A, 1, 29, D9, 1C, 84]
2024-07-31T03:35:10.263287Z  INFO chain_state::da_handler: checking da entrance logs from 468672 to 468672 block..
2024-07-31T03:35:15.295832Z  INFO chain_state::da_handler: checking da entrance logs from 468673 to 468673 block..
2024-07-31T03:35:17.616324Z  INFO grpc::service: Received request remote_addr=Some(13.208.209.200:53686)
2024-07-31T03:35:17.622721Z  INFO grpc::service: used 5 ms to deserialize 1 slices.
2024-07-31T03:35:17.685958Z  INFO grpc::service: used 62 ms to verify 1 slices.
2024-07-31T03:35:17.693743Z  INFO grpc::service: responsed in 77 ms
2024-07-31T03:35:20.320293Z  INFO chain_state::da_handler: checking da entrance logs from 468674 to 468674 block..
2024-07-31T03:35:30.367462Z  INFO chain_state::da_handler: checking da entrance logs from 468675 to 468675 block..
2024-07-31T03:35:35.448298Z  INFO chain_state::da_handler: checking da entrance logs from 468676 to 468676 block..
2024-07-31T03:36:26.126599Z  INFO chain_state::da_handler: checking da entrance logs from 468684 to 468684 block..
```

Congratulation you have completed the 0G DA node and we will move on to create [DA Client Node](/node-guides/quick-start/zerogravity-0g/0g-da-client-node.md)


---

# 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.nodecattel.xyz/node-guides/quick-start/zerogravity-0g/0g-da-node.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.
