# Running VANA Validator & Deploy Token Contract (EP1) > VANA Testnet **Published by:** [PokoBlue](https://paragraph.com/@pokoblue/) **Published on:** 2024-09-23 **Categories:** vana, testnet, validator, deploy contract, dlp, airdrop **URL:** https://paragraph.com/@pokoblue/run-vana-validator ## Content If you’ve read my previous articles, you’ll know that my magic number for airdrop is any project with $20+ million in funding. Well, here we are: Vana has secured $25 million in Series A funding. With the next bull run, what would you expect in the following funding rounds?Today, I’ll focus on setting up a validator node. The workflow below might look complicated, but trust me — if I can do it, so can you.Long story short:Setup: Install prerequisites, configure MetaMask, and create wallets.DLP Contract: Generate keys, deploy contracts, and configure the DLP.Validator: Register the validator and run it in service mode.Before I begin, I’d like to give a shoutout to Joseph Tran. I’ve learned a lot from his guide: https://service.josephtran.xyz/testnet/vana/installation. It’s always my go-to resource when installing a node.1. Initial setup1.1 Install prerequisitesWe will install git, python, poetry, node.js and npm.#install git curl sudo apt update sudo apt install software-properties-common sudo apt install git curl #install python sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.11 python3.11-venv python3.11-dev #install poetry curl -sSL https://install.python-poetry.org | python3 - echo 'export PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bash_profile source $HOME/.bash_profile poetry --version #install npm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash echo 'export NVM_DIR="$HOME/.nvm"' >> $HOME/.bash_profile echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> $HOME/.bash_profile echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >> $HOME/.bash_profile source $HOME/.bash_profile nvm install --lts node -v npm -vInstalling all these components takes less than 5 minutes. Ensure there are no errors. I always use a fresh virtual machine for each node to avoid package dependency issues. If you’re running multiple nodes on the same machine, be aware of potential conflicts, especially with node and Python versions. Plan accordingly!!!1.2 Install Vana-dlp-chatgpNext, we will install vana-dlp-chatgpt and vana-CLI. It will take about 3-5 minutes depending your internet speed.#close vana-dlp-chatgpt git clone https://github.com/vana-com/vana-dlp-chatgpt.git cd vana-dlp-chatgpt #Install python dependency tool (this is your real life saver) poetry installNext, install node version manager (nvm)# get files curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash #set env variable echo 'export NVM_DIR="$HOME/.nvm"' >> $HOME/.bash_profile echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> $HOME/.bash_profile echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >> $HOME/.bash_profile source $HOME/.bash_profile #install nvm install --lts #check version- node -v npm -vYou should get this:1.3 Install pip & Vana CLIThis part was tricky for me because I did a fresh Python install, which included PEP 668, requiring a virtual environment to manage pip. In short, it’s a more secure approach that helps manage Python in the long run. It seems that pip versions before 22.3.1 don’t have this issue since PEP 668 wasn’t implemented yet. So, if you’re using pip version 22.3.1 or earlier, you can skip straight to the Vana CLI installation command.#This part is option if your pip is V22.3.1 or lower #install venv managed library sudo apt install python3.12-venv #create virtual environment python3 -m venv myenv #Activate source myenv/bin/activateInstall Vana CLIpip install vanaexpected result:1.4 Create WalletWe’ll create coldkey and hotkey wallets using the command line. Afterward, we’ll import them into MetaMask using the private key (not the mnemonic).Coldkey: This will be used for staking.Hotkey: This will be used by the validator to manage transactions.This single command line below will help you create both wallets. vanacli wallet create --wallet.name default --wallet.hotkey default There are two tables showing the mnemonic keys. Write them down offline — do not copy them to any online tools like Notepad, Notion or other cloud services. If you do, I might find your house (joking). But hackers won’t joke — they can easily access and drain your wallet. Imagine you’re eligible for the airdrop, but when you claim it, all the tokens are automatically transferred to a hacker. That’s the last thing I want to happen to anyone.Next, we will export private key of both wallets and restore them in metamask. #Export command vanacli wallet export_private_key Once you enter the command, you’ll need to specify the wallet name and key type.Wallet name: defaultKey type: coldkeyThe command is the same for both cold and hot wallet keys. Just repeat the process for the hot wallet key.Import both cold and hot wallet private key to metamask.Also, add testnet to metamaskNetwork name: Satori TestnetRPC URL: https://rpc.satori.vana.orgChain ID: 14801Currency: VANA1.5 Fund your wallet with VANAFor this step, it is quite easy. Just head over to https://faucet.vana.org to get VANA token. I got 0.5 NAVA every 24hr.2. Create DLP2.1 Create encryption keyIn this process, we’re generating a PGP key pair to encrypt and sign data, which is similar to installing SSL/TLS for securing a website. Just like SSL/TLS secures web traffic using a public/private key pair, PGP does the same for encrypting files or communications, but it’s more general-purpose and not limited to web domains../keygen.shImage below show prompt and output:The output contains two sets of keys: a public key and a private key. Both keys are provided in two formats — readable ASCII and Base64-encoded:public_key.asc: The public key (ASCII format).public_key_base64.asc: The Base64-encoded public key.private_key.asc: The private key (ASCII format).private_key_base64.asc: The Base64-encoded private key.2.2 Deploy contractHere comes the fun part! We’ll install some dependencies, clone, and set up the smart contract for your coin. Now’s the time to start imagining what meme coin name you want to create. “Pokoblue”#Navigate to your home directory cd $HOME #git clone git clone https://github.com/vana-com/vana-dlp-smart-contracts.git #navigate inside smart contract directory cd vana-dlp-smart-contracts #install yarn npm install -g yarn yarn --version yarn installNext, we’ll configure the settings. There’s a sample file called .env.example; simply copy it and rename it to .env to make it a real configuration file#copy file cp .env.example .env #nano nano .envConfig your coldkey wallet public and private key. (step 1.4)Save and exit. Next, we will deploy the contract. Before proceeding, make sure your coldkey wallet has some VANA from the faucet. You’ll need it for gas fees.#deploy contract npx hardhat deploy --network satori --tags DLPDeployWe will use hardhat to deploy contract. Just run the command above. The result should be something like this.Next, we will verify the DLP what we have deployed. (use 2nd address in the pic above)#replace 0x with your address npx hardhat verify --network satori 0x2b0F66D5153026d99cEf7bADADC4E4e987a6a910You will have to verify the Token smart contract also. (1st address in the pic)npx hardhat verify --network satori "" 2.3 Config ABINext, we’ll interact with the contract via the explorer. Visit the following URL and input your contract: url: https://satori.vanascan.io/ Connect your coldkey wallet to the explorer, navigate to the ‘Contract’ tab, and select ‘Write Proxy.’ You’ll interact with two methods (ensure you have enough VANA for gas fees).For the 4.addRewardsForContributors, set the value to 1000000000000000000000000 (1 Million) token.For 24.updateFileRewardDelay, set the value to 0 and click 'Write.' MetaMask will prompt you to sign the transaction.3. Register Validator3.1 Fund Validator with DLP TokensFund the validator with DLP tokens. Using MetaMask, send at least 10 of the tokens you created to both your coldkey and hotkey wallets. For my token, Pokoblue (symbol: PKB), I sent 100,000 PKB. You’ll need to send at least 10 of your own tokens.3.2 Setup .envBefore we runnign the validator, we have to setup the .env file to make thing run properly.#navigate to cd $HOME\vana-dlp-chatgpt #nano nano .envNext, past the following and change the parameters# The network to use, currently Vana Satori testnet OD_CHAIN_NETWORK=satori OD_CHAIN_NETWORK_ENDPOINT=https://rpc.satori.vana.org # Optional: OpenAI API key for additional data quality check # For this OpenAI API key, I get it from chatgpt website. # You might skip this since this is optional in the parameter # OPENAI_API_KEY="YOUR_OPENAI_API_KEY" #Your own DLP smart contract address once deployed to the network, useful for local testing #DataLiquidityPool address DLP_SATORI_CONTRACT="0x......YOUR_DLP_CONTRACT_POOL" #Your own DLP token contract address once deployed to the network, useful for local testing #DataLiquidityPoolToken address DLP_TOKEN_SATORI_CONTRACT="0x.....YOUR_DLP_TOKEN_CONTRACT" # The private key for the DLP # I got it from public_key_base64.asc PRIVATE_FILE_ENCRYPTION_PUBLIC_KEY_BASE64=".............Your Private Key ..............=="3.3 Register Validator#navigate to vana-dlp-chatgpt cd $HOME/vana-dlp-chatgpt #run!!! ./vanacli dlp register_validator --stake_amount 10My Result:#Approve validator ./vanacli dlp approve_validator --validator_address=3.4 Run ValidatorHere the moment of truth. Run this command.poetry run python -m chatgpt.nodes.validatorYou should get this:From the log, if you see ‘INFO — no files to verify,’ that should be normal. At the very least, you should see some successful transactions. Congratulations!3.5 Register the validation in quest:Head over to the website and follow the instructions. I recommend creating a new ChatGPT account since the quest will ask you to input your wallet address in ChatGPT and verify it by exporting data. Then, uploading it in the qeust website. In my case, the exported data was almost 18MB and included all my conversations. For this testing purposes, I prefer not to share that information. Quest: https://dlp-ui.vercel.vana.com/claim/upload After the upload, let wait for verification.That’s all for today. I hope you can successfully run your validator node. If you have any questions or get stuck somewhere, you can head over to Discord, tag me, or ask for help from anyone. Thank you for reading. ## Publication Information - [PokoBlue](https://paragraph.com/@pokoblue/): Publication homepage - [All Posts](https://paragraph.com/@pokoblue/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@pokoblue): Subscribe to updates - [Twitter](https://twitter.com/pokoblue99): Follow on Twitter ## Optional - [Collect as NFT](https://paragraph.com/@pokoblue/run-vana-validator): Support the author by collecting this post - [View Collectors](https://paragraph.com/@pokoblue/run-vana-validator/collectors): See who has collected this post