updated some testnet docs, gen-txs now in the config folder

This commit is contained in:
rigelrozanski 2018-04-26 15:52:20 -04:00
parent 9b645836e3
commit 0f28f6738a
2 changed files with 36 additions and 142 deletions

View File

@ -1,109 +1,33 @@
Testnet Setup
=============
**Note:** THIS DOCUMENT IS OUT OF DATE
See the `installation guide <../sdk/install.html>`__ for details on installation.
Here is a quick example to get you off your feet:
First, generate a new key with a name, and save the address:
First, generate a couple of genesis transactions to be incorparated into the genesis file, this will create two keys with the password ``1234567890``
::
MYNAME=<your name>
gaiacli keys new $MYNAME
gaiad init gen-tx --name=foo --home=$HOME/.gaiad1
gaiad init gen-tx --name=bar --home=$HOME/.gaiad2
gaiacli keys list
MYADDR=<your newly generated address>
Now initialize a gaia chain:
**Note:** If you've already run these tests you may need to overwrite keys using the ``--OWK`` flag
When you list the keys you should see two addresses, we'll need these later so take note.
Now let's actually create the genesis files for both nodes:
::
gaiad init --home=$HOME/.gaiad1
you should see seed phrase for genesis account in the output & config & data folder in the home directory.
In the config folder, there will be the following files: ``config.toml``, ``genesis.json``, ``node_key.json``, and ``priv_validator.json``.
The genesis file should look like this:
::
{
"genesis_time": "0001-01-01T00:00:00Z",
"chain_id": "test-chain-0TRiTa",
"validators": [
{
"pub_key": {
"type": "AC26791624DE60",
"value": "<value>"
},
"power": 10,
"name": ""
}
],
"app_hash": "",
"app_state": {
"accounts": [
{
"address": "<ADDR>",
"coins": [
{
"denom": "steak",
"amount": 9007199254740992
}
]
}
]
}
}
**Note:** We need to change the denomination of token from default to ``steak`` in the genesis file.
Then, recover the genesis account with ``gaiacli``:
::
gaiacli keys add <name> --recover
By now, you have set up the first node. This is great!
We can add a second node on our local machine by initiating a node in a new directory, and copying in the ``genesis.json``:
::
gaiad init --home=$HOME/.gaiad2
and replace the ``genesis.json`` and ``config.toml`` files:
::
cp $HOME/.gaiad/config/genesis.json $HOME/.gaiad2/config
cp $HOME/.gaiad/config/config.toml $HOME/.gaiad2/config
then, get the node id of first node:
::
gaiad show_node_id --home=$HOME/.gaiad1
We need to also modify $HOME/.gaiad2/config.toml to set new seeds and ports. It should look like:
::
proxy_app = "tcp://127.0.0.1:46668"
moniker = "anonymous"
fast_sync = true
db_backend = "leveldb"
log_level = "state:info,*:error"
[rpc]
laddr = "tcp://0.0.0.0:46667"
[p2p]
laddr = "tcp://0.0.0.0:46666"
persistent_peers = "<node1-ID>@0.0.0.0:46656"
cp -a ~/.gaiad2/config/gentx/. ~/.gaiad1/config/gentx/
cp -a ~/.gaiad1/config/gentx/. ~/.gaiad2/config/gentx/
gaiad init --gen-txs --home=$HOME/.gaiad1 --chain-id=test-chain
gaiad init --gen-txs --home=$HOME/.gaiad2 --chain-id=test-chain
**Note:** If you've already run these tests you may need to overwrite genesis using the ``-o`` flag
What we just did is copy the genesis transactions between each of the nodes so there is a common genesis transaction set; then we created both genesis files independantly from each home directory. Importantly both nodes have independantly created their ``genesis.json`` and ``config.toml`` files, which should be identical between nodes.
Great, now that we've initialized the chains, we can start both nodes in the background:
@ -122,25 +46,13 @@ Nice. We can also lookup the validator set:
gaiacli validatorset
There is only **one** validator now. Let's add another one!
First, we need to create a new account:
Then, we try to transfer some ``fermion`` to another account:
::
gaiacli keys new <NAME>
Check that we now have two accounts:
::
gaiacli keys list
Then, we try to transfer some ``steak`` to another account:
::
gaiacli send --amount=1000steak --to=$MYADDR2 --name=$NAME --chain-id=<CHAIN-ID> --node=tcp://localhost:46657 --sequence=0
gaiacli account <FOO-ADDR>
gaiacli account <BAR-ADDR>
gaiacli send --amount=10fermion --to=<BAR-ADDR> --name=foo --chain-id=test-chain --node=tcp://localhost:46657 --sequence=0
**Note:** We need to be careful with the ``chain-id`` and ``sequence``
@ -148,35 +60,7 @@ Check the balance & sequence with:
::
gaiacli account $MYADDR
We can see the balance of ``$MYADDR2`` is 1000 now.
Finally, let's bond the validator in ``$HOME/gaiad2``. Get the pubkey first:
::
cat $HOME/.gaiad2/config/priv_validator.json | jq .pub_key.value
Go to `this website <http://tomeko.net/online_tools/base64.php?lang=en>`__ to change pubkey from base64 to Hex.
Ok, now we can bond some coins to that pubkey:
::
gaiacli bond --stake=1steak --validator=<validator-pubkey-hex> --sequence=0 --chain-id=<chain-id> --name=test
Nice. We can see there are now two validators:
::
gaiacli validatorset
Check the balance of ``$MYADDR2`` to see the difference: it has 1 less ``steak``!
::
gaiacli account $MYADDR2
gaiacli account <BAR-ADDR>
To confirm for certain the new validator is active, check tendermint:
@ -188,6 +72,11 @@ Finally, to relinquish all your power, unbond some coins. You should see your Vo
::
gaiacli unbond --sequence=# --chain-id=<chain-id> --name=test
gaiacli unbond --sequence=1 --chain-id=<chain-id> --name=test
That's it!
**Note:** TODO demonstrate edit-candidacy
**Note:** TODO demonstrate delegation
**Note:** TODO demonstrate unbond of delegation
**Note:** TODO demonstrate unbond candidate

