update README with previous CLI

This commit is contained in:
Federico Kunze 2018-04-27 17:53:11 -03:00
commit 980a9a5be5
7 changed files with 633 additions and 45 deletions

162
README.md
View File

@ -1,6 +1,94 @@
# Deploy a Testnet
## Starting Gaiad
## Setup
If you're running a full node validator we recommend you to comply with the necessary [technical requirements](https://github.com/cosmos/cosmos/blob/master/VALIDATORS_FAQ.md#technical-requirements). You can check more information regarding validators in our [website](https://cosmos.network/validators) or in the [validator FAQ](https://cosmos.network/resources/validator-faq).
### Install the SDK on a Cloud Server
You can set up a cloud server of your choice to run a non-validator full node.
#### Digital Ocean Droplet
Follow these commands to install the SDK on a Digital Ocean [Droplet](https://www.digitalocean.com/products/droplets/):
```
export PATH=$PATH:/usr/lib/go-1.10/bin
export PATH=$PATH:/root/go/bin
bash <(curl -s https://gist.github.com/melekes/1bd57c73646de97c8f6cbe1b780eb822/raw/2447b0fbf95775852c93a91ed3e12631c7ceb648/install.sh)
nohup ./build/gaiad start &
```
### Software Setup (Manual Installation)
#### Install [GNU Wget](https://www.gnu.org/software/wget/)
**MacOS**
```
brew install wget
```
**Linux**
```
sudo apt-get install wget
```
Note: You can check other available options for downloading `wget` [here](https://www.gnu.org/software/wget/faq.html#download).
#### Install binaries
Cosmos SDK can be installed to `$GOPATH/src/github.com/cosmos/cosmos-sdk` like a normal Go program:
```
go get github.com/cosmos/cosmos-sdk
cd $GOPATH/src/github.com/cosmos/cosmos-sdk
git fetch --all
git checkout 0f2aa6b
make get_tools // run $ make update_tools if already installed
make get_vendor_deps
make install
```
This will install `gaiad` and `gaiacli` and four example binaries: `basecoind`, `basecli`, `democoind`, and `democli`. Verify that everything is OK by running:
```
gaiad version
gaiacli version
```
You should see in both cases:
```
0.15.0-rc0-0f2aa6b
```
### Genesis Setup
Now that we have completed the basic SDK setup, we can start working on the genesis configuration for the chain we want to connect to. Initiliaze `gaiad` :
```
gaiad init
```
You can find the corresponding genesis files [here](https://github.com/cosmos/testnets). Then replace the `genesis.json` and `config.toml` files:
```
wget -O $HOME/.gaiad/config/genesis.json https://raw.githubusercontent.com/cosmos/testnet/master/gaia-4000/genesis.json
wget -O $HOME/.gaiad/config/config.toml https://raw.githubusercontent.com/cosmos/testnet/master/gaia-4000/config.toml
```
Lastly change the `moniker` string in the `config.toml` to identify your node.
```
# A custom human readable name for this node
moniker = "<your_custom_name>"
```
## Running a Full Node
Start the full node:
@ -14,48 +102,57 @@ Check the everything is running smoothly:
gaiacli status
```
## Generate keys
### Generate keys
You'll need a private and public key pair \(a.k.a. `sk, pk` respectively\) to be able to receive funds, send txs, bond tx, etc.
To generate your a new key \(default _ed25519 _elliptic curve\):
To generate your a new key \(default _ed25519_ elliptic curve\):
```
KEYNAME=<set_a_name_for_your_new_key>
gaiacli keys add $KEYNAME
```
Next, you will have to enter a passphrase for your`$KEYNAME`key twice. Save the _seed phrase _in a safe place in case you forget the password.
Next, you will have to enter a passphrase for your `$KEYNAME` key twice. Save the _seed_ _phrase_ in a safe place in case you forget the password.
Now if you check your private keys you will see the `$KEYNAME `key among them:
Now if you check your private keys you will see the `$KEYNAME` key among them with the value of your `address`:
```
gaiacli keys show $KEYNAME
```
You can see your other available keys by typing:
You can see all your other available keys by typing:
```
gaiacli keys list
```
Save your address and pubkey into a variable
Now get your public key by typing:
```
gaiad show_validator
```
You'll get the `value` of your `pk` in `base64` format and the `type` of it
To convert your `pk` to `hex` go to this [website](https://cryptii.com/base64-to-hex) and paste the value of the public key in the left box. On the right, select `Group By: None` to covert it.
Finally, save your address and pubkey into a variable
```
MYADDR=<your_newly_generated_address>
MYPUBKEY=<your_newly_generated_public_key>
```
_IMPORTANT: We strongly recommend to **NOT** use the same passphrase for your different keys. The Tendermint team and the Interchain Foundation will not be responsible for the lost of funds._
**IMPORTANT:** We strongly recommend to **NOT** use the same passphrase for your different keys. The Tendermint team and the Interchain Foundation will not be responsible for the lost of funds.
## Getting Coins
### Getting coins
Go to the faucet in [http://atomexplorer.com/](http://atomexplorer.com/) and claim some coins for your testnet by typing the address of your key, as printed out above.
## Send tokens
### Send tokens
```
gaiacli send --from=$MYADDR --amount=1000fermion --chain-id=<name_of_testnet_chain> --sequence=1 --name=$KEYNAME --to=<destination_address>
gaiacli --amount=1000fermion --chain-id=<name_of_testnet_chain> --sequence=1 --name=$KEYNAME --to=<destination_address>
```
The `--amount` flag defines the corresponding amount of the coin in the format `--amount=<value|coin_name>`
@ -85,67 +182,42 @@ gaiacli send --from=$MYADDR --amount=1000fermion --fee=1fermion --chain-id=<name
### Transfer tokens to other chain
The command to`transfer`tokens to other chain is the same as`send`, we just need to add the`--chain`flag:
The command to `transfer` tokens to other chain is the same as `send`, we just need to add the `--chain` flag:
```
gaiacli transfer --from=$MYADDR --amount=20fermion --chain-id=<name_of_testnet_chain> --chain=<destination_chain> --sequence=1 --name=$KEYNAME --to=<sidechain_destination_address>
gaiacli transfer --amount=20fermion --chain-id=<name_of_testnet_chain> --chain=<destination_chain> --sequence=1 --name=$KEYNAME --to=<sidechain_destination_address>
```
## Staking: Add a Validator
## Become a Validator
Get your public key by typing:
```
gaiad show_validator
```
The returned value is your validator address in hex. This can be used to create a new validator candidate by staking some tokens:
```
gaiacli declare-candidacy --amount=500fermions --pubkey=$PUBKEY --address-candidate=$MYADDR --moniker=satoshi --chain-id=<name_of_the_testnet_chain> --sequence=1 --name=$KEYNAME
```
You can add more information of the validator candidate such as`--website`, `--keybase-sig `or additional`--details`. If you want to edit the candidate info:
```
gaiacli edit-candidacy --details="To the cosmos !" --website="https://cosmos.network"
```
Finally, you can check all the candidate information by typing:
```
gaiacli candidate --address-candidate=$MYADDR --chain-id=<name_of_the_testnet_chain>
```
You can become a validator candidate by staking some tokens:
To check that the validator is active you can find it on the validator set list:
```
basecli validatorset <height>
gaiacli validatorset
```
\*_Note: Remember that to be in the validator set you need to have more total power than the Xnd validator, where X is the assigned size for the validator set \(by default _`X = 100`_\). _
**Note:** Remember that to be in the validator set you need to have more total power than the Xnd validator, where X is the assigned size for the validator set \(by default _`X = 100`_\).
#### Delegating: Bonding and unbonding to a validator
You can delegate \(i.e. bind\) **Atoms** to a validator to obtain a part of its fee revenue in exchange \(the fee token in the Cosmos Hub are **Photons**\).
```
gaiacli delegate --amount=10fermion --address-delegator=$MYADDR --address-candidate=<bonded_validator_address> --shares=MAX --name=$KEYNAME --chain-id=<name_of_testnet_chain> --sequence=1
gaiacli bond --stake=10fermion --validator=<bonded_validator_address> --name=$KEYNAME --chain-id=<name_of_testnet_chain> --sequence=1
```
If for any reason the validator misbehaves or you just want to unbond a certain amount of the bonded tokens:
```
gaiacli unbond --address-delegator=$MYADDR --address-candidate=<bonded_validator_address> --shares=MAX --name=$KEYNAME --chain-id=<name_of_testnet_chain> --sequence=1
gaiacli unbond --name=$KEYNAME --chain-id=<name_of_testnet_chain> --sequence=1
```
You can unbond a specific amount of`shares`\(eg:`12.1`\) or all of them \(`MAX`\).
You should now see the unbonded tokens reflected in your balance and in your delegator bond :
You should now see the unbonded tokens reflected in your balance:
```
gaiacli account $MYADDR
gaiacli delegator-bond --address-delegator=$MYADDR --address-candidate=<bonded_validator_address> --chain-id=<name_of_testnet_chain>
```
#### Relaying

170
gaia-4000/config.toml Normal file
View File

@ -0,0 +1,170 @@
# This is a TOML config file.
# For more information, see https://github.com/toml-lang/toml
##### main base config options #####
# TCP or UNIX socket address of the ABCI application,
# or the name of an ABCI application compiled in with the Tendermint binary
proxy_app = "tcp://127.0.0.1:46658"
# A custom human readable name for this node
moniker = "XXX"
# If this node is many blocks behind the tip of the chain, FastSync
# allows them to catchup quickly by downloading blocks in parallel
# and verifying their commits
fast_sync = true
# Database backend: leveldb | memdb
db_backend = "leveldb"
# Database directory
db_path = "data"
# Output level for logging, including package level options
log_level = "main:info,state:info,*:error"
##### additional base config options #####
# Path to the JSON file containing the initial validator set and other meta data
genesis_file = "config/genesis.json"
# Path to the JSON file containing the private key to use as a validator in the consensus protocol
priv_validator_file = "config/priv_validator.json"
# Path to the JSON file containing the private key to use for node authentication in the p2p protocol
node_key_file = "config/node_key.json"
# Mechanism to connect to the ABCI application: socket | grpc
abci = "socket"
# TCP or UNIX socket address for the profiling server to listen on
prof_laddr = ""
# If true, query the ABCI app on connecting to a new peer
# so the app can decide if we should keep the connection or not
filter_peers = false
##### advanced configuration options #####
##### rpc server configuration options #####
[rpc]
# TCP or UNIX socket address for the RPC server to listen on
laddr = "tcp://0.0.0.0:46657"
# TCP or UNIX socket address for the gRPC server to listen on
# NOTE: This server only supports /broadcast_tx_commit
grpc_laddr = ""
# Activate unsafe RPC commands like /dial_seeds and /unsafe_flush_mempool
unsafe = false
##### peer to peer configuration options #####
[p2p]
# Address to listen for incoming connections
laddr = "tcp://0.0.0.0:46656"
# Comma separated list of seed nodes to connect to
seeds = ""
# Comma separated list of nodes to keep persistent connections to
# Do not add private peers to this list if you don't want them advertised
persistent_peers = "2871265b0b659a75539342577e4d7b301a21c6ec@67.207.71.85:46656,242048f0f71f2a60881913c2e8f8cf4144e0f175@159.65.211.28:46656"
# Path to address book
addr_book_file = "config/addrbook.json"
# Set true for strict address routability rules
addr_book_strict = true
# Time to wait before flushing messages out on the connection, in ms
flush_throttle_timeout = 100
# Maximum number of peers to connect to
max_num_peers = 50
# Maximum size of a message packet payload, in bytes
max_packet_msg_payload_size = 1024
# Rate at which packets can be sent, in bytes/second
send_rate = 512000
# Rate at which packets can be received, in bytes/second
recv_rate = 512000
# Set true to enable the peer-exchange reactor
pex = true
# Seed mode, in which node constantly crawls the network and looks for
# peers. If another node asks it for addresses, it responds and disconnects.
#
# Does not work if the peer-exchange reactor is disabled.
seed_mode = false
# Authenticated encryption
auth_enc = true
# Comma separated list of peer IDs to keep private (will not be gossiped to other peers)
private_peer_ids = ""
##### mempool configuration options #####
[mempool]
recheck = true
recheck_empty = true
broadcast = true
wal_dir = "data/mempool.wal"
##### consensus configuration options #####
[consensus]
wal_file = "data/cs.wal/wal"
wal_light = false
# All timeouts are in milliseconds
timeout_propose = 3000
timeout_propose_delta = 500
timeout_prevote = 1000
timeout_prevote_delta = 500
timeout_precommit = 1000
timeout_precommit_delta = 500
timeout_commit = 1000
# Make progress as soon as we have all the precommits (as if TimeoutCommit = 0)
skip_timeout_commit = false
# BlockSize
max_block_size_txs = 10000
max_block_size_bytes = 1
# EmptyBlocks mode and possible interval between empty blocks in seconds
create_empty_blocks = true
create_empty_blocks_interval = 0
# Reactor sleep duration parameters are in milliseconds
peer_gossip_sleep_duration = 100
peer_query_maj23_sleep_duration = 2000
##### transactions indexer configuration options #####
[tx_index]
# What indexer to use for transactions
#
# Options:
# 1) "null" (default)
# 2) "kv" - the simplest possible indexer, backed by key-value storage (defaults to levelDB; see DBBackend).
indexer = "kv"
# Comma-separated list of tags to index (by default the only tag is tx hash)
#
# It's recommended to index only a subset of tags due to possible memory
# bloat. This is, of course, depends on the indexer's DB and the volume of
# transactions.
index_tags = ""
# When set to true, tells indexer to index all tags. Note this may be not
# desirable (see the comment above). IndexTags has a precedence over
# IndexAllTags (i.e. when given both, IndexTags will be indexed).
index_all_tags = false

148
gaia-4000/genesis.json Normal file
View File

@ -0,0 +1,148 @@
{
"genesis_time": "0001-01-01T00:00:00Z",
"chain_id": "gaia-4000",
"validators": [
{
"pub_key": {
"type": "AC26791624DE60",
"value": "xVpJhOmDiGte+gMqJybHd8B4GDn1lcoA2oanzFhWybI="
},
"power": 1000,
"name": "adrian-67"
},
{
"pub_key": {
"type": "AC26791624DE60",
"value": "aKHNZKaGKoYJysWthvRGwUslEhNr5F5s/RpttUNh5EU="
},
"power": 1000,
"name": "adrian-159"
}
],
"app_hash": "",
"app_state": {
"accounts": [
{
"address": "FD8DA5F512A59A30F8698E3CA638D384A68DF977",
"coins": [
{
"denom": "steak",
"amount": 1000000
},
{
"denom": "adriancoin",
"amount": 33333333
},
{
"denom": "photon",
"amount": 10000000000
}
]
},
{
"address": "D86F1E517FC94401BF3AA5FC5667CCB05A2179DC",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "chriscoin",
"amount": 33333333
}
]
},
{
"address": "BE537272ABBDB84E92908F40685FC04F3F83D036",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "mikecoin",
"amount": 100000
}
]
},
{
"address": "ED25519CD750083D289A4859091A9B6EE43AF91D",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "nickcoin",
"amount": 33333333
}
]
},
{
"address": "5D9C04412AE20040A0A1618B2A8724DAD9BB8700",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "bianjiecoin",
"amount": 33333333
}
]
},
{
"address": "8363D802166CD0A0AEDFF44CF1F7A78CD3F94D6F",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "cybermonies",
"amount": 1337
}
]
},
{
"address": "E1DDCCAAFFECDBEC074947E02F1DEE1CE8C8BA0D",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "linocoin",
"amount": 33333333
}
]
},
{
"address": "94933F0B43263C24422A72D2AB2C2823D1D23662",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "nuevaxcoin",
"amount": 33333333
}
]
},
{
"address": "C446B86801B1B67A46C6FABDE7FC7F448755D83F",
"coins": [
{
"denom": "steak",
"amount": 100
},
{
"denom": "paulcoin",
"amount": 33333333
}
]
}
]
}
}

79
internal-1/adrian.json Normal file
View File

@ -0,0 +1,79 @@
{"chain_id":"internal-1","node_id":"a2dd1751ddcc480710bb06bb3fd93cdb43a62d9f","ip":"94.130.9.167","app_state":{
"accounts": [
{
"address": "0809BCA4DA5C8E44C29FD222AD540842049F1AF6",
"coins": [
{
"denom": "fermion",
"amount": 1000
}
]
}
],
"stake": {
"pool": {
"total_supply": 100,
"bonded_shares": {
"num": 100,
"denom": 1
},
"unbonded_shares": {
"num": 0,
"denom": 1
},
"bonded_pool": 100,
"unbonded_pool": 0,
"inflation_last_time": 0,
"inflation": {
"num": 7,
"denom": 100
}
},
"params": {
"inflation_rate_change": {
"num": 13,
"denom": 100
},
"inflation_max": {
"num": 20,
"denom": 100
},
"inflation_min": {
"num": 7,
"denom": 100
},
"goal_bonded": {
"num": 67,
"denom": 100
},
"max_validators": 100,
"bond_denom": "fermion"
},
"candidates": [
{
"status": 1,
"owner": "0809BCA4DA5C8E44C29FD222AD540842049F1AF6",
"pub_key": {
"type": "AC26791624DE60",
"value": "F5qF1KbyNuCGcUEVNPHOirrQzMPc1j1HeQjnArVWhBU="
},
"assets": {
"num": 100,
"denom": 1
},
"liabilities": {
"num": 0,
"denom": 1
},
"description": {
"moniker": "adrian",
"identity": "",
"website": "",
"details": ""
},
"validator_bond_height": 0,
"validator_bond_counter": 0
}
]
}
},"validators":[{"pub_key":{"type":"AC26791624DE60","value":"F5qF1KbyNuCGcUEVNPHOirrQzMPc1j1HeQjnArVWhBU="},"power":100,"name":""}]}

79
internal-1/rige.json Normal file
View File

@ -0,0 +1,79 @@
{"chain_id":"internal-1","node_id":"be19a7d6c3f8472ad0073b5dcfcbc39f7e0ec9b3","ip":"167.99.160.171","app_state":{
"accounts": [
{
"address": "90A9EF09EEB2A6658F9D5B4617727F2ED51FB59C",
"coins": [
{
"denom": "fermion",
"amount": 1000
}
]
}
],
"stake": {
"pool": {
"total_supply": 100,
"bonded_shares": {
"num": 100,
"denom": 1
},
"unbonded_shares": {
"num": 0,
"denom": 1
},
"bonded_pool": 100,
"unbonded_pool": 0,
"inflation_last_time": 0,
"inflation": {
"num": 7,
"denom": 100
}
},
"params": {
"inflation_rate_change": {
"num": 13,
"denom": 100
},
"inflation_max": {
"num": 20,
"denom": 100
},
"inflation_min": {
"num": 7,
"denom": 100
},
"goal_bonded": {
"num": 67,
"denom": 100
},
"max_validators": 100,
"bond_denom": "fermion"
},
"candidates": [
{
"status": 1,
"owner": "90A9EF09EEB2A6658F9D5B4617727F2ED51FB59C",
"pub_key": {
"type": "AC26791624DE60",
"value": "Y+FiWjkDJTIRg1v25LaojD0MCCp37yVNqy6eFgO3Q4U="
},
"assets": {
"num": 100,
"denom": 1
},
"liabilities": {
"num": 0,
"denom": 1
},
"description": {
"moniker": "rigel",
"identity": "",
"website": "",
"details": ""
},
"validator_bond_height": 0,
"validator_bond_counter": 0
}
]
}
},"validators":[{"pub_key":{"type":"AC26791624DE60","value":"Y+FiWjkDJTIRg1v25LaojD0MCCp37yVNqy6eFgO3Q4U="},"power":100,"name":""}]}

20
internal2/cwgoes.json Normal file
View File

@ -0,0 +1,20 @@
{
"node_id": "efeba710629d9a7ace99ffa3c0767fc0079b4dc7",
"ip": "158.69.63.13",
"validator": {
"pub_key": {
"type": "AC26791624DE60",
"value": "DyC8LAqZFmXGkX+hJb0p3iu/oYphvx3JZqHz1VLJ/A0="
},
"power": 100,
"name": ""
},
"app_gen_tx": {
"name": "cwgoes",
"address": "A425870C82ECC0943212A857D1C9D45E0C381C5F",
"pub_key": {
"type": "AC26791624DE60",
"value": "DyC8LAqZFmXGkX+hJb0p3iu/oYphvx3JZqHz1VLJ/A0="
}
}
}

20
internal2/rige.json Normal file
View File

@ -0,0 +1,20 @@
{
"node_id": "03b977aaecb87315fb64d4925c3cd72305129f2a",
"ip": "138.197.161.235",
"validator": {
"pub_key": {
"type": "AC26791624DE60",
"value": "qwQyuWl3e6bx2S6lZpUA8cI/J0I4CrVZPLagFxrFAVc="
},
"power": 100,
"name": ""
},
"app_gen_tx": {
"name": "rigel",
"address": "B2C472941BA3803E12CD0340047A25F2143AD13B",
"pub_key": {
"type": "AC26791624DE60",
"value": "qwQyuWl3e6bx2S6lZpUA8cI/J0I4CrVZPLagFxrFAVc="
}
}
}