How to deploy Cosmos LSD stack 
This guide provides a step-by-step script to deploy the Cosmos LSD stack, without knowing details about contracts and services. Read the documentation for comprehensive understandings of these components.
Neutron(ICS-27) LSD Stack 
Step1. Deploy your LSD network contracts 
61 Lab have made StaFi LSAAS for project parties to deploy their LSD network contracts.

Neutron Risks Awareness 
Our Stack, designed for the ICS-27 protocol, utilizes Neutron—first Cosmos chain adopting Replicated Security. As a smart contract platform, like Ethereum which still encounters security issues, Neutron may also face potential security risks. We advise every project party to conduct thorough research and assess these risks before participation.
Parameter Tips 
Connection ID:
- Connection identifier of target chain and Neutron
 
Interchain Account ID:
- An identifier of your pool
 - Must be unique
 - Max 16 characters
 - Not contains Hyphen(-) or Dot(.)
 
Owner Address:
- Adjust commission fee
 - Adjust duration of era
 - Manage validator set
 - Pause or unpause pool
 - Turn on or off LSM feature
 
Fee Receiver
- A neutron address to receive LSD commission fee
 
Fee commission:
- 10% is an reasonable price for most stakers
 
Minimum Stake:
- The smallest amount of assets accept in staking procedure
 
LSD Token Code ID:
- A cw20-base compatible smart contract
 - Recommend to keep default
 - Able to use your own Code ID
 
Validators:
- Pool will delegate assets evenly to every validator
 - Target chain validator address
 
Pool registration fee 
Registration fee is required by Neutron to register an interchain account.
Pool initialization fee 
To prevent malicious or buggy contracts from draining relayer's funds or spamming of the network, Neutron introduces FeeRefunder module similar to ICS-29 but supports wider range of chains. Get a comprehensive view here: Neutron Fee Refunder Module Documentation.
Rewards Distribution 
Rewards distribution is crucial to project parties. Commission fee of users is set default as 10% and StaFi Stack fee is 10% of project income. for example, if 100ATOM rewards received from Cosmos, the distribution will be:
| Role | Amount | Formula | 
|---|---|---|
| Users | 90ATOM | 100ATOM*(1-0.1) | 
| Project | 9ATOM | (100ATOM-90ATOM)*(1-0.1) | 
| StaFi Stack | 1ATOM | 100ATOM-90ATOM-9ATOM | 
Re-edit parameters 
Project parties can use admin account to update parameters by sending transactions to StakeManager.config_pool method with below message:
| Fields | Description | 
|---|---|
| pool_addr | your pool address required  | 
| platform_fee_receiver | a Neutron address to receive commission fee optional  | 
| minimal_stake | minimum amount of token to stake optional  | 
| unstake_times_limit | how many times a staker can unstake optional  | 
| unbond_commission | commission fee of unbonding optional  | 
| platform_fee_commission | commission fee of rewards optional  | 
| era_seconds | how long an era last optional  | 
| paused | is pool active or paused optional  | 
| lsm_support | does pool support LSM stake optional  | 
| lsm_pending_limit | how man LSM stake support in pending status optional  | 
| rate_change_limit | the limit for exchange rate changes from Token to rToken optional  | 
| new_admin | transfer admin role to new address optional  | 
Step2. Run ICQ relay service 
Follow our doc to run ICQ relay service
Step3. Run relay service 
Install Build Tools 
Install make, gcc and git
sudo apt update
sudo apt install -y make gcc git build-essentialsudo apt update
sudo apt install -y make gcc git build-essentialInstall go by following the official docs. Remember to set your $PATH environment variable, for example:
cd $HOME
wget -O go1.22.0.linux-amd64.tar.gz https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz && rm go1.22.0.linux-amd64.tar.gz
echo 'export GOROOT=/usr/local/go' >> $HOME/.bashrc
echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
echo 'export GO111MODULE=on' >> $HOME/.bashrc
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bashrc && . $HOME/.bashrc
go versioncd $HOME
wget -O go1.22.0.linux-amd64.tar.gz https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz && rm go1.22.0.linux-amd64.tar.gz
echo 'export GOROOT=/usr/local/go' >> $HOME/.bashrc
echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
echo 'export GO111MODULE=on' >> $HOME/.bashrc
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bashrc && . $HOME/.bashrc
go versionInstall relay service 
$ git clone https://github.com/stafiprotocol/neutron-lsd-relay.git
$ cd neutron-lsd-relay
$ make install$ git clone https://github.com/stafiprotocol/neutron-lsd-relay.git
$ cd neutron-lsd-relay
$ make installCreate relay working directory and config file 
$ mkdir -p ~/cosmos-neutron-stack
$ cp config.template.toml ~/cosmos-neutron-stack/config.toml$ mkdir -p ~/cosmos-neutron-stack
$ cp config.template.toml ~/cosmos-neutron-stack/config.tomlConfig neutron relay service 
Update config (config.toml) by your favorite editor according to Relay Config
endpointList = ["http://127.0.0.1:26657"]
gasPrice = "0.005untrn"
taskTicker = 60  # seconds
poolAddr = "cosmos1hvuhdvwnsuj487xdcsv4yntn3hlxsmlmp602z4jkq95c20fsp3cshuzjhg"
stakeManager = "neutron1rjr282qjnaeamsps4aspw8gmz4nynjpq6zurxfnppdcknpwdnxgs8rqm8y"
runForEntrustedPool = false
keyringDir = "/home/<your_user_name>/cosmos-neutron-stack/keyring"
keyringBackend = "file"
keyName = "demowallet1"endpointList = ["http://127.0.0.1:26657"]
gasPrice = "0.005untrn"
taskTicker = 60  # seconds
poolAddr = "cosmos1hvuhdvwnsuj487xdcsv4yntn3hlxsmlmp602z4jkq95c20fsp3cshuzjhg"
stakeManager = "neutron1rjr282qjnaeamsps4aspw8gmz4nynjpq6zurxfnppdcknpwdnxgs8rqm8y"
runForEntrustedPool = false
keyringDir = "/home/<your_user_name>/cosmos-neutron-stack/keyring"
keyringBackend = "file"
keyName = "demowallet1"Add or Import account 
You can simply create a new account to submit transactions on neutron
$ neutron-lsd-relay keys add stafi-relay-1 \
    --keyring-backend=file --keyring-dir=~/cosmos-neutron-stack/keyring 
