Run Solana Cluster/Node on Akash DeCloud

Harish Marri
10 min readMay 31, 2021

--

The following article is a walk-through on how to deploy a local minimal solana cluster/node and validator node on the akash decloud .

This Guide works using Ubuntu OS / Most of the Linux Distributions

Used software versions in this guide
Akash : 0.12.1
Solana: 1.16.10

What are we going to do?

  1. Install Akash
  2. Setup wallet & Fund your account
  3. Prepare Deployment Config file (SDL file)
  4. Deploy Solana node on Akash

1. Install Akash

There are multiple ways to install akash
1. install akash from source (requires go 1.16+)
2. download deb package and install (easy way)

AKASH_VERSION=0.12.1

Install From Source

go get -d github.com/ovrclk/akash
cd $GOPATH/src/github.com/ovrclk/akash
git checkout "v$AKASH_VERSION"
make deps-install
make install

Akash is developed and tested with golang 1.16+. Building requires a working golang installation, a properly set GOPATH, and $GOPATH/bin present in $PATH.

Once you have the dependencies properly setup, download and build akash using make install

Install Using Debian Package File

wget https://github.com/ovrclk/akash/releases/download/v${AKASH_VERSION}/akash_${AKASH_VERSION}_linux_amd64.debsudo dpkg -i akash_${AKASH_VERSION}_linux_amd64.deb

akash will be installed at /usr/local/bin/akash. verify installation with below command

akash version

2. Setup Wallet & Fund Your Account

In order to deploy application into akash decloud we need to have akash account with some minimum balance.
we need to create wallet and fund our account first.

To create wallet use below command

akash keys add mykey

Instead of “mykey” you can use any name you want.
After executing above command you will see similar output like this

- name: mykey
type: local
address: akash1cz87pqkad72gggrv3t7y2x9z56h9gqghlnx3j3
pubkey: akashpub1addwnpepqtnydvj056gy64uuquldq5yx7mr8ncmn3ut59wwl9p83d8h2v4rtg5xa3vn
mnemonic: ""
threshold: 0
pubkeys: []
**Important** write this mnemonic phrase in a safe place. It is the only way to recover your account if you ever forget your password.town wolf margin parrot strong disease dance eyebrow inflict meadow crunch version tube elite interest movie uphold column shift fox excuse humble nest call

Important: save mnemonic phrase of your account in a safe place.

Funding your account

For akash mainnet you can purchase tokens and transfer to your account
find information on funding your account here

Check Balance

Use any public rpc node to check your account balance. here we are using
http://135.181.60.250:26657

Find other rpc node details here

ACCOUNT_ADDRESS=akash1cz87pqkad72gggrv3t7y2x9z56h9gqghlnx3j3
AKASH_NODE=http://135.181.60.250:26657
akash \
--node "$AKASH_NODE" \
query bank balances "$AKASH_ACCOUNT_ADDRESS"

3. Prepare Deployment Config file (SDL file)

SDL (Stack Definition Language) is used to setup deployment configuration for container images.
learn more about SDL here

deploy-solana.yml

---
version: "2.0"
services:
solana:
image: solanalabs/solana:v1.6.10
expose:
- port: 8899
as: 80
proto: tcp
to:
- global: true
profiles:
compute:
solana:
resources:
cpu:
units: 2
memory:
size: 4Gi
storage:
size: 10Gi
placement:
dc1:
attributes:
datacenter: equinix-metal-ewr1
signedBy:
anyOf:
- "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"
pricing:
solana:
denom: uakt
amount: 10
deployment:
solana:
dc1:
profile: solana
count: 1

In above configuration using solana version 1.6.10 (latest version)
And choosing hardware
CPU: 2 cores
RAM: 4GB
STORAGE: 10GB

Also selecting specific data center “quinix-meta1-ewr1” with price of 10 uakt per block. (1AKT = 10⁶uakt)

Current hardware isn’t enough. Solana node requires more hardware specification as block count increases.
learn more about solana & it’s hardware requirements here

4. Deploy Solana node on Akash

Setup your environment

AKASH_NODE -Akash network configuration base URL. See here.

AKASH_CHAIN_ID -Chain ID of the Akash network connecting to. See here.

AKASH_ACCOUNT_ADDRESS-The address of your account. See here.