View File

@ -48,7 +48,7 @@ var (
func GenTxCmd(ctx *Context, cdc *wire.Codec, appInit AppInit) *cobra.Command {
cmd := &cobra.Command{
Use: "gen-tx",
Short: "Create genesis transaction file (under [--home]/gentx-[nodeID].json)",
Short: "Create genesis transaction file (under [--home]/config/gentx/gentx-[nodeID].json)",
Args: cobra.NoArgs,
RunE: func(_ *cobra.Command, args []string) error {
@ -85,7 +85,12 @@ func GenTxCmd(ctx *Context, cdc *wire.Codec, appInit AppInit) *cobra.Command {
}
genTxFile := json.RawMessage(bz)
name := fmt.Sprintf("gentx-%v.json", nodeID)
file := filepath.Join(viper.GetString(tmcli.HomeFlag), name)
writePath := filepath.Join(viper.GetString(tmcli.HomeFlag), "config", "gentx")
file := filepath.Join(writePath, name)
err = cmn.EnsureDir(writePath, 0700)
if err != nil {
return err
}
err = cmn.WriteFile(file, bz, 0644)
if err != nil {
return err
@ -144,14 +149,14 @@ func InitCmd(ctx *Context, cdc *wire.Codec, appInit AppInit) *cobra.Command {
var validators []tmtypes.GenesisValidator
var persistentPeers string
genTxsDir := viper.GetString(flagGenTxs)
if genTxsDir != "" {
if viper.GetBool(flagGenTxs) {
genTxsDir := filepath.Join(viper.GetString(tmcli.HomeFlag), "config", "gentx")
validators, appGenTxs, persistentPeers, err = processGenTxs(genTxsDir, cdc, appInit)
if err != nil {
return err
}
config.P2P.PersistentPeers = persistentPeers
configFilePath := filepath.Join(viper.GetString(tmcli.HomeFlag), "config", "config.toml") //TODO this is annoying should be easier to get
configFilePath := filepath.Join(viper.GetString(tmcli.HomeFlag), "config", "config.toml")
cfg.WriteConfigFile(configFilePath, config)
} else {
appGenTx, am, validator, err := appInit.AppGenTx(cdc, pubKey)
@ -194,7 +199,7 @@ func InitCmd(ctx *Context, cdc *wire.Codec, appInit AppInit) *cobra.Command {
}
cmd.Flags().BoolP(flagOverwrite, "o", false, "overwrite the genesis.json file")
cmd.Flags().String(flagChainID, "", "genesis file chain-id, if left blank will be randomly created")
cmd.Flags().String(flagGenTxs, "", "directory containing the genesis transactions")
cmd.Flags().Bool(flagGenTxs, false, "apply genesis transactions from [--home]/config/gentx/")
cmd.Flags().AddFlagSet(appInit.FlagsAppGenState)
cmd.Flags().AddFlagSet(appInit.FlagsAppGenTx) // need to add this flagset for when no GenTx's provided
cmd.AddCommand(GenTxCmd(ctx, cdc, appInit))