Stride
Table of Content
- Content
- Project Information
- Description
- The PoolPart Testnet
- Submitting Tasks
- Server Requirements
- What is being installed?
- Launch
Project Information
DESCRIPTION
Why build Stride?
The current state of DeFi in the Cosmos ecosystem is underutilized and inefficient. Users are forced to make a tradeoff between staking their tokens for passive yield or participating in DeFi, exposing themselves to greater risk for greater yields.
Many other proof-of-stake ecosystems, including Ethereum and Solana, have staking derivatives to solve this problem. Now, Cosmos does too.
What is Stride?
Stride is a blockchain ("zone") that provides liquidity for staked assets. Using Stride, you can earn both staking and DeFi yields across the Cosmos IBC ecosystem. Stride aim to provide liquid staking for all chains in the Cosmos ecosystem.
Stride is built using Cosmos SDK and Tendermint and created with Ignite. Stride allows users to liquid stake any IBC-compatible cosmos SDK native appchain token. Under the hood, Stride leverages the Inter-Blockchain Communication protocol, Interchain Accounts and Interchain Queries.
Stride is on a mission to deliver the best and safest liquid staking experience to users in Cosmos, allowing you to stake and participate in DeFi.
Stride is the state-of-the-art multichain liquid staking experience! Stride will allow users to liquid stake their assets on any Cosmos chain.
How does Stride Multichain Liquid Staking work?
Stake
Stake your tokens on Stride from any Cosmos chain. See your rewards accumulate in real time. No minimum. It's that simple.
Mint
Receive stTokens when you stake. These can be freely traded, and can be redeemed with Stride at any time to receive your original tokens. (+ staking rewards!)
DeFi
Stride lets you use your staked assets to compound your yield. Continue to earn staking yield, and earn additional yield by lending, LPing, and more. Set your own risk tolerance in Cosmos DeFi.
The PoolPart Testnet
The PoolPart testnet is the Stride Incentivized testnet. To earn rewards on the PoolParty testnet, submit evidences of having completed the following tasks. The goal is stress test the Stride core appchain and module logic.
Note : You do not need to submit your validators (task 10) and relayers (task 7) task, the team will detect that using onchain data.
How To Submit Tasks
Please submit evidence you've completed a task using this SUBMISSION FORM
Use your best judgement to determine what constitutes proof you've completed the task (links to transactions/accounts and writeups are best; screenshots are acceptable but not ideal, other forms of evidence are unlikely to earn you rewards).
Disclaimers
- We will NOT verify your submission is valid until the incentivized testnet has finished.
- The points listed in the task are the max you can earn for completing the task with high quality. Most submissions will earn fewer points for low quality, or no points if they violate the rules.
- You will be asked to prove you own the address associated with the account that completed the task
- You will be asked for several other verifications to prevent sybil attacks.
- Most tasks can only be completed once. Use your judgement (e.g. we will NOT reward you for delegating twice)
Server Requirements
4x CPUs, 8GB RAM,100GB of storage (SSD or NVME), Permanent Internet connection
Recommended Hardware Requirements
4x CPUs, 32GB RAM, 200GB of storage (SSD or NVME), Permanent Internet connection
Recommendations from the team (VPS/VDS/DS):
4 CPUs, 8 GB RAM, 100 GB SSD, Ubuntu 20.04
We've only tested this build on OSX and Linux machines, but we hope to support Windows soon.
What is Being Installed
The project consists of several applications
launch
1. Preparation
sudo apt update && sudo apt upgrade -y sudo apt install curl -y
sudo ufw allow 22 && ufw allow 26656 && ufw allow 26657 && ufw allow 9090 && ufw allow 6060 && ufw allow 1317
sudo ufw enable -y && sudo ufw status
sudo apt install make clang pkg-config libssl-dev build-essential git jq ncdu bsdmainutils htop -y
read -p "Enter node name: " STRIDE_NODENAME
A prompt appears requesting to Enter node name:
Type in your preferred node name
Replace ${STRIDE_NODENAME}
with the name chosen above
echo 'export STRIDE_NODENAME='\"${STRIDE_NODENAME}\" >> $HOME/.bash_profile
echo 'source $HOME/.bashrc' >> $HOME/.bash_profile
wget -O go1.18.4.linux-amd64.tar.gz https://golang.org/dl/go1.18.4.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.18.4.linux-amd64.tar.gz && rm go1.18.4.linux-amd64.tar.gz
Replace ${STRIDE_NODENAME}
with your name as above.
echo 'export GOROOT=/usr/local/go' >> $HOME/.bash_profile echo 'export STRIDE_NODENAME='\"${STRIDE_NODENAME}\" >> $HOME/.bash_profile echo 'export GOPATH=$HOME/go' >> $HOME/.bash_profile echo 'export GO111MODULE=on' >> $HOME/.bash_profile echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' >> $HOME/.bash_profile && . $HOME/.bash_profile go version
2. STRIDE
Before you begin, it's important to see this link
Remove any prior instance of Stride node
rm -rf $HOME/stride && git clone https://github.com/Stride-Labs/stride.git
Install and Build your Stride node
cd stride && git checkout 3cb77a79f74e0b797df5611674c3fbd000dfeaa1 && make build
mv $HOME/stride/build/strided /usr/local/bin/
strided init "$STRIDE_NODENAME" --chain-id=STRIDE-TESTNET-2 --overwrite
replace <Stride_walletName> with your preferred wallet name
strided keys add <Stride_walletName>
Then input your passphrase twice (ensure to always remember this)
Set Max inbound and outbound peers, and filter peers
peers="b61ea4c2c549e24c1a4d2d539b4d569d2ff7dd7b@stride-node1.poolparty.stridenet.co:26656"
sed -i.bak -e "s/^persistent_peers *=.*/persistent_peers = \"$peers\"/" $HOME/.stride/config/config.toml sed -i 's/max_num_inbound_peers =.*/max_num_inbound_peers = 100/g' $HOME/.stride/config/config.toml sed -i 's/max_num_outbound_peers =.*/max_num_outbound_peers = 100/g' $HOME/.stride/config/config.toml sed -i -e "s/^filter_peers *=.*/filter_peers = \"true\"/" $HOME/.stride/config/config.toml
Set Minimum gas Price and External address
external_address=$(wget -qO- eth0.me) sed -i.bak -e "s/^external_address *=.*/external_address = \"$external_address:26656\"/" $HOME/.stride/config/config.toml sed -i.bak -e "s/^minimum-gas-prices *=.*/minimum-gas-prices = \"0.0025ustrd\"/;" ~/.stride/config/app.toml
SEED="c0b278cbfb15674e1949e7e5ae51627cb2a2d0a9@seedv2.poolparty.stridenet.co:26656"
sed -i "s/^seeds *=.*/seeds = \"$SEED\"/;" $HOME/.stride/config/config.toml
pruning="custom" && \ pruning_keep_recent="100" && \ pruning_keep_every="0" && \ pruning_interval="10" && \ sed -i -e "s/^pruning *=.*/pruning = \"$pruning\"/" $HOME/.stride/config/app.toml && \ sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \"$pruning_keep_recent\"/" $HOME/.stride/config/app.toml && \ sed -i -e "s/^pruning-keep-every *=.*/pruning-keep-every = \"$pruning_keep_every\"/" $HOME/.stride/config/app.toml && \ sed -i -e "s/^pruning-interval *=.*/pruning-interval = \"$pruning_interval\"/" $HOME/.stride/config/app.toml
sed -i.bak -e "s/indexer *=.*/indexer = \"null\"/g" $HOME/.stride/config/config.toml
Get the Genesis file and rest the blockchain
wget -O $HOME/.stride/config/genesis.json https://raw.githubusercontent.com/Stride-Labs/testnet/main/poolparty/genesis.json && strided tendermint unsafe-reset-all
wget -O $HOME/.stride/config/addrbook.json https://api.nodes.guru/stride_addrbook.json
echo "[Unit] Description=Strided Node After=network.target [Service] User=$USER Type=simple ExecStart=$(which strided) start Restart=on-failure LimitNOFILE=65535 [Install] WantedBy=multi-user.target" > $HOME/strided.service
sudo mv $HOME/strided.service /etc/systemd/system
sudo tee <<EOF >/dev/null /etc/systemd/journald.conf Storage=persistent EOF
sudo systemctl restart systemd-journald sudo systemctl daemon-reload sudo systemctl enable strided sudo systemctl restart strided
service strided status
status: should show active(running) else, your stride node was not installed properly.
strided q bank balances <wallet addr>
Replace <Stride_walletName>
with your wallet name and Stride_valName
with your preferred validator name.
strided tx staking create-validator --moniker="Stride_valName" --amount=1000000ustrd --fees 300ustrd --pubkey=$(strided tendermint show-validator) --chain-id=STRIDE-TESTNET-2 --commission-max-change-rate=0.01 --commission-max-rate=0.20 --commission-rate=0.10 --min-self-delegation=1 --from=<Stride_walletName> --yes
strided keys show Stride2 --bech val -a
Ensure to Copy and save your validator address
By the end of the Stride Section, you must have saved the following
a.STRIDE_NODENAME
b.Stride_walletName
c.Stride wallet Mnemonics
d.Stride_wallet_address
e.Stride_valName
f.Stride_val address
hint: The name parameters (STRIDE_NODENAME, Stride_walletName, Stride_valName
), will be determined by you while the rest, will be auto-generated.
So you can choose the same name for all the name parameters e.guyourname_stride
before starting the section
Go back to the section to continue
3. Gaia
1. Gaia full node
Before you begin, it's important to see this link
cd $HOME && wget -O gaia.sh https://raw.githubusercontent.com/kj89/testnet_manuals/main/stride/GAIA/gaia.sh && chmod +x gaia.sh && ./gaia.sh
Enter your preferred node name
b. Check your Gaia node status
curl -s localhost:23657/status | jq .result.sync_info
journalctl -u gaiad -f -o cat
source $HOME/.bash_profile
SNAP_RPC1="https://gaia.poolparty.stridenet.co:445" \ && SNAP_RPC2="https://gaia.poolparty.stridenet.co:445" LATEST_HEIGHT=$(curl -s $SNAP_RPC2/block | jq -r .result.block.header.height) \ && BLOCK_HEIGHT=$((LATEST_HEIGHT - 2000)) \ && TRUST_HASH=$(curl -s "$SNAP_RPC2/block?height=$BLOCK_HEIGHT" | jq -r .result.block_id.hash) sed -i.bak -E "s|^(enable[[:space:]]+=[[:space:]]+).*$|\1true| ; \ s|^(rpc_servers[[:space:]]+=[[:space:]]+).*$|\1\"$SNAP_RPC1,$SNAP_RPC2\"| ; \ s|^(trust_height[[:space:]]+=[[:space:]]+).*$|\1$BLOCK_HEIGHT| ; \ s|^(trust_hash[[:space:]]+=[[:space:]]+).*$|\1\"$TRUST_HASH\"|" $HOME/.gaia/config/config.toml gaiad tendermint unsafe-reset-all --home $HOME/.gaia sudo systemctl restart gaiad && journalctl -fu gaiad -o cat
f. To get your node information run
gaiad status 2>&1 | jq .NodeInfo
2. Gaia Wallet
gaiad keys add $WALLET
Ensure to save your wallet information.
Add wallet and valoper address into variables
GAIA_WALLET_ADDRESS=$(gaiad keys show $WALLET -a) GAIA_VALOPER_ADDRESS=$(gaiad keys show $WALLET --bech val -a) echo 'export GAIA_WALLET_ADDRESS='${GAIA_WALLET_ADDRESS} >> $HOME/.bash_profile echo 'export GAIA_VALOPER_ADDRESS='${GAIA_VALOPER_ADDRESS} >> $HOME/.bash_profile source $HOME/.bash_profile
3. Gaia Validator
Replace $GAIA_NODENAME
with your GAIA_NODENAME
gaiad tx staking create-validator \ --amount 1000000uatom \ --from $WALLET \ --commission-max-change-rate "0.01" \ --commission-max-rate "0.2" \ --commission-rate "0.07" \ --min-self-delegation "1" \ --pubkey $(gaiad tendermint show-validator) \ --moniker $GAIA_NODENAME \ --chain-id GAIA
[[ $(gaiad q staking validator $GAIA_VALOPER_ADDRESS -oj | jq -r .consensus_pubkey.key) = $(gaiad status | jq -r .ValidatorInfo.PubKey.value) ]] && echo -e "\n\e[1m\e[32mTrue\e[0m\n" || echo -e "\n\e[1m\e[31mFalse\e[0m\n"
Get your validator address and save.
By the end of the Gaia Section, you must have saved the following
a.GAIA_NODENAME
b.GAIA_val address
c. GAIA wallet address
c. Gaia Mnemonic phrase
hint: The name parameter (GAIA_NODENAME
), will be determined by you while the rest, will be auto-generated.
So you can choose a name for the parameter e.gyourname_Gaia
before starting the section
Go back to the section to continue
4. Fund your wallets
You will need to fund both your Stride and Gaia wallets
Head to the Stride Discord channel, navigate to #token_faucet channel and request for test token. Send the following command to the bot;
Replace <GAIA_WALLET_ADDRESS>
with your save Gaia wallet address
$faucet-atom:<GAIA_WALLET_ADDRESS>
Replace <STRIDE_WALLET_ADDRESS>
with your save Stride wallet address
$faucet-stride:<STRIDE_WALLET_ADDRESS>
Note: Also, the bot is on a slow mode of about 15 minutes. So you will need to wait for 15 minutes after running the first command before you can run the second.
5. Relayer_Setup
1. IBC Relayer (Hermes) Stride & Gaia
Before you begin, it's important to see this link
cd $HOME && mkdir -p $HOME/.hermes/bin
sudo apt update && sudo apt upgrade -y && sudo apt install unzip -y
wget "https://github.com/informalsystems/ibc-rs/releases/download/v0.15.0/hermes-v0.15.0-x86_64-unknown-linux-gnu.tar.gz" tar -C $HOME/.hermes/bin/ -vxzf hermes-v0.15.0-x86_64-unknown-linux-gnu.tar.gz rm hermes-v0.15.0-x86_64-unknown-linux-gnu.tar.gz echo "export PATH=$PATH:$HOME/.hermes/bin" >> $HOME/.bash_profile source $HOME/.bash_profile
2. Installation Configuration
Choose a relayer name and "{RELAYER_NAME}
with it, also replace {STRIDE_WALLET_NAME}
with your stride wallet name.
STRIDE_RPC="stride.stake-take.com" STRIDE_RPC_PORT="26657" STRIDE_GRPC_PORT="9090" STRIDE_CHAIN_ID="STRIDE-TESTNET-2" STRIDE_ACC_PREFIX="stride" STRIDE_DENOM="ustrd" STRIDE_WALLET="{STRIDE_WALLET_NAME}" MEMO_PREFIX="{RELAYER_NAME}"
GAIA_RPC="stride.stake-take.com" GAIA_RPC_PORT="46657" GAIA_GRPC_PORT="9490" GAIA_CHAIN_ID="GAIA" GAIA_ACC_PREFIX="cosmos" GAIA_DENOM="uatom" GAIA_WALLET="wallet"
echo " export STRIDE_CHAIN_ID=${STRIDE_CHAIN_ID} export STRIDE_DENOM=${STRIDE_DENOM} export STRIDE_WALLET=${STRIDE_WALLET} export GAIA_CHAIN_ID=${GAIA_CHAIN_ID} export GAIA_DENOM=${GAIA_DENOM} export GAIA_WALLET=${GAIA_WALLET} export MEMO_PREFIX=${MEMO_PREFIX} " >> $HOME/.bash_profile source $HOME/.bash_profile
echo "[global] log_level = 'info' [mode] [mode.clients] enabled = true refresh = true misbehaviour = true [mode.connections] enabled = false [mode.channels] enabled = false [mode.packets] enabled = true clear_interval = 100 clear_on_start = true tx_confirmation = true [rest] enabled = true host = '0.0.0.0' port = 3000 [telemetry] enabled = true host = '0.0.0.0' port = 3001 [[chains]] id = '$STRIDE_CHAIN_ID' rpc_addr = 'http://$STRIDE_RPC:$STRIDE_RPC_PORT' grpc_addr = 'http://$STRIDE_RPC:$STRIDE_GRPC_PORT' websocket_addr = 'ws://$STRIDE_RPC:$STRIDE_RPC_PORT/websocket' rpc_timeout = '10s' account_prefix = '$STRIDE_ACC_PREFIX' key_name = '$STRIDE_WALLET' store_prefix = 'ibc' max_tx_size = 100000 max_gas = 20000000 gas_price = { price = 0.001, denom = '$STRIDE_DENOM' } gas_adjustment = 0.1 max_msg_num = 15 clock_drift = '5s' trusting_period = '1days' memo_prefix='$MEMO_PREFIX' trust_threshold = { numerator = '1', denominator = '3' } [[chains]] id = '$GAIA_CHAIN_ID' rpc_addr = 'http://$GAIA_RPC:$GAIA_RPC_PORT' grpc_addr = 'http://$GAIA_RPC:$GAIA_GRPC_PORT' websocket_addr = 'ws://$GAIA_RPC:$GAIA_RPC_PORT/websocket' rpc_timeout = '10s' account_prefix = '$GAIA_ACC_PREFIX' key_name = '$GAIA_WALLET' store_prefix = 'ibc' max_tx_size = 100000 max_gas = 30000000 gas_price = { price = 0.001, denom = '$GAIA_DENOM' } gas_adjustment = 0.1 max_msg_num = 15 clock_drift = '5s' trusting_period = '1days' memo_prefix= '$MEMO_PREFIX' trust_threshold = { numerator = '1', denominator = '3' }" > $HOME/.hermes/config.toml
hermes config validate
By the end of the Relay_setup Section, you must have saved the following
a. RELAYER_NAME
hint: The name parameter (RELAYER_NAME
), will be determined by you.
So you can choose a name for the parameter e.g yourname_relayer
before starting the section
Go back to the section to continue
6. Connect to Hermes
Replace your mnemonic phrase
with your stride wallet mnemonic phrase
hermes keys restore $STRIDE_CHAIN_ID -n $STRIDE_WALLET -m "your mnemonic phrase"
Replace your mnemonic phrase
with your Gaia wallet mnemonic phrase
hermes keys restore $GAIA_CHAIN_ID -n $GAIA_WALLET -m "your mnemonic phrase"
Connecting to the Channel
Enter vars channel from output
HERMES_STRIDE_GAIA_CHANNEL_ID="channel-0" HERMES_GAIA_STRIDE_CHANNEL_ID="channel-0" echo " export HERMES_STRIDE_GAIA_CHANNEL_ID=${HERMES_STRIDE_GAIA_CHANNEL_ID} export HERMES_GAIA_STRIDE_CHANNEL_ID=${HERMES_GAIA_STRIDE_CHANNEL_ID} " >> $HOME/.bash_profile source $HOME/.bash_profile
sudo tee /etc/systemd/system/hermesd.service > /dev/null <<EOF [Unit] Description=HERMES After=network.target [Service] Type=simple User=$USER ExecStart=$(which hermes) start Restart=on-failure RestartSec=5 LimitNOFILE=6000 [Install] WantedBy=multi-user.target EOF
Restart Hermes and run logs
sudo systemctl daemon-reload sudo systemctl enable hermesd sudo systemctl restart hermesd && journalctl -u hermesd -f
7. Perform a Transaction
A. Send tokens to Stride wallet
strided tx ibc-transfer transfer transfer channel-0 YOUR_WALLET_ADDRESS_STRIDE 777ustrd --from=$STRIDE_WALLET --fees 3000ustrd --chain-id $STRIDE_CHAIN_ID
Replace YOUR_WALLET_ADDRESS_STRIDE
with your stride wallet Address; it starts with stride....
gaiad tx ibc-transfer transfer transfer channel-0 YOUR_WALLET_ADDRESS_GAIA 777uatom --from=wallet --fees 3000uatom --chain-id $STRIDE_CHAIN_ID
Replace YOUR_WALLET_ADDRESS_GAIA
with your Gaia wallet Address; it starts with cosmos......
COMPLETING THE TESTNET TASK
Task 6
complete the stake, redeem, and claim flow (including 6hr unbonding)
Before you begin, it's important to see this link
Add liquid stake Liquid stake your ATOM on Stride for stATOM.
Replace <Stride_wallet_address>
with your Stride wallet address from section 2.
strided tx stakeibc liquid-stake 1000 uatom --from <Stride_wallet_address> --chain-id STRIDE-TESTNET-2
put in your wallet passphrase.
Save the txhash of your transaction
After accruing some staking rewards, you can unstake your tokens. Currently, the unbonding period on our Gaia (Cosmos Hub) testnet is around 30 minutes.
Replace <GAIA wallet address>
with your GAIA wallet address from section 3 and <Stride_wallet_address>
with your stride wallet address.
strided tx stakeibc redeem-stake 1 GAIA <GAIA wallet address> --chain-id $STRIDE_CHAIN_ID --from <Stride_wallet_address>
put in your wallet passphrase.
Save the txhash of your transaction
Replace <Stride_wallet_address>
with your stride wallet address
strided q records list-user-redemption-record --limit 10000 --output json | jq '.UserRedemptionRecord | map(select(.sender == "<Stride_wallet_address>"))'
put in your wallet passphrase.
If your record has the attribute isClaimable=true, they're ready to be claimed! Claim tokens After your tokens have unbonded, they can be claimed by triggering the claim process.
strided tx stakeibc claim-undelegated-tokens GAIA "epochNumber" "<Stride_wallet_address>" --chain-id STRIDE-TESTNET-2 --from <GAIA wallet address> -y
put in your wallet passphrase.
Save the txhash of your transaction
On completing Task 6, you should have saved the following
a.txhash stake
b.txhash redeem
c.txhash undelegate
append your txhash after the https://poolparty.stride.zone/STRIDE/tx/ for all the txhash
example: for a txhash stake = BA20085BA299ED6B9C74F5A66A0E82A9DF8557EFA9FF202E8EE74F9F29B7D3CD
https://poolparty.stride.zone/STRIDE/tx/BA20085BA299ED6B9C74F5A66A0E82A9DF8557EFA9FF202E8EE74F9F29B7D3CD
Please submit evidence you've completed a task using this FORM