AKASH_KEY_NAME- The name of the key you will be deploying from. See here if you haven’t yet setup a key

AKASH_NODE=http://135.181.60.250:26657
AKASH_CHAIN_ID=akashnet-2
AKASH_ACCOUNT_ADDRESS=akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
AKASH_KEY_NAME=harish-test

To create a deployment, a certificate must first be created once per an account.
To do this, run:

akash tx cert create client --chain-id $AKASH_CHAIN_ID --from $AKASH_KEY_NAME --node $AKASH_NODE --fees 500uakt

You should see a response similar to:

{
"body": {
"messages": [
{
"@type": "/akash.cert.v1beta1.MsgCreateCertificate",
"owner": "akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue",
"cert": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJ3RENDQVdXZ0F3SUJBZ0lJRm1pcUJWcWZDVmt3Q2dZSUtvWkl6ajBFQXdJd1NqRTFNRE1HQTFVRUF4TXMKWVd0aGMyZ3hkbTV6Tld0aE0zZzJPV1ZyYlRObFkzQTRiWGs0WkRWNlpuVTRhakl6Y0RWeFpYY3dkek14RVRBUApCZ1ZuZ1FVQ0JoTUdkakF1TUM0eE1CNFhEVEl4TURNd01qSXpNak15TmxvWERUSXlNRE13TWpJek1qTXlObG93ClNqRTFNRE1HQTFVRUF4TXNZV3RoYzJneGRtNXpOV3RoTTNnMk9XVnJiVE5sWTNBNGJYazRaRFY2Wm5VNGFqSXoKY0RWeFpYY3dkek14RVRBUEJnVm5nUVVDQmhNR....3UmdJaApBSjJzQ3ZodGNzWkRXUkQ2MU03ZkVCRUk5eEt5Z0UzRkd3K2tIYVhZYXl0TUFpRUE4cUZtb3FEc1Z0ZzhPSHc1Ck5iOEljd0hiNHVkc0RpTzRxaWhoL0owNWZKaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
"pubkey": "LS0tLS1CRUdJTiBFQyBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFS1pJOWZYZU9XNEJhdHBxTWZvVVN6THZvTWVYaQppbEZTMnJhZlhKdUNObUlMVjJMaWhIZW5JdjJTNXlTOHVmSHlCY0xJQjloUTVUTzVMdEdJSk93Mi9RPT0KLS0tLS1FTkQgRUMgUFVCTElDIEtFWS0tLS0tCg=="
}
],
"memo": "",
"timeout_height": "0",
"extension_options": [],
"non_critical_extension_options": []
},
"auth_info": {
"signer_infos": [],
"fee": {
"amount": [],
"gas_limit": "200000",
"payer": "",
"granter": ""
}
},
"signatures": []
}

To deploy on Akash, run:

akash tx deployment create deploy-solana.yml --from $AKASH_KEY_NAME --node $AKASH_NODE --chain-id $AKASH_CHAIN_ID --fees 500uakt -b sync -y

You should see similar response like this

{
"height": "0",
"txhash": "CF1CA6F913E50290F8923E27270A78EB26384981729EAEBA0EC815B95909D3C1",
"codespace": "",
"code": 0,
"data": "",
"raw_log": "[]",
"logs": [],
"info": "",
"gas_wanted": "0",
"gas_used": "0",
"tx": null,
"timestamp": ""
}

Note: “-b sync” is tx broadcast option ‘sync’ which means we don’t need to wait for transaction confirmation as soon as we executing command we will get transaction hash. this way we can avoid “Tx not included in block Error”

Now query the the transaction using above txHash

akash q tx \
CF1CA6F913E50290F8923E27270A78EB26384981729EAEBA0EC815B95909D3C1 \
--node $AKASH_NODE

You should see similar response like this