Enter keyring passphrase (attempt 1/3):
- address: neutron1c4ceejzxucas3sp5nvum4f8kr7pdun6wdw3y06
  name: stafi-relay-1
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Au3RxMxljL7CagnKcN/4j63KPRJjuCYhseeimwLVK9/3"}'
  type: local
**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.
youth stairs bronze tree melt coast grass table help lock road gospel quote explain usage retreat present now tragic course balance easy curtain this$ neutron-lsd-relay keys add stafi-relay-1 \
    --keyring-backend=file --keyring-dir=~/cosmos-neutron-stack/keyring 
Enter keyring passphrase (attempt 1/3):
- address: neutron1c4ceejzxucas3sp5nvum4f8kr7pdun6wdw3y06
  name: stafi-relay-1
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"Au3RxMxljL7CagnKcN/4j63KPRJjuCYhseeimwLVK9/3"}'
  type: local
**Important** write this mnemonic phrase in a safe place.
It is the only way to recover your account if you ever forget your password.
youth stairs bronze tree melt coast grass table help lock road gospel quote explain usage retreat present now tragic course balance easy curtain thisOr you can import an exist account, let's say you have just exported from neutrond via neutrond keys --home=$HOME_1 --keyring-backend=test export demowallet1 > demowallet1.privatekey, you can import it to relay:
$ neutron-lsd-relay keys import demowallet1 demowallet1.privatekey \
    --keyring-backend=file --keyring-dir=~/cosmos-neutron-stack/keyring
Enter passphrase to decrypt your key:
Enter keyring passphrase (attempt 1/3):
Re-enter keyring passphrase:
$ neutron-lsd-relay keys list \
    --keyring-backend=file --keyring-dir=~/cosmos-neutron-stack/keyring 
