[R4R] fixing dredd tests for bump to v38 of sdk (#464)

* updates, logging, fix key generation using mnemonic etc, still a wip

* updates

* fix: use test backend for keybase

* fix: add keyring flags for all commands

* fix: update cdp params to account for breaking changes

* fixed issues, all tests now passing

* clean up comments

Co-authored-by: John Maheswaran <john@noreply>
Co-authored-by: Kevin Davis <kjydavis3@gmail.com>
This commit is contained in:
jmahess 2020-05-04 20:21:28 -04:00 committed by GitHub
parent 9d98514aaf
commit 56a311dc04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 63 additions and 74 deletions

View File

@ -1,11 +1,10 @@
#! /bin/bash #! /bin/bash
# kill kava if it is already running # kill kava if it is already running
pgrep kvd | xargs kill pkill kvd && pkill kvcli
pgrep kvcli | xargs kill
# TODO import from development environment in envkey # TODO import from development environment in envkey
password="password" password=""
validatorMnemonic="equip town gesture square tomorrow volume nephew minute witness beef rich gadget actress egg sing secret pole winter alarm law today check violin uncover" validatorMnemonic="equip town gesture square tomorrow volume nephew minute witness beef rich gadget actress egg sing secret pole winter alarm law today check violin uncover"
# address: kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c # address: kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c
# address: kavavaloper1ffv7nhd3z6sych2qpqkk03ec6hzkmufyz4scd0 # address: kavavaloper1ffv7nhd3z6sych2qpqkk03ec6hzkmufyz4scd0
@ -24,9 +23,10 @@ rm -rf $kvcliHome
mkdir /tmp/kvdHome mkdir /tmp/kvdHome
mkdir /tmp/kvcliHome mkdir /tmp/kvcliHome
# create validator key # create validator key
printf "$password\n$validatorMnemonic\n" | kvcli keys add vlad --recover --home $kvcliHome printf "$validatorMnemonic\n" | kvcli keys add vlad --recover --home $kvcliHome --keyring-backend test
# create faucet key # create faucet key
printf "$password\n$faucet\n" | kvcli --home $kvcliHome keys add faucet --recover --home $kvcliHome printf "$faucet\n" | kvcli --home $kvcliHome keys add faucet --recover --home $kvcliHome --keyring-backend test
# function used to show that it is still loading # function used to show that it is still loading
showLoading() { showLoading() {
mypid=$! mypid=$!
@ -51,11 +51,11 @@ kvd --home $kvdHome init --chain-id=testing vlad # doesn't need to be the same a
} > /dev/null 2>&1 } > /dev/null 2>&1
kvcli --home $kvcliHome config chain-id testing # or set trust-node true kvcli --home $kvcliHome config chain-id testing # or set trust-node true
# add validator account to genesis # add validator account to genesis
kvd --home $kvdHome add-genesis-account $(kvcli --home $kvcliHome keys show vlad -a) 10000000000000stake,1000000000000xrp,100000000000btc kvd --home $kvdHome add-genesis-account $(kvcli keys show vlad -a --keyring-backend test --home $kvcliHome) 10000000000000stake,1000000000000xrp,100000000000btc
# add faucet account to genesis # add faucet account to genesis
kvd --home $kvdHome add-genesis-account $(kvcli --home $kvcliHome keys show faucet -a) 10000000000000stake,1000000000000xrp,100000000000btc kvd --home $kvdHome add-genesis-account $(kvcli keys show faucet -a --keyring-backend test --home $kvcliHome) 10000000000000stake,1000000000000xrp,100000000000btc
# Create a delegation tx for the validator and add to genesis # Create a delegation tx for the validator and add to genesis
printf "$password\n" | kvd --home $kvdHome gentx --name vlad --home-client $kvcliHome kvd --home $kvdHome gentx --name vlad --home-client $kvcliHome --keyring-backend test
{ {
kvd --home $kvdHome collect-gentxs kvd --home $kvdHome collect-gentxs
} > /dev/null 2>&1 } > /dev/null 2>&1
@ -65,7 +65,7 @@ jq '.app_state.mint.params.blocks_per_year = "31540000"' $genesis > $genesis.tmp
jq '.app_state.pricefeed.params.markets += [{"active": true, "base_asset": "xrp", "market_id": "xrp:usd", "oracles": ["kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c"], "quote_asset": "usd"}, {"active": true, "base_asset": "btc", "market_id": "btc:usd", "oracles": ["kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c"], "quote_asset": "usd"}]' $genesis > $genesis.tmp && mv $genesis.tmp $genesis jq '.app_state.pricefeed.params.markets += [{"active": true, "base_asset": "xrp", "market_id": "xrp:usd", "oracles": ["kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c"], "quote_asset": "usd"}, {"active": true, "base_asset": "btc", "market_id": "btc:usd", "oracles": ["kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c"], "quote_asset": "usd"}]' $genesis > $genesis.tmp && mv $genesis.tmp $genesis
jq '.app_state.pricefeed.posted_prices += [{"expiry": "2050-01-01T00:00:00Z", "market_id": "btc:usd", "oracle_address": "kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c", "price": "8700.0"}, {"expiry": "2050-01-01T00:00:00Z", "market_id": "xrp:usd", "oracle_address": "kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c", "price": "0.25"}]' $genesis > $genesis.tmp && mv $genesis.tmp $genesis jq '.app_state.pricefeed.posted_prices += [{"expiry": "2050-01-01T00:00:00Z", "market_id": "btc:usd", "oracle_address": "kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c", "price": "8700.0"}, {"expiry": "2050-01-01T00:00:00Z", "market_id": "xrp:usd", "oracle_address": "kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c", "price": "0.25"}]' $genesis > $genesis.tmp && mv $genesis.tmp $genesis
# now update cdp params # now update cdp params
jq '.app_state.cdp.params = { "circuit_breaker": false, "collateral_params": [ { "auction_size": "10000000000", "conversion_factor": "8", "debt_limit": [ { "amount": "1000000000", "denom": "usdx" } ], "denom": "btc", "liquidation_penalty": "0.05", "liquidation_ratio": "1.5", "market_id": "btc:usd", "prefix": 0, "stability_fee": "1.0000000007829977" }, { "auction_size": "100000000", "conversion_factor": "6", "debt_limit": [ { "amount": "10000000", "denom": "usdx" } ], "denom": "xrp", "liquidation_penalty": "0.1", "liquidation_ratio": "2.0", "market_id": "xrp:usd", "prefix": 1, "stability_fee": "1.0000000007829977"} ], "debt_auction_threshold": "9000000", "debt_params": [ { "conversion_factor": "6", "debt_floor": "10000000", "debt_limit": [ { "amount": "2000000000000", "denom": "usdx" } ], "denom": "usdx", "reference_asset": "usd", "savings_rate": "0.95" } ], "global_debt_limit": [ { "amount": "2000000000000", "denom": "usdx" } ], "surplus_auction_threshold": "9000000", "savings_distribution_frequency": "120000000000" }' $genesis > $genesis.tmp && mv $genesis.tmp $genesis jq '.app_state.cdp.params = { "circuit_breaker": false, "collateral_params": [ { "auction_size": "10000000000", "conversion_factor": "8", "debt_limit": { "amount": "1000000000000", "denom": "usdx" }, "denom": "btc", "liquidation_penalty": "0.05", "liquidation_ratio": "1.5", "market_id": "btc:usd", "prefix": 0, "stability_fee": "1.0000000007829977" }, { "auction_size": "100000000", "conversion_factor": "6", "debt_limit": { "amount": "1000000000000", "denom": "usdx" }, "denom": "xrp", "liquidation_penalty": "0.1", "liquidation_ratio": "2.0", "market_id": "xrp:usd", "prefix": 1, "stability_fee": "1.0000000007829977"} ], "debt_auction_threshold": "10000000000", "debt_param": { "conversion_factor": "6", "debt_floor": "10000000", "denom": "usdx", "reference_asset": "usd", "savings_rate": "0.95" }, "global_debt_limit": { "amount": "2000000000000", "denom": "usdx" }, "surplus_auction_threshold": "10000000000", "savings_distribution_frequency": "43200000000000" }' $genesis > $genesis.tmp && mv $genesis.tmp $genesis
# start the blockchain in the background, wait until it starts making blocks # start the blockchain in the background, wait until it starts making blocks
{ {
kvd start --home $kvdHome & kvdPid="$!" kvd start --home $kvdHome & kvdPid="$!"
@ -83,7 +83,7 @@ printf "\n"
rm -f rest_test/setuptest rm -f rest_test/setuptest
go build rest_test/setup/setuptest.go & showLoading "Building go test file, please wait" go build rest_test/setup/setuptest.go & showLoading "Building go test file, please wait"
# run the go code to send transactions to the chain and set it up correctly # run the go code to send transactions to the chain and set it up correctly
./setuptest $kvcliHome & showLoading "Sending messages to blockchain" ./setuptest
printf "\n" printf "\n"
printf "Blockchain setup completed" printf "Blockchain setup completed"
printf "\n\n" printf "\n\n"

View File

@ -1,19 +1,18 @@
package main package main
import ( import (
"bufio"
"bytes" "bytes"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"os" "strings"
"time" "time"
"github.com/cosmos/cosmos-sdk/client/keys"
"github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec"
crkeys "github.com/cosmos/cosmos-sdk/crypto/keys" crkeys "github.com/cosmos/cosmos-sdk/crypto/keys"
sdk "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types"
sdkrest "github.com/cosmos/cosmos-sdk/types/rest" sdkrest "github.com/cosmos/cosmos-sdk/types/rest"
"github.com/cosmos/cosmos-sdk/version"
"github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth"
authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest"
authclient "github.com/cosmos/cosmos-sdk/x/auth/client/utils" authclient "github.com/cosmos/cosmos-sdk/x/auth/client/utils"
@ -31,19 +30,19 @@ import (
) )
func init() { func init() {
version.Name = "kava"
config := sdk.GetConfig() config := sdk.GetConfig()
app.SetBech32AddressPrefixes(config) app.SetBech32AddressPrefixes(config)
app.SetBip44CoinType(config) app.SetBip44CoinType(config)
config.Seal() config.Seal()
keybase = getKeybase()
} }
var (
keybase crkeys.Keybase
)
func main() { func main() {
if len(os.Args) < 2 {
fmt.Printf("Please include the kvcli home directory as a command line argument\n")
fmt.Printf("For example: ./setuptest /tmp/kvcliHome\n")
fmt.Printf("Exiting...goodbye!\n")
return
}
// setup messages send to blockchain so it is in the correct state for testing // setup messages send to blockchain so it is in the correct state for testing
sendProposal() sendProposal()
@ -53,14 +52,6 @@ func main() {
sendUndelegation() sendUndelegation()
sendCoins() sendCoins()
sendProposal()
sendDeposit()
sendVote()
sendDelegation()
sendUndelegation()
sendCoins()
// create an XRP cdp and send to blockchain // create an XRP cdp and send to blockchain
sendXrpCdp() sendXrpCdp()
@ -234,7 +225,7 @@ func sendDeposit() {
// create a deposit transaction to send to the proposal // create a deposit transaction to send to the proposal
amount := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000)) amount := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 10000000))
deposit := gov.NewMsgDeposit(addr, 2, amount) // TODO IMPORTANT '2' must match 'x-example' in swagger.yaml deposit := gov.NewMsgDeposit(addr, 1, amount) // Note: '1' must match 'x-example' in swagger.yaml
depositToSend := []sdk.Msg{deposit} depositToSend := []sdk.Msg{deposit}
sendMsgToBlockchain(cdc, address, keyname, password, depositToSend, keybase) sendMsgToBlockchain(cdc, address, keyname, password, depositToSend, keybase)
@ -261,7 +252,7 @@ func sendVote() {
// NOW SEND THE VOTE // NOW SEND THE VOTE
// create a vote on a proposal to send to the blockchain // create a vote on a proposal to send to the blockchain
vote := gov.NewMsgVote(addr, uint64(2), types.OptionYes) // TODO IMPORTANT '2' must match 'x-example' in swagger.yaml vote := gov.NewMsgVote(addr, uint64(1), types.OptionYes) // Note: '1' must match 'x-example' in swagger.yaml
// send a vote to the blockchain // send a vote to the blockchain
voteToSend := []sdk.Msg{vote} voteToSend := []sdk.Msg{vote}
@ -281,7 +272,7 @@ func sendCoins() {
panic(err) panic(err)
} }
addrTo, err := sdk.AccAddressFromBech32("kava1ls82zzghsx0exkpr52m8vht5jqs3un0ceysshz") // TODO IMPORTANT this is the faucet address addrTo, err := sdk.AccAddressFromBech32("kava1ls82zzghsx0exkpr52m8vht5jqs3un0ceysshz") // Note: must match the faucet address
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -295,7 +286,7 @@ func sendCoins() {
// create coins // create coins
amount := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 2000000)) amount := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 2000000))
coins := bank.NewMsgSend(addrFrom, addrTo, amount) // TODO IMPORTANT '2' must match 'x-example' in swagger.yaml coins := bank.NewMsgSend(addrFrom, addrTo, amount) // Note: '1' must match 'x-example' in swagger.yaml
coinsToSend := []sdk.Msg{coins} coinsToSend := []sdk.Msg{coins}
// NOW SEND THE COINS // NOW SEND THE COINS
@ -306,14 +297,14 @@ func sendCoins() {
} }
func getTestAddress() (address string) { func getTestAddress() (address string) {
// the test address - TODO IMPORTANT make sure this lines up with startchain.sh // the test address - Note: this must match with startchain.sh
address = "kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c" address = "kava1ffv7nhd3z6sych2qpqkk03ec6hzkmufy0r2s4c"
return address return address
} }
func getKeynameAndPassword() (keyname string, password string) { func getKeynameAndPassword() (keyname string, password string) {
keyname = "vlad" // TODO - IMPORTANT this must match the keys in the startchain.sh script keyname = "vlad" // Note: this must match the keys in the startchain.sh script
password = "password" // TODO - IMPORTANT this must match the keys in the startchain.sh script password = "" // Note: this must match the keys in the startchain.sh script
return keyname, password return keyname, password
} }
@ -385,13 +376,22 @@ func sendUndelegation() {
} }
func getKeybase() crkeys.Keybase { func getKeybase() crkeys.Keybase {
if keybase != nil {
return keybase
}
// create a keybase // create a keybase
// IMPORTANT - TAKE THIS FROM COMMAND LINE PARAMETER and does NOT work with tilde i.e. ~/ does NOT work // IMPORTANT - TAKE THIS FROM COMMAND LINE PARAMETER and does NOT work with tilde i.e. ~/ does NOT work
keybase, err := keys.NewKeyBaseFromDir(os.Args[1]) // myKeybase, err := keys.NewKeyBaseFromDir("/tmp/kvcliHome")
inBuf := strings.NewReader("")
keybase, err := crkeys.NewKeyring(sdk.KeyringServiceName(),
"test", "/tmp/kvcliHome", inBuf)
if err != nil { if err != nil {
panic(err) panic(err)
} }
return keybase return keybase
} }
@ -401,16 +401,17 @@ func sendMsgToBlockchain(cdc *codec.Codec, address string, keyname string,
// get the account number and sequence number // get the account number and sequence number
accountNumber, sequenceNumber := getAccountNumberAndSequenceNumber(cdc, address) accountNumber, sequenceNumber := getAccountNumberAndSequenceNumber(cdc, address)
inBuf := bufio.NewReader(os.Stdin)
txBldr := auth.NewTxBuilderFromCLI(inBuf). txBldr := auth.NewTxBuilder(
WithTxEncoder(authclient.GetTxEncoder(cdc)).WithChainID("testing"). authclient.GetTxEncoder(cdc), accountNumber, sequenceNumber, 500000, 0,
true, "testing", "memo", sdk.NewCoins(), sdk.NewDecCoins(),
).WithTxEncoder(authclient.GetTxEncoder(cdc)).WithChainID("testing").
WithKeybase(keybase).WithAccountNumber(accountNumber). WithKeybase(keybase).WithAccountNumber(accountNumber).
WithSequence(sequenceNumber).WithGas(500000) WithSequence(sequenceNumber).WithGas(500000)
// build and sign the transaction // build and sign the transaction
// this is the *Amino* encoded version of the transaction // this is the *Amino* encoded version of the transaction
// fmt.Printf("%+v", txBldr.Keybase()) txBytes, err := txBldr.BuildAndSign("vlad", "", msg)
txBytes, err := txBldr.BuildAndSign("vlad", "password", msg)
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -433,7 +434,9 @@ func sendMsgToBlockchain(cdc *codec.Codec, address string, keyname string,
if err != nil { if err != nil {
panic(err) panic(err)
} }
// fmt.Println("post body: ", string(jsonBytes)) fmt.Println()
fmt.Println("post body: ", string(jsonBytes))
fmt.Println()
resp, err := http.Post("http://localhost:1317/txs", "application/json", bytes.NewBuffer(jsonBytes)) resp, err := http.Post("http://localhost:1317/txs", "application/json", bytes.NewBuffer(jsonBytes))
if err != nil { if err != nil {

View File

@ -237,7 +237,7 @@
description: Tx hash description: Tx hash
required: true required: true
type: string type: string
x-example: 4B2C3449FF2647BD51B54C32761FE4EBE7AE024BBE2A9898972A69BEB82D97C2 x-example: FFC8D0E5D52D330AD315E950E5C18A9D65FC640156B9A95B5AEF07DDAE32E61D
responses: responses:
200: 200:
description: Tx with the provided hash description: Tx with the provided hash
@ -400,13 +400,9 @@
owner: owner:
$ref: '#/definitions/Address' $ref: '#/definitions/Address'
collateral: collateral:
type: array $ref: '#/definitions/CoinCollateral'
items:
$ref: '#/definitions/CoinCollateral'
principal: principal:
type: array $ref: '#/definitions/CoinPrincipal'
items:
$ref: '#/definitions/CoinPrincipal'
responses: responses:
200: 200:
description: Tx was successfully generated description: Tx was successfully generated
@ -450,9 +446,7 @@
depositor: depositor:
$ref: '#/definitions/Address' $ref: '#/definitions/Address'
collateral: collateral:
type: array $ref: '#/definitions/CoinCollateral'
items:
$ref: '#/definitions/CoinCollateral'
responses: responses:
200: 200:
description: Tx was successfully generated description: Tx was successfully generated
@ -496,9 +490,7 @@
depositor: depositor:
$ref: '#/definitions/Address' $ref: '#/definitions/Address'
collateral: collateral:
type: array $ref: '#/definitions/CoinCollateral'
items:
$ref: '#/definitions/CoinCollateral'
responses: responses:
200: 200:
description: Tx was successfully generated description: Tx was successfully generated
@ -540,9 +532,7 @@
owner: owner:
$ref: '#/definitions/Address' $ref: '#/definitions/Address'
principal: principal:
type: array $ref: '#/definitions/CoinPrincipal'
items:
$ref: '#/definitions/CoinPrincipal'
responses: responses:
200: 200:
description: Tx was successfully generated description: Tx was successfully generated
@ -584,9 +574,7 @@
owner: owner:
$ref: '#/definitions/Address' $ref: '#/definitions/Address'
payment: payment:
type: array $ref: '#/definitions/CoinPrincipal'
items:
$ref: '#/definitions/CoinPrincipal'
responses: responses:
200: 200:
description: Tx was successfully generated description: Tx was successfully generated
@ -725,7 +713,7 @@
description: Server internal error description: Server internal error
/cdp/cdps/cdp/deposits/{owner}/{denom}: /cdp/cdps/cdp/deposits/{owner}/{denom}:
get: get:
summary: Get the deposits associated with the cdp owned by the input owner address and with colalteral type equal to the input collateral denom summary: Get the deposits associated with the cdp owned by the input owner address and with collateral type equal to the input collateral denom
tags: tags:
- CDP - CDP
produces: produces:
@ -1888,7 +1876,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
responses: responses:
200: 200:
description: OK description: OK
@ -1911,7 +1899,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
responses: responses:
200: 200:
description: OK description: OK
@ -1934,7 +1922,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
responses: responses:
200: 200:
description: OK description: OK
@ -1966,7 +1954,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
- description: '' - description: ''
name: post_deposit_body name: post_deposit_body
in: body in: body
@ -2007,7 +1995,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: "2" x-example: "1"
- type: string - type: string
description: Bech32 depositor address description: Bech32 depositor address
name: depositor name: depositor
@ -2039,7 +2027,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
responses: responses:
200: 200:
description: OK description: OK
@ -2071,7 +2059,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
- description: valid value of `"option"` field can be `"yes"`, `"no"`, `"no_with_veto"` and `"abstain"` - description: valid value of `"option"` field can be `"yes"`, `"no"`, `"no_with_veto"` and `"abstain"`
name: post_vote_body name: post_vote_body
in: body in: body
@ -2111,7 +2099,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
- type: string - type: string
description: Bech32 voter address description: Bech32 voter address
name: voter name: voter
@ -2143,7 +2131,7 @@
name: proposalId name: proposalId
required: true required: true
in: path in: path
x-example: '2' x-example: '1'
responses: responses:
200: 200:
description: OK description: OK
@ -3098,9 +3086,7 @@
type: string type: string
example: kava1q53rwutgpzx7szcrgzqguxyccjpzt9j4cyctn9 example: kava1q53rwutgpzx7szcrgzqguxyccjpzt9j4cyctn9
amount: amount:
type: array $ref: '#/definitions/CoinCollateral'
items:
$ref: '#/definitions/CoinCollateral'
PricefeedParameters: PricefeedParameters:
type: object type: object
properties: properties: