mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 06:37:26 +00:00 
			
		
		
		
	
						commit
						f41fdb6a72
					
				@ -1,7 +1,8 @@
 | 
			
		||||
vendor/
 | 
			
		||||
Dockerfile
 | 
			
		||||
deployment/
 | 
			
		||||
*.sublime-project
 | 
			
		||||
*.sublime-workspace
 | 
			
		||||
.kvd/
 | 
			
		||||
.kvcli/
 | 
			
		||||
scratch/
 | 
			
		||||
testnets/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -13,10 +13,3 @@
 | 
			
		||||
 | 
			
		||||
# Exclude build files
 | 
			
		||||
vendor
 | 
			
		||||
 | 
			
		||||
# Exclude text editor files
 | 
			
		||||
*.sublime-project
 | 
			
		||||
*.sublime-workspace
 | 
			
		||||
 | 
			
		||||
# Exclude kubernetes secrets
 | 
			
		||||
deployment/secret*.yml
 | 
			
		||||
 | 
			
		||||
@ -16,6 +16,7 @@ RUN go build ./cmd/kvd && go build ./cmd/kvcli
 | 
			
		||||
 | 
			
		||||
# Copy app binary over to small container.
 | 
			
		||||
# Using alpine instad of scratch to aid in debugging and avoid complicated compile
 | 
			
		||||
# note the home directory for alpine is /root/
 | 
			
		||||
FROM alpine
 | 
			
		||||
COPY --from=builder /go/src/github.com/kava-labs/kava/kvd /go/src/github.com/kava-labs/kava/kvcli /usr/bin/
 | 
			
		||||