code: 0
codespace: ""
data: 0A130A116372656174652D6465706C6F796D656E74
gas_used: "95627"
gas_wanted: "200000"
height: "1176879"
info: ""
logs:
- events:
- attributes:
- key: module
value: deployment
- key: action
value: deployment-created
- key: version
value: 8885623718829fe48032b604dd42f963cc5c9e946e2ab5633748be80201e2e9e
- key: owner
value: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
- key: dseq
value: "1176876"
- key: module
value: market
- key: action
value: order-created
- key: owner
value: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
- key: dseq
value: "1176876"
- key: gseq
value: "1"
- key: oseq
value: "1"
type: akash.v1
- attributes:
- key: action
value: create-deployment
- key: sender
value: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
- key: sender
value: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
type: message
- attributes:
- key: recipient
value: akash17xpfvakm2amg962yls6f84z3kell8c5lazw8j8
- key: sender
value: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
- key: amount
value: 500uakt
- key: recipient
value: akash14pphss726thpwws3yc458hggufynm9x77l4l2u
- key: sender
value: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
....
....
id:
dseq: "1176876"
owner: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
version: iIViNxiCn+SAMrYE3UL5Y8xcnpRuKrVjN0i+gCAeLp4=
non_critical_extension_options: []
timeout_height: "0"
signatures:
- HLOyQ/XPBOa8V9+lKpvte21eCRKo+WHlT4+T56DZl/xlW/QkQTg7sD8rTy1C11OqWrqEHV+ebw05k1Q0YFod7g==
txhash: CF1CA6F913E50290F8923E27270A78EB26384981729EAEBA0EC815B95909D3C1

Copy DSEQ, OSEQ, GSEQ values from above

AKASH_DSEQ=1176876
AKASH_OSEQ=1
AKASH_GSEQ=1
echo $AKASH_DSEQ $AKASH_OSEQ $AKASH_GSEQ

verify created deployment

akash query deployment get --owner $AKASH_ACCOUNT_ADDRESS \
--node $AKASH_NODE --dseq $AKASH_DSEQ

You should see similar response like this

deployment:
created_at: "1176879"
deployment_id:
dseq: "1176876"
owner: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
state: active
version: iIViNxiCn+SAMrYE3UL5Y8xcnpRuKrVjN0i+gCAeLp4=
escrow_account:
balance:
amount: "5000000"
denom: uakt
id:
scope: deployment
xid: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue/1176876
owner: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
settled_at: "1176879"
state: open
transferred:
amount: "0"
denom: uakt
groups:
- created_at: "1176879"
group_id:
dseq: "1176876"
gseq: 1
owner: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
group_spec:
name: dc1
requirements:
attributes:
- key: datacenter
value: equinix-metal-ewr1
signed_by:
all_of: []
any_of:
- akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63
resources:
- count: 1
price:
amount: "10"
denom: uakt
resources:
cpu:
attributes: []
units:
val: "2000"
endpoints:
- kind: SHARED_HTTP
memory:
attributes: []
quantity:
val: "4294967296"
storage:
attributes: []
quantity:
val: "10737418240"
state: open

make sure deploy state is open

VIew Your Order
After a short time, you should see an order created for this deployment with the following command:

akash query market order get --node $AKASH_NODE \
--owner $AKASH_ACCOUNT_ADDRESS --dseq $AKASH_DSEQ \
--oseq $AKASH_OSEQ --gseq $AKASH_GSEQ

You should see similar response like this

created_at: "1176879"
order_id:
dseq: "1176876"
gseq: 1
oseq: 1
owner: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
spec:
name: dc1
requirements:
attributes:
- key: datacenter
value: equinix-metal-ewr1
signed_by:
all_of: []
any_of:
- akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63
resources:
- count: 1
price:
amount: "10"
denom: uakt
resources:
cpu:
attributes: []
units:
val: "2000"
endpoints:
- kind: SHARED_HTTP
memory:
attributes: []
quantity:
val: "4294967296"
storage:
attributes: []
quantity:
val: "10737418240"
state: open

View Your bids
After a short time, you should see bids from providers for this deployment with the following command:

akash query market bid list --owner=$AKASH_ACCOUNT_ADDRESS \
--node $AKASH_NODE --dseq $AKASH_DSEQ

You should see similar response like this

bids:
- bid:
bid_id:
dseq: "1176876"
gseq: 1
oseq: 1
owner: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
provider: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
created_at: "1176880"
price:
amount: "7"
denom: uakt
state: open
escrow_account:
balance:
amount: "50000000"
denom: uakt
id:
scope: bid
xid: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue/1176876/1/1/akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
owner: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
settled_at: "1176880"
state: open
transferred:
amount: "0"
denom: uakt
pagination:
next_key: null
total: "0"