Enter keyring passphrase (attempt 1/3):
- address: neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2
  name: demowallet1
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A/MdHVpitzHNSdD1Zw3kY+L5PEIPyd9l6sD5i4aIfXp9"}'
  type: local$ neutron-lsd-relay keys import demowallet1 demowallet1.privatekey \
    --keyring-backend=file --keyring-dir=~/cosmos-neutron-stack/keyring
Enter passphrase to decrypt your key:
Enter keyring passphrase (attempt 1/3):
Re-enter keyring passphrase:
$ neutron-lsd-relay keys list \
    --keyring-backend=file --keyring-dir=~/cosmos-neutron-stack/keyring 
Enter keyring passphrase (attempt 1/3):
- address: neutron1m9l358xunhhwds0568za49mzhvuxx9ux8xafx2
  name: demowallet1
  pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A/MdHVpitzHNSdD1Zw3kY+L5PEIPyd9l6sD5i4aIfXp9"}'
  type: local⚠️Please make sure the account have enough NEUTRON funds, since relay will send transaction to StakeManager contract.
Start relay services 
$ neutron-lsd-relay start --base-path=~/cosmos-neutron-stack 
config path: /home/ubuntu/cosmos-neutron-stack/config.toml
load config success
log level: info
all logs are output in the /home/ubuntu/cosmos-neutron-stack/log_data directory
INFO[2024-02-23T12:02:30+08:00] cfg: &{EndpointList:[http://127.0.0.1:26657] TaskTicker:60 PoolAddr:cosmos1hvuhdvwnsuj487xdcsv4yntn3hlxsmlmp602z4jkq95c20fsp3cshuzjhg StakeManager:neutron1rjr282qjnaeamsps4aspw8gmz4nynjpq6zurxfnppdcknpwdnxgs8rqm8y GasPrice:0.005untrn LogFilePath:/home/ubuntu/cosmos-neutron-stack/log_data KeyringDir:/home/ubuntu/cosmos-neutron-stack/keyring KeyringBackend:file KeyName:demowallet1 RunForEntrustedPool:false} 
INFO[2024-02-23T12:02:30+08:00] task starting...
Enter keyring passphrase (attempt 1/3):
INFO[2024-02-23T12:02:36+08:00] start handlers                               
INFO[2024-02-23T12:02:36+08:00] success                                       action=NewEraUpdate newEra=84 pool=cosmos1hvuhdvwnsuj487xdcsv4yntn3hlxsmlmp602z4jkq95c20fsp3cshuzjhg targetEra=4647 txHash=010C675FFB313F7FD8B986D1A49688D510C61E9F3D804F4D2D5FF94AFCD13447$ neutron-lsd-relay start --base-path=~/cosmos-neutron-stack 
config path: /home/ubuntu/cosmos-neutron-stack/config.toml
load config success
log level: info
all logs are output in the /home/ubuntu/cosmos-neutron-stack/log_data directory
INFO[2024-02-23T12:02:30+08:00] cfg: &{EndpointList:[http://127.0.0.1:26657] TaskTicker:60 PoolAddr:cosmos1hvuhdvwnsuj487xdcsv4yntn3hlxsmlmp602z4jkq95c20fsp3cshuzjhg StakeManager:neutron1rjr282qjnaeamsps4aspw8gmz4nynjpq6zurxfnppdcknpwdnxgs8rqm8y GasPrice:0.005untrn LogFilePath:/home/ubuntu/cosmos-neutron-stack/log_data KeyringDir:/home/ubuntu/cosmos-neutron-stack/keyring KeyringBackend:file KeyName:demowallet1 RunForEntrustedPool:false} 
INFO[2024-02-23T12:02:30+08:00] task starting...
Enter keyring passphrase (attempt 1/3):
INFO[2024-02-23T12:02:36+08:00] start handlers                               
INFO[2024-02-23T12:02:36+08:00] success                                       action=NewEraUpdate newEra=84 pool=cosmos1hvuhdvwnsuj487xdcsv4yntn3hlxsmlmp602z4jkq95c20fsp3cshuzjhg targetEra=4647 txHash=010C675FFB313F7FD8B986D1A49688D510C61E9F3D804F4D2D5FF94AFCD13447Step4. Deploy your own LSD App 
Follow our doc to deploy your own LSD App
Native CosmWasm LSD Stack 
Coming Soon, Stay tuned