CMD ["kvd", "start"]
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										409
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										409
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
								
							@ -2,99 +2,150 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:09a7f74eb6bb3c0f14d8926610c87f569c5cff68e978d30e9a3540aeb626fdf0"
 | 
			
		||||
  name = "github.com/bartekn/go-bip39"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "a05967ea095d81c8fe4833776774cfaff8e5036c"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:d6afaeed1502aa28e80a4ed0981d570ad91b2579193404256ce672ed0a609e0d"
 | 
			
		||||
  name = "github.com/beorn7/perks"
 | 
			
		||||
  packages = ["quantile"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "3a771d992973f24aa725d07868b467d1ddfceafb"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:1343a2963481a305ca4d051e84bc2abd16b601ee22ed324f8d605de1adb291b0"
 | 
			
		||||
  name = "github.com/bgentry/speakeasy"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "4aabc24848ce5fd31929f7d1e4ea74d3709c14cd"
 | 
			
		||||
  version = "v0.1.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "github.com/btcsuite/btcd"
 | 
			
		||||
  packages = ["btcec"]
 | 
			
		||||
  revision = "86fed781132ac890ee03e906e4ecd5d6fa180c64"
 | 
			
		||||
  digest = "1:70f6b224a59b2fa453debffa85c77f71063d8754b90c8c4fbad5794e2c382b0f"
 | 
			
		||||
  name = "github.com/brejski/hid"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "06112dcfcc50a7e0e4fd06e17f9791e788fdaafc"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:2c00f064ba355903866cbfbf3f7f4c0fe64af6638cc7d1b8bdcf3181bc67f1d8"
 | 
			
		||||
  name = "github.com/btcsuite/btcd"
 | 
			
		||||
  packages = ["btcec"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "f899737d7f2764dc13e4d01ff00108ec58f766a9"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:386de157f7d19259a7f9c81f26ce011223ce0f090353c1152ffdf730d7d10ac2"
 | 
			
		||||
  name = "github.com/btcsuite/btcutil"
 | 
			
		||||
  packages = ["bech32"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:bb617355120eed649354b41a20d1745b2feb994e4da1a97591259143ad65375a"
 | 
			
		||||
  name = "github.com/cosmos/cosmos-sdk"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "baseapp",
 | 
			
		||||
    "client",
 | 
			
		||||
    "client/context",
 | 
			
		||||
    "client/keys",
 | 
			
		||||
    "client/lcd",
 | 
			
		||||
    "client/rpc",
 | 
			
		||||
    "client/tx",
 | 
			
		||||
    "cmd/gaia/app",
 | 
			
		||||
    "crypto",
 | 
			
		||||
    "crypto/keys",
 | 
			
		||||
    "crypto/keys/bcrypt",
 | 
			
		||||
    "crypto/keys/bip39",
 | 
			
		||||
    "crypto/keys/hd",
 | 
			
		||||
    "server",
 | 
			
		||||
    "server/config",
 | 
			
		||||
    "store",
 | 
			
		||||
    "tests",
 | 
			
		||||
    "types",
 | 
			
		||||
    "version",
 | 
			
		||||
    "wire",
 | 
			
		||||
    "x/auth",
 | 
			
		||||
    "x/auth/client/cli",
 | 
			
		||||
    "x/auth/client/rest",
 | 
			
		||||
    "x/bank",
 | 
			
		||||
    "x/bank/client",
 | 
			
		||||
    "x/bank/client/cli",
 | 
			
		||||
    "x/bank/client/rest",
 | 
			
		||||
    "x/gov",
 | 
			
		||||
    "x/ibc",
 | 
			
		||||
    "x/ibc/client/cli",
 | 
			
		||||
    "x/ibc/client/rest",
 | 
			
		||||
    "x/mock",
 | 
			
		||||
    "x/slashing",
 | 
			
		||||
    "x/slashing/client/cli",
 | 
			
		||||
    "x/stake",
 | 
			
		||||
    "x/stake/client/cli",
 | 
			
		||||
    "x/stake/client/rest"
 | 
			
		||||
    "x/stake/keeper",
 | 
			
		||||
    "x/stake/tags",
 | 
			
		||||
    "x/stake/types",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "c6711810a86f09457481a8dadae899681a9d77ab"
 | 
			
		||||
  version = "v0.19.0"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "23e3d5ac12145c02fcb4b4767d7dfccad782aee5"
 | 
			
		||||
  version = "v0.23.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:a2c1d0e43bd3baaa071d1b9ed72c27d78169b2b269f71c105ac4ba34b1be4a39"
 | 
			
		||||
  name = "github.com/davecgh/go-spew"
 | 
			
		||||
  packages = ["spew"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "346938d642f2ec3594ed81d874461961cd0faa76"
 | 
			
		||||
  version = "v1.1.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:c7644c73a3d23741fdba8a99b1464e021a224b7e205be497271a8003a15ca41b"
 | 
			
		||||
  name = "github.com/ebuchman/fail-test"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "95f809107225be108efcf10a3509e4ea6ceef3c4"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:abeb38ade3f32a92943e5be54f55ed6d6e3b6602761d74b4aab4c9dd45c18abd"
 | 
			
		||||
  name = "github.com/fsnotify/fsnotify"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9"
 | 
			
		||||
  version = "v1.4.7"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:fdf5169073fb0ad6dc12a70c249145e30f4058647bea25f0abd48b6d9f228a11"
 | 
			
		||||
  name = "github.com/go-kit/kit"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "log",
 | 
			
		||||
    "log/level",
 | 
			
		||||
    "log/term"
 | 
			
		||||
    "log/term",
 | 
			
		||||
    "metrics",
 | 
			
		||||
    "metrics/discard",
 | 
			
		||||
    "metrics/internal/lv",
 | 
			
		||||
    "metrics/prometheus",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "4dc7be5d2d12881735283bcab7352178e190fc71"
 | 
			
		||||
  version = "v0.6.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:31a18dae27a29aa074515e43a443abfd2ba6deb6d69309d8d7ce789c45f34659"
 | 
			
		||||
  name = "github.com/go-logfmt/logfmt"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5"
 | 
			
		||||
  version = "v0.3.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:c4a2528ccbcabf90f9f3c464a5fc9e302d592861bbfd0b7135a7de8a943d0406"
 | 
			
		||||
  name = "github.com/go-stack/stack"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc"
 | 
			
		||||
  version = "v1.7.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:35621fe20f140f05a0c4ef662c26c0ab4ee50bca78aa30fe87d33120bd28165e"
 | 
			
		||||
  name = "github.com/gogo/protobuf"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "gogoproto",
 | 
			
		||||
@ -102,49 +153,61 @@
 | 
			
		||||
    "proto",
 | 
			
		||||
    "protoc-gen-gogo/descriptor",
 | 
			
		||||
    "sortkeys",
 | 
			
		||||
    "types"
 | 
			
		||||
    "types",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "1adfc126b41513cc696b209667c8656ea7aac67c"
 | 
			
		||||
  version = "v1.0.0"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "636bf0302bc95575d69441b25a2603156ffdddf1"
 | 
			
		||||
  version = "v1.1.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:17fe264ee908afc795734e8c4e63db2accabaf57326dbf21763a7d6b86096260"
 | 
			
		||||
  name = "github.com/golang/protobuf"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "proto",
 | 
			
		||||
    "ptypes",
 | 
			
		||||
    "ptypes/any",
 | 
			
		||||
    "ptypes/duration",
 | 
			
		||||
    "ptypes/timestamp"
 | 
			
		||||
    "ptypes/timestamp",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "925541529c1fa6821df4e44ce2723319eb2be768"
 | 
			
		||||
  version = "v1.0.0"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265"
 | 
			
		||||
  version = "v1.1.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:4a0c6bb4805508a6287675fac876be2ac1182539ca8a32468d8128882e9d5009"
 | 
			
		||||
  name = "github.com/golang/snappy"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:c79fb010be38a59d657c48c6ba1d003a8aa651fa56b579d959d74573b7dff8e1"
 | 
			
		||||
  name = "github.com/gorilla/context"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "08b5f424b9271eedf6f9f0ce86cb9396ed337a42"
 | 
			
		||||
  version = "v1.1.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:e73f5b0152105f18bc131fba127d9949305c8693f8a762588a82a48f61756f5f"
 | 
			
		||||
  name = "github.com/gorilla/mux"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "e3702bed27f0d39777b0b37b664b6280e8ef8fbf"
 | 
			
		||||
  version = "v1.6.2"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:43dd08a10854b2056e615d1b1d22ac94559d822e1f8b6fcc92c1a1057e85188e"
 | 
			
		||||
  name = "github.com/gorilla/websocket"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "ea4d1f681babbce9545c9c5f3d5194a789c89f5b"
 | 
			
		||||
  version = "v1.2.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:a361611b8c8c75a1091f00027767f7779b29cb37c456a71b8f2604c88057ab40"
 | 
			
		||||
  name = "github.com/hashicorp/hcl"
 | 
			
		||||
  packages = [
 | 
			
		||||
    ".",
 | 
			
		||||
@ -156,126 +219,206 @@
 | 
			
		||||
    "hcl/token",
 | 
			
		||||
    "json/parser",
 | 
			
		||||
    "json/scanner",
 | 
			
		||||
    "json/token"
 | 
			
		||||
    "json/token",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "ef8a98b0bbce4a65b5aa4c368430a80ddc533168"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "github.com/howeyc/crc16"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "2b2a61e366a66d3efb279e46176e7291001e0354"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be"
 | 
			
		||||
  name = "github.com/inconshreveable/mousetrap"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75"
 | 
			
		||||
  version = "v1.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:39b27d1381a30421f9813967a5866fba35dc1d4df43a6eefe3b7a5444cb07214"
 | 
			
		||||
  name = "github.com/jmhodges/levigo"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:a64e323dc06b73892e5bb5d040ced475c4645d456038333883f58934abbf6f72"
 | 
			
		||||
  name = "github.com/kr/logfmt"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:c568d7727aa262c32bdf8a3f7db83614f7af0ed661474b24588de635c20024c7"
 | 
			
		||||
  name = "github.com/magiconair/properties"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "c2353362d570a7bfa228149c62842019201cfb71"
 | 
			
		||||
  version = "v1.8.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:d4d17353dbd05cb52a2a52b7fe1771883b682806f68db442b436294926bbfafb"
 | 
			
		||||
  name = "github.com/mattn/go-isatty"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "0360b2af4f38e8d38c7fce2a9f4e702702d73a39"
 | 
			
		||||
  version = "v0.0.3"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  name = "github.com/mitchellh/mapstructure"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "bb74f1db0675b241733089d5a1faa5dd8b0ef57b"
 | 
			
		||||
  digest = "1:ff5ebae34cfbf047d505ee150de27e60570e8c394b3b8fdbb720ff6ac71985fc"
 | 
			
		||||
  name = "github.com/matttproud/golang_protobuf_extensions"
 | 
			
		||||
  packages = ["pbutil"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c"
 | 
			
		||||
  version = "v1.0.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:5ab79470a1d0fb19b041a624415612f8236b3c06070161a910562f2b2d064355"
 | 
			
		||||
  name = "github.com/mitchellh/mapstructure"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "f15292f7a699fcc1a38a80977f80a046874ba8ac"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:95741de3af260a92cc5c7f3f3061e85273f5a81b5db20d4bd68da74bd521675e"
 | 
			
		||||
  name = "github.com/pelletier/go-toml"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "c01d1270ff3e442a8a57cddc1c92dc1138598194"
 | 
			
		||||
  version = "v1.2.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:40e195917a951a8bf867cd05de2a46aaf1806c50cf92eebf4c16f78cd196f747"
 | 
			
		||||
  name = "github.com/pkg/errors"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "645ef00459ed84a119197bfb8d8205042c6df63d"
 | 
			
		||||
  version = "v0.8.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:0028cb19b2e4c3112225cd871870f2d9cf49b9b4276531f03438a88e94be86fe"
 | 
			
		||||
  name = "github.com/pmezard/go-difflib"
 | 
			
		||||
  packages = ["difflib"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "792786c7400a136282c1664665ae0a8db921c6c2"
 | 
			
		||||
  version = "v1.0.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:c1a04665f9613e082e1209cf288bf64f4068dcd6c87a64bf1c4ff006ad422ba0"
 | 
			
		||||
  name = "github.com/prometheus/client_golang"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "prometheus",
 | 
			
		||||
    "prometheus/promhttp",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "ae27198cdd90bf12cd134ad79d1366a6cf49f632"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:2d5cd61daa5565187e1d96bae64dbbc6080dacf741448e9629c64fd93203b0d4"
 | 
			
		||||
  name = "github.com/prometheus/client_model"
 | 
			
		||||
  packages = ["go"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "5c3871d89910bfb32f5fcab2aa4b9ec68e65a99f"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:63b68062b8968092eb86bedc4e68894bd096ea6b24920faca8b9dcf451f54bb5"
 | 
			
		||||
  name = "github.com/prometheus/common"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "expfmt",
 | 
			
		||||
    "internal/bitbucket.org/ww/goautoneg",
 | 
			
		||||
    "model",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "c7de2306084e37d54b8be01f3541a8464345e9a5"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:8c49953a1414305f2ff5465147ee576dd705487c35b15918fcd4efdc0cb7a290"
 | 
			
		||||
  name = "github.com/prometheus/procfs"
 | 
			
		||||
  packages = [
 | 
			
		||||
    ".",
 | 
			
		||||
    "internal/util",
 | 
			
		||||
    "nfs",
 | 
			
		||||
    "xfs",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "05ee40e3a273f7245e8777337fc7b46e533a9a92"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:c4556a44e350b50a490544d9b06e9fba9c286c21d6c0e47f54f3a9214597298c"
 | 
			
		||||
  name = "github.com/rcrowley/go-metrics"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "e2704e165165ec55d062f5919b4b29494e9fa790"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:bd1ae00087d17c5a748660b8e89e1043e1e5479d0fea743352cda2f8dd8c4f84"
 | 
			
		||||
  name = "github.com/spf13/afero"
 | 
			
		||||
  packages = [
 | 
			
		||||
    ".",
 | 
			
		||||
    "mem"
 | 
			
		||||
    "mem",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "787d034dfe70e44075ccc060d346146ef53270ad"
 | 
			
		||||
  version = "v1.1.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:516e71bed754268937f57d4ecb190e01958452336fa73dbac880894164e91c1f"
 | 
			
		||||
  name = "github.com/spf13/cast"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "8965335b8c7107321228e3e3702cab9832751bac"
 | 
			
		||||
  version = "v1.2.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:645cabccbb4fa8aab25a956cbcbdf6a6845ca736b2c64e197ca7cbb9d210b939"
 | 
			
		||||
  name = "github.com/spf13/cobra"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385"
 | 
			
		||||
  version = "v0.0.3"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:8a020f916b23ff574845789daee6818daf8d25a4852419aae3f0b12378ba432a"
 | 
			
		||||
  name = "github.com/spf13/jwalterweatherman"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "7c0cea34c8ece3fbeb2b27ab9b59511d360fb394"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "14d3d4c518341bea657dd8a226f5121c0ff8c9f2"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:dab83a1bbc7ad3d7a6ba1a1cc1760f25ac38cdf7d96a5cdd55cd915a4f5ceaf9"
 | 
			
		||||
  name = "github.com/spf13/pflag"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "583c0c0531f06d5278b7d917446061adc344b5cd"
 | 
			
		||||
  version = "v1.0.1"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "9a97c102cda95a86cec2345a6f09f55a939babf5"
 | 
			
		||||
  version = "v1.0.2"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:59e7dceb53b4a1e57eb1eb0bf9951ff0c25912df7660004a789b62b4e8cdca3b"
 | 
			
		||||
  name = "github.com/spf13/viper"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "b5e8006cbee93ec955a89ab31e0e3ce3204f3736"
 | 
			
		||||
  version = "v1.0.2"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:7e8d267900c7fa7f35129a2a37596e38ed0f11ca746d6d9ba727980ee138f9f6"
 | 
			
		||||
  name = "github.com/stretchr/testify"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "assert",
 | 
			
		||||
    "require"
 | 
			
		||||
    "require",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686"
 | 
			
		||||
  version = "v1.2.2"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "12b6f73e6084dad08a7c6e575284b177ecafbc71"
 | 
			
		||||
  version = "v1.2.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:b3cfb8d82b1601a846417c3f31c03a7961862cb2c98dcf0959c473843e6d9a2b"
 | 
			
		||||
  name = "github.com/syndtr/goleveldb"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "leveldb",
 | 
			
		||||
@ -289,69 +432,91 @@
 | 
			
		||||
    "leveldb/opt",
 | 
			
		||||
    "leveldb/storage",
 | 
			
		||||
    "leveldb/table",
 | 
			
		||||
    "leveldb/util"
 | 
			
		||||
    "leveldb/util",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "e2150783cd35f5b607daca48afd8c57ec54cc995"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "c4c61651e9e37fa117f53c5a906d3b63090d8445"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:8b7ca9e3745cb049a65364d3adbbab63e98d3c43c83cb101cb450c8dac3c3492"
 | 
			
		||||
  name = "github.com/tendermint/abci"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "client",
 | 
			
		||||
    "example/code",
 | 
			
		||||
    "example/kvstore",
 | 
			
		||||
    "server",
 | 
			
		||||
    "types"
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "ebee2fe114020aa49c70bbbae50b7079fc7e7b90"
 | 
			
		||||
  version = "v0.11.0"
 | 
			
		||||
  packages = ["types"]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "68592f4d8ee34e97db94b7a7976b1309efdb7eb9"
 | 
			
		||||
  version = "v0.10.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:087aaa7920e5d0bf79586feb57ce01c35c830396ab4392798112e8aae8c47722"
 | 
			
		||||
  name = "github.com/tendermint/ed25519"
 | 
			
		||||
  packages = [
 | 
			
		||||
    ".",
 | 
			
		||||
    "edwards25519",
 | 
			
		||||
    "extra25519"
 | 
			
		||||
    "extra25519",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:e9113641c839c21d8eaeb2c907c7276af1eddeed988df8322168c56b7e06e0e1"
 | 
			
		||||
  name = "github.com/tendermint/go-amino"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  revision = "ed62928576cfcaf887209dc96142cd79cdfff389"
 | 
			
		||||
  version = "0.9.9"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "2106ca61d91029c931fd54968c2bb02dc96b1412"
 | 
			
		||||
  version = "0.10.1"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:82f70bfe58f1a55601d469b928aec5b10b1d85710e6adde40dfea8d9adba939d"
 | 
			
		||||
  name = "github.com/tendermint/go-crypto"
 | 
			
		||||
  packages = [
 | 
			
		||||
    ".",
 | 
			
		||||
    "keys",
 | 
			
		||||
    "keys/bcrypt",
 | 
			
		||||
    "keys/words",
 | 
			
		||||
    "keys/words/wordlist"
 | 
			
		||||
    "tmhash",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "915416979bf70efa4bcbf1c6cd5d64c5fff9fc19"
 | 
			
		||||
  version = "v0.6.2"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "6a6b591a3d7592a04b46af95451cb5be3b114f76"
 | 
			
		||||
  version = "v0.9.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:d4a15d404afbf591e8be16fcda7f5ac87948d5c7531f9d909fd84cc730ab16e2"
 | 
			
		||||
  name = "github.com/tendermint/iavl"
 | 
			
		||||
  packages = [
 | 
			
		||||
    ".",
 | 
			
		||||
    "sha256truncated"
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "c9206995e8f948e99927f5084a88a7e94ca256da"
 | 
			
		||||
  version = "v0.8.0-rc0"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "35f66e53d9b01e83b30de68b931f54b2477a94c9"
 | 
			
		||||
  version = "v0.9.2"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:eb0f8bee357e6c28c9ad5fa074545b5085d0dcf580ba0e7024ab8c3285a5c815"
 | 
			
		||||
  name = "github.com/tendermint/tendermint"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "abci/client",
 | 
			
		||||
    "abci/example/code",
 | 
			
		||||
    "abci/example/kvstore",
 | 
			
		||||
    "abci/server",
 | 
			
		||||
    "abci/types",
 | 
			
		||||
    "blockchain",
 | 
			
		||||
    "cmd/tendermint/commands",
 | 
			
		||||
    "config",
 | 
			
		||||
    "consensus",
 | 
			
		||||
    "consensus/types",
 | 
			
		||||
    "crypto",
 | 
			
		||||
    "crypto/armor",
 | 
			
		||||
    "crypto/ed25519",
 | 
			
		||||
    "crypto/encoding/amino",
 | 
			
		||||
    "crypto/merkle",
 | 
			
		||||
    "crypto/secp256k1",
 | 
			
		||||
    "crypto/tmhash",
 | 
			
		||||
    "crypto/xsalsa20symmetric",
 | 
			
		||||
    "evidence",
 | 
			
		||||
    "libs/autofile",
 | 
			
		||||
    "libs/bech32",
 | 
			
		||||
    "libs/cli",
 | 
			
		||||
    "libs/cli/flags",
 | 
			
		||||
    "libs/clist",
 | 
			
		||||
    "libs/common",
 | 
			
		||||
    "libs/db",
 | 
			
		||||
    "libs/events",
 | 
			
		||||
    "libs/flowrate",
 | 
			
		||||
    "libs/log",
 | 
			
		||||
    "libs/pubsub",
 | 
			
		||||
    "libs/pubsub/query",
 | 
			
		||||
    "lite",
 | 
			
		||||
@ -380,30 +545,34 @@
 | 
			
		||||
    "state/txindex/kv",
 | 
			
		||||
    "state/txindex/null",
 | 
			
		||||
    "types",
 | 
			
		||||
    "version"
 | 
			
		||||
    "version",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "27bd1deabe4ba6a2d9b463b8f3e3f1e31b993e61"
 | 
			
		||||
  version = "v0.20.0"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "d542d2c3945116697f60451e6a407082c41c3cc9"
 | 
			
		||||
  version = "v0.22.8"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:68921ddf468c0db04496dc49cc67948f1727a74520b1f1f06100bce5c65fa08b"
 | 
			
		||||
  name = "github.com/tendermint/tmlibs"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "autofile",
 | 
			
		||||
    "bech32",
 | 
			
		||||
    "cli",
 | 
			
		||||
    "cli/flags",
 | 
			
		||||
    "clist",
 | 
			
		||||
    "common",
 | 
			
		||||
    "db",
 | 
			
		||||
    "flowrate",
 | 
			
		||||
    "log",
 | 
			
		||||
    "merkle",
 | 
			
		||||
    "merkle/tmhash"
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "0c98d10b4ffbd87978d79c160e835b3d3df241ec"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "692f1d86a6e2c0efa698fd1e4541b68c74ffaf38"
 | 
			
		||||
  version = "v0.8.4"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:5bd938386bd1f61a581bf8cd6ff2b7b2f79c542929176db4ceb44965440dae07"
 | 
			
		||||
  name = "github.com/zondax/ledger-goclient"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:65a21a9e051d54eb6a3f70c659a765f706a998d9287c302269f4ed8054b2a852"
 | 
			
		||||
  name = "golang.org/x/crypto"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "blowfish",
 | 
			
		||||
@ -413,14 +582,16 @@
 | 
			
		||||
    "nacl/secretbox",
 | 
			
		||||
    "openpgp/armor",
 | 
			
		||||
    "openpgp/errors",
 | 
			
		||||
    "pbkdf2",
 | 
			
		||||
    "poly1305",
 | 
			
		||||
    "ripemd160",
 | 
			
		||||
    "salsa20/salsa"
 | 
			
		||||
    "salsa20/salsa",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "a8fb68e7206f8c78be19b432c58eb52a6aa34462"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "de0752318171da717af4ce24d0a2e8626afaeb11"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:d36f55a999540d29b6ea3c2ea29d71c76b1d9853fdcd3e5c5cb4836f2ba118f1"
 | 
			
		||||
  name = "golang.org/x/net"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "context",
 | 
			
		||||
@ -429,17 +600,22 @@
 | 
			
		||||
    "http2/hpack",
 | 
			
		||||
    "idna",
 | 
			
		||||
    "internal/timeseries",
 | 
			
		||||
    "trace"
 | 
			
		||||
    "netutil",
 | 
			
		||||
    "trace",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "db08ff08e8622530d9ed3a0e8ac279f6d4c02196"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:0316a8ad208917f1d141b077e278980fd5e4594f3a85f835dacbf24d85798252"
 | 
			
		||||
  name = "golang.org/x/sys"
 | 
			
		||||
  packages = ["unix"]
 | 
			
		||||
  revision = "6c888cc515d3ed83fc103cf1d84468aad274b0a7"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "4e1fef5609515ec7a2cee7b5de30ba6d9b438cbf"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18"
 | 
			
		||||
  name = "golang.org/x/text"
 | 
			
		||||
  packages = [
 | 
			
		||||
    "collate",
 | 
			
		||||
@ -455,49 +631,102 @@
 | 
			
		||||
    "unicode/bidi",
 | 
			
		||||
    "unicode/cldr",
 | 
			
		||||
    "unicode/norm",
 | 
			
		||||
    "unicode/rangetable"
 | 
			
		||||
    "unicode/rangetable",
 | 
			
		||||
  ]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
 | 
			
		||||
  version = "v0.3.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  branch = "master"
 | 
			
		||||
  digest = "1:077c1c599507b3b3e9156d17d36e1e61928ee9b53a5b420f10f28ebd4a0b275c"
 | 
			
		||||
  name = "google.golang.org/genproto"
 | 
			
		||||
  packages = ["googleapis/rpc/status"]
 | 
			
		||||
  revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "383e8b2c3b9e36c4076b235b32537292176bae20"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:2dab32a43451e320e49608ff4542fdfc653c95dcc35d0065ec9c6c3dd540ed74"
 | 
			
		||||
  name = "google.golang.org/grpc"
 | 
			
		||||
  packages = [
 | 
			
		||||
    ".",
 | 
			
		||||
    "balancer",
 | 
			
		||||
    "balancer/base",
 | 
			
		||||
    "balancer/roundrobin",
 | 
			
		||||
    "codes",
 | 
			
		||||
    "connectivity",
 | 
			
		||||
    "credentials",
 | 
			
		||||
    "grpclb/grpc_lb_v1/messages",
 | 
			
		||||
    "encoding",
 | 
			
		||||
    "encoding/proto",
 | 
			
		||||
    "grpclog",
 | 
			
		||||
    "internal",
 | 
			
		||||
    "internal/backoff",
 | 
			
		||||
    "internal/channelz",
 | 
			
		||||
    "internal/grpcrand",
 | 
			
		||||
    "keepalive",
 | 
			
		||||
    "metadata",
 | 
			
		||||
    "naming",
 | 
			
		||||
    "peer",
 | 
			
		||||
    "resolver",
 | 
			
		||||
    "resolver/dns",
 | 
			
		||||
    "resolver/passthrough",
 | 
			
		||||
    "stats",
 | 
			
		||||
    "status",
 | 
			
		||||
    "tap",
 | 
			
		||||
    "transport"
 | 
			
		||||
    "transport",
 | 
			
		||||
  ]
 | 
			
		||||
  revision = "5b3c4e850e90a4cf6a20ebd46c8b32a0a3afcb9e"
 | 
			
		||||
  version = "v1.7.5"
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "168a6198bcb0ef175f7dacec0b8691fc141dc9b8"
 | 
			
		||||
  version = "v1.13.0"
 | 
			
		||||
 | 
			
		||||
[[projects]]
 | 
			
		||||
  digest = "1:342378ac4dcb378a5448dd723f0784ae519383532f5e70ade24132c4c8693202"
 | 
			
		||||
  name = "gopkg.in/yaml.v2"
 | 
			
		||||
  packages = ["."]
 | 
			
		||||
  pruneopts = "UT"
 | 
			
		||||
  revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
 | 
			
		||||
  version = "v2.2.1"
 | 
			
		||||
 | 
			
		||||
[solve-meta]
 | 
			
		||||
  analyzer-name = "dep"
 | 
			
		||||
  analyzer-version = 1
 | 
			
		||||
  inputs-digest = "ffb18db87921d091119ab0ab7fa8daaeb76c646d5dbd6796724ff1e8dc41e044"
 | 
			
		||||
  input-imports = [
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/baseapp",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/client",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/client/keys",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/client/rpc",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/client/tx",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/server",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/server/config",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/types",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/version",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/wire",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/auth",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/auth/client/cli",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/bank",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/bank/client/cli",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/gov",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/ibc",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/slashing",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/slashing/client/cli",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/stake",
 | 
			
		||||
    "github.com/cosmos/cosmos-sdk/x/stake/client/cli",
 | 
			
		||||
    "github.com/spf13/cobra",
 | 
			
		||||
    "github.com/spf13/pflag",
 | 
			
		||||
    "github.com/spf13/viper",
 | 
			
		||||
    "github.com/stretchr/testify/assert",
 | 
			
		||||
    "github.com/stretchr/testify/require",
 | 
			
		||||
    "github.com/tendermint/abci/types",
 | 
			
		||||
    "github.com/tendermint/go-crypto",
 | 
			
		||||
    "github.com/tendermint/tendermint/abci/types",
 | 
			
		||||
    "github.com/tendermint/tendermint/crypto",
 | 
			
		||||
    "github.com/tendermint/tendermint/libs/cli",
 | 
			
		||||
    "github.com/tendermint/tendermint/libs/common",
 | 
			
		||||
    "github.com/tendermint/tendermint/libs/db",
 | 
			
		||||
    "github.com/tendermint/tendermint/libs/log",
 | 
			
		||||
    "github.com/tendermint/tendermint/types",
 | 
			
		||||
    "github.com/tendermint/tmlibs/db",
 | 
			
		||||
    "github.com/tendermint/tmlibs/log",
 | 
			
		||||
  ]
 | 
			
		||||
  solver-name = "gps-cdcl"
 | 
			
		||||
  solver-version = 1
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										90
									
								
								Gopkg.toml
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								Gopkg.toml
									
									
									
									
									
								
							@ -1,59 +1,57 @@
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/bgentry/speakeasy"
 | 
			
		||||
#   version = "~0.1.0"
 | 
			
		||||
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/golang/protobuf"
 | 
			
		||||
#   version = "~1.0.0"
 | 
			
		||||
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/mattn/go-isatty"
 | 
			
		||||
#   version = "~0.0.3"
 | 
			
		||||
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/pkg/errors"
 | 
			
		||||
#   version = "~0.8.0"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "github.com/cosmos/cosmos-sdk"
 | 
			
		||||
  version="=0.23.1"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Copied from cosmos-sdk, constraints switched to overrides
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/bgentry/speakeasy"
 | 
			
		||||
  version = "~0.1.0"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/golang/protobuf"
 | 
			
		||||
  version = "=1.1.0"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/mattn/go-isatty"
 | 
			
		||||
  version = "~0.0.3"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/spf13/cobra"
 | 
			
		||||
  version = "~0.0.1"
 | 
			
		||||
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/spf13/viper"
 | 
			
		||||
#   version = "~1.0.0"
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/spf13/viper"
 | 
			
		||||
  version = "~1.0.0"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/pkg/errors"
 | 
			
		||||
  version = "=0.8.0"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/stretchr/testify"
 | 
			
		||||
  version = "~1.2.1"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "github.com/tendermint/abci"
 | 
			
		||||
  version = "=0.11.0"
 | 
			
		||||
 | 
			
		||||
[[constraint]]
 | 
			
		||||
  name = "github.com/tendermint/go-crypto"
 | 
			
		||||
  version = "~0.6.2"
 | 
			
		||||
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/tendermint/go-amino"
 | 
			
		||||
#   version = "=0.9.9"
 | 
			
		||||
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/tendermint/iavl"
 | 
			
		||||
#   version = "0.8.0-rc0"
 | 
			
		||||
 | 
			
		||||
# [[constraint]]
 | 
			
		||||
#   name = "github.com/tendermint/tendermint"
 | 
			
		||||
#   version = "=0.20.0"
 | 
			
		||||
  version = "=1.2.1"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/tendermint/tmlibs"
 | 
			
		||||
  revision = "0c98d10b4ffbd87978d79c160e835b3d3df241ec"
 | 
			
		||||
  name = "github.com/tendermint/go-amino"
 | 
			
		||||
  version = "=0.10.1"
 | 
			
		||||
 | 
			
		||||
# this got updated and broke, so locked to an old working commit ...
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "google.golang.org/genproto"
 | 
			
		||||
  revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200"
 | 
			
		||||
  name = "github.com/tendermint/iavl"
 | 
			
		||||
  version = "=v0.9.2"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/tendermint/tendermint"
 | 
			
		||||
  version = "=v0.22.8"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/bartekn/go-bip39"
 | 
			
		||||
  branch = "master"
 | 
			
		||||
 | 
			
		||||
[[override]]
 | 
			
		||||
  name = "github.com/zondax/ledger-goclient"
 | 
			
		||||
  revision = "39ba4728c137c75718a21f9b4b3280fa31b9139b"
 | 
			
		||||
 | 
			
		||||
[prune]
 | 
			
		||||
  go-tests = true
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										95
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										95
									
								
								README.md
									
									
									
									
									
								
							@ -1,6 +1,97 @@
 | 
			
		||||
# Kava Blockchain
 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
A decentralized fast-finality blockchain for interoperable payment channel networks.
 | 
			
		||||
Building on the work of Tendermint and Interledger.
 | 
			
		||||
 | 
			
		||||
Project status: We're currently in a very early public testnet. With future features being implemented.
 | 
			
		||||
 | 
			
		||||
Try it out - send txs using our public node, or run a full node to sync to the testnet, or even run a validator.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Install
 | 
			
		||||
 | 
			
		||||
### Source
 | 
			
		||||
 | 
			
		||||
Requirements: go installed and set up.
 | 
			
		||||
 | 
			
		||||
	mkdir -p $GOPATH/src/github.com/kava-labs
 | 
			
		||||
	cd $GOPATH/src/github.com/kava-labs
 | 
			
		||||
	git clone https://github.com/kava-labs/kava
 | 
			
		||||
	cd kava
 | 
			
		||||
	go install ./cmd/kvd
 | 
			
		||||
	go install ./cmd/kvcli
 | 
			
		||||
 | 
			
		||||
<!-- Make sure GOBIN environment variable is set if you want to access programs anywhere -->
 | 
			
		||||
 | 
			
		||||
### Docker
 | 
			
		||||
 | 
			
		||||
TODO
 | 
			
		||||
<!-- Requirements: docker installed.
 | 
			
		||||
 | 
			
		||||
No installation necessary, just prepend commands with `docker run kava/kava`.  TODO name necessary to avoid new contianer being created each time?
 | 
			
		||||
 | 
			
		||||
This will use our docker container `kava/kava` and store all blockchain data and keys within the container. -->
 | 
			
		||||
 | 
			
		||||
<!-- To store this data outisde the conatiner, attach volumes to the container:
 | 
			
		||||
 | 
			
		||||
	docker run --rm -v $HOME/.kvd:/root/.kvd -v $HOME/.kvcli:/root/.kvcli kava/kava <further commands>
 | 
			
		||||
 | 
			
		||||
Now blockchain data will be stored in `$HOME/.kvd` and keys in `$HOME/.kvcli`. Also the `--rm` flag removes the contianer after each run.
 | 
			
		||||
 | 
			
		||||
 -->
 | 
			
		||||
<!-- ## Send Transactions
 | 
			
		||||
 | 
			
		||||
You can send transactions on the testnet using our node without yncing a local node.
 | 
			
		||||
Requirements
 | 
			
		||||
 | 
			
		||||
TODO users need to set up keys first?
 | 
			
		||||
 | 
			
		||||
	kvcli <args> --node validator.connector.kava.io:26657 --chain-id kava-test-<current version>
 | 
			
		||||
 -->
 | 
			
		||||
 | 
			
		||||
## Run a Full Node
 | 
			
		||||
 | 
			
		||||
	kvd init --name <your-name> --chain-id kava-test-0
 | 
			
		||||
 | 
			
		||||
This will generate config and keys in `$HOME/.kvd` and `$HOME/.kvcli`.
 | 
			
		||||
The default password is 'password'.
 | 
			
		||||
 | 
			
		||||
Copy the testnet genesis file (from https://raw.githubusercontent.com/Kava-Labs/kava/master/testnets/kava-test-1/genesis.json) into `$HOME/.kvd/config/`, replacing the existing one.
 | 
			
		||||
 | 
			
		||||
Add the kava node address (`0dfd43e440e34fc193ddee4ae99547184f3cb5d1@validator.connector.kava.io:26656`) to `seeds` in `$HOME/.kvd/config/config.toml`
 | 
			
		||||
 | 
			
		||||
Start your full node
 | 
			
		||||
 | 
			
		||||
	kvd start
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Run a Validator
 | 
			
		||||
Join the [validator chat](https://riot.im/app/#/room/#kava-validators:matrix.org). Follow setup for a full node above.
 | 
			
		||||
Get you address with `kvcli keys list`. Should look like `cosmosaccaddr10jpp289accvkhsvrpz4tlj9zhqdaey2tl9m4rg`.
 | 
			
		||||
Ask @rhuairahrighairidh in the chat to give you some coins.
 | 
			
		||||
 | 
			
		||||
Get your validator pubkey with `kvd tendermint show_validator`
 | 
			
		||||
 | 
			
		||||
	kvcli stake create-validator \
 | 
			
		||||
            --amount 1000KVA \
 | 
			
		||||
            --pubkey <you validator pubkey from above> \
 | 
			
		||||
            --address-validator <your address from above> \
 | 
			
		||||
            --moniker "<your name>" \
 | 
			
		||||
            --chain-id kava-test-0 \
 | 
			
		||||
            --from <your name>
 | 
			
		||||
 | 
			
		||||
Now you should be participating in consensus and validating blocks!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Running a validator requires that you keep validating blocks. If you stop then your stake will be slashed.
 | 
			
		||||
In order to stop validating, first remove yourself as validator, then you can stop your node.
 | 
			
		||||
 | 
			
		||||
	kvcli stake unbond begin \
 | 
			
		||||
		--address-delegator <your address> \
 | 
			
		||||
		--address-validator <your address> \
 | 
			
		||||
		--chain-id kava-test-0 \
 | 
			
		||||
		--shares-percent 1 \
 | 
			
		||||
		--from <your name>
 | 
			
		||||
@ -1,11 +1,9 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
 | 
			
		||||
	"github.com/tendermint/tmlibs/cli"
 | 
			
		||||
	"github.com/tendermint/tendermint/libs/cli"
 | 
			
		||||
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/client"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/client/keys"
 | 
			
		||||
@ -15,15 +13,15 @@ import (
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/version"
 | 
			
		||||
	authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
 | 
			
		||||
	bankcmd "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
 | 
			
		||||
	//govcmd "github.com/cosmos/cosmos-sdk/x/gov/client/cli"
 | 
			
		||||
	//ibccmd "github.com/cosmos/cosmos-sdk/x/ibc/client/cli"
 | 
			
		||||
	//stakecmd "github.com/cosmos/cosmos-sdk/x/stake/client/cli"
 | 
			
		||||
	slashingcmd "github.com/cosmos/cosmos-sdk/x/slashing/client/cli"
 | 
			
		||||
	stakecmd "github.com/cosmos/cosmos-sdk/x/stake/client/cli"
 | 
			
		||||
 | 
			
		||||
	"github.com/kava-labs/kava/internal/app"
 | 
			
		||||
	"github.com/kava-labs/kava/internal/lcd"
 | 
			
		||||
	//"github.com/kava-labs/kava/internal/types"
 | 
			
		||||
	//"github.com/kava-labs/kava/internal/lcd"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// rootCmd is the entry point for this binary
 | 
			
		||||
var (
 | 
			
		||||
	rootCmd = &cobra.Command{
 | 
			
		||||
		Use:   "kvcli",
 | 
			
		||||
@ -32,49 +30,119 @@ var (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	// disable sorting
 | 
			
		||||
	cobra.EnableCommandSorting = false
 | 
			
		||||
 | 
			
		||||
	// get the codec
 | 
			
		||||
	cdc := app.MakeCodec()
 | 
			
		||||
	cdc := app.CreateKavaAppCodec()
 | 
			
		||||
 | 
			
		||||
	// TODO: setup keybase, viper object, etc. to be passed into
 | 
			
		||||
	// the below functions and eliminate global vars, like we do
 | 
			
		||||
	// with the cdc
 | 
			
		||||
 | 
			
		||||
	// add standard rpc, and tx commands
 | 
			
		||||
	// add standard rpc commands
 | 
			
		||||
	rpc.AddCommands(rootCmd)
 | 
			
		||||
	rootCmd.AddCommand(client.LineBreak)
 | 
			
		||||
	tx.AddCommands(rootCmd, cdc)
 | 
			
		||||
	rootCmd.AddCommand(client.LineBreak)
 | 
			
		||||
 | 
			
		||||
	// add query/post commands (custom to binary)
 | 
			
		||||
	//Add state commands
 | 
			
		||||
	tendermintCmd := &cobra.Command{
 | 
			
		||||
		Use:   "tendermint",
 | 
			
		||||
		Short: "Tendermint state querying subcommands",
 | 
			
		||||
	}
 | 
			
		||||
	tendermintCmd.AddCommand(
 | 
			
		||||
		rpc.BlockCommand(),
 | 
			
		||||
		rpc.ValidatorCommand(),
 | 
			
		||||
	)
 | 
			
		||||
	tx.AddCommands(tendermintCmd, cdc)
 | 
			
		||||
 | 
			
		||||
	//Add IBC commands
 | 
			
		||||
	// ibcCmd := &cobra.Command{
 | 
			
		||||
	// 	Use:   "ibc",
 | 
			
		||||
	// 	Short: "Inter-Blockchain Communication subcommands",
 | 
			
		||||
	// }
 | 
			
		||||
	// ibcCmd.AddCommand(
 | 
			
		||||
	// 	client.PostCommands(
 | 
			
		||||
	// 		ibccmd.IBCTransferCmd(cdc),
 | 
			
		||||
	// 		ibccmd.IBCRelayCmd(cdc),
 | 
			
		||||
	// 	)...)
 | 
			
		||||
 | 
			
		||||
	advancedCmd := &cobra.Command{
 | 
			
		||||
		Use:   "advanced",
 | 
			
		||||
		Short: "Advanced subcommands",
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	advancedCmd.AddCommand(
 | 
			
		||||
		tendermintCmd,
 | 
			
		||||
		//ibcCmd,
 | 
			
		||||
		//lcd.ServeCommand(cdc),
 | 
			
		||||
	)
 | 
			
		||||
	rootCmd.AddCommand(
 | 
			
		||||
		advancedCmd,
 | 
			
		||||
		client.LineBreak,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	//Add stake commands
 | 
			
		||||
	stakeCmd := &cobra.Command{
 | 
			
		||||
		Use:   "stake",
 | 
			
		||||
		Short: "Stake and validation subcommands",
 | 
			
		||||
	}
 | 
			
		||||
	stakeCmd.AddCommand(
 | 
			
		||||
		client.GetCommands(
 | 
			
		||||
			stakecmd.GetCmdQueryValidator("stake", cdc),
 | 
			
		||||
			stakecmd.GetCmdQueryValidators("stake", cdc),
 | 
			
		||||
			stakecmd.GetCmdQueryDelegation("stake", cdc),
 | 
			
		||||
			stakecmd.GetCmdQueryDelegations("stake", cdc),
 | 
			
		||||
			slashingcmd.GetCmdQuerySigningInfo("slashing", cdc),
 | 
			
		||||
		)...)
 | 
			
		||||
	stakeCmd.AddCommand(
 | 
			
		||||
		client.PostCommands(
 | 
			
		||||
			stakecmd.GetCmdCreateValidator(cdc),
 | 
			
		||||
			stakecmd.GetCmdEditValidator(cdc),
 | 
			
		||||
			stakecmd.GetCmdDelegate(cdc),
 | 
			
		||||
			stakecmd.GetCmdUnbond("stake", cdc),
 | 
			
		||||
			stakecmd.GetCmdRedelegate("stake", cdc),
 | 
			
		||||
			slashingcmd.GetCmdUnrevoke(cdc),
 | 
			
		||||
		)...)
 | 
			
		||||
	rootCmd.AddCommand(
 | 
			
		||||
		stakeCmd,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	//Add stake commands
 | 
			
		||||
	// govCmd := &cobra.Command{
 | 
			
		||||
	// 	Use:   "gov",
 | 
			
		||||
	// 	Short: "Governance and voting subcommands",
 | 
			
		||||
	// }
 | 
			
		||||
	// govCmd.AddCommand(
 | 
			
		||||
	// 	client.GetCommands(
 | 
			
		||||
	// 		govcmd.GetCmdQueryProposal("gov", cdc),
 | 
			
		||||
	// 		govcmd.GetCmdQueryVote("gov", cdc),
 | 
			
		||||
	// 		govcmd.GetCmdQueryVotes("gov", cdc),
 | 
			
		||||
	// 	)...)
 | 
			
		||||
	// govCmd.AddCommand(
 | 
			
		||||
	// 	client.PostCommands(
 | 
			
		||||
	// 		govcmd.GetCmdSubmitProposal(cdc),
 | 
			
		||||
	// 		govcmd.GetCmdDeposit(cdc),
 | 
			
		||||
	// 		govcmd.GetCmdVote(cdc),
 | 
			
		||||
	// 	)...)
 | 
			
		||||
	// rootCmd.AddCommand(
 | 
			
		||||
	// 	govCmd,
 | 
			
		||||
	// )
 | 
			
		||||
 | 
			
		||||
	//Add auth and bank commands
 | 
			
		||||
	rootCmd.AddCommand(
 | 
			
		||||
		client.GetCommands(
 | 
			
		||||
			authcmd.GetAccountCmd("acc", cdc, authcmd.GetAccountDecoder(cdc)),
 | 
			
		||||
		)...)
 | 
			
		||||
 | 
			
		||||
	rootCmd.AddCommand(
 | 
			
		||||
		client.PostCommands(
 | 
			
		||||
			bankcmd.SendTxCmd(cdc),
 | 
			
		||||
			//ibccmd.IBCTransferCmd(cdc),
 | 
			
		||||
			//ibccmd.IBCRelayCmd(cdc),
 | 
			
		||||
			//stakecmd.GetCmdCreateValidator(cdc),
 | 
			
		||||
			//stakecmd.GetCmdEditValidator(cdc),
 | 
			
		||||
			//stakecmd.GetCmdDelegate(cdc),
 | 
			
		||||
			//stakecmd.GetCmdUnbond(cdc),
 | 
			
		||||
		)...)
 | 
			
		||||
 | 
			
		||||
	// add proxy, version and key info
 | 
			
		||||
	rootCmd.AddCommand(
 | 
			
		||||
		client.LineBreak,
 | 
			
		||||
		lcd.ServeCommand(cdc),
 | 
			
		||||
		keys.Commands(),
 | 
			
		||||
		client.LineBreak,
 | 
			
		||||
		version.VersionCmd,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// prepare and add flags
 | 
			
		||||
	executor := cli.PrepareMainCmd(rootCmd, "KV", os.ExpandEnv("$HOME/.kvcli"))
 | 
			
		||||
	executor.Execute()
 | 
			
		||||
	executor := cli.PrepareMainCmd(rootCmd, "KV", app.DefaultCLIHome)
 | 
			
		||||
	err := executor.Execute()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -2,45 +2,60 @@ package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"os"
 | 
			
		||||
	"io"
 | 
			
		||||
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/baseapp"
 | 
			
		||||
 | 
			
		||||
	"github.com/spf13/cobra"
 | 
			
		||||
	"github.com/spf13/viper"
 | 
			
		||||
 | 
			
		||||
	abci "github.com/tendermint/abci/types"
 | 
			
		||||
	abci "github.com/tendermint/tendermint/abci/types"
 | 
			
		||||
	"github.com/tendermint/tendermint/libs/cli"
 | 
			
		||||
	dbm "github.com/tendermint/tendermint/libs/db"
 | 
			
		||||
	"github.com/tendermint/tendermint/libs/log"
 | 
			
		||||
	tmtypes "github.com/tendermint/tendermint/types"
 | 
			
		||||
	"github.com/tendermint/tmlibs/cli"
 | 
			
		||||
	dbm "github.com/tendermint/tmlibs/db"
 | 
			
		||||
	"github.com/tendermint/tmlibs/log"
 | 
			
		||||
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/server"
 | 
			
		||||
	"github.com/kava-labs/kava/internal/app"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	cdc := app.MakeCodec()
 | 
			
		||||
	// Create an app codec
 | 
			
		||||
	cdc := app.CreateKavaAppCodec()
 | 
			
		||||
 | 
			
		||||
	// Create a server context (a struct of a tendermint config and a logger)
 | 
			
		||||
	ctx := server.NewDefaultContext()
 | 
			
		||||
 | 
			
		||||
	// Create the root kvd command
 | 
			
		||||
	cobra.EnableCommandSorting = false
 | 
			
		||||
	rootCmd := &cobra.Command{
 | 
			
		||||
		Use:               "kvd",
 | 
			
		||||
		Short:             "Kava Daemon",
 | 
			
		||||
		PersistentPreRunE: server.PersistentPreRunEFn(ctx),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	server.AddCommands(ctx, cdc, rootCmd, app.CreateAppInit(),
 | 
			
		||||
		server.ConstructAppCreator(newApp, "kava"),
 | 
			
		||||
		server.ConstructAppExporter(exportAppStateAndTMValidators, "kava"))
 | 
			
		||||
	// Add server commands to kvd, passing in the app
 | 
			
		||||
	appInit := app.KavaAppInit()
 | 
			
		||||
	appCreator := server.ConstructAppCreator(newApp, "kava") // init db before calling newApp
 | 
			
		||||
	appExporter := server.ConstructAppExporter(exportAppStateAndTMValidators, "kava")
 | 
			
		||||
 | 
			
		||||
	// prepare and add flags
 | 
			
		||||
	rootDir := os.ExpandEnv("$HOME/.kvd")
 | 
			
		||||
	executor := cli.PrepareBaseCmd(rootCmd, "KV", rootDir)
 | 
			
		||||
	executor.Execute()
 | 
			
		||||
	server.AddCommands(ctx, cdc, rootCmd, appInit, appCreator, appExporter)
 | 
			
		||||
 | 
			
		||||
	// handle envs and add some flags and stuff
 | 
			
		||||
	executor := cli.PrepareBaseCmd(rootCmd, "KV", app.DefaultNodeHome)
 | 
			
		||||
 | 
			
		||||
	// Run kvd
 | 
			
		||||
	err := executor.Execute()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func newApp(logger log.Logger, db dbm.DB) abci.Application {
 | 
			
		||||
	return app.NewKavaApp(logger, db)
 | 
			
		||||
func newApp(logger log.Logger, db dbm.DB, traceStore io.Writer) abci.Application {
 | 
			
		||||
	return app.NewKavaApp(logger, db, traceStore, baseapp.SetPruning(viper.GetString("pruning")))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func exportAppStateAndTMValidators(logger log.Logger, db dbm.DB) (json.RawMessage, []tmtypes.GenesisValidator, error) {
 | 
			
		||||
	bapp := app.NewKavaApp(logger, db)
 | 
			
		||||
	return bapp.ExportAppStateAndValidators()
 | 
			
		||||
func exportAppStateAndTMValidators(logger log.Logger, db dbm.DB, traceStore io.Writer) (json.RawMessage, []tmtypes.GenesisValidator, error) {
 | 
			
		||||
	tempApp := app.NewKavaApp(logger, db, traceStore)
 | 
			
		||||
	return tempApp.ExportAppStateAndValidators()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,19 +0,0 @@
 | 
			
		||||
To initialise a network:
 | 
			
		||||
 | 
			
		||||
 - delete everything (including persistant volume claim)
 | 
			
		||||
 - deploy everything except the deployments
 | 
			
		||||
 - wait until the job has finished, then deploy the deployments
 | 
			
		||||
 | 
			
		||||
 Note on config
 | 
			
		||||
 | 
			
		||||
  - Secrets and configmaps need to be generated from files
 | 
			
		||||
  - Ideally everything would be in one file but kubectl doesn't scan directories yet: https://github.com/kubernetes/kubernetes/issues/62421
 | 
			
		||||
  - `kubectl create secret generic kava-user-keys --from-file=./init/init-data --dry-run -o yaml > secret-user.yml`
 | 
			
		||||
  - `kubectl create secret generic kava-node-config --from-file=./init/init-data/.kvd/config --dry-run -o yaml > secret-config.yml`
 | 
			
		||||
 | 
			
		||||
Examples of using light client with the node:
 | 
			
		||||
 | 
			
		||||
 - Get the status `kvcli status --node <node's-url>:46657 --chain-id test-kava`
 | 
			
		||||
 - Send coins `kvcli send --name <your-key-name> --to <receiver's-address> --amount 100KVA --node <node's-url>:46657 --chain-id test-kava`
 | 
			
		||||
 - Run the light client daemon `kvcli rest-server --node <node's-url>:46657 --chain-id test-kava`
 | 
			
		||||
 
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
apiVersion: apps/v1beta2
 | 
			
		||||
kind: Deployment
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kava-d-deployment2
 | 
			
		||||
  labels:
 | 
			
		||||
    app: kava
 | 
			
		||||
spec:
 | 
			
		||||
  replicas: 1
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
      pod: kvd
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        app: kava
 | 
			
		||||
        pod: kvd
 | 
			
		||||
    spec:
 | 
			
		||||
      containers:
 | 
			
		||||
      - name: kvd
 | 
			
		||||
        image: kava/kava
 | 
			
		||||
        command: ["kvd", "start"]
 | 
			
		||||
        ports:
 | 
			
		||||
        - containerPort: 46656
 | 
			
		||||
        - containerPort: 46657
 | 
			
		||||
        volumeMounts:
 | 
			
		||||
        - name: persistent-storage-kvd
 | 
			
		||||
          mountPath: /root/.kvd
 | 
			
		||||
      volumes:
 | 
			
		||||
      - name: persistent-storage-kvd
 | 
			
		||||
        persistentVolumeClaim:
 | 
			
		||||
          claimName: kava-pvc-kvd2
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
apiVersion: apps/v1beta2
 | 
			
		||||
kind: Deployment
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kava-lcd-deployment2
 | 
			
		||||
  labels:
 | 
			
		||||
    app: kava
 | 
			
		||||
spec:
 | 
			
		||||
  replicas: 1
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
      pod: kvcli-lcd
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        app: kava
 | 
			
		||||
        pod: kvcli-lcd
 | 
			
		||||
    spec:
 | 
			
		||||
      containers:
 | 
			
		||||
      - name: kvcli-lcd
 | 
			
		||||
        image: kava/kava
 | 
			
		||||
        command: ["kvcli", "rest-server", "--chain-id=test-kava", "--node=kava-d-service2:46657", "--laddr=tcp://0.0.0.0:1317"]
 | 
			
		||||
        ports:
 | 
			
		||||
        - containerPort: 1317
 | 
			
		||||
        volumeMounts:
 | 
			
		||||
        - name: persistent-storage-kvcli
 | 
			
		||||
          mountPath: /root/.kvcli
 | 
			
		||||
      volumes:
 | 
			
		||||
      - name: persistent-storage-kvcli
 | 
			
		||||
        persistentVolumeClaim:
 | 
			
		||||
          claimName: kava-pvc-kvcli2
 | 
			
		||||
@ -1,5 +0,0 @@
 | 
			
		||||
FROM kava/kava
 | 
			
		||||
WORKDIR /
 | 
			
		||||
COPY init.sh ./
 | 
			
		||||
# Expects init data to be mounted at /init-data
 | 
			
		||||
CMD ["sh", "init.sh"]
 | 
			
		||||
@ -1,19 +0,0 @@
 | 
			
		||||
# Setup node and light client.
 | 
			
		||||
echo "This assumes you have wiped old data"
 | 
			
		||||
 | 
			
		||||
echo "copying kvd config to the default location ($HOME/.kvd)"
 | 
			
		||||
initData=./init-data
 | 
			
		||||
cp -vR $initData/.kvd/. $HOME/.kvd/ # copy contents of .kvd into .kvd, creating dir if necessary
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
echo "setup validator key from seed"
 | 
			
		||||
validatorPassword="$(cat $initData/validatorPassword)"
 | 
			
		||||
echo $validatorPassword
 | 
			
		||||
validatorBackupPhrase="$(cat $initData/validatorBackupPhrase)"
 | 
			
		||||
printf "$validatorPassword\n$validatorBackupPhrase\n" | kvcli keys add --recover validator
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
echo "setup user1 key from seed"
 | 
			
		||||
user1Password="$(cat ./init-data/user1Password)"
 | 
			
		||||
user1BackupPhrase="$(cat ./init-data/user1BackupPhrase)"
 | 
			
		||||
printf "$user1Password\n$user1BackupPhrase\n" | kvcli keys add --recover user1
 | 
			
		||||
@ -1,36 +0,0 @@
 | 
			
		||||
apiVersion: batch/v1
 | 
			
		||||
kind: Job
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kava-init-data2
 | 
			
		||||
  labels:
 | 
			
		||||
    app: kava
 | 
			
		||||
spec:
 | 
			
		||||
  template:
 | 
			
		||||
    spec:
 | 
			
		||||
      containers:
 | 
			
		||||
      - name: run-init
 | 
			
		||||
        image: kava/kava-init
 | 
			
		||||
        volumeMounts:
 | 
			
		||||
        - name: kava-persistent-storage-kvd
 | 
			
		||||
          mountPath: /root/.kvd
 | 
			
		||||
        - name: kava-persistent-storage-kvcli
 | 
			
		||||
          mountPath: /root/.kvcli
 | 
			
		||||
        - name: user-keys
 | 
			
		||||
          mountPath: /init-data/
 | 
			
		||||
        - name: node-config
 | 
			
		||||
          mountPath: /init-data/.kvd/config/
 | 
			
		||||
      restartPolicy: Never
 | 
			
		||||
      volumes:
 | 
			
		||||
      - name: kava-persistent-storage-kvd
 | 
			
		||||
        persistentVolumeClaim:
 | 
			
		||||
          claimName: kava-pvc-kvd2
 | 
			
		||||
      - name: kava-persistent-storage-kvcli
 | 
			
		||||
        persistentVolumeClaim:
 | 
			
		||||
          claimName: kava-pvc-kvcli2
 | 
			
		||||
      - name: user-keys
 | 
			
		||||
        secret:
 | 
			
		||||
          secretName: kava-user-keys
 | 
			
		||||
      - name: node-config
 | 
			
		||||
        secret:
 | 
			
		||||
          secretName: kava-node-config
 | 
			
		||||
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kava-d-service2
 | 
			
		||||
  labels:
 | 
			
		||||
    app: kava
 | 
			
		||||
spec:
 | 
			
		||||
  type: LoadBalancer
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: rpc
 | 
			
		||||
      port: 46657
 | 
			
		||||
      protocol: TCP
 | 
			
		||||
      targetPort: 46657
 | 
			
		||||
    - name: p2p
 | 
			
		||||
      port: 46656
 | 
			
		||||
      protocol: TCP
 | 
			
		||||
      targetPort: 46656
 | 
			
		||||
  selector:
 | 
			
		||||
    pod: kvd
 | 
			
		||||
---
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kava-lcd-service2
 | 
			
		||||
  labels:
 | 
			
		||||
    app: kava
 | 
			
		||||
spec:
 | 
			
		||||
  type: LoadBalancer
 | 
			
		||||
  ports:
 | 
			
		||||
    - name: rest-server
 | 
			
		||||
      port: 1317
 | 
			
		||||
      protocol: TCP
 | 
			
		||||
      targetPort: 1317
 | 
			
		||||
  selector:
 | 
			
		||||
    pod: kvcli-lcd
 | 
			
		||||
@ -1,26 +0,0 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: PersistentVolumeClaim
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kava-pvc-kvd2
 | 
			
		||||
  labels:
 | 
			
		||||
    app: kava
 | 
			
		||||
spec:
 | 
			
		||||
  accessModes:
 | 
			
		||||
    - ReadWriteOnce
 | 
			
		||||
  resources:
 | 
			
		||||
    requests:
 | 
			
		||||
      storage: 8Gi
 | 
			
		||||
---
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: PersistentVolumeClaim
 | 
			
		||||
metadata:
 | 
			
		||||
  name: kava-pvc-kvcli2
 | 
			
		||||
  labels:
 | 
			
		||||
    app: kava
 | 
			
		||||
spec:
 | 
			
		||||
  accessModes:
 | 
			
		||||
    - ReadWriteOnce
 | 
			
		||||
  resources:
 | 
			
		||||
    requests:
 | 
			
		||||
      storage: 8Gi
 | 
			
		||||
 | 
			
		||||
@ -4,18 +4,18 @@ services:
 | 
			
		||||
    image: kava/kava
 | 
			
		||||
    command: ["kvd", "start"]
 | 
			
		||||
    ports:
 | 
			
		||||
      - 46657:46657
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ~/.kvd:/root/.kvd
 | 
			
		||||
      - ~/.kvcli:/root/.kvcli
 | 
			
		||||
    # Avoid printing out all the tendermint logs
 | 
			
		||||
    logging:
 | 
			
		||||
      driver: "none"
 | 
			
		||||
  lcd:
 | 
			
		||||
    image: kava/kava
 | 
			
		||||
    command: "kvcli rest-server --chain-id test-kava --node kvd:46657 --laddr tcp://0.0.0.0:1317"
 | 
			
		||||
    ports:
 | 
			
		||||
      - 1317:1317
 | 
			
		||||
      - 26657:26657
 | 
			
		||||
    volumes:
 | 
			
		||||
      - ~/.kvd:/root/.kvd
 | 
			
		||||
      - ~/.kvcli:/root/.kvcli
 | 
			
		||||
  #   # Avoid printing out all the tendermint logs
 | 
			
		||||
  #   logging:
 | 
			
		||||
  #     driver: "none"
 | 
			
		||||
  # lcd:
 | 
			
		||||
  #   image: kava/kava
 | 
			
		||||
  #   command: "kvcli rest-server --chain-id test-kava --node kvd:46657 --laddr tcp://0.0.0.0:1317"
 | 
			
		||||
  #   ports:
 | 
			
		||||
  #     - 1317:1317
 | 
			
		||||
  #   volumes:
 | 
			
		||||
  #     - ~/.kvd:/root/.kvd
 | 
			
		||||
  #     - ~/.kvcli:/root/.kvcli
 | 
			
		||||
 | 
			
		||||
@ -2,29 +2,36 @@ package app
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"io"
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	abci "github.com/tendermint/abci/types"
 | 
			
		||||
	abci "github.com/tendermint/tendermint/abci/types"
 | 
			
		||||
	cmn "github.com/tendermint/tendermint/libs/common"
 | 
			
		||||
	dbm "github.com/tendermint/tendermint/libs/db"
 | 
			
		||||
	"github.com/tendermint/tendermint/libs/log"
 | 
			
		||||
	tmtypes "github.com/tendermint/tendermint/types"
 | 
			
		||||
	cmn "github.com/tendermint/tmlibs/common"
 | 
			
		||||
	dbm "github.com/tendermint/tmlibs/db"
 | 
			
		||||
	"github.com/tendermint/tmlibs/log"
 | 
			
		||||
 | 
			
		||||
	bam "github.com/cosmos/cosmos-sdk/baseapp"
 | 
			
		||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/wire"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/auth"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/bank"
 | 
			
		||||
	//"github.com/cosmos/cosmos-sdk/x/gov"
 | 
			
		||||
	//"github.com/cosmos/cosmos-sdk/x/ibc"
 | 
			
		||||
	//"github.com/cosmos/cosmos-sdk/x/slashing"
 | 
			
		||||
	//"github.com/cosmos/cosmos-sdk/x/stake"
 | 
			
		||||
	"github.com/kava-labs/kava/internal/types"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/slashing"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/stake"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	appName = "KavaApp"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Extended ABCI application
 | 
			
		||||
// Set default directories for data
 | 
			
		||||
var (
 | 
			
		||||
	DefaultCLIHome  = os.ExpandEnv("$HOME/.kvcli")
 | 
			
		||||
	DefaultNodeHome = os.ExpandEnv("$HOME/.kvd")
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type KavaApp struct {
 | 
			
		||||
	*bam.BaseApp
 | 
			
		||||
	cdc *wire.Codec
 | 
			
		||||
@ -33,60 +40,77 @@ type KavaApp struct {
 | 
			
		||||
	keyMain    *sdk.KVStoreKey
 | 
			
		||||
	keyAccount *sdk.KVStoreKey
 | 
			
		||||
	//keyIBC           *sdk.KVStoreKey
 | 
			
		||||
	//keyStake    *sdk.KVStoreKey
 | 
			
		||||
	//keySlashing *sdk.KVStoreKey
 | 
			
		||||
	keyStake    *sdk.KVStoreKey
 | 
			
		||||
	keySlashing *sdk.KVStoreKey
 | 
			
		||||
	//keyGov           *sdk.KVStoreKey
 | 
			
		||||
	keyFeeCollection *sdk.KVStoreKey
 | 
			
		||||
 | 
			
		||||
	// Manage getting and setting accounts
 | 
			
		||||
	// keepers
 | 
			
		||||
	accountMapper       auth.AccountMapper
 | 
			
		||||
	feeCollectionKeeper auth.FeeCollectionKeeper
 | 
			
		||||
	coinKeeper          bank.Keeper
 | 
			
		||||
	//ibcMapper           ibc.Mapper
 | 
			
		||||
	//stakeKeeper         stake.Keeper
 | 
			
		||||
	//slashingKeeper      slashing.Keeper
 | 
			
		||||
	stakeKeeper    stake.Keeper
 | 
			
		||||
	slashingKeeper slashing.Keeper
 | 
			
		||||
	//govKeeper           gov.Keeper
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewKavaApp(logger log.Logger, db dbm.DB) *KavaApp {
 | 
			
		||||
// Creates a new KavaApp.
 | 
			
		||||
func NewKavaApp(logger log.Logger, db dbm.DB, traceStore io.Writer, baseAppOptions ...func(*bam.BaseApp)) *KavaApp {
 | 
			
		||||
 | 
			
		||||
	// Create app-level codec for txs and accounts.
 | 
			
		||||
	var cdc = MakeCodec()
 | 
			
		||||
	// Create a codec for use across the whole app
 | 
			
		||||
	cdc := CreateKavaAppCodec()
 | 
			
		||||
 | 
			
		||||
	// Create your application object.
 | 
			
		||||
	// Create a new base app
 | 
			
		||||
	bApp := bam.NewBaseApp(appName, cdc, logger, db, baseAppOptions...)
 | 
			
		||||
	bApp.SetCommitMultiStoreTracer(traceStore)
 | 
			
		||||
 | 
			
		||||
	// Create the kava app, extending baseApp
 | 
			
		||||
	var app = &KavaApp{
 | 
			
		||||
		BaseApp:    bam.NewBaseApp(appName, cdc, logger, db),
 | 
			
		||||
		BaseApp:    bApp,
 | 
			
		||||
		cdc:        cdc,
 | 
			
		||||
		keyMain:    sdk.NewKVStoreKey("main"),
 | 
			
		||||
		keyAccount: sdk.NewKVStoreKey("acc"),
 | 
			
		||||
		//keyIBC:      sdk.NewKVStoreKey("ibc"),
 | 
			
		||||
		//keyStake:    sdk.NewKVStoreKey("stake"),
 | 
			
		||||
		//keySlashing: sdk.NewKVStoreKey("slashing"),
 | 
			
		||||
		keyStake:    sdk.NewKVStoreKey("stake"),
 | 
			
		||||
		keySlashing: sdk.NewKVStoreKey("slashing"),
 | 
			
		||||
		//keyGov:           sdk.NewKVStoreKey("gov"),
 | 
			
		||||
		keyFeeCollection: sdk.NewKVStoreKey("fee"),
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Define the accountMapper.
 | 
			
		||||
	// Define the accountMapper and base account
 | 
			
		||||
	app.accountMapper = auth.NewAccountMapper(
 | 
			
		||||
		cdc,
 | 
			
		||||
		app.keyAccount, // target store
 | 
			
		||||
		&auth.BaseAccount{},
 | 
			
		||||
		app.keyAccount,
 | 
			
		||||
		auth.ProtoBaseAccount,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// add accountMapper/handlers
 | 
			
		||||
	// Create the keepers
 | 
			
		||||
	app.coinKeeper = bank.NewKeeper(app.accountMapper)
 | 
			
		||||
	//app.ibcMapper = ibc.NewMapper(app.cdc, app.keyIBC, app.RegisterCodespace(ibc.DefaultCodespace))
 | 
			
		||||
	//app.stakeKeeper = stake.NewKeeper(app.cdc, app.keyStake, app.coinKeeper, app.RegisterCodespace(stake.DefaultCodespace))
 | 
			
		||||
	//app.slashingKeeper = slashing.NewKeeper(app.cdc, app.keySlashing, app.stakeKeeper, app.RegisterCodespace(slashing.DefaultCodespace))
 | 
			
		||||
	app.stakeKeeper = stake.NewKeeper(app.cdc, app.keyStake, app.coinKeeper, app.RegisterCodespace(stake.DefaultCodespace))
 | 
			
		||||
	app.slashingKeeper = slashing.NewKeeper(app.cdc, app.keySlashing, app.stakeKeeper, app.RegisterCodespace(slashing.DefaultCodespace))
 | 
			
		||||
	//app.govKeeper = gov.NewKeeper(app.cdc, app.keyGov, app.coinKeeper, app.stakeKeeper, app.RegisterCodespace(gov.DefaultCodespace))
 | 
			
		||||
	app.feeCollectionKeeper = auth.NewFeeCollectionKeeper(app.cdc, app.keyFeeCollection)
 | 
			
		||||
 | 
			
		||||
	// register message routes
 | 
			
		||||
	// Register the message handlers
 | 
			
		||||
	app.Router().
 | 
			
		||||
		AddRoute("auth", auth.NewHandler(app.accountMapper)).
 | 
			
		||||
		AddRoute("bank", bank.NewHandler(app.coinKeeper))
 | 
			
		||||
		AddRoute("bank", bank.NewHandler(app.coinKeeper)).
 | 
			
		||||
		//AddRoute("ibc", ibc.NewHandler(app.ibcMapper, app.coinKeeper)).
 | 
			
		||||
		//AddRoute("stake", stake.NewHandler(app.stakeKeeper))
 | 
			
		||||
		AddRoute("stake", stake.NewHandler(app.stakeKeeper)).
 | 
			
		||||
		AddRoute("slashing", slashing.NewHandler(app.slashingKeeper))
 | 
			
		||||
		//AddRoute("gov", gov.NewHandler(app.govKeeper))
 | 
			
		||||
 | 
			
		||||
	// Initialize BaseApp.
 | 
			
		||||
	// Set func to initialze the chain from appState in genesis file
 | 
			
		||||
	app.SetInitChainer(app.initChainer)
 | 
			
		||||
 | 
			
		||||
	// Set functions that run before and after txs / blocks
 | 
			
		||||
	app.SetBeginBlocker(app.BeginBlocker)
 | 
			
		||||
	app.SetEndBlocker(app.EndBlocker)
 | 
			
		||||
	app.SetAnteHandler(auth.NewAnteHandler(app.accountMapper, app.feeCollectionKeeper))
 | 
			
		||||
	app.MountStoresIAVL(app.keyMain, app.keyAccount) //, app.keyIBC, app.keyStake, app.keySlashing)
 | 
			
		||||
 | 
			
		||||
	// Mount stores
 | 
			
		||||
	app.MountStoresIAVL(app.keyMain, app.keyAccount, app.keyStake, app.keySlashing, app.keyFeeCollection)
 | 
			
		||||
	err := app.LoadLatestVersion(app.keyMain)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		cmn.Exit(err.Error())
 | 
			
		||||
@ -94,95 +118,90 @@ func NewKavaApp(logger log.Logger, db dbm.DB) *KavaApp {
 | 
			
		||||
	return app
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Custom tx codec
 | 
			
		||||
func MakeCodec() *wire.Codec {
 | 
			
		||||
	var cdc = wire.NewCodec()
 | 
			
		||||
	wire.RegisterCrypto(cdc) // Register crypto.
 | 
			
		||||
	sdk.RegisterWire(cdc)    // Register Msgs
 | 
			
		||||
	bank.RegisterWire(cdc)
 | 
			
		||||
	//stake.RegisterWire(cdc)
 | 
			
		||||
	//slashing.RegisterWire(cdc)
 | 
			
		||||
// Creates a codec for use across the whole app.
 | 
			
		||||
func CreateKavaAppCodec() *wire.Codec {
 | 
			
		||||
	cdc := wire.NewCodec()
 | 
			
		||||
	//ibc.RegisterWire(cdc)
 | 
			
		||||
	bank.RegisterWire(cdc)
 | 
			
		||||
	stake.RegisterWire(cdc)
 | 
			
		||||
	slashing.RegisterWire(cdc)
 | 
			
		||||
	//gov.RegisterWire(cdc)
 | 
			
		||||
	auth.RegisterWire(cdc)
 | 
			
		||||
 | 
			
		||||
	// register custom AppAccount
 | 
			
		||||
	//cdc.RegisterInterface((*auth.Account)(nil), nil)
 | 
			
		||||
	//cdc.RegisterConcrete(&types.BaseAccount{}, "kava/Account", nil)
 | 
			
		||||
	sdk.RegisterWire(cdc)
 | 
			
		||||
	wire.RegisterCrypto(cdc)
 | 
			
		||||
	return cdc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// application updates every end block
 | 
			
		||||
// The function baseapp runs on receipt of a BeginBlock ABCI message
 | 
			
		||||
func (app *KavaApp) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock {
 | 
			
		||||
	//tags := slashing.BeginBlocker(ctx, req, app.slashingKeeper)
 | 
			
		||||
	tags := slashing.BeginBlocker(ctx, req, app.slashingKeeper)
 | 
			
		||||
 | 
			
		||||
	//return abci.ResponseBeginBlock{
 | 
			
		||||
	//	Tags: tags.ToKVPairs(),
 | 
			
		||||
	//}
 | 
			
		||||
	return abci.ResponseBeginBlock{}
 | 
			
		||||
	return abci.ResponseBeginBlock{
 | 
			
		||||
		Tags: tags.ToKVPairs(),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// application updates every end block
 | 
			
		||||
// The function baseapp runs on receipt of a EndBlock ABCI message
 | 
			
		||||
func (app *KavaApp) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {
 | 
			
		||||
	//validatorUpdates := stake.EndBlocker(ctx, app.stakeKeeper)
 | 
			
		||||
	validatorUpdates := stake.EndBlocker(ctx, app.stakeKeeper)
 | 
			
		||||
 | 
			
		||||
	//return abci.ResponseEndBlock{
 | 
			
		||||
	//	ValidatorUpdates: validatorUpdates,
 | 
			
		||||
	//}
 | 
			
		||||
	return abci.ResponseEndBlock{}
 | 
			
		||||
	//tags, _ := gov.EndBlocker(ctx, app.govKeeper)
 | 
			
		||||
 | 
			
		||||
	return abci.ResponseEndBlock{
 | 
			
		||||
		ValidatorUpdates: validatorUpdates,
 | 
			
		||||
		//Tags:             tags,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Custom logic for initialization
 | 
			
		||||
// Initialzes the app db from the appState in the genesis file. Baseapp runs this on receipt of an InitChain ABCI message
 | 
			
		||||
func (app *KavaApp) initChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain {
 | 
			
		||||
	stateJSON := req.AppStateBytes
 | 
			
		||||
 | 
			
		||||
	genesisState := new(types.GenesisState)
 | 
			
		||||
	err := app.cdc.UnmarshalJSON(stateJSON, genesisState)
 | 
			
		||||
	var genesisState GenesisState
 | 
			
		||||
	err := app.cdc.UnmarshalJSON(stateJSON, &genesisState)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err) // TODO https://github.com/cosmos/cosmos-sdk/issues/468
 | 
			
		||||
		// return sdk.ErrGenesisParse("").TraceCause(err, "")
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// load the accounts
 | 
			
		||||
	for _, gacc := range genesisState.Accounts {
 | 
			
		||||
		acc, err := gacc.ToAppAccount()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err) // TODO https://github.com/cosmos/cosmos-sdk/issues/468
 | 
			
		||||
			//	return sdk.ErrGenesisParse("").TraceCause(err, "")
 | 
			
		||||
		}
 | 
			
		||||
		acc := gacc.ToAccount()
 | 
			
		||||
		acc.AccountNumber = app.accountMapper.GetNextAccountNumber(ctx)
 | 
			
		||||
		app.accountMapper.SetAccount(ctx, acc)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// load the initial stake information
 | 
			
		||||
	//stake.InitGenesis(ctx, app.stakeKeeper, genesisState.StakeData)
 | 
			
		||||
	err = stake.InitGenesis(ctx, app.stakeKeeper, genesisState.StakeData)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//gov.InitGenesis(ctx, app.govKeeper, gov.DefaultGenesisState())
 | 
			
		||||
 | 
			
		||||
	return abci.ResponseInitChain{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Custom logic for state export
 | 
			
		||||
//
 | 
			
		||||
func (app *KavaApp) ExportAppStateAndValidators() (appState json.RawMessage, validators []tmtypes.GenesisValidator, err error) {
 | 
			
		||||
	ctx := app.NewContext(true, abci.Header{})
 | 
			
		||||
 | 
			
		||||
	// iterate to get the accounts
 | 
			
		||||
	accounts := []types.GenesisAccount{}
 | 
			
		||||
	accounts := []GenesisAccount{}
 | 
			
		||||
	appendAccount := func(acc auth.Account) (stop bool) {
 | 
			
		||||
		account := types.GenesisAccount{
 | 
			
		||||
			Address: acc.GetAddress(),
 | 
			
		||||
			Coins:   acc.GetCoins(),
 | 
			
		||||
		}
 | 
			
		||||
		account := NewGenesisAccountI(acc)
 | 
			
		||||
		accounts = append(accounts, account)
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
	app.accountMapper.IterateAccounts(ctx, appendAccount)
 | 
			
		||||
 | 
			
		||||
	genState := types.GenesisState{
 | 
			
		||||
	genState := GenesisState{
 | 
			
		||||
		Accounts:  accounts,
 | 
			
		||||
		StakeData: stake.WriteGenesis(ctx, app.stakeKeeper),
 | 
			
		||||
	}
 | 
			
		||||
	appState, err = wire.MarshalJSONIndent(app.cdc, genState)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	validators = make([]tmtypes.GenesisValidator, 0) // TODO export the actual validators
 | 
			
		||||
 | 
			
		||||
	return appState, validators, err
 | 
			
		||||
	validators = stake.WriteValidators(ctx, app.stakeKeeper)
 | 
			
		||||
	return appState, validators, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -4,20 +4,220 @@ import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"errors"
 | 
			
		||||
 | 
			
		||||
	//"github.com/spf13/pflag"
 | 
			
		||||
	//"github.com/spf13/viper"
 | 
			
		||||
	crypto "github.com/tendermint/go-crypto"
 | 
			
		||||
	"github.com/spf13/pflag"
 | 
			
		||||
	"github.com/tendermint/tendermint/crypto"
 | 
			
		||||
	tmtypes "github.com/tendermint/tendermint/types"
 | 
			
		||||
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/server"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/server/config"
 | 
			
		||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/wire"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/auth"
 | 
			
		||||
	//"github.com/cosmos/cosmos-sdk/x/stake"
 | 
			
		||||
 | 
			
		||||
	"github.com/kava-labs/kava/internal/types"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/stake"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
	// Tokens given to genesis validators and accounts
 | 
			
		||||
	numStartingTokensValidators = int64(1000)
 | 
			
		||||
	numStartingTokensAccounts   = int64(99000)
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// Initial app state to be written to (and read from) genesis file
 | 
			
		||||
type GenesisState struct {
 | 
			
		||||
	Accounts  []GenesisAccount   `json:"accounts"`
 | 
			
		||||
	StakeData stake.GenesisState `json:"stake"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// A simplified version of a normal account. It doesn't have pubkey or sequence.
 | 
			
		||||
type GenesisAccount struct {
 | 
			
		||||
	Address sdk.AccAddress `json:"address"`
 | 
			
		||||
	Coins   sdk.Coins      `json:"coins"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO remove?
 | 
			
		||||
func NewGenesisAccount(acc *auth.BaseAccount) GenesisAccount {
 | 
			
		||||
	return GenesisAccount{
 | 
			
		||||
		Address: acc.Address,
 | 
			
		||||
		Coins:   acc.Coins,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO remove?
 | 
			
		||||
func NewGenesisAccountI(acc auth.Account) GenesisAccount {
 | 
			
		||||
	return GenesisAccount{
 | 
			
		||||
		Address: acc.GetAddress(),
 | 
			
		||||
		Coins:   acc.GetCoins(),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Converts a GenesisAccount to auth.BaseAccount TODO rename
 | 
			
		||||
func (ga *GenesisAccount) ToAccount() (acc *auth.BaseAccount) {
 | 
			
		||||
	return &auth.BaseAccount{
 | 
			
		||||
		Address: ga.Address,
 | 
			
		||||
		Coins:   ga.Coins.Sort(),
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create the appInit stuct for server init command
 | 
			
		||||
func KavaAppInit() server.AppInit {
 | 
			
		||||
	fsAppGenState := pflag.NewFlagSet("", pflag.ContinueOnError)
 | 
			
		||||
	fsAppGenTx := pflag.NewFlagSet("", pflag.ContinueOnError)
 | 
			
		||||
 | 
			
		||||
	fsAppGenTx.String(server.FlagName, "", "validator moniker, required")
 | 
			
		||||
	fsAppGenTx.String(server.FlagClientHome, DefaultCLIHome,
 | 
			
		||||
		"home directory for the client, used for key generation")
 | 
			
		||||
	fsAppGenTx.Bool(server.FlagOWK, false, "overwrite the accounts created")
 | 
			
		||||
 | 
			
		||||
	return server.AppInit{
 | 
			
		||||
		FlagsAppGenState: fsAppGenState,
 | 
			
		||||
		FlagsAppGenTx:    fsAppGenTx,
 | 
			
		||||
		AppGenTx:         KavaAppGenTx,
 | 
			
		||||
		AppGenState:      KavaAppGenStateJSON,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Define format for GenTx json
 | 
			
		||||
type KavaGenTx struct {
 | 
			
		||||
	Name    string         `json:"name"`
 | 
			
		||||
	Address sdk.AccAddress `json:"address"`
 | 
			
		||||
	PubKey  string         `json:"pub_key"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Generate a genesis transsction
 | 
			
		||||
func KavaAppGenTx(cdc *wire.Codec, pk crypto.PubKey, genTxConfig config.GenTx) (
 | 
			
		||||
	appGenTx, cliPrint json.RawMessage, validator tmtypes.GenesisValidator, err error) {
 | 
			
		||||
 | 
			
		||||
	// Generate address and secret key for the validator
 | 
			
		||||
	if genTxConfig.Name == "" {
 | 
			
		||||
		return nil, nil, tmtypes.GenesisValidator{}, errors.New("Must specify --name (validator moniker)")
 | 
			
		||||
	}
 | 
			
		||||
	var addr sdk.AccAddress
 | 
			
		||||
	var secret string
 | 
			
		||||
	addr, secret, err = server.GenerateSaveCoinKey(genTxConfig.CliRoot, genTxConfig.Name, "password", genTxConfig.Overwrite)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Create string to print out
 | 
			
		||||
	mm := map[string]string{"secret": secret}
 | 
			
		||||
	var bz []byte
 | 
			
		||||
	bz, err = cdc.MarshalJSON(mm)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	cliPrint = json.RawMessage(bz)
 | 
			
		||||
 | 
			
		||||
	// Create genTx and validator
 | 
			
		||||
	appGenTx, _, validator, err = KavaAppGenTxNF(cdc, pk, addr, genTxConfig.Name)
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// TODO combine with KavaAppGenTx
 | 
			
		||||
func KavaAppGenTxNF(cdc *wire.Codec, pk crypto.PubKey, addr sdk.AccAddress, name string) (
 | 
			
		||||
	appGenTx, cliPrint json.RawMessage, validator tmtypes.GenesisValidator, err error) {
 | 
			
		||||
 | 
			
		||||
	// Create the gentx
 | 
			
		||||
	var bz []byte
 | 
			
		||||
	genTx := KavaGenTx{
 | 
			
		||||
		Name:    name,
 | 
			
		||||
		Address: addr,
 | 
			
		||||
		PubKey:  sdk.MustBech32ifyAccPub(pk),
 | 
			
		||||
	}
 | 
			
		||||
	bz, err = wire.MarshalJSONIndent(cdc, genTx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	appGenTx = json.RawMessage(bz)
 | 
			
		||||
 | 
			
		||||
	// Create the validator
 | 
			
		||||
	validator = tmtypes.GenesisValidator{
 | 
			
		||||
		PubKey: pk,
 | 
			
		||||
		Power:  numStartingTokensValidators,
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create the core parameters for genesis initialization
 | 
			
		||||
// note that the pubkey input is this machines pubkey
 | 
			
		||||
func KavaAppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (genesisState GenesisState, err error) {
 | 
			
		||||
 | 
			
		||||
	if len(appGenTxs) == 0 {
 | 
			
		||||
		err = errors.New("must provide at least 1 genesis transaction")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// start with the default staking genesis state
 | 
			
		||||
	stakeData := stake.DefaultGenesisState()
 | 
			
		||||
	// change denom of staking coin
 | 
			
		||||
	stakeData.Params.BondDenom = "KVA"
 | 
			
		||||
 | 
			
		||||
	// get genesis flag account information
 | 
			
		||||
	genaccs := make([]GenesisAccount, len(appGenTxs))
 | 
			
		||||
	for i, appGenTx := range appGenTxs {
 | 
			
		||||
 | 
			
		||||
		var genTx KavaGenTx
 | 
			
		||||
		err = cdc.UnmarshalJSON(appGenTx, &genTx)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// create the genesis account
 | 
			
		||||
		accAuth := auth.NewBaseAccountWithAddress(genTx.Address)
 | 
			
		||||
		accAuth.Coins = sdk.Coins{
 | 
			
		||||
			{"KVA", sdk.NewInt(numStartingTokensAccounts)},
 | 
			
		||||
		}
 | 
			
		||||
		acc := NewGenesisAccount(&accAuth)
 | 
			
		||||
		genaccs[i] = acc
 | 
			
		||||
		stakeData.Pool.LooseTokens = stakeData.Pool.LooseTokens.Add(sdk.NewRat(numStartingTokensAccounts)) // increase the supply
 | 
			
		||||
 | 
			
		||||
		// add the validator
 | 
			
		||||
		if len(genTx.Name) > 0 {
 | 
			
		||||
			desc := stake.NewDescription(genTx.Name, "", "", "")
 | 
			
		||||
			validator := stake.NewValidator(genTx.Address,
 | 
			
		||||
				sdk.MustGetAccPubKeyBech32(genTx.PubKey), desc)
 | 
			
		||||
 | 
			
		||||
			stakeData.Pool.LooseTokens = stakeData.Pool.LooseTokens.Add(sdk.NewRat(numStartingTokensValidators)) // increase the supply
 | 
			
		||||
 | 
			
		||||
			// add some new shares to the validator
 | 
			
		||||
			var issuedDelShares sdk.Rat
 | 
			
		||||
			validator, stakeData.Pool, issuedDelShares = validator.AddTokensFromDel(stakeData.Pool, numStartingTokensValidators)
 | 
			
		||||
			stakeData.Validators = append(stakeData.Validators, validator)
 | 
			
		||||
 | 
			
		||||
			// create the self-delegation from the issuedDelShares
 | 
			
		||||
			delegation := stake.Delegation{
 | 
			
		||||
				DelegatorAddr: validator.Owner,
 | 
			
		||||
				ValidatorAddr: validator.Owner,
 | 
			
		||||
				Shares:        issuedDelShares,
 | 
			
		||||
				Height:        0,
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			stakeData.Bonds = append(stakeData.Bonds, delegation)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// create the final app state
 | 
			
		||||
	genesisState = GenesisState{
 | 
			
		||||
		Accounts:  genaccs,
 | 
			
		||||
		StakeData: stakeData,
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Run KavaAppGenState then convert to JSON
 | 
			
		||||
func KavaAppGenStateJSON(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState json.RawMessage, err error) {
 | 
			
		||||
 | 
			
		||||
	// create the final app state
 | 
			
		||||
	genesisState, err := KavaAppGenState(cdc, appGenTxs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	appState, err = wire.MarshalJSONIndent(cdc, genesisState)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
// A file, genesis.json, is created with the initial state of the kava network.
 | 
			
		||||
// This is done by creating an AppInit object to be handed to the server when it creates commands.
 | 
			
		||||
// When `kvd init` is run, a genesis tx is created. Then, from that, an initial app state.
 | 
			
		||||
@ -29,11 +229,11 @@ func CreateAppInit() server.AppInit {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func KavaAppGenTx(cdc *wire.Codec, pk crypto.PubKey) (
 | 
			
		||||
func KavaAppGenTx(cdc *wire.Codec, pk crypto.PubKey, genTxConfig config.GenTx) (
 | 
			
		||||
	appGenTx, cliPrint json.RawMessage, validator tmtypes.GenesisValidator, err error) {
 | 
			
		||||
 | 
			
		||||
	// Generate address and secret key for the validator
 | 
			
		||||
	var addr sdk.Address
 | 
			
		||||
	var addr sdk.AccAddress
 | 
			
		||||
	var secret string
 | 
			
		||||
	addr, secret, err = server.GenerateCoinKey()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@ -103,204 +303,4 @@ func KavaAppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState jso
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
// --------------------- default init --------------------------
 | 
			
		||||
 | 
			
		||||
// simple default application init
 | 
			
		||||
var DefaultAppInit = AppInit{
 | 
			
		||||
	AppGenTx:    SimpleAppGenTx,
 | 
			
		||||
	AppGenState: SimpleAppGenState,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// simple genesis tx
 | 
			
		||||
type SimpleGenTx struct {
 | 
			
		||||
	Addr sdk.Address `json:"addr"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Generate a genesis transaction
 | 
			
		||||
func SimpleAppGenTx(cdc *wire.Codec, pk crypto.PubKey) (
 | 
			
		||||
	appGenTx, cliPrint json.RawMessage, validator tmtypes.GenesisValidator, err error) {
 | 
			
		||||
 | 
			
		||||
	var addr sdk.Address
 | 
			
		||||
	var secret string
 | 
			
		||||
	addr, secret, err = GenerateCoinKey()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var bz []byte
 | 
			
		||||
	simpleGenTx := SimpleGenTx{addr}
 | 
			
		||||
	bz, err = cdc.MarshalJSON(simpleGenTx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	appGenTx = json.RawMessage(bz)
 | 
			
		||||
 | 
			
		||||
	mm := map[string]string{"secret": secret}
 | 
			
		||||
	bz, err = cdc.MarshalJSON(mm)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	cliPrint = json.RawMessage(bz)
 | 
			
		||||
 | 
			
		||||
	validator = tmtypes.GenesisValidator{
 | 
			
		||||
		PubKey: pk,
 | 
			
		||||
		Power:  10,
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// create the genesis app state
 | 
			
		||||
func SimpleAppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState json.RawMessage, err error) {
 | 
			
		||||
 | 
			
		||||
	if len(appGenTxs) != 1 {
 | 
			
		||||
		err = errors.New("must provide a single genesis transaction")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var genTx SimpleGenTx
 | 
			
		||||
	err = cdc.UnmarshalJSON(appGenTxs[0], &genTx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	appState = json.RawMessage(fmt.Sprintf(`{
 | 
			
		||||
  "accounts": [{
 | 
			
		||||
    "address": "%s",
 | 
			
		||||
    "coins": [
 | 
			
		||||
      {
 | 
			
		||||
        "denom": "mycoin",
 | 
			
		||||
        "amount": 9007199254740992
 | 
			
		||||
      }
 | 
			
		||||
    ]
 | 
			
		||||
  }]
 | 
			
		||||
}`, genTx.Addr.String()))
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// -------------------- gaia init ----------------------
 | 
			
		||||
 | 
			
		||||
// simple genesis tx
 | 
			
		||||
type GaiaGenTx struct {
 | 
			
		||||
	Name    string        `json:"name"`
 | 
			
		||||
	Address sdk.Address   `json:"address"`
 | 
			
		||||
	PubKey  crypto.PubKey `json:"pub_key"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Generate a gaia genesis transaction with flags
 | 
			
		||||
func GaiaAppGenTx(cdc *wire.Codec, pk crypto.PubKey) (
 | 
			
		||||
	appGenTx, cliPrint json.RawMessage, validator tmtypes.GenesisValidator, err error) {
 | 
			
		||||
	clientRoot := viper.GetString(flagClientHome)
 | 
			
		||||
	overwrite := viper.GetBool(flagOWK)
 | 
			
		||||
	name := viper.GetString(flagName)
 | 
			
		||||
	if name == "" {
 | 
			
		||||
		return nil, nil, tmtypes.GenesisValidator{}, errors.New("Must specify --name (validator moniker)")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var addr sdk.Address
 | 
			
		||||
	var secret string
 | 
			
		||||
	addr, secret, err = server.GenerateSaveCoinKey(clientRoot, name, "1234567890", overwrite)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	mm := map[string]string{"secret": secret}
 | 
			
		||||
	var bz []byte
 | 
			
		||||
	bz, err = cdc.MarshalJSON(mm)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	cliPrint = json.RawMessage(bz)
 | 
			
		||||
	appGenTx,_,validator,err = GaiaAppGenTxNF(cdc, pk, addr, name, overwrite)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Generate a gaia genesis transaction without flags
 | 
			
		||||
func GaiaAppGenTxNF(cdc *wire.Codec, pk crypto.PubKey, addr sdk.Address, name string, overwrite bool) (
 | 
			
		||||
	appGenTx, cliPrint json.RawMessage, validator tmtypes.GenesisValidator, err error) {
 | 
			
		||||
 | 
			
		||||
	var bz []byte
 | 
			
		||||
	gaiaGenTx := GaiaGenTx{
 | 
			
		||||
		Name:    name,
 | 
			
		||||
		Address: addr,
 | 
			
		||||
		PubKey:  pk,
 | 
			
		||||
	}
 | 
			
		||||
	bz, err = wire.MarshalJSONIndent(cdc, gaiaGenTx)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	appGenTx = json.RawMessage(bz)
 | 
			
		||||
 | 
			
		||||
	validator = tmtypes.GenesisValidator{
 | 
			
		||||
		PubKey: pk,
 | 
			
		||||
		Power:  freeFermionVal,
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Create the core parameters for genesis initialization for gaia
 | 
			
		||||
// note that the pubkey input is this machines pubkey
 | 
			
		||||
func GaiaAppGenState(cdc *wire.Codec, appGenTxs []json.RawMessage) (genesisState GenesisState, err error) {
 | 
			
		||||
 | 
			
		||||
	if len(appGenTxs) == 0 {
 | 
			
		||||
		err = errors.New("must provide at least genesis transaction")
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// start with the default staking genesis state
 | 
			
		||||
	stakeData := stake.DefaultGenesisState()
 | 
			
		||||
 | 
			
		||||
	// get genesis flag account information
 | 
			
		||||
	genaccs := make([]GenesisAccount, len(appGenTxs))
 | 
			
		||||
	for i, appGenTx := range appGenTxs {
 | 
			
		||||
 | 
			
		||||
		var genTx GaiaGenTx
 | 
			
		||||
		err = cdc.UnmarshalJSON(appGenTx, &genTx)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// create the genesis account, give'm few steaks and a buncha token with there name
 | 
			
		||||
		accAuth := auth.NewBaseAccountWithAddress(genTx.Address)
 | 
			
		||||
		accAuth.Coins = sdk.Coins{
 | 
			
		||||
			{genTx.Name + "Token", 1000},
 | 
			
		||||
			{"steak", freeFermionsAcc},
 | 
			
		||||
		}
 | 
			
		||||
		acc := NewGenesisAccount(&accAuth)
 | 
			
		||||
		genaccs[i] = acc
 | 
			
		||||
		stakeData.Pool.LooseUnbondedTokens += freeFermionsAcc // increase the supply
 | 
			
		||||
 | 
			
		||||
		// add the validator
 | 
			
		||||
		if len(genTx.Name) > 0 {
 | 
			
		||||
			desc := stake.NewDescription(genTx.Name, "", "", "")
 | 
			
		||||
			validator := stake.NewValidator(genTx.Address, genTx.PubKey, desc)
 | 
			
		||||
			validator.PoolShares = stake.NewBondedShares(sdk.NewRat(freeFermionVal))
 | 
			
		||||
			stakeData.Validators = append(stakeData.Validators, validator)
 | 
			
		||||
 | 
			
		||||
			// pool logic
 | 
			
		||||
			stakeData.Pool.BondedTokens += freeFermionVal
 | 
			
		||||
			stakeData.Pool.BondedShares = sdk.NewRat(stakeData.Pool.BondedTokens)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// create the final app state
 | 
			
		||||
	genesisState = GenesisState{
 | 
			
		||||
		Accounts:  genaccs,
 | 
			
		||||
		StakeData: stakeData,
 | 
			
		||||
	}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// GaiaAppGenState but with JSON
 | 
			
		||||
func GaiaAppGenStateJSON(cdc *wire.Codec, appGenTxs []json.RawMessage) (appState json.RawMessage, err error) {
 | 
			
		||||
 | 
			
		||||
	// create the final app state
 | 
			
		||||
	genesisState, err := GaiaAppGenState(cdc, appGenTxs)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	appState, err = wire.MarshalJSONIndent(cdc, genesisState)
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
package lcd
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	//"encoding/hex"
 | 
			
		||||
@ -10,6 +11,7 @@ import (
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/wire"
 | 
			
		||||
	"github.com/cosmos/cosmos-sdk/x/auth"
 | 
			
		||||
)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
type TxBody struct {
 | 
			
		||||
	TxBase64 string `json:"txbase64"`
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
package lcd
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
import (
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"os"
 | 
			
		||||
@ -24,6 +25,7 @@ import (
 | 
			
		||||
	//ibc "github.com/cosmos/cosmos-sdk/x/ibc/client/rest"
 | 
			
		||||
	//stake "github.com/cosmos/cosmos-sdk/x/stake/client/rest"
 | 
			
		||||
)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// ServeCommand will generate a long-running rest server
 | 
			
		||||
// (aka Light Client Daemon) that exposes functionality similar
 | 
			
		||||
 | 
			
		||||
@ -1,9 +1,11 @@
 | 
			
		||||
package lcd
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
import (
 | 
			
		||||
	amino "github.com/tendermint/go-amino"
 | 
			
		||||
	ctypes "github.com/tendermint/tendermint/rpc/core/types"
 | 
			
		||||
)
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
var cdc = amino.NewCodec()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,8 @@
 | 
			
		||||
package types
 | 
			
		||||
 | 
			
		||||
// DEPRECATED
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
import (
 | 
			
		||||
	sdk "github.com/cosmos/cosmos-sdk/types"
 | 
			
		||||
	crypto "github.com/tendermint/go-crypto"
 | 
			
		||||
@ -41,7 +44,7 @@ func GetAccountDecoder(cdc *wire.Codec) auth.AccountDecoder {
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
//___________________________________________________________________________________
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
type GenTx struct {
 | 
			
		||||
	Address sdk.Address   `json:"address"`
 | 
			
		||||
	PubKey  crypto.PubKey `json:"pub_key"`
 | 
			
		||||
@ -75,3 +78,4 @@ func (ga *GenesisAccount) ToAppAccount() (acc *auth.BaseAccount, err error) {
 | 
			
		||||
		Coins:   ga.Coins.Sort(),
 | 
			
		||||
	}, nil
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										44
									
								
								kava-logo.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								kava-logo.svg
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,44 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
 | 
			
		||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
 | 
			
		||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 | 
			
		||||
	 width="725px" height="213px" viewBox="0 0 725 213" enable-background="new 0 0 725 213" xml:space="preserve">
 | 
			
		||||
<g>
 | 
			
		||||
	<g opacity="0.2">
 | 
			
		||||
		<polygon fill="#FF564F" points="30,213 111.625,106.851 30,0 20.246,38.336 72.809,106.851 22.664,171.296 		"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<polygon fill="#FF564F" points="154.344,213 72.211,106.851 154.125,0 193,0 111.027,106.851 193.625,213 		"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<rect fill="#FF564F" width="30" height="213"/>
 | 
			
		||||
	</g>
 | 
			
		||||
	<g>
 | 
			
		||||
		<path fill="#FF564F" d="M288.04,39.144c-12.1,0-23.001,1.318-32.403,3.917c-9.313,2.58-18.633,6.056-27.701,10.332l-2.473,1.167
 | 
			
		||||
			l9.252,25.495l2.977-1.405c7.314-3.451,14.881-6.231,22.489-8.262c7.549-2.01,16.08-3.028,25.355-3.028
 | 
			
		||||
			c14.401,0,25.424,3.462,33.168,10.29C326.336,84.381,330,94.554,330,107.887v1.038c-6-1.637-12.337-2.99-18.681-4.032
 | 
			
		||||
			c-7.742-1.272-16.909-1.918-27.45-1.918c-10.432,0-20.067,1.193-28.741,3.548c-8.765,2.384-16.429,5.904-22.829,10.463
 | 
			
		||||
			c-6.528,4.646-11.531,10.538-15.07,17.512c-3.538,6.964-5.23,15.158-5.23,24.357v0.626c0,8.815,1.772,16.671,5.445,23.348
 | 
			
		||||
			c3.632,6.604,8.441,12.239,14.38,16.745c5.909,4.489,12.749,7.867,20.369,10.039c7.543,2.152,15.284,3.244,23.028,3.244
 | 
			
		||||
			c14.647,0,26.893-2.927,36.813-8.698c7.052-4.105,12.965-8.749,17.965-13.859V213h30V107.539c0-21.171-5.885-37.887-17.68-49.682
 | 
			
		||||
			C329.902,45.439,311.703,39.144,288.04,39.144z M280.081,187.145c-5.101,0-10.005-0.691-14.581-2.057
 | 
			
		||||
			c-4.535-1.347-8.585-3.293-12.042-5.786c-3.356-2.419-5.818-5.483-7.772-9.111c-1.935-3.584-2.686-7.661-2.686-12.118v-0.626
 | 
			
		||||
			c0-8.815,3.391-15.708,10.839-21.071c7.658-5.517,18.654-8.313,32.907-8.313c9.735,0,18.548,0.716,26.031,2.128
 | 
			
		||||
			c6.664,1.263,12.223,2.613,18.223,4.023v12.649c0,5.912-1.437,11.356-3.999,16.185c-2.594,4.894-6.277,9.184-10.81,12.751
 | 
			
		||||
			c-4.585,3.604-10.025,6.423-16.101,8.377C293.978,186.146,287.223,187.145,280.081,187.145z"/>
 | 
			
		||||
		<polygon fill="#FF564F" points="473.281,171.271 420.85,42 387.678,42 461.364,213 484.532,213 558.564,42 526.015,42 		"/>
 | 
			
		||||
		<path fill="#FF564F" d="M707.237,57.857c-12.418-12.418-30.707-18.714-54.369-18.714c-12.1,0-22.999,1.318-32.4,3.917
 | 
			
		||||
			c-9.313,2.58-18.631,6.056-27.7,10.332l-2.472,1.167l9.252,25.495l2.978-1.405c7.314-3.451,14.881-6.231,22.489-8.262
 | 
			
		||||
			c7.549-2.01,16.08-3.028,25.355-3.028c14.401,0,25.507,3.462,33.251,10.29C691.253,84.381,695,94.554,695,107.887v1.038
 | 
			
		||||
			c-6-1.637-12.42-2.99-18.764-4.032c-7.742-1.272-16.951-1.918-27.491-1.918c-10.432,0-20.088,1.193-28.762,3.548
 | 
			
		||||
			c-8.765,2.384-16.439,5.904-22.839,10.463c-6.528,4.646-11.453,10.538-14.992,17.512c-3.538,6.964-5.152,15.158-5.152,24.357
 | 
			
		||||
			v0.626c0,8.815,1.689,16.671,5.362,23.348c3.632,6.604,8.399,12.239,14.339,16.745c5.909,4.489,12.728,7.867,20.348,10.039
 | 
			
		||||
			c7.543,2.152,15.273,3.244,23.017,3.244c14.647,0,26.971-2.927,36.891-8.698c7.052-4.105,13.043-8.749,18.043-13.859V213h30
 | 
			
		||||
			V107.539C725,86.368,719.032,69.652,707.237,57.857z M644.915,187.145c-5.101,0-10.005-0.691-14.581-2.057
 | 
			
		||||
			c-4.535-1.347-8.585-3.293-12.042-5.786c-3.356-2.419-6.235-5.483-8.189-9.111c-1.935-3.584-3.103-7.661-3.103-12.118v-0.626
 | 
			
		||||
			c0-8.815,3.808-15.708,11.256-21.071c7.658-5.517,18.862-8.313,33.116-8.313c9.735,0,18.735,0.716,26.218,2.128
 | 
			
		||||
			c6.664,1.263,12.41,2.613,18.41,4.023v12.649c0,5.912-1.52,11.356-4.082,16.185c-2.594,4.894-6.318,9.184-10.852,12.751
 | 
			
		||||
			c-4.585,3.604-10.046,6.423-16.122,8.377C658.833,186.146,652.057,187.145,644.915,187.145z"/>
 | 
			
		||||
	</g>
 | 
			
		||||
</g>
 | 
			
		||||
</svg>
 | 
			
		||||
| 
		 After Width: | Height: | Size: 3.7 KiB  | 
							
								
								
									
										99
									
								
								testnets/kava-test-0/genesis.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								testnets/kava-test-0/genesis.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
{
 | 
			
		||||
  "genesis_time": "2018-08-16T20:19:19.700191483Z",
 | 
			
		||||
  "chain_id": "kava-test-0",
 | 
			
		||||
  "consensus_params": {
 | 
			
		||||
    "block_size_params": {
 | 
			
		||||
      "max_bytes": "22020096",
 | 
			
		||||
      "max_txs": "10000",
 | 
			
		||||
      "max_gas": "-1"
 | 
			
		||||
    },
 | 
			
		||||
    "tx_size_params": {
 | 
			
		||||
      "max_bytes": "10240",
 | 
			
		||||
      "max_gas": "-1"
 | 
			
		||||
    },
 | 
			
		||||
    "block_gossip_params": {
 | 
			
		||||
      "block_part_size_bytes": "65536"
 | 
			
		||||
    },
 | 
			
		||||
    "evidence_params": {
 | 
			
		||||
      "max_age": "100000"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "validators": [
 | 
			
		||||
    {
 | 
			
		||||
      "pub_key": {
 | 
			
		||||
        "type": "tendermint/PubKeyEd25519",
 | 
			
		||||
        "value": "dnl/bkhWxCMuq5ia4AWwU4r2HRl+MJjU4bSS0qsmI/0="
 | 
			
		||||
      },
 | 
			
		||||
      "power": "500000",
 | 
			
		||||
      "name": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "app_hash": "",
 | 
			
		||||
  "app_state": {
 | 
			
		||||
    "accounts": [
 | 
			
		||||
      {
 | 
			
		||||
        "address": "cosmosaccaddr10fa3g29glhkekp6nhsqq4njwrpv69kl9zt4a7q",
 | 
			
		||||
        "coins": [
 | 
			
		||||
          {
 | 
			
		||||
            "denom": "KVA",
 | 
			
		||||
            "amount": "500000"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "stake": {
 | 
			
		||||
      "pool": {
 | 
			
		||||
        "loose_tokens": "1000000",
 | 
			
		||||
        "bonded_tokens": "0",
 | 
			
		||||
        "inflation_last_time": "0",
 | 
			
		||||
        "inflation": "7/100",
 | 
			
		||||
        "date_last_commission_reset": "0",
 | 
			
		||||
        "prev_bonded_shares": "0"
 | 
			
		||||
      },
 | 
			
		||||
      "params": {
 | 
			
		||||
        "inflation_rate_change": "13/100",
 | 
			
		||||
        "inflation_max": "1/5",
 | 
			
		||||
        "inflation_min": "7/100",
 | 
			
		||||
        "goal_bonded": "67/100",
 | 
			
		||||
        "unbonding_time": "259200",
 | 
			
		||||
        "max_validators": 100,
 | 
			
		||||
        "bond_denom": "KVA"
 | 
			
		||||
      },
 | 
			
		||||
      "validators": [
 | 
			
		||||
        {
 | 
			
		||||
          "owner": "cosmosaccaddr10fa3g29glhkekp6nhsqq4njwrpv69kl9zt4a7q",
 | 
			
		||||
          "pub_key": {
 | 
			
		||||
            "type": "tendermint/PubKeyEd25519",
 | 
			
		||||
            "value": "dnl/bkhWxCMuq5ia4AWwU4r2HRl+MJjU4bSS0qsmI/0="
 | 
			
		||||
          },
 | 
			
		||||
          "revoked": false,
 | 
			
		||||
          "status": 0,
 | 
			
		||||
          "tokens": "500000",
 | 
			
		||||
          "delegator_shares": "500000",
 | 
			
		||||
          "description": {
 | 
			
		||||
            "moniker": "kava-validator",
 | 
			
		||||
            "identity": "",
 | 
			
		||||
            "website": "",
 | 
			
		||||
            "details": ""
 | 
			
		||||
          },
 | 
			
		||||
          "bond_height": "0",
 | 
			
		||||
          "bond_intra_tx_counter": 0,
 | 
			
		||||
          "proposer_reward_pool": [],
 | 
			
		||||
          "commission": "0",
 | 
			
		||||
          "commission_max": "0",
 | 
			
		||||
          "commission_change_rate": "0",
 | 
			
		||||
          "commission_change_today": "0",
 | 
			
		||||
          "prev_bonded_tokens": "0"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "bonds": [
 | 
			
		||||
        {
 | 
			
		||||
          "delegator_addr": "cosmosaccaddr10fa3g29glhkekp6nhsqq4njwrpv69kl9zt4a7q",
 | 
			
		||||
          "validator_addr": "cosmosaccaddr10fa3g29glhkekp6nhsqq4njwrpv69kl9zt4a7q",
 | 
			
		||||
          "shares": "500000",
 | 
			
		||||
          "height": "0"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										99
									
								
								testnets/kava-test-1/genesis.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								testnets/kava-test-1/genesis.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
			
		||||
{
 | 
			
		||||
  "genesis_time": "2018-08-17T20:36:46.515426797Z",
 | 
			
		||||
  "chain_id": "kava-test-1",
 | 
			
		||||
  "consensus_params": {
 | 
			
		||||
    "block_size_params": {
 | 
			
		||||
      "max_bytes": "22020096",
 | 
			
		||||
      "max_txs": "10000",
 | 
			
		||||
      "max_gas": "-1"
 | 
			
		||||
    },
 | 
			
		||||
    "tx_size_params": {
 | 
			
		||||
      "max_bytes": "10240",
 | 
			
		||||
      "max_gas": "-1"
 | 
			
		||||
    },
 | 
			
		||||
    "block_gossip_params": {
 | 
			
		||||
      "block_part_size_bytes": "65536"
 | 
			
		||||
    },
 | 
			
		||||
    "evidence_params": {
 | 
			
		||||
      "max_age": "100000"
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "validators": [
 | 
			
		||||
    {
 | 
			
		||||
      "pub_key": {
 | 
			
		||||
        "type": "tendermint/PubKeyEd25519",
 | 
			
		||||
        "value": "2XxN3kL5CWNyI9x4o3+iG//R+BVyTwmhx0ZVNGQOAjo="
 | 
			
		||||
      },
 | 
			
		||||
      "power": "1000",
 | 
			
		||||
      "name": ""
 | 
			
		||||
    }
 | 
			
		||||
  ],
 | 
			
		||||
  "app_hash": "",
 | 
			
		||||
  "app_state": {
 | 
			
		||||
    "accounts": [
 | 
			
		||||
      {
 | 
			
		||||
        "address": "cosmosaccaddr1fr2eescsy22uw93x9df2dernrd6llyar66e4gy",
 | 
			
		||||
        "coins": [
 | 
			
		||||
          {
 | 
			
		||||
            "denom": "KVA",
 | 
			
		||||
            "amount": "99000"
 | 
			
		||||
          }
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    ],
 | 
			
		||||
    "stake": {
 | 
			
		||||
      "pool": {
 | 
			
		||||
        "loose_tokens": "100000",
 | 
			
		||||
        "bonded_tokens": "0",
 | 
			
		||||
        "inflation_last_time": "0",
 | 
			
		||||
        "inflation": "7/100",
 | 
			
		||||
        "date_last_commission_reset": "0",
 | 
			
		||||
        "prev_bonded_shares": "0"
 | 
			
		||||
      },
 | 
			
		||||
      "params": {
 | 
			
		||||
        "inflation_rate_change": "13/100",
 | 
			
		||||
        "inflation_max": "1/5",
 | 
			
		||||
        "inflation_min": "7/100",
 | 
			
		||||
        "goal_bonded": "67/100",
 | 
			
		||||
        "unbonding_time": "259200",
 | 
			
		||||
        "max_validators": 100,
 | 
			
		||||
        "bond_denom": "KVA"
 | 
			
		||||
      },
 | 
			
		||||
      "validators": [
 | 
			
		||||
        {
 | 
			
		||||
          "owner": "cosmosaccaddr1fr2eescsy22uw93x9df2dernrd6llyar66e4gy",
 | 
			
		||||
          "pub_key": {
 | 
			
		||||
            "type": "tendermint/PubKeyEd25519",
 | 
			
		||||
            "value": "2XxN3kL5CWNyI9x4o3+iG//R+BVyTwmhx0ZVNGQOAjo="
 | 
			
		||||
          },
 | 
			
		||||
          "revoked": false,
 | 
			
		||||
          "status": 0,
 | 
			
		||||
          "tokens": "1000",
 | 
			
		||||
          "delegator_shares": "1000",
 | 
			
		||||
          "description": {
 | 
			
		||||
            "moniker": "kava-validator",
 | 
			
		||||
            "identity": "",
 | 
			
		||||
            "website": "",
 | 
			
		||||
            "details": ""
 | 
			
		||||
          },
 | 
			
		||||
          "bond_height": "0",
 | 
			
		||||
          "bond_intra_tx_counter": 0,
 | 
			
		||||
          "proposer_reward_pool": [],
 | 
			
		||||
          "commission": "0",
 | 
			
		||||
          "commission_max": "0",
 | 
			
		||||
          "commission_change_rate": "0",
 | 
			
		||||
          "commission_change_today": "0",
 | 
			
		||||
          "prev_bonded_tokens": "0"
 | 
			
		||||
        }
 | 
			
		||||
      ],
 | 
			
		||||
      "bonds": [
 | 
			
		||||
        {
 | 
			
		||||
          "delegator_addr": "cosmosaccaddr1fr2eescsy22uw93x9df2dernrd6llyar66e4gy",
 | 
			
		||||
          "validator_addr": "cosmosaccaddr1fr2eescsy22uw93x9df2dernrd6llyar66e4gy",
 | 
			
		||||
          "shares": "1000",
 | 
			
		||||
          "height": "0"
 | 
			
		||||
        }
 | 
			
		||||
      ]
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user