Now copy the provider address from the bid you want to choose

AKASH_PROVIDER=akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7

Create your lease

Create a lease for the bid from the chosen provider above by running:

akash tx market lease create --chain-id $AKASH_CHAIN_ID \
--node $AKASH_NODE --owner $AKASH_ACCOUNT_ADDRESS \
--dseq $AKASH_DSEQ --gseq $AKASH_GSEQ --oseq $AKASH_OSEQ \
--provider $AKASH_PROVIDER --from $AKASH_KEY_NAME --fees 500uakt

Wait for your lease to list
You can check the status of your lease by running:

akash query market lease list — owner $AKASH_ACCOUNT_ADDRESS — node $AKASH_NODE — dseq $AKASH_DSEQ

You should see similar output like this

leases:
- escrow_payment:
account_id:
scope: deployment
xid: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue/1176876
balance:
amount: "0"
denom: uakt
owner: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
payment_id: 1/1/akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
rate:
amount: "7"
denom: uakt
state: open
withdrawn:
amount: "0"
denom: uakt
lease:
created_at: "1176927"
lease_id:
dseq: "1176876"
gseq: 1
oseq: 1
owner: akash1fmvc9d6ha5j0g82mwetj9l45pqlxk8c8mjjpue
provider: akash1f6gmtjpx4r8qda9nxjwq26fp5mcjyqmaq5m6j7
price:
amount: "7"
denom: uakt
state: active
pagination:
next_key: null
total: "0"

Upload Manifest
Upload the manifest using the below command:

akash provider send-manifest deploy-solana.yml \
--node $AKASH_NODE \
--dseq $AKASH_DSEQ \
--provider $AKASH_PROVIDER \
--from $AKASH_KEY_NAME

You should get empty response for successful execution

Check you lease status

Now that the manifest is uploaded, your image is deployed. You can retrieve the access details by running the below:

akash provider lease-status \
--node $AKASH_NODE \
--dseq $AKASH_DSEQ \
--from $AKASH_KEY_NAME \
--provider $AKASH_PROVIDER

You should see similar response like this

{
"services": {
"solana": {
"name": "solana",
"available": 0,
"total": 1,
"uris": [
"qe4jv8eeo19kjdqrgrs991aic8.ingress.ewr1p0.mainnet.akashian.io"
],
"observed_generation": 1,
"replicas": 1,
"updated_replicas": 1,
"ready_replicas": 0,
"available_replicas": 0
}
},
"forwarded_ports": {}
}

That’s it . Now you have deployed solana cluster on akash

You can also check your applications logs using below command

akash provider lease-logs \
--node "$AKASH_NODE" \
--dseq "$AKASH_DSEQ" \
--gseq "$AKASH_GSEQ" \
--oseq "$AKASH_OSEQ" \
--provider "$AKASH_PROVIDER" \
--from "$AKASH_KEY_NAME"

You should see similar response like this

