Run Solana Cluster/Node on Akash DeCloud
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?
- Install Akash
- Setup wallet & Fund your account
- Prepare Deployment Config file (SDL file)
- 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:26657akash \
--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: trueprofiles:
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: 10deployment:
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: 10Giplacement:
dc1:
attributes:
datacenter: equinix-metal-ewr1
signedBy:
anyOf:
- "akash1365yvmc4s7awdyj3n2sav7xfx76adc6dnmlx63"
pricing:
solana:
denom: uakt
amount: 10deployment:
solana:
dc1:
profile: solana
count: 1
Thank you for using this guide