[solana-6fc476cbbc-krgcd] solana-faucet 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-6fc476cbbc-krgcd] solana-genesis 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-6fc476cbbc-krgcd] solana-keygen 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-6fc476cbbc-krgcd] solana-validator 1.6.10 (src:5d4654d2; feat:3533521759)
[solana-6fc476cbbc-krgcd] + solana address
[solana-6fc476cbbc-krgcd] Error: No such file or directory (os error 2)
[solana-6fc476cbbc-krgcd] + echo Generating default keypair
[solana-6fc476cbbc-krgcd] Generating default keypair
[solana-6fc476cbbc-krgcd] + solana-keygen new --no-passphrase
[solana-6fc476cbbc-krgcd] Generating a new keypair
[solana-6fc476cbbc-krgcd] Wrote new keypair to /root/.config/solana/id.json
[solana-6fc476cbbc-krgcd] ===========================================================================
[solana-6fc476cbbc-krgcd] pubkey: 4E6nJVBkWM6MFP7nW44KfpsvVbqW2e6fPGBapXSoAb2T
[solana-6fc476cbbc-krgcd] ===========================================================================
[solana-6fc476cbbc-krgcd] Save this seed phrase to recover your new keypair:
[solana-6fc476cbbc-krgcd] glare sniff tattoo pave evidence merge edit police piano suffer peace radar
[solana-6fc476cbbc-krgcd] ===========================================================================
[solana-6fc476cbbc-krgcd] + validator_identity=/usr/bin/config/solana-run/validator-identity.json
[solana-6fc476cbbc-krgcd] + [[ -e /usr/bin/config/solana-run/validator-identity.json ]]
[solana-6fc476cbbc-krgcd] + solana-keygen new --no-passphrase -so /usr/bin/config/solana-run/validator-identity.json
[solana-6fc476cbbc-krgcd] Wrote new keypair to /usr/bin/config/solana-run/validator-identity.json
[solana-6fc476cbbc-krgcd] + validator_vote_account=/usr/bin/config/solana-run/validator-vote-account.json
[solana-6fc476cbbc-krgcd] + [[ -e /usr/bin/config/solana-run/validator-vote-account.json ]]
[solana-6fc476cbbc-krgcd] + solana-keygen new --no-passphrase -so /usr/bin/config/solana-run/validator-vote-account.json
[solana-6fc476cbbc-krgcd] Wrote new keypair to /usr/bin/config/solana-run/validator-vote-account.json
[solana-6fc476cbbc-krgcd] + validator_stake_account=/usr/bin/config/solana-run/validator-stake-account.json
[solana-6fc476cbbc-krgcd] + [[ -e /usr/bin/config/solana-run/validator-stake-account.json ]]
[solana-6fc476cbbc-krgcd] + solana-keygen new --no-passphrase -so /usr/bin/config/solana-run/validator-stake-account.json
[solana-6fc476cbbc-krgcd] Wrote new keypair to /usr/bin/config/solana-run/validator-stake-account.json
[solana-6fc476cbbc-krgcd] + [[ -e /usr/bin/config/ledger/genesis.bin ]]
[solana-6fc476cbbc-krgcd] + [[ -e /usr/bin/config/ledger/genesis.tar.bz2 ]]
[solana-6fc476cbbc-krgcd] + ./fetch-spl.sh
[solana-6fc476cbbc-krgcd]
...
...
...

Verify node is running

curl http://qe4jv8eeo19kjdqrgrs991aic8.ingress.ewr1p0.mainnet.akashian.io -X POST -H "Content-Type: application/json" -d '
{"jsonrpc":"2.0","id":1, "method":"getHealth"}
'
{"jsonrpc":"2.0","result":"ok","id":1}

get cluster details

curl http://qe4jv8eeo19kjdqrgrs991aic8.ingress.ewr1p0.mainnet.akashian.io -X POST -H "Content-Type: application/json" -d '
{"jsonrpc":"2.0", "id":1, "method":"getClusterNodes"}
'

{
"jsonrpc": "2.0",
"result": [
{
"featureSet": 3533521759,
"gossip": "127.0.0.1:8001",
"pubkey": "3vjxZaSN2HfPDhjJ7yb267LBSDCmkUwTUSuNeW35sjmf",
"rpc": "127.0.0.1:8899",
"shredVersion": 53249,
"tpu": "127.0.0.1:8003",
"version": "1.6.10"
}
],
"id": 1
}

Updating your deployment

Updating active deployments is a two step process. First, edit your deployment YAML file with the desired changes.
1. update deployment
2. upload modified manifest

akash tx deployment update deploy-solana.yml \
--dseq $AKASH_DSEQ \
--from $AKASH_KEY_NAME \
--chain-id $AKASH_CHAIN_ID \
--node $AKASH_NODE \
--fees=500uakt

upload manifest file to deploy with modified configuration

akash provider send-manifest deploy-solana.yml \
--node $AKASH_NODE \
--from $AKASH_KEY_NAME \
--provider $AKASH_PROVIDER \
--dseq $AKASH_DSEQ \
--log_level info \
--fees=500uakt

Add funds to your deployment

You will eventually need to add funds to the escrow account associated with your deployment to keep it running. If the account becomes overdrawn due to lack of funds, the deployment will permanently close and require you to complete the deploy process again. This in turn will also assign a new, random URI for the deployment.

Deposit additional funds to your escrow account by running:

akash tx deployment deposit 10000uakt \
--from $AKASH_KEY_NAME \
--chain-id $AKASH_CHAIN_ID \
--node $AKASH_NODE \
--dseq $AKASH_DSEQ \
--fees=500uakt

Close your Deployment

When you are done with your application, close the deployment. This will deprovision your container and stop the token transfer. This is a critical step to conserve both your tokens and testnet server capacity.

Close deployment using deployment by creating a deployment-close transaction:

akash tx deployment close \
--node $AKASH_NODE \
--chain-id $AKASH_CHAIN_ID \
--dseq $AKASH_DSEQ \
--owner $AKASH_ACCOUNT_ADDRESS \
--from $AKASH_KEY_NAME -y --fees 500uakt

Running validator node with solana public clusters

You can also run validator node for solana public clusters

choose your cluster here — https://docs.solana.com/clusters

Copy Validator arguments set from preferred cluster
for mainnet-beta

SOLANA_RUN_SH_CLUSTER_TYPE=mainnet-beta
SOLANA_RUN_SH_VALIDATOR_ARGS=(
--trusted-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2
--trusted-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ
--trusted-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ
--trusted-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S
--dynamic-port-range 8000-8010
--no-untrusted-rpc
--private-rpc
--entrypoint entrypoint.mainnet-beta.solana.com:8001
--entrypoint entrypoint2.mainnet-beta.solana.com:8001
--entrypoint entrypoint3.mainnet-beta.solana.com:8001
--entrypoint entrypoint4.mainnet-beta.solana.com:8001
--entrypoint entrypoint5.mainnet-beta.solana.com:8001
--expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d
--wal-recovery-mode skip_any_corrupted_record
--limit-ledger-size
)

and use below SDL file to deploy validator node:

---
version: "2.0"

services:
solana:
image: solanalabs/solana:v1.6.10
expose:
- port: 8899
as: 80
proto: tcp
to:
- global: true
- port: 8000
as: 8000
proto: udp
to:
- global: true
- port: 8001
as: 8001
proto: udp
to:
- global: true
- port: 8002
as: 8002
proto: udp
to:
- global: true
- port: 8003
as: 8003
proto: udp
to:
- global: true
- port: 8004
as: 8004
proto: udp
to:
- global: true
- port: 8005
as: 8005
proto: udp
to:
- global: true
- port: 8006
as: 8006
proto: udp
to:
- global: true
- port: 8007
as: 8007
proto: udp
to:
- global: true
- port: 8008
as: 8008
proto: udp
to:
- global: true
- port: 8009
as: 8009
proto: udp
to:
- global: true
- port: 8010
as: 8010
proto: udp
to:
- global: true
env:
- SOLANA_RUN_SH_CLUSTER_TYPE=mainnet-beta
- SOLANA_RUN_SH_VALIDATOR_ARGS=
--trusted-validator 7Np41oeYqPefeNQEHSv1UDhYrehxin3NStELsSKCT4K2
--trusted-validator GdnSyH3YtwcxFvQrVVJMm1JhTS4QVX7MFsX56uJLUfiZ
--trusted-validator DE1bawNcRJB9rVm3buyMVfr8mBEoyyu73NBovf2oXJsJ
--trusted-validator CakcnaRDHka2gXyfbEd2d3xsvkJkqsLw2akB3zsN1D2S
--dynamic-port-range 8000-8010
--no-untrusted-rpc
--private-rpc
--entrypoint entrypoint.mainnet-beta.solana.com:8001
--entrypoint entrypoint2.mainnet-beta.solana.com:8001
--entrypoint entrypoint3.mainnet-beta.solana.com:8001
--entrypoint entrypoint4.mainnet-beta.solana.com:8001
--entrypoint entrypoint5.mainnet-beta.solana.com:8001
--expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d
--wal-recovery-mode skip_any_corrupted_record
--limit-ledger-size

profiles:
compute:
solana:
resources:
cpu:
units: 2
memory:
size: 4Gi
storage:
size: 10Gi
placement:
dc1:
attributes:
datacenter: equinix-metal-ewr1
signedBy:
anyOf:
- "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"
pricing:
solana:
denom: uakt
amount: 10
deployment:
solana:
dc1:
profile: solana
count: 1

Thank you for using this guide

To learn more about Akash & Solana use below reference links

--

--

Harish Marri

Software Engineer | Programmer | Blockchain & Crypto enthusiast