Merge branch 'master' of github.com:cosmos/cosmos-sdk into fix_power_reduction_test_cast_int64
This commit is contained in:
commit
4515b8782d
|
@ -30,7 +30,7 @@ jobs:
|
|||
- name: install runsim
|
||||
run: |
|
||||
export GO111MODULE="on" && go get github.com/cosmos/tools/cmd/runsim@v1.0.0
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-runsim-binary
|
||||
|
@ -40,7 +40,7 @@ jobs:
|
|||
needs: [build, install-runsim]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-runsim-binary
|
||||
|
|
|
@ -39,7 +39,7 @@ jobs:
|
|||
run: go version
|
||||
- name: Install runsim
|
||||
run: export GO111MODULE="on" && go get github.com/cosmos/tools/cmd/runsim@v1.0.0
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-runsim-binary
|
||||
|
@ -60,7 +60,7 @@ jobs:
|
|||
**/**.go
|
||||
go.mod
|
||||
go.sum
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-runsim-binary
|
||||
|
@ -88,7 +88,7 @@ jobs:
|
|||
go.sum
|
||||
SET_ENV_NAME_INSERTIONS: 1
|
||||
SET_ENV_NAME_LINES: 1
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-runsim-binary
|
||||
|
@ -116,7 +116,7 @@ jobs:
|
|||
go.sum
|
||||
SET_ENV_NAME_INSERTIONS: 1
|
||||
SET_ENV_NAME_LINES: 1
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-runsim-binary
|
||||
|
@ -144,7 +144,7 @@ jobs:
|
|||
go.sum
|
||||
SET_ENV_NAME_INSERTIONS: 1
|
||||
SET_ENV_NAME_LINES: 1
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-runsim-binary
|
||||
|
|
|
@ -26,7 +26,7 @@ jobs:
|
|||
- name: install tparse
|
||||
run: |
|
||||
export GO111MODULE="on" && go get github.com/mfridman/tparse@v0.8.3
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-tparse-binary
|
||||
|
@ -216,7 +216,7 @@ jobs:
|
|||
with:
|
||||
name: "${{ github.sha }}-03-race-output"
|
||||
if: env.GIT_DIFF
|
||||
- uses: actions/cache@v2.1.2
|
||||
- uses: actions/cache@v2.1.3
|
||||
with:
|
||||
path: ~/go/bin
|
||||
key: ${{ runner.os }}-go-tparse-binary
|
||||
|
|
|
@ -36,6 +36,15 @@ Ref: https://keepachangelog.com/en/1.0.0/
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
## [v0.40.0-rc3](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.40.0-rc3) - 2020-11-06
|
||||
|
||||
### Client Breaking
|
||||
|
||||
* (x/staking) [\#7419](https://github.com/cosmos/cosmos-sdk/pull/7419) The `TmConsPubKey` method on ValidatorI has been removed and replaced instead by `ConsPubKey` (which returns a SDK `cryptotypes.PubKey`) and `TmConsPublicKey` (which returns a Tendermint proto PublicKey).
|
||||
|
||||
### Improvements
|
||||
* (tendermint) [\#7828](https://github.com/cosmos/cosmos-sdk/pull/7828) Update tendermint dependency to v0.34.0-rc6
|
||||
|
||||
## [v0.40.0-rc2](https://github.com/cosmos/cosmos-sdk/releases/tag/v0.40.0-rc2) - 2020-11-02
|
||||
|
||||
### Client Breaking
|
||||
|
|
2
Makefile
2
Makefile
|
@ -389,7 +389,7 @@ proto-check-breaking-docker:
|
|||
@$(DOCKER_BUF) check breaking --against-input $(HTTPS_GIT)#branch=master
|
||||
.PHONY: proto-check-breaking-ci
|
||||
|
||||
TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc5/proto/tendermint
|
||||
TM_URL = https://raw.githubusercontent.com/tendermint/tendermint/v0.34.0-rc6/proto/tendermint
|
||||
GOGO_PROTO_URL = https://raw.githubusercontent.com/regen-network/protobuf/cosmos
|
||||
COSMOS_PROTO_URL = https://raw.githubusercontent.com/regen-network/cosmos-proto/master
|
||||
CONFIO_URL = https://raw.githubusercontent.com/confio/ics23/v0.6.3
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
package client
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// Account defines a read-only version of the auth module's AccountI.
|
||||
type Account interface {
|
||||
GetAddress() sdk.AccAddress
|
||||
GetPubKey() crypto.PubKey // can return nil.
|
||||
GetPubKey() cryptotypes.PubKey // can return nil.
|
||||
GetAccountNumber() uint64
|
||||
GetSequence() uint64
|
||||
}
|
||||
|
|
|
@ -8,10 +8,10 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"github.com/cosmos/cosmos-sdk/version"
|
||||
|
@ -34,7 +34,7 @@ func Cmd() *cobra.Command {
|
|||
// getPubKeyFromString returns a Tendermint PubKey (PubKeyEd25519) by attempting
|
||||
// to decode the pubkey string from hex, base64, and finally bech32. If all
|
||||
// encodings fail, an error is returned.
|
||||
func getPubKeyFromString(pkstr string) (crypto.PubKey, error) {
|
||||
func getPubKeyFromString(pkstr string) (cryptotypes.PubKey, error) {
|
||||
bz, err := hex.DecodeString(pkstr)
|
||||
if err == nil {
|
||||
if len(bz) == ed25519.PubKeySize {
|
||||
|
|
|
@ -15760,7 +15760,7 @@ paths:
|
|||
}
|
||||
tags:
|
||||
- Query
|
||||
/ibc/channel/v1beta1/channels:
|
||||
/ibc/core/channel/v1beta1/channels:
|
||||
get:
|
||||
summary: Channels queries all the IBC channels of a chain.
|
||||
operationId: Channels
|
||||
|
@ -16146,7 +16146,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}':
|
||||
get:
|
||||
summary: Channel queries an IBC Channel.
|
||||
operationId: Channel
|
||||
|
@ -16471,7 +16471,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state':
|
||||
get:
|
||||
summary: >-
|
||||
ChannelClientState queries for the client state for the channel
|
||||
|
@ -16909,7 +16909,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/version/{version_number}/height/{version_height}':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/version/{version_number}/height/{version_height}':
|
||||
get:
|
||||
summary: |-
|
||||
ChannelConsensusState queries for the consensus state for the channel
|
||||
|
@ -17344,7 +17344,7 @@ paths:
|
|||
format: uint64
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence':
|
||||
get:
|
||||
summary: >-
|
||||
NextSequenceReceive returns the next receive sequence for a given
|
||||
|
@ -17596,7 +17596,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements':
|
||||
get:
|
||||
summary: >-
|
||||
PacketAcknowledgements returns all the packet acknowledgements
|
||||
|
@ -17945,7 +17945,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}':
|
||||
get:
|
||||
summary: PacketAcknowledgement queries a stored packet acknowledgement hash.
|
||||
operationId: PacketAcknowledgement
|
||||
|
@ -18205,7 +18205,7 @@ paths:
|
|||
format: uint64
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments':
|
||||
get:
|
||||
summary: |-
|
||||
PacketCommitments returns all the packet commitments hashes associated
|
||||
|
@ -18552,7 +18552,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks':
|
||||
get:
|
||||
summary: >-
|
||||
UnreceivedAcks returns all the unreceived IBC acknowledgements
|
||||
|
@ -18814,7 +18814,7 @@ paths:
|
|||
minItems: 1
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{packet_commitment_sequences}/unreceived_packets':
|
||||
get:
|
||||
summary: >-
|
||||
UnreceivedPackets returns all the unreceived IBC packets associated with
|
||||
|
@ -19076,7 +19076,7 @@ paths:
|
|||
minItems: 1
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}':
|
||||
get:
|
||||
summary: PacketCommitment queries a stored packet commitment hash.
|
||||
operationId: PacketCommitment
|
||||
|
@ -19337,7 +19337,7 @@ paths:
|
|||
format: uint64
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}':
|
||||
'/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}':
|
||||
get:
|
||||
summary: >-
|
||||
PacketReceipt queries if a given packet sequence has been received on
|
||||
|
@ -19599,7 +19599,7 @@ paths:
|
|||
format: uint64
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/channel/v1beta1/connections/{connection}/channels':
|
||||
'/ibc/core/channel/v1beta1/connections/{connection}/channels':
|
||||
get:
|
||||
summary: |-
|
||||
ConnectionChannels queries all the channels associated with a connection
|
||||
|
@ -19992,7 +19992,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
/ibc/client/v1beta1/client_states:
|
||||
/ibc/core/client/v1beta1/client_states:
|
||||
get:
|
||||
summary: ClientStates queries all the IBC light clients of a chain.
|
||||
operationId: ClientStates
|
||||
|
@ -20465,7 +20465,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/client/v1beta1/client_states/{client_id}':
|
||||
'/ibc/core/client/v1beta1/client_states/{client_id}':
|
||||
get:
|
||||
summary: ClientState queries an IBC light client.
|
||||
operationId: ClientState
|
||||
|
@ -20883,7 +20883,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/client/v1beta1/consensus_states/{client_id}':
|
||||
'/ibc/core/client/v1beta1/consensus_states/{client_id}':
|
||||
get:
|
||||
summary: |-
|
||||
ConsensusStates queries all the consensus state associated with a given
|
||||
|
@ -21383,7 +21383,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/client/v1beta1/consensus_states/{client_id}/version/{version_number}/height/{version_height}':
|
||||
'/ibc/core/client/v1beta1/consensus_states/{client_id}/version/{version_number}/height/{version_height}':
|
||||
get:
|
||||
summary: >-
|
||||
ConsensusState queries a consensus state associated with a client state
|
||||
|
@ -21825,7 +21825,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/connection/v1beta1/client_connections/{client_id}':
|
||||
'/ibc/core/connection/v1beta1/client_connections/{client_id}':
|
||||
get:
|
||||
summary: |-
|
||||
ClientConnections queries the connection paths associated with a client
|
||||
|
@ -22073,7 +22073,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
/ibc/connection/v1beta1/connections:
|
||||
/ibc/core/connection/v1beta1/connections:
|
||||
get:
|
||||
summary: Connections queries all the IBC connections of a chain.
|
||||
operationId: Connections
|
||||
|
@ -22457,7 +22457,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/connection/v1beta1/connections/{connection_id}':
|
||||
'/ibc/core/connection/v1beta1/connections/{connection_id}':
|
||||
get:
|
||||
summary: Connection queries an IBC connection end.
|
||||
operationId: Connection
|
||||
|
@ -22777,7 +22777,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/connection/v1beta1/connections/{connection_id}/client_state':
|
||||
'/ibc/core/connection/v1beta1/connections/{connection_id}/client_state':
|
||||
get:
|
||||
summary: |-
|
||||
ConnectionClientState queries the client state associated with the
|
||||
|
@ -23208,7 +23208,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
'/ibc/connection/v1beta1/connections/{connection_id}/consensus_state/version/{version_number}/height/{version_height}':
|
||||
'/ibc/core/connection/v1beta1/connections/{connection_id}/consensus_state/version/{version_number}/height/{version_height}':
|
||||
get:
|
||||
summary: |-
|
||||
ConnectionConsensusState queries the consensus state associated with the
|
||||
|
@ -23636,7 +23636,7 @@ paths:
|
|||
format: uint64
|
||||
tags:
|
||||
- Query
|
||||
/ibc_transfer/v1beta1/denom_traces:
|
||||
/ibc/applications/transfer/v1beta1/denom_traces:
|
||||
get:
|
||||
summary: DenomTraces queries all denomination traces.
|
||||
operationId: DenomTraces
|
||||
|
@ -23761,7 +23761,7 @@ paths:
|
|||
type: boolean
|
||||
tags:
|
||||
- Query
|
||||
'/ibc_transfer/v1beta1/denom_traces/{hash}':
|
||||
'/ibc/applications/transfer/v1beta1/denom_traces/{hash}':
|
||||
get:
|
||||
summary: DenomTrace queries a denomination trace information.
|
||||
operationId: DenomTrace
|
||||
|
@ -23822,7 +23822,7 @@ paths:
|
|||
type: string
|
||||
tags:
|
||||
- Query
|
||||
/ibc_transfer/v1beta1/params:
|
||||
/ibc/applications/transfer/v1beta1/params:
|
||||
get:
|
||||
summary: Params queries all parameters of the ibc-transfer module.
|
||||
operationId: IBCTransferParams
|
||||
|
|
|
@ -9,7 +9,6 @@ import (
|
|||
|
||||
bip39 "github.com/cosmos/go-bip39"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
|
@ -18,6 +17,7 @@ import (
|
|||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -152,7 +152,7 @@ func RunAddCmd(cmd *cobra.Command, args []string, kb keyring.Keyring, inBuf *buf
|
|||
|
||||
multisigKeys, _ := cmd.Flags().GetStringSlice(flagMultisig)
|
||||
if len(multisigKeys) != 0 {
|
||||
var pks []crypto.PubKey
|
||||
var pks []cryptotypes.PubKey
|
||||
|
||||
multisigThreshold, _ := cmd.Flags().GetInt(flagMultiSigThreshold)
|
||||
if err := validateMultisigThreshold(multisigThreshold, len(multisigKeys)); err != nil {
|
||||
|
@ -247,7 +247,7 @@ func RunAddCmd(cmd *cobra.Command, args []string, kb keyring.Keyring, inBuf *buf
|
|||
}
|
||||
|
||||
if len(mnemonic) == 0 {
|
||||
// read entropy seed straight from crypto.Rand and convert to mnemonic
|
||||
// read entropy seed straight from tmcrypto.Rand and convert to mnemonic
|
||||
entropySeed, err := bip39.NewEntropy(mnemonicEntropySize)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -5,13 +5,13 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/ledger"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -61,7 +61,7 @@ func runShowCmd(cmd *cobra.Command, args []string) (err error) {
|
|||
return fmt.Errorf("%s is not a valid name or address: %v", args[0], err)
|
||||
}
|
||||
} else {
|
||||
pks := make([]tmcrypto.PubKey, len(args))
|
||||
pks := make([]cryptotypes.PubKey, len(args))
|
||||
for i, keyref := range args {
|
||||
info, err := fetchKey(clientCtx.Keyring, keyref)
|
||||
if err != nil {
|
||||
|
|
|
@ -7,14 +7,13 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
@ -23,7 +22,7 @@ func Test_multiSigKey_Properties(t *testing.T) {
|
|||
tmpKey1 := secp256k1.GenPrivKeyFromSecret([]byte("mySecret"))
|
||||
pk := multisig.NewLegacyAminoPubKey(
|
||||
1,
|
||||
[]crypto.PubKey{tmpKey1.PubKey()},
|
||||
[]cryptotypes.PubKey{tmpKey1.PubKey()},
|
||||
)
|
||||
tmp := keyring.NewMultiInfo("myMultisig", pk)
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import (
|
|||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||
)
|
||||
|
@ -99,7 +100,11 @@ func (rvo ResultValidatorsOutput) String() string {
|
|||
}
|
||||
|
||||
func bech32ValidatorOutput(validator *tmtypes.Validator) (ValidatorOutput, error) {
|
||||
bechValPubkey, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeConsPub, validator.PubKey)
|
||||
pk, err := cryptocodec.FromTmPubKeyInterface(validator.PubKey)
|
||||
if err != nil {
|
||||
return ValidatorOutput{}, err
|
||||
}
|
||||
bechValPubkey, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeConsPub, pk)
|
||||
if err != nil {
|
||||
return ValidatorOutput{}, err
|
||||
}
|
||||
|
|
|
@ -3,8 +3,7 @@ package client
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -26,7 +25,7 @@ func (t TestAccount) GetAddress() sdk.AccAddress {
|
|||
}
|
||||
|
||||
// GetPubKey implements client Account.GetPubKey
|
||||
func (t TestAccount) GetPubKey() crypto.PubKey {
|
||||
func (t TestAccount) GetPubKey() cryptotypes.PubKey {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@ import (
|
|||
"os"
|
||||
|
||||
"github.com/spf13/pflag"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client/input"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||
|
@ -343,7 +343,7 @@ func PrepareFactory(clientCtx client.Context, txf Factory) (Factory, error) {
|
|||
// corresponding SignatureV2 if the signing is successful.
|
||||
func SignWithPrivKey(
|
||||
signMode signing.SignMode, signerData authsigning.SignerData,
|
||||
txBuilder client.TxBuilder, priv crypto.PrivKey, txConfig client.TxConfig,
|
||||
txBuilder client.TxBuilder, priv cryptotypes.PrivKey, txConfig client.TxConfig,
|
||||
accSeq uint64,
|
||||
) (signing.SignatureV2, error) {
|
||||
var sigV2 signing.SignatureV2
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package unknownproto_test
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
)
|
||||
|
||||
// Issue #7739: Catch parse errors resulting from unexpected EOF in
|
||||
// protowire.ConsumeFieldValue. Discovered from fuzzing.
|
||||
func TestBadBytesPassedIntoDecoder(t *testing.T) {
|
||||
data, _ := hex.DecodeString("0A9F010A9C200A2D2F6962632E636F72652E636F6E6E656374696F6E2E76312E4D7367436F6E6E656374696F584F75656E496E6974126B0A0D6962637A65726F636C69656E74120B6962637A65726F636F6E6E1A1C0A0C6962636F6E65636C69656E74120A6962636F6E65636F6E6E00002205312E302E302A283235454635364341373935313335453430393336384536444238313130463232413442453035433212080A0612040A0208011A40143342993E25DA936CDDC7BE3D8F603CA6E9661518D536D0C482E18A0154AA096E438A6B9BCADFCFC2F0D689DCCAF55B96399D67A8361B70F5DA13091E2F929")
|
||||
cfg := simapp.MakeTestEncodingConfig()
|
||||
decoder := cfg.TxConfig.TxDecoder()
|
||||
tx, err := decoder(data)
|
||||
|
||||
// TODO: When issue https://github.com/cosmos/cosmos-sdk/issues/7846
|
||||
// is addressed, we'll remove this .Contains check.
|
||||
require.Contains(t, err.Error(), io.ErrUnexpectedEOF.Error())
|
||||
require.Nil(t, tx)
|
||||
}
|
|
@ -92,6 +92,11 @@ func RejectUnknownFields(bz []byte, msg proto.Message, allowUnknownNonCriticals
|
|||
// Skip over the bytes that store fieldNumber and wireType bytes.
|
||||
bz = bz[m:]
|
||||
n := protowire.ConsumeFieldValue(tagNum, wireType, bz)
|
||||
if n < 0 {
|
||||
err = fmt.Errorf("could not consume field value for tagNum: %d, wireType: %q; %w",
|
||||
tagNum, wireTypeToString(wireType), protowire.ParseError(n))
|
||||
return hasUnknownNonCriticals, err
|
||||
}
|
||||
fieldBytes := bz[:n]
|
||||
bz = bz[n:]
|
||||
|
||||
|
|
|
@ -5,10 +5,18 @@ import (
|
|||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/suite"
|
||||
)
|
||||
|
||||
func TestConfigPaths(t *testing.T) {
|
||||
type argsTestSuite struct {
|
||||
suite.Suite
|
||||
}
|
||||
|
||||
func TestArgsTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(argsTestSuite))
|
||||
}
|
||||
|
||||
func (s *argsTestSuite) TestConfigPaths() {
|
||||
cases := map[string]struct {
|
||||
cfg Config
|
||||
upgradeName string
|
||||
|
@ -32,23 +40,21 @@ func TestConfigPaths(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
assert.Equal(t, tc.cfg.Root(), filepath.FromSlash(tc.expectRoot))
|
||||
assert.Equal(t, tc.cfg.GenesisBin(), filepath.FromSlash(tc.expectGenesis))
|
||||
assert.Equal(t, tc.cfg.UpgradeBin(tc.upgradeName), filepath.FromSlash(tc.expectUpgrade))
|
||||
})
|
||||
for _, tc := range cases {
|
||||
s.Require().Equal(tc.cfg.Root(), filepath.FromSlash(tc.expectRoot))
|
||||
s.Require().Equal(tc.cfg.GenesisBin(), filepath.FromSlash(tc.expectGenesis))
|
||||
s.Require().Equal(tc.cfg.UpgradeBin(tc.upgradeName), filepath.FromSlash(tc.expectUpgrade))
|
||||
}
|
||||
}
|
||||
|
||||
// Test validate
|
||||
func TestValidate(t *testing.T) {
|
||||
func (s *argsTestSuite) TestValidate() {
|
||||
relPath := filepath.Join("testdata", "validate")
|
||||
absPath, err := filepath.Abs(relPath)
|
||||
assert.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
testdata, err := filepath.Abs("testdata")
|
||||
assert.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
cases := map[string]struct {
|
||||
cfg Config
|
||||
|
@ -84,28 +90,25 @@ func TestValidate(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
err := tc.cfg.validate()
|
||||
if tc.valid {
|
||||
assert.NoError(t, err)
|
||||
} else {
|
||||
assert.Error(t, err)
|
||||
}
|
||||
})
|
||||
for _, tc := range cases {
|
||||
err := tc.cfg.validate()
|
||||
if tc.valid {
|
||||
s.Require().NoError(err)
|
||||
} else {
|
||||
s.Require().Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnsureBin(t *testing.T) {
|
||||
func (s *argsTestSuite) TestEnsureBin() {
|
||||
relPath := filepath.Join("testdata", "validate")
|
||||
absPath, err := filepath.Abs(relPath)
|
||||
assert.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
cfg := Config{Home: absPath, Name: "dummyd"}
|
||||
assert.NoError(t, cfg.validate())
|
||||
s.Require().NoError(cfg.validate())
|
||||
|
||||
err = EnsureBinary(cfg.GenesisBin())
|
||||
assert.NoError(t, err)
|
||||
s.Require().NoError(EnsureBinary(cfg.GenesisBin()))
|
||||
|
||||
cases := map[string]struct {
|
||||
upgrade string
|
||||
|
@ -117,14 +120,12 @@ func TestEnsureBin(t *testing.T) {
|
|||
"no directory": {"foobarbaz", false},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
err := EnsureBinary(cfg.UpgradeBin(tc.upgrade))
|
||||
if tc.hasBin {
|
||||
assert.NoError(t, err)
|
||||
} else {
|
||||
assert.Error(t, err)
|
||||
}
|
||||
})
|
||||
for _, tc := range cases {
|
||||
err := EnsureBinary(cfg.UpgradeBin(tc.upgrade))
|
||||
if tc.hasBin {
|
||||
s.Require().NoError(err)
|
||||
} else {
|
||||
s.Require().Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,110 +1,114 @@
|
|||
// +build linux
|
||||
|
||||
package cosmovisor
|
||||
package cosmovisor_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/cosmovisor"
|
||||
)
|
||||
|
||||
// TestLaunchProcess will try running the script a few times and watch upgrades work properly
|
||||
// and args are passed through
|
||||
func TestLaunchProcess(t *testing.T) {
|
||||
home, err := copyTestData("validate")
|
||||
cfg := &Config{Home: home, Name: "dummyd"}
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(home)
|
||||
type processTestSuite struct {
|
||||
suite.Suite
|
||||
}
|
||||
|
||||
// should run the genesis binary and produce expected output
|
||||
var stdout, stderr bytes.Buffer
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Equal(t, cfg.GenesisBin(), currentBin)
|
||||
|
||||
args := []string{"foo", "bar", "1234"}
|
||||
doUpgrade, err := LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, doUpgrade)
|
||||
assert.Equal(t, "", stderr.String())
|
||||
assert.Equal(t, "Genesis foo bar 1234\nUPGRADE \"chain2\" NEEDED at height: 49: {}\n", stdout.String())
|
||||
|
||||
// ensure this is upgraded now and produces new output
|
||||
|
||||
currentBin, err = cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, cfg.UpgradeBin("chain2"), currentBin)
|
||||
args = []string{"second", "run", "--verbose"}
|
||||
stdout.Reset()
|
||||
stderr.Reset()
|
||||
doUpgrade, err = LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, doUpgrade)
|
||||
assert.Equal(t, "", stderr.String())
|
||||
assert.Equal(t, "Chain 2 is live!\nArgs: second run --verbose\nFinished successfully\n", stdout.String())
|
||||
|
||||
// ended without other upgrade
|
||||
require.Equal(t, cfg.UpgradeBin("chain2"), currentBin)
|
||||
func TestProcessTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(processTestSuite))
|
||||
}
|
||||
|
||||
// TestLaunchProcess will try running the script a few times and watch upgrades work properly
|
||||
// and args are passed through
|
||||
func TestLaunchProcessWithDownloads(t *testing.T) {
|
||||
func (s *processTestSuite) TestLaunchProcess() {
|
||||
home := copyTestData(s.T(), "validate")
|
||||
cfg := &cosmovisor.Config{Home: home, Name: "dummyd"}
|
||||
|
||||
// should run the genesis binary and produce expected output
|
||||
var stdout, stderr bytes.Buffer
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
s.Require().NoError(err)
|
||||
|
||||
s.Require().Equal(cfg.GenesisBin(), currentBin)
|
||||
|
||||
args := []string{"foo", "bar", "1234"}
|
||||
doUpgrade, err := cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
s.Require().NoError(err)
|
||||
s.Require().True(doUpgrade)
|
||||
s.Require().Equal("", stderr.String())
|
||||
s.Require().Equal("Genesis foo bar 1234\nUPGRADE \"chain2\" NEEDED at height: 49: {}\n", stdout.String())
|
||||
|
||||
// ensure this is upgraded now and produces new output
|
||||
|
||||
currentBin, err = cfg.CurrentBin()
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin)
|
||||
args = []string{"second", "run", "--verbose"}
|
||||
stdout.Reset()
|
||||
stderr.Reset()
|
||||
doUpgrade, err = cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
s.Require().NoError(err)
|
||||
s.Require().False(doUpgrade)
|
||||
s.Require().Equal("", stderr.String())
|
||||
s.Require().Equal("Chain 2 is live!\nArgs: second run --verbose\nFinished successfully\n", stdout.String())
|
||||
|
||||
// ended without other upgrade
|
||||
s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin)
|
||||
}
|
||||
|
||||
// TestLaunchProcess will try running the script a few times and watch upgrades work properly
|
||||
// and args are passed through
|
||||
func (s *processTestSuite) TestLaunchProcessWithDownloads() {
|
||||
// this is a fun path
|
||||
// genesis -> "chain2" = zip_binary
|
||||
// zip_binary -> "chain3" = ref_zipped -> zip_directory
|
||||
// zip_directory no upgrade
|
||||
home, err := copyTestData("download")
|
||||
cfg := &Config{Home: home, Name: "autod", AllowDownloadBinaries: true}
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(home)
|
||||
home := copyTestData(s.T(), "download")
|
||||
cfg := &cosmovisor.Config{Home: home, Name: "autod", AllowDownloadBinaries: true}
|
||||
|
||||
// should run the genesis binary and produce expected output
|
||||
var stdout, stderr bytes.Buffer
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
require.Equal(t, cfg.GenesisBin(), currentBin)
|
||||
s.Require().Equal(cfg.GenesisBin(), currentBin)
|
||||
args := []string{"some", "args"}
|
||||
doUpgrade, err := LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, doUpgrade)
|
||||
assert.Equal(t, "", stderr.String())
|
||||
assert.Equal(t, "Preparing auto-download some args\n"+`ERROR: UPGRADE "chain2" NEEDED at height: 49: {"binaries":{"linux/amd64":"https://github.com/cosmos/cosmos-sdk/raw/51249cb93130810033408934454841c98423ed4b/cosmovisor/testdata/repo/zip_binary/autod.zip?checksum=sha256:dc48829b4126ae95bc0db316c66d4e9da5f3db95e212665b6080638cca77e998"}} module=main`+"\n", stdout.String())
|
||||
doUpgrade, err := cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
s.Require().NoError(err)
|
||||
s.Require().True(doUpgrade)
|
||||
s.Require().Equal("", stderr.String())
|
||||
s.Require().Equal("Preparing auto-download some args\n"+`ERROR: UPGRADE "chain2" NEEDED at height: 49: {"binaries":{"linux/amd64":"https://github.com/cosmos/cosmos-sdk/raw/51249cb93130810033408934454841c98423ed4b/cosmovisor/testdata/repo/zip_binary/autod.zip?checksum=sha256:dc48829b4126ae95bc0db316c66d4e9da5f3db95e212665b6080638cca77e998"}} module=main`+"\n", stdout.String())
|
||||
|
||||
// ensure this is upgraded now and produces new output
|
||||
currentBin, err = cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, cfg.UpgradeBin("chain2"), currentBin)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin)
|
||||
args = []string{"run", "--fast"}
|
||||
stdout.Reset()
|
||||
stderr.Reset()
|
||||
doUpgrade, err = LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, doUpgrade)
|
||||
assert.Equal(t, "", stderr.String())
|
||||
assert.Equal(t, "Chain 2 from zipped binary link to referral\nArgs: run --fast\n"+`ERROR: UPGRADE "chain3" NEEDED at height: 936: https://github.com/cosmos/cosmos-sdk/raw/0eae1a50612b8bf803336d35055896fbddaa1ddd/cosmovisor/testdata/repo/ref_zipped?checksum=sha256:0a428575de718ed3cf0771c9687eefaf6f19359977eca4d94a0abd0e11ef8e64 module=main`+"\n", stdout.String())
|
||||
doUpgrade, err = cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
s.Require().NoError(err)
|
||||
s.Require().True(doUpgrade)
|
||||
s.Require().Equal("", stderr.String())
|
||||
s.Require().Equal("Chain 2 from zipped binary link to referral\nArgs: run --fast\n"+`ERROR: UPGRADE "chain3" NEEDED at height: 936: https://github.com/cosmos/cosmos-sdk/raw/0eae1a50612b8bf803336d35055896fbddaa1ddd/cosmovisor/testdata/repo/ref_zipped?checksum=sha256:0a428575de718ed3cf0771c9687eefaf6f19359977eca4d94a0abd0e11ef8e64 module=main`+"\n", stdout.String())
|
||||
|
||||
// ended with one more upgrade
|
||||
currentBin, err = cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, cfg.UpgradeBin("chain3"), currentBin)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(cfg.UpgradeBin("chain3"), currentBin)
|
||||
// make sure this is the proper binary now....
|
||||
args = []string{"end", "--halt"}
|
||||
stdout.Reset()
|
||||
stderr.Reset()
|
||||
doUpgrade, err = LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, doUpgrade)
|
||||
assert.Equal(t, "", stderr.String())
|
||||
assert.Equal(t, "Chain 2 from zipped directory\nArgs: end --halt\n", stdout.String())
|
||||
doUpgrade, err = cosmovisor.LaunchProcess(cfg, args, &stdout, &stderr)
|
||||
s.Require().NoError(err)
|
||||
s.Require().False(doUpgrade)
|
||||
s.Require().Equal("", stderr.String())
|
||||
s.Require().Equal("Chain 2 from zipped directory\nArgs: end --halt\n", stdout.String())
|
||||
|
||||
// and this doesn't upgrade
|
||||
currentBin, err = cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, cfg.UpgradeBin("chain3"), currentBin)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(cfg.UpgradeBin("chain3"), currentBin)
|
||||
}
|
||||
|
|
|
@ -1,17 +1,19 @@
|
|||
package cosmovisor
|
||||
package cosmovisor_test
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/cosmos/cosmos-sdk/cosmovisor"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestWaitForInfo(t *testing.T) {
|
||||
cases := map[string]struct {
|
||||
write []string
|
||||
expectUpgrade *UpgradeInfo
|
||||
expectUpgrade *cosmovisor.UpgradeInfo
|
||||
expectErr bool
|
||||
}{
|
||||
"no match": {
|
||||
|
@ -19,14 +21,14 @@ func TestWaitForInfo(t *testing.T) {
|
|||
},
|
||||
"match name with no info": {
|
||||
write: []string{"first line\n", `UPGRADE "myname" NEEDED at height: 123: `, "\nnext line\n"},
|
||||
expectUpgrade: &UpgradeInfo{
|
||||
expectUpgrade: &cosmovisor.UpgradeInfo{
|
||||
Name: "myname",
|
||||
Info: "",
|
||||
},
|
||||
},
|
||||
"match name with info": {
|
||||
write: []string{"first line\n", `UPGRADE "take2" NEEDED at height: 123: DownloadData here!`, "\nnext line\n"},
|
||||
expectUpgrade: &UpgradeInfo{
|
||||
expectUpgrade: &cosmovisor.UpgradeInfo{
|
||||
Name: "take2",
|
||||
Info: "DownloadData",
|
||||
},
|
||||
|
@ -42,20 +44,20 @@ func TestWaitForInfo(t *testing.T) {
|
|||
go func() {
|
||||
for _, line := range tc.write {
|
||||
n, err := w.Write([]byte(line))
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, len(line), n)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, len(line), n)
|
||||
}
|
||||
w.Close()
|
||||
}()
|
||||
|
||||
// now scan the info
|
||||
info, err := WaitForUpdate(scan)
|
||||
info, err := cosmovisor.WaitForUpdate(scan)
|
||||
if tc.expectErr {
|
||||
assert.Error(t, err)
|
||||
require.Error(t, err)
|
||||
return
|
||||
}
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, tc.expectUpgrade, info)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, tc.expectUpgrade, info)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -119,12 +119,12 @@ func GetDownloadURL(info *UpgradeInfo) (string, error) {
|
|||
var config UpgradeConfig
|
||||
|
||||
if err := json.Unmarshal([]byte(doc), &config); err == nil {
|
||||
url, ok := config.Binaries[osArch()]
|
||||
url, ok := config.Binaries[OSArch()]
|
||||
if !ok {
|
||||
url, ok = config.Binaries["any"]
|
||||
}
|
||||
if !ok {
|
||||
return "", fmt.Errorf("cannot find binary for os/arch: neither %s, nor any", osArch())
|
||||
return "", fmt.Errorf("cannot find binary for os/arch: neither %s, nor any", OSArch())
|
||||
}
|
||||
|
||||
return url, nil
|
||||
|
@ -133,7 +133,7 @@ func GetDownloadURL(info *UpgradeInfo) (string, error) {
|
|||
return "", errors.New("upgrade info doesn't contain binary map")
|
||||
}
|
||||
|
||||
func osArch() string {
|
||||
func OSArch() string {
|
||||
return fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,139 +1,138 @@
|
|||
// +build linux
|
||||
|
||||
package cosmovisor
|
||||
package cosmovisor_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
copy2 "github.com/otiai10/copy"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/otiai10/copy"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/cosmovisor"
|
||||
)
|
||||
|
||||
func TestCurrentBin(t *testing.T) {
|
||||
home, err := copyTestData("validate")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(home)
|
||||
type upgradeTestSuite struct {
|
||||
suite.Suite
|
||||
}
|
||||
|
||||
cfg := Config{Home: home, Name: "dummyd"}
|
||||
func TestUpgradeTestSuite(t *testing.T) {
|
||||
suite.Run(t, new(upgradeTestSuite))
|
||||
}
|
||||
|
||||
func (s *upgradeTestSuite) TestCurrentBin() {
|
||||
home := copyTestData(s.T(), "validate")
|
||||
cfg := cosmovisor.Config{Home: home, Name: "dummyd"}
|
||||
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
assert.Equal(t, cfg.GenesisBin(), currentBin)
|
||||
s.Require().Equal(cfg.GenesisBin(), currentBin)
|
||||
|
||||
// ensure we cannot set this to an invalid value
|
||||
for _, name := range []string{"missing", "nobin", "noexec"} {
|
||||
err = cfg.SetCurrentUpgrade(name)
|
||||
require.Error(t, err, name)
|
||||
s.Require().Error(cfg.SetCurrentUpgrade(name), name)
|
||||
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
assert.Equal(t, cfg.GenesisBin(), currentBin, name)
|
||||
s.Require().Equal(cfg.GenesisBin(), currentBin, name)
|
||||
}
|
||||
|
||||
// try a few times to make sure this can be reproduced
|
||||
for _, upgrade := range []string{"chain2", "chain3", "chain2"} {
|
||||
// now set it to a valid upgrade and make sure CurrentBin is now set properly
|
||||
err = cfg.SetCurrentUpgrade(upgrade)
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
// we should see current point to the new upgrade dir
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
assert.Equal(t, cfg.UpgradeBin(upgrade), currentBin)
|
||||
s.Require().Equal(cfg.UpgradeBin(upgrade), currentBin)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrentAlwaysSymlinkToDirectory(t *testing.T) {
|
||||
home, err := copyTestData("validate")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(home)
|
||||
|
||||
cfg := Config{Home: home, Name: "dummyd"}
|
||||
func (s *upgradeTestSuite) TestCurrentAlwaysSymlinkToDirectory() {
|
||||
home := copyTestData(s.T(), "validate")
|
||||
cfg := cosmovisor.Config{Home: home, Name: "dummyd"}
|
||||
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, cfg.GenesisBin(), currentBin)
|
||||
assertCurrentLink(t, cfg, "genesis")
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(cfg.GenesisBin(), currentBin)
|
||||
s.assertCurrentLink(cfg, "genesis")
|
||||
|
||||
err = cfg.SetCurrentUpgrade("chain2")
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
currentBin, err = cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, cfg.UpgradeBin("chain2"), currentBin)
|
||||
assertCurrentLink(t, cfg, filepath.Join("upgrades", "chain2"))
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(cfg.UpgradeBin("chain2"), currentBin)
|
||||
s.assertCurrentLink(cfg, filepath.Join("upgrades", "chain2"))
|
||||
}
|
||||
|
||||
func assertCurrentLink(t *testing.T, cfg Config, target string) {
|
||||
link := filepath.Join(cfg.Root(), currentLink)
|
||||
func (s *upgradeTestSuite) assertCurrentLink(cfg cosmovisor.Config, target string) {
|
||||
link := filepath.Join(cfg.Root(), "current")
|
||||
// ensure this is a symlink
|
||||
info, err := os.Lstat(link)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, os.ModeSymlink, info.Mode()&os.ModeSymlink)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(os.ModeSymlink, info.Mode()&os.ModeSymlink)
|
||||
|
||||
dest, err := os.Readlink(link)
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
expected := filepath.Join(cfg.Root(), target)
|
||||
require.Equal(t, expected, dest)
|
||||
s.Require().Equal(expected, dest)
|
||||
}
|
||||
|
||||
// TODO: test with download (and test all download functions)
|
||||
func TestDoUpgradeNoDownloadUrl(t *testing.T) {
|
||||
home, err := copyTestData("validate")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(home)
|
||||
|
||||
cfg := &Config{Home: home, Name: "dummyd", AllowDownloadBinaries: true}
|
||||
func (s *upgradeTestSuite) TestDoUpgradeNoDownloadUrl() {
|
||||
home := copyTestData(s.T(), "validate")
|
||||
cfg := &cosmovisor.Config{Home: home, Name: "dummyd", AllowDownloadBinaries: true}
|
||||
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
assert.Equal(t, cfg.GenesisBin(), currentBin)
|
||||
s.Require().Equal(cfg.GenesisBin(), currentBin)
|
||||
|
||||
// do upgrade ignores bad files
|
||||
for _, name := range []string{"missing", "nobin", "noexec"} {
|
||||
info := &UpgradeInfo{Name: name}
|
||||
err = DoUpgrade(cfg, info)
|
||||
require.Error(t, err, name)
|
||||
info := &cosmovisor.UpgradeInfo{Name: name}
|
||||
err = cosmovisor.DoUpgrade(cfg, info)
|
||||
s.Require().Error(err, name)
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, cfg.GenesisBin(), currentBin, name)
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(cfg.GenesisBin(), currentBin, name)
|
||||
}
|
||||
|
||||
// make sure it updates a few times
|
||||
for _, upgrade := range []string{"chain2", "chain3"} {
|
||||
// now set it to a valid upgrade and make sure CurrentBin is now set properly
|
||||
info := &UpgradeInfo{Name: upgrade}
|
||||
err = DoUpgrade(cfg, info)
|
||||
require.NoError(t, err)
|
||||
info := &cosmovisor.UpgradeInfo{Name: upgrade}
|
||||
err = cosmovisor.DoUpgrade(cfg, info)
|
||||
s.Require().NoError(err)
|
||||
// we should see current point to the new upgrade dir
|
||||
upgradeBin := cfg.UpgradeBin(upgrade)
|
||||
currentBin, err := cfg.CurrentBin()
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
assert.Equal(t, upgradeBin, currentBin)
|
||||
s.Require().Equal(upgradeBin, currentBin)
|
||||
}
|
||||
}
|
||||
|
||||
func TestOsArch(t *testing.T) {
|
||||
func (s *upgradeTestSuite) TestOsArch() {
|
||||
// all download tests will fail if we are not on linux...
|
||||
assert.Equal(t, "linux/amd64", osArch())
|
||||
s.Require().Equal("linux/amd64", cosmovisor.OSArch())
|
||||
}
|
||||
|
||||
func TestGetDownloadURL(t *testing.T) {
|
||||
func (s *upgradeTestSuite) TestGetDownloadURL() {
|
||||
// all download tests will fail if we are not on linux...
|
||||
ref, err := filepath.Abs(filepath.FromSlash("./testdata/repo/ref_zipped"))
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
badref, err := filepath.Abs(filepath.FromSlash("./testdata/repo/zip_binary/autod.zip"))
|
||||
require.NoError(t, err)
|
||||
s.Require().NoError(err)
|
||||
|
||||
cases := map[string]struct {
|
||||
info string
|
||||
|
@ -173,20 +172,18 @@ func TestGetDownloadURL(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
url, err := GetDownloadURL(&UpgradeInfo{Info: tc.info})
|
||||
if tc.isErr {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, tc.url, url)
|
||||
}
|
||||
})
|
||||
for _, tc := range cases {
|
||||
url, err := cosmovisor.GetDownloadURL(&cosmovisor.UpgradeInfo{Info: tc.info})
|
||||
if tc.isErr {
|
||||
s.Require().Error(err)
|
||||
} else {
|
||||
s.Require().NoError(err)
|
||||
s.Require().Equal(tc.url, url)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDownloadBinary(t *testing.T) {
|
||||
func (s *upgradeTestSuite) TestDownloadBinary() {
|
||||
cases := map[string]struct {
|
||||
url string
|
||||
canDownload bool
|
||||
|
@ -228,65 +225,55 @@ func TestDownloadBinary(t *testing.T) {
|
|||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
// make temp dir
|
||||
home, err := copyTestData("download")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(home)
|
||||
for _, tc := range cases {
|
||||
var err error
|
||||
// make temp dir
|
||||
home := copyTestData(s.T(), "download")
|
||||
|
||||
cfg := &Config{
|
||||
Home: home,
|
||||
Name: "autod",
|
||||
AllowDownloadBinaries: true,
|
||||
}
|
||||
cfg := &cosmovisor.Config{
|
||||
Home: home,
|
||||
Name: "autod",
|
||||
AllowDownloadBinaries: true,
|
||||
}
|
||||
|
||||
// if we have a relative path, make it absolute, but don't change eg. https://... urls
|
||||
url := tc.url
|
||||
if strings.HasPrefix(url, "./") {
|
||||
url, err = filepath.Abs(url)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
// if we have a relative path, make it absolute, but don't change eg. https://... urls
|
||||
url := tc.url
|
||||
if strings.HasPrefix(url, "./") {
|
||||
url, err = filepath.Abs(url)
|
||||
s.Require().NoError(err)
|
||||
}
|
||||
|
||||
upgrade := "amazonas"
|
||||
info := &UpgradeInfo{
|
||||
Name: upgrade,
|
||||
Info: fmt.Sprintf(`{"binaries":{"%s": "%s"}}`, osArch(), url),
|
||||
}
|
||||
upgrade := "amazonas"
|
||||
info := &cosmovisor.UpgradeInfo{
|
||||
Name: upgrade,
|
||||
Info: fmt.Sprintf(`{"binaries":{"%s": "%s"}}`, cosmovisor.OSArch(), url),
|
||||
}
|
||||
|
||||
err = DownloadBinary(cfg, info)
|
||||
if !tc.canDownload {
|
||||
assert.Error(t, err)
|
||||
return
|
||||
}
|
||||
require.NoError(t, err)
|
||||
err = cosmovisor.DownloadBinary(cfg, info)
|
||||
if !tc.canDownload {
|
||||
s.Require().Error(err)
|
||||
return
|
||||
}
|
||||
s.Require().NoError(err)
|
||||
|
||||
err = EnsureBinary(cfg.UpgradeBin(upgrade))
|
||||
if tc.validBinary {
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
}
|
||||
})
|
||||
err = cosmovisor.EnsureBinary(cfg.UpgradeBin(upgrade))
|
||||
if tc.validBinary {
|
||||
s.Require().NoError(err)
|
||||
} else {
|
||||
s.Require().Error(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// copyTestData will make a tempdir and then
|
||||
// "cp -r" a subdirectory under testdata there
|
||||
// returns the directory (which can now be used as Config.Home) and modified safely
|
||||
func copyTestData(subdir string) (string, error) {
|
||||
tmpdir, err := ioutil.TempDir("", "upgrade-manager-test")
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("couldn't create temporary directory: %w", err)
|
||||
}
|
||||
func copyTestData(t *testing.T, subdir string) string {
|
||||
t.Helper()
|
||||
|
||||
src := filepath.Join("testdata", subdir)
|
||||
tmpdir := t.TempDir()
|
||||
|
||||
err = copy2.Copy(src, tmpdir)
|
||||
if err != nil {
|
||||
os.RemoveAll(tmpdir)
|
||||
return "", fmt.Errorf("couldn't copy files: %w", err)
|
||||
}
|
||||
require.NoError(t, copy.Copy(filepath.Join("testdata", subdir), tmpdir))
|
||||
|
||||
return tmpdir, nil
|
||||
return tmpdir
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import (
|
|||
|
||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
||||
cryptoAmino "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
||||
|
@ -124,7 +125,7 @@ func unarmorBytes(armorStr, blockType string) (bz []byte, header map[string]stri
|
|||
// encrypt/decrypt with armor
|
||||
|
||||
// Encrypt and armor the private key.
|
||||
func EncryptArmorPrivKey(privKey crypto.PrivKey, passphrase string, algo string) string {
|
||||
func EncryptArmorPrivKey(privKey cryptotypes.PrivKey, passphrase string, algo string) string {
|
||||
saltBytes, encBytes := encryptPrivKey(privKey, passphrase)
|
||||
header := map[string]string{
|
||||
"kdf": "bcrypt",
|
||||
|
@ -143,7 +144,7 @@ func EncryptArmorPrivKey(privKey crypto.PrivKey, passphrase string, algo string)
|
|||
// encrypt the given privKey with the passphrase using a randomly
|
||||
// generated salt and the xsalsa20 cipher. returns the salt and the
|
||||
// encrypted priv key.
|
||||
func encryptPrivKey(privKey crypto.PrivKey, passphrase string) (saltBytes []byte, encBytes []byte) {
|
||||
func encryptPrivKey(privKey cryptotypes.PrivKey, passphrase string) (saltBytes []byte, encBytes []byte) {
|
||||
saltBytes = crypto.CRandBytes(16)
|
||||
key, err := bcrypt.GenerateFromPassword(saltBytes, []byte(passphrase), BcryptSecurityParameter)
|
||||
|
||||
|
@ -158,7 +159,7 @@ func encryptPrivKey(privKey crypto.PrivKey, passphrase string) (saltBytes []byte
|
|||
}
|
||||
|
||||
// UnarmorDecryptPrivKey returns the privkey byte slice, a string of the algo type, and an error
|
||||
func UnarmorDecryptPrivKey(armorStr string, passphrase string) (privKey crypto.PrivKey, algo string, err error) {
|
||||
func UnarmorDecryptPrivKey(armorStr string, passphrase string) (privKey cryptotypes.PrivKey, algo string, err error) {
|
||||
blockType, header, encBytes, err := armor.DecodeArmor(armorStr)
|
||||
if err != nil {
|
||||
return privKey, "", err
|
||||
|
@ -190,7 +191,7 @@ func UnarmorDecryptPrivKey(armorStr string, passphrase string) (privKey crypto.P
|
|||
return privKey, header[headerType], err
|
||||
}
|
||||
|
||||
func decryptPrivKey(saltBytes []byte, encBytes []byte, passphrase string) (privKey crypto.PrivKey, err error) {
|
||||
func decryptPrivKey(saltBytes []byte, encBytes []byte, passphrase string) (privKey cryptotypes.PrivKey, err error) {
|
||||
key, err := bcrypt.GenerateFromPassword(saltBytes, []byte(passphrase), BcryptSecurityParameter)
|
||||
if err != nil {
|
||||
return privKey, sdkerrors.Wrap(err, "error generating bcrypt key from passphrase")
|
||||
|
|
|
@ -19,6 +19,7 @@ import (
|
|||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -46,7 +47,7 @@ func TestArmorUnarmorPrivKey(t *testing.T) {
|
|||
require.Contains(t, err.Error(), "unrecognized armor type")
|
||||
|
||||
// armor key manually
|
||||
encryptPrivKeyFn := func(privKey tmcrypto.PrivKey, passphrase string) (saltBytes []byte, encBytes []byte) {
|
||||
encryptPrivKeyFn := func(privKey cryptotypes.PrivKey, passphrase string) (saltBytes []byte, encBytes []byte) {
|
||||
saltBytes = tmcrypto.CRandBytes(16)
|
||||
key, err := bcrypt.GenerateFromPassword(saltBytes, []byte(passphrase), crypto.BcryptSecurityParameter)
|
||||
require.NoError(t, err)
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package codec
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
tmed25519 "github.com/tendermint/tendermint/crypto/ed25519"
|
||||
"github.com/tendermint/tendermint/crypto/sr25519"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
|
@ -22,16 +20,9 @@ func init() {
|
|||
// RegisterCrypto registers all crypto dependency types with the provided Amino
|
||||
// codec.
|
||||
func RegisterCrypto(cdc *codec.LegacyAmino) {
|
||||
// TODO We now register both Tendermint's PubKey and our own PubKey. In the
|
||||
// long-term, we should move away from Tendermint's PubKey, and delete this
|
||||
// first line.
|
||||
cdc.RegisterInterface((*crypto.PubKey)(nil), nil)
|
||||
cdc.RegisterInterface((*cryptotypes.PubKey)(nil), nil)
|
||||
cdc.RegisterConcrete(sr25519.PubKey{},
|
||||
sr25519.PubKeyName, nil)
|
||||
// TODO Same as above, for ED25519
|
||||
cdc.RegisterConcrete(tmed25519.PubKey{},
|
||||
tmed25519.PubKeyName, nil)
|
||||
cdc.RegisterConcrete(&ed25519.PubKey{},
|
||||
ed25519.PubKeyName, nil)
|
||||
cdc.RegisterConcrete(&secp256k1.PubKey{},
|
||||
|
@ -39,12 +30,9 @@ func RegisterCrypto(cdc *codec.LegacyAmino) {
|
|||
cdc.RegisterConcrete(&kmultisig.LegacyAminoPubKey{},
|
||||
kmultisig.PubKeyAminoRoute, nil)
|
||||
|
||||
cdc.RegisterInterface((*crypto.PrivKey)(nil), nil)
|
||||
cdc.RegisterInterface((*cryptotypes.PrivKey)(nil), nil)
|
||||
cdc.RegisterConcrete(sr25519.PrivKey{},
|
||||
sr25519.PrivKeyName, nil)
|
||||
// TODO Same as above
|
||||
cdc.RegisterConcrete(tmed25519.PrivKey{},
|
||||
tmed25519.PrivKeyName, nil)
|
||||
cdc.RegisterConcrete(&ed25519.PrivKey{},
|
||||
ed25519.PrivKeyName, nil)
|
||||
cdc.RegisterConcrete(&secp256k1.PrivKey{},
|
||||
|
@ -52,13 +40,13 @@ func RegisterCrypto(cdc *codec.LegacyAmino) {
|
|||
}
|
||||
|
||||
// PrivKeyFromBytes unmarshals private key bytes and returns a PrivKey
|
||||
func PrivKeyFromBytes(privKeyBytes []byte) (privKey crypto.PrivKey, err error) {
|
||||
func PrivKeyFromBytes(privKeyBytes []byte) (privKey cryptotypes.PrivKey, err error) {
|
||||
err = amino.UnmarshalBinaryBare(privKeyBytes, &privKey)
|
||||
return
|
||||
}
|
||||
|
||||
// PubKeyFromBytes unmarshals public key bytes and returns a PubKey
|
||||
func PubKeyFromBytes(pubKeyBytes []byte) (pubKey crypto.PubKey, err error) {
|
||||
func PubKeyFromBytes(pubKeyBytes []byte) (pubKey cryptotypes.PubKey, err error) {
|
||||
err = amino.UnmarshalBinaryBare(pubKeyBytes, &pubKey)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
package codec
|
||||
|
||||
import (
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
|
@ -12,14 +10,6 @@ import (
|
|||
|
||||
// RegisterInterfaces registers the sdk.Tx interface.
|
||||
func RegisterInterfaces(registry codectypes.InterfaceRegistry) {
|
||||
// TODO We now register both Tendermint's PubKey and our own PubKey. In the
|
||||
// long-term, we should move away from Tendermint's PubKey, and delete
|
||||
// these lines.
|
||||
registry.RegisterInterface("tendermint.crypto.PubKey", (*tmcrypto.PubKey)(nil))
|
||||
registry.RegisterImplementations((*tmcrypto.PubKey)(nil), &ed25519.PubKey{})
|
||||
registry.RegisterImplementations((*tmcrypto.PubKey)(nil), &secp256k1.PubKey{})
|
||||
registry.RegisterImplementations((*tmcrypto.PubKey)(nil), &multisig.LegacyAminoPubKey{})
|
||||
|
||||
registry.RegisterInterface("cosmos.crypto.PubKey", (*cryptotypes.PubKey)(nil))
|
||||
registry.RegisterImplementations((*cryptotypes.PubKey)(nil), &ed25519.PubKey{})
|
||||
registry.RegisterImplementations((*cryptotypes.PubKey)(nil), &secp256k1.PubKey{})
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package codec
|
||||
|
||||
import (
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/encoding"
|
||||
tmprotocrypto "github.com/tendermint/tendermint/proto/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
||||
// FromTmProtoPublicKey converts a TM's tmprotocrypto.PublicKey into our own PubKey.
|
||||
func FromTmProtoPublicKey(protoPk tmprotocrypto.PublicKey) (cryptotypes.PubKey, error) {
|
||||
switch protoPk := protoPk.Sum.(type) {
|
||||
case *tmprotocrypto.PublicKey_Ed25519:
|
||||
return &ed25519.PubKey{
|
||||
Key: protoPk.Ed25519,
|
||||
}, nil
|
||||
default:
|
||||
return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "cannot convert %v from Tendermint public key", protoPk)
|
||||
}
|
||||
}
|
||||
|
||||
// ToTmProtoPublicKey converts our own PubKey to TM's tmprotocrypto.PublicKey.
|
||||
func ToTmProtoPublicKey(pk cryptotypes.PubKey) (tmprotocrypto.PublicKey, error) {
|
||||
switch pk := pk.(type) {
|
||||
case *ed25519.PubKey:
|
||||
return tmprotocrypto.PublicKey{
|
||||
Sum: &tmprotocrypto.PublicKey_Ed25519{
|
||||
Ed25519: pk.Key,
|
||||
},
|
||||
}, nil
|
||||
default:
|
||||
return tmprotocrypto.PublicKey{}, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "cannot convert %v to Tendermint public key", pk)
|
||||
}
|
||||
}
|
||||
|
||||
// FromTmPubKeyInterface converts TM's tmcrypto.PubKey to our own PubKey.
|
||||
func FromTmPubKeyInterface(tmPk tmcrypto.PubKey) (cryptotypes.PubKey, error) {
|
||||
tmProtoPk, err := encoding.PubKeyToProto(tmPk)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return FromTmProtoPublicKey(tmProtoPk)
|
||||
}
|
||||
|
||||
// ToTmPubKeyInterface converts our own PubKey to TM's tmcrypto.PubKey.
|
||||
func ToTmPubKeyInterface(pk cryptotypes.PubKey) (tmcrypto.PubKey, error) {
|
||||
tmProtoPk, err := ToTmProtoPublicKey(pk)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return encoding.PubKeyFromProto(tmProtoPk)
|
||||
}
|
|
@ -2,9 +2,9 @@ package hd
|
|||
|
||||
import (
|
||||
bip39 "github.com/cosmos/go-bip39"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
// PubKeyType defines an algorithm to derive key-pairs which can be used for cryptographic signing.
|
||||
|
@ -28,11 +28,11 @@ var (
|
|||
)
|
||||
|
||||
type DeriveFn func(mnemonic string, bip39Passphrase, hdPath string) ([]byte, error)
|
||||
type GenerateFn func(bz []byte) crypto.PrivKey
|
||||
type GenerateFn func(bz []byte) types.PrivKey
|
||||
|
||||
type WalletGenerator interface {
|
||||
Derive(mnemonic string, bip39Passphrase, hdPath string) ([]byte, error)
|
||||
Generate(bz []byte) crypto.PrivKey
|
||||
Generate(bz []byte) types.PrivKey
|
||||
}
|
||||
|
||||
type secp256k1Algo struct {
|
||||
|
@ -62,7 +62,7 @@ func (s secp256k1Algo) Derive() DeriveFn {
|
|||
|
||||
// Generate generates a secp256k1 private key from the given bytes.
|
||||
func (s secp256k1Algo) Generate() GenerateFn {
|
||||
return func(bz []byte) crypto.PrivKey {
|
||||
return func(bz []byte) types.PrivKey {
|
||||
var bzArr = make([]byte, secp256k1.PrivKeySize)
|
||||
copy(bzArr, bz)
|
||||
|
||||
|
|
|
@ -3,11 +3,10 @@ package keyring
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -18,7 +17,7 @@ type Info interface {
|
|||
// Name of the key
|
||||
GetName() string
|
||||
// Public key
|
||||
GetPubKey() crypto.PubKey
|
||||
GetPubKey() cryptotypes.PubKey
|
||||
// Address
|
||||
GetAddress() types.AccAddress
|
||||
// Bip44 Path
|
||||
|
@ -37,13 +36,13 @@ var (
|
|||
// localInfo is the public information about a locally stored key
|
||||
// Note: Algo must be last field in struct for backwards amino compatibility
|
||||
type localInfo struct {
|
||||
Name string `json:"name"`
|
||||
PubKey crypto.PubKey `json:"pubkey"`
|
||||
PrivKeyArmor string `json:"privkey.armor"`
|
||||
Algo hd.PubKeyType `json:"algo"`
|
||||
Name string `json:"name"`
|
||||
PubKey cryptotypes.PubKey `json:"pubkey"`
|
||||
PrivKeyArmor string `json:"privkey.armor"`
|
||||
Algo hd.PubKeyType `json:"algo"`
|
||||
}
|
||||
|
||||
func newLocalInfo(name string, pub crypto.PubKey, privArmor string, algo hd.PubKeyType) Info {
|
||||
func newLocalInfo(name string, pub cryptotypes.PubKey, privArmor string, algo hd.PubKeyType) Info {
|
||||
return &localInfo{
|
||||
Name: name,
|
||||
PubKey: pub,
|
||||
|
@ -63,7 +62,7 @@ func (i localInfo) GetName() string {
|
|||
}
|
||||
|
||||
// GetType implements Info interface
|
||||
func (i localInfo) GetPubKey() crypto.PubKey {
|
||||
func (i localInfo) GetPubKey() cryptotypes.PubKey {
|
||||
return i.PubKey
|
||||
}
|
||||
|
||||
|
@ -85,13 +84,13 @@ func (i localInfo) GetPath() (*hd.BIP44Params, error) {
|
|||
// ledgerInfo is the public information about a Ledger key
|
||||
// Note: Algo must be last field in struct for backwards amino compatibility
|
||||
type ledgerInfo struct {
|
||||
Name string `json:"name"`
|
||||
PubKey crypto.PubKey `json:"pubkey"`
|
||||
Path hd.BIP44Params `json:"path"`
|
||||
Algo hd.PubKeyType `json:"algo"`
|
||||
Name string `json:"name"`
|
||||
PubKey cryptotypes.PubKey `json:"pubkey"`
|
||||
Path hd.BIP44Params `json:"path"`
|
||||
Algo hd.PubKeyType `json:"algo"`
|
||||
}
|
||||
|
||||
func newLedgerInfo(name string, pub crypto.PubKey, path hd.BIP44Params, algo hd.PubKeyType) Info {
|
||||
func newLedgerInfo(name string, pub cryptotypes.PubKey, path hd.BIP44Params, algo hd.PubKeyType) Info {
|
||||
return &ledgerInfo{
|
||||
Name: name,
|
||||
PubKey: pub,
|
||||
|
@ -111,7 +110,7 @@ func (i ledgerInfo) GetName() string {
|
|||
}
|
||||
|
||||
// GetPubKey implements Info interface
|
||||
func (i ledgerInfo) GetPubKey() crypto.PubKey {
|
||||
func (i ledgerInfo) GetPubKey() cryptotypes.PubKey {
|
||||
return i.PubKey
|
||||
}
|
||||
|
||||
|
@ -134,12 +133,12 @@ func (i ledgerInfo) GetPath() (*hd.BIP44Params, error) {
|
|||
// offlineInfo is the public information about an offline key
|
||||
// Note: Algo must be last field in struct for backwards amino compatibility
|
||||
type offlineInfo struct {
|
||||
Name string `json:"name"`
|
||||
PubKey crypto.PubKey `json:"pubkey"`
|
||||
Algo hd.PubKeyType `json:"algo"`
|
||||
Name string `json:"name"`
|
||||
PubKey cryptotypes.PubKey `json:"pubkey"`
|
||||
Algo hd.PubKeyType `json:"algo"`
|
||||
}
|
||||
|
||||
func newOfflineInfo(name string, pub crypto.PubKey, algo hd.PubKeyType) Info {
|
||||
func newOfflineInfo(name string, pub cryptotypes.PubKey, algo hd.PubKeyType) Info {
|
||||
return &offlineInfo{
|
||||
Name: name,
|
||||
PubKey: pub,
|
||||
|
@ -158,7 +157,7 @@ func (i offlineInfo) GetName() string {
|
|||
}
|
||||
|
||||
// GetPubKey implements Info interface
|
||||
func (i offlineInfo) GetPubKey() crypto.PubKey {
|
||||
func (i offlineInfo) GetPubKey() cryptotypes.PubKey {
|
||||
return i.PubKey
|
||||
}
|
||||
|
||||
|
@ -178,20 +177,20 @@ func (i offlineInfo) GetPath() (*hd.BIP44Params, error) {
|
|||
}
|
||||
|
||||
type multisigPubKeyInfo struct {
|
||||
PubKey crypto.PubKey `json:"pubkey"`
|
||||
Weight uint `json:"weight"`
|
||||
PubKey cryptotypes.PubKey `json:"pubkey"`
|
||||
Weight uint `json:"weight"`
|
||||
}
|
||||
|
||||
// multiInfo is the public information about a multisig key
|
||||
type multiInfo struct {
|
||||
Name string `json:"name"`
|
||||
PubKey crypto.PubKey `json:"pubkey"`
|
||||
PubKey cryptotypes.PubKey `json:"pubkey"`
|
||||
Threshold uint `json:"threshold"`
|
||||
PubKeys []multisigPubKeyInfo `json:"pubkeys"`
|
||||
}
|
||||
|
||||
// NewMultiInfo creates a new multiInfo instance
|
||||
func NewMultiInfo(name string, pub crypto.PubKey) Info {
|
||||
func NewMultiInfo(name string, pub cryptotypes.PubKey) Info {
|
||||
multiPK := pub.(*multisig.LegacyAminoPubKey)
|
||||
|
||||
pubKeys := make([]multisigPubKeyInfo, len(multiPK.PubKeys))
|
||||
|
@ -219,7 +218,7 @@ func (i multiInfo) GetName() string {
|
|||
}
|
||||
|
||||
// GetPubKey implements Info interface
|
||||
func (i multiInfo) GetPubKey() crypto.PubKey {
|
||||
func (i multiInfo) GetPubKey() cryptotypes.PubKey {
|
||||
return i.PubKey
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ import (
|
|||
cryptoamino "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/ledger"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
@ -76,10 +77,10 @@ type Keyring interface {
|
|||
SaveLedgerKey(uid string, algo SignatureAlgo, hrp string, coinType, account, index uint32) (Info, error)
|
||||
|
||||
// SavePubKey stores a public key and returns the persisted Info structure.
|
||||
SavePubKey(uid string, pubkey tmcrypto.PubKey, algo hd.PubKeyType) (Info, error)
|
||||
SavePubKey(uid string, pubkey types.PubKey, algo hd.PubKeyType) (Info, error)
|
||||
|
||||
// SaveMultisig stores and returns a new multsig (offline) key reference.
|
||||
SaveMultisig(uid string, pubkey tmcrypto.PubKey) (Info, error)
|
||||
SaveMultisig(uid string, pubkey types.PubKey) (Info, error)
|
||||
|
||||
Signer
|
||||
|
||||
|
@ -90,10 +91,10 @@ type Keyring interface {
|
|||
// Signer is implemented by key stores that want to provide signing capabilities.
|
||||
type Signer interface {
|
||||
// Sign sign byte messages with a user key.
|
||||
Sign(uid string, msg []byte) ([]byte, tmcrypto.PubKey, error)
|
||||
Sign(uid string, msg []byte) ([]byte, types.PubKey, error)
|
||||
|
||||
// SignByAddress sign byte messages with a user key providing the address.
|
||||
SignByAddress(address sdk.Address, msg []byte) ([]byte, tmcrypto.PubKey, error)
|
||||
SignByAddress(address sdk.Address, msg []byte) ([]byte, types.PubKey, error)
|
||||
}
|
||||
|
||||
// Importer is implemented by key stores that support import of public and private keys.
|
||||
|
@ -224,13 +225,13 @@ func (ks keystore) ExportPrivKeyArmor(uid, encryptPassphrase string) (armor stri
|
|||
}
|
||||
|
||||
// ExportPrivateKeyObject exports an armored private key object.
|
||||
func (ks keystore) ExportPrivateKeyObject(uid string) (tmcrypto.PrivKey, error) {
|
||||
func (ks keystore) ExportPrivateKeyObject(uid string) (types.PrivKey, error) {
|
||||
info, err := ks.Key(uid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var priv tmcrypto.PrivKey
|
||||
var priv types.PrivKey
|
||||
|
||||
switch linfo := info.(type) {
|
||||
case localInfo:
|
||||
|
@ -301,13 +302,13 @@ func (ks keystore) ImportPubKey(uid string, armor string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (ks keystore) Sign(uid string, msg []byte) ([]byte, tmcrypto.PubKey, error) {
|
||||
func (ks keystore) Sign(uid string, msg []byte) ([]byte, types.PubKey, error) {
|
||||
info, err := ks.Key(uid)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
var priv tmcrypto.PrivKey
|
||||
var priv types.PrivKey
|
||||
|
||||
switch i := info.(type) {
|
||||
case localInfo:
|
||||
|
@ -335,7 +336,7 @@ func (ks keystore) Sign(uid string, msg []byte) ([]byte, tmcrypto.PubKey, error)
|
|||
return sig, priv.PubKey(), nil
|
||||
}
|
||||
|
||||
func (ks keystore) SignByAddress(address sdk.Address, msg []byte) ([]byte, tmcrypto.PubKey, error) {
|
||||
func (ks keystore) SignByAddress(address sdk.Address, msg []byte) ([]byte, types.PubKey, error) {
|
||||
key, err := ks.KeyByAddress(address)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
|
@ -359,7 +360,7 @@ func (ks keystore) SaveLedgerKey(uid string, algo SignatureAlgo, hrp string, coi
|
|||
return ks.writeLedgerKey(uid, priv.PubKey(), *hdPath, algo.Name())
|
||||
}
|
||||
|
||||
func (ks keystore) writeLedgerKey(name string, pub tmcrypto.PubKey, path hd.BIP44Params, algo hd.PubKeyType) (Info, error) {
|
||||
func (ks keystore) writeLedgerKey(name string, pub types.PubKey, path hd.BIP44Params, algo hd.PubKeyType) (Info, error) {
|
||||
info := newLedgerInfo(name, pub, path, algo)
|
||||
if err := ks.writeInfo(info); err != nil {
|
||||
return nil, err
|
||||
|
@ -368,11 +369,11 @@ func (ks keystore) writeLedgerKey(name string, pub tmcrypto.PubKey, path hd.BIP4
|
|||
return info, nil
|
||||
}
|
||||
|
||||
func (ks keystore) SaveMultisig(uid string, pubkey tmcrypto.PubKey) (Info, error) {
|
||||
func (ks keystore) SaveMultisig(uid string, pubkey types.PubKey) (Info, error) {
|
||||
return ks.writeMultisigKey(uid, pubkey)
|
||||
}
|
||||
|
||||
func (ks keystore) SavePubKey(uid string, pubkey tmcrypto.PubKey, algo hd.PubKeyType) (Info, error) {
|
||||
func (ks keystore) SavePubKey(uid string, pubkey types.PubKey, algo hd.PubKeyType) (Info, error) {
|
||||
return ks.writeOfflineKey(uid, pubkey, algo)
|
||||
}
|
||||
|
||||
|
@ -533,7 +534,7 @@ func (ks keystore) SupportedAlgorithms() (SigningAlgoList, SigningAlgoList) {
|
|||
// SignWithLedger signs a binary message with the ledger device referenced by an Info object
|
||||
// and returns the signed bytes and the public key. It returns an error if the device could
|
||||
// not be queried or it returned an error.
|
||||
func SignWithLedger(info Info, msg []byte) (sig []byte, pub tmcrypto.PubKey, err error) {
|
||||
func SignWithLedger(info Info, msg []byte) (sig []byte, pub types.PubKey, err error) {
|
||||
switch info.(type) {
|
||||
case *ledgerInfo, ledgerInfo:
|
||||
default:
|
||||
|
@ -691,7 +692,7 @@ func newRealPrompt(dir string, buf io.Reader) func(string) (string, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func (ks keystore) writeLocalKey(name string, priv tmcrypto.PrivKey, algo hd.PubKeyType) (Info, error) {
|
||||
func (ks keystore) writeLocalKey(name string, priv types.PrivKey, algo hd.PubKeyType) (Info, error) {
|
||||
// encrypt private key using keyring
|
||||
pub := priv.PubKey()
|
||||
|
||||
|
@ -753,7 +754,7 @@ func (ks keystore) existsInDb(info Info) (bool, error) {
|
|||
return false, nil
|
||||
}
|
||||
|
||||
func (ks keystore) writeOfflineKey(name string, pub tmcrypto.PubKey, algo hd.PubKeyType) (Info, error) {
|
||||
func (ks keystore) writeOfflineKey(name string, pub types.PubKey, algo hd.PubKeyType) (Info, error) {
|
||||
info := newOfflineInfo(name, pub, algo)
|
||||
err := ks.writeInfo(info)
|
||||
if err != nil {
|
||||
|
@ -763,7 +764,7 @@ func (ks keystore) writeOfflineKey(name string, pub tmcrypto.PubKey, algo hd.Pub
|
|||
return info, nil
|
||||
}
|
||||
|
||||
func (ks keystore) writeMultisigKey(name string, pub tmcrypto.PubKey) (Info, error) {
|
||||
func (ks keystore) writeMultisigKey(name string, pub types.PubKey) (Info, error) {
|
||||
info := NewMultiInfo(name, pub)
|
||||
err := ks.writeInfo(info)
|
||||
if err != nil {
|
||||
|
|
|
@ -8,13 +8,13 @@ import (
|
|||
"github.com/99designs/keyring"
|
||||
bip39 "github.com/cosmos/go-bip39"
|
||||
"github.com/stretchr/testify/require"
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -166,7 +166,7 @@ func TestSignVerifyKeyRing(t *testing.T) {
|
|||
|
||||
// let's try to validate and make sure it only works when everything is proper
|
||||
cases := []struct {
|
||||
key tmcrypto.PubKey
|
||||
key types.PubKey
|
||||
data []byte
|
||||
sig []byte
|
||||
valid bool
|
||||
|
@ -380,7 +380,7 @@ func TestInMemoryCreateMultisig(t *testing.T) {
|
|||
kb, err := New("keybasename", "memory", "", nil)
|
||||
require.NoError(t, err)
|
||||
multi := multisig.NewLegacyAminoPubKey(
|
||||
1, []tmcrypto.PubKey{
|
||||
1, []types.PubKey{
|
||||
secp256k1.GenPrivKey().PubKey(),
|
||||
},
|
||||
)
|
||||
|
@ -521,7 +521,7 @@ func TestInMemorySignVerify(t *testing.T) {
|
|||
|
||||
// let's try to validate and make sure it only works when everything is proper
|
||||
cases := []struct {
|
||||
key tmcrypto.PubKey
|
||||
key types.PubKey
|
||||
data []byte
|
||||
sig []byte
|
||||
valid bool
|
||||
|
@ -947,7 +947,7 @@ func TestAltKeyring_SaveMultisig(t *testing.T) {
|
|||
key := "multi"
|
||||
pub := multisig.NewLegacyAminoPubKey(
|
||||
2,
|
||||
[]tmcrypto.PubKey{
|
||||
[]types.PubKey{
|
||||
&secp256k1.PubKey{Key: mnemonic1.GetPubKey().Bytes()},
|
||||
&secp256k1.PubKey{Key: mnemonic2.GetPubKey().Bytes()},
|
||||
},
|
||||
|
|
|
@ -6,11 +6,11 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
tmos "github.com/tendermint/tendermint/libs/os"
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
@ -101,13 +101,13 @@ func (kb dbKeybase) Get(name string) (Info, error) {
|
|||
// ExportPrivateKeyObject returns a PrivKey object given the key name and
|
||||
// passphrase. An error is returned if the key does not exist or if the Info for
|
||||
// the key is invalid.
|
||||
func (kb dbKeybase) ExportPrivateKeyObject(name string, passphrase string) (tmcrypto.PrivKey, error) {
|
||||
func (kb dbKeybase) ExportPrivateKeyObject(name string, passphrase string) (types.PrivKey, error) {
|
||||
info, err := kb.Get(name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var priv tmcrypto.PrivKey
|
||||
var priv types.PrivKey
|
||||
|
||||
switch i := info.(type) {
|
||||
case localInfo:
|
||||
|
|
|
@ -4,10 +4,10 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -16,7 +16,7 @@ func TestBech32KeysOutput(t *testing.T) {
|
|||
bechTmpKey := sdk.MustBech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, tmpKey)
|
||||
tmpAddr := sdk.AccAddress(tmpKey.Address().Bytes())
|
||||
|
||||
multisigPks := kmultisig.NewLegacyAminoPubKey(1, []crypto.PubKey{tmpKey})
|
||||
multisigPks := kmultisig.NewLegacyAminoPubKey(1, []types.PubKey{tmpKey})
|
||||
multiInfo := NewMultiInfo("multisig", multisigPks)
|
||||
accAddr := sdk.AccAddress(multiInfo.GetPubKey().Address().Bytes())
|
||||
bechPubKey := sdk.MustBech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, multiInfo.GetPubKey())
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
package keyring
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
// Language is a language to create the BIP 39 mnemonic in.
|
||||
|
@ -68,5 +67,5 @@ type (
|
|||
// DeriveKeyFunc defines the function to derive a new key from a seed and hd path
|
||||
DeriveKeyFunc func(mnemonic string, bip39Passphrase, hdPath string, algo hd.PubKeyType) ([]byte, error)
|
||||
// PrivKeyGenFunc defines the function to convert derived key bytes to a tendermint private key
|
||||
PrivKeyGenFunc func(bz []byte, algo hd.PubKeyType) (crypto.PrivKey, error)
|
||||
PrivKeyGenFunc func(bz []byte, algo hd.PubKeyType) (cryptotypes.PrivKey, error)
|
||||
)
|
||||
|
|
|
@ -7,7 +7,6 @@ import (
|
|||
"io"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
tmed25519 "github.com/tendermint/tendermint/crypto/ed25519"
|
||||
"github.com/tendermint/tendermint/crypto/tmhash"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
|
@ -18,8 +17,8 @@ import (
|
|||
//-------------------------------------
|
||||
|
||||
const (
|
||||
PrivKeyName = "cosmos/PrivKeyEd25519"
|
||||
PubKeyName = "cosmos/PubKeyEd25519"
|
||||
PrivKeyName = "tendermint/PrivKeyEd25519"
|
||||
PubKeyName = "tendermint/PubKeyEd25519"
|
||||
// PubKeySize is is the size, in bytes, of public keys as used in this package.
|
||||
PubKeySize = 32
|
||||
// PrivKeySize is the size, in bytes, of private keys as used in this package.
|
||||
|
@ -56,7 +55,7 @@ func (privKey *PrivKey) Sign(msg []byte) ([]byte, error) {
|
|||
// PubKey gets the corresponding public key from the private key.
|
||||
//
|
||||
// Panics if the private key is not initialized.
|
||||
func (privKey *PrivKey) PubKey() crypto.PubKey {
|
||||
func (privKey *PrivKey) PubKey() cryptotypes.PubKey {
|
||||
// If the latter 32 bytes of the privkey are all zero, privkey is not
|
||||
// initialized.
|
||||
initialized := false
|
||||
|
@ -78,7 +77,7 @@ func (privKey *PrivKey) PubKey() crypto.PubKey {
|
|||
|
||||
// Equals - you probably don't need to use this.
|
||||
// Runs in constant time based on length of the keys.
|
||||
func (privKey *PrivKey) Equals(other crypto.PrivKey) bool {
|
||||
func (privKey *PrivKey) Equals(other cryptotypes.LedgerPrivKey) bool {
|
||||
if privKey.Type() != other.Type() {
|
||||
return false
|
||||
}
|
||||
|
@ -150,7 +149,6 @@ func GenPrivKeyFromSecret(secret []byte) *PrivKey {
|
|||
|
||||
var _ cryptotypes.PubKey = &PubKey{}
|
||||
var _ codec.AminoMarshaler = &PubKey{}
|
||||
var _ cryptotypes.IntoTmPubKey = &PubKey{}
|
||||
|
||||
// Address is the SHA256-20 of the raw pubkey bytes.
|
||||
func (pubKey *PubKey) Address() crypto.Address {
|
||||
|
@ -182,7 +180,7 @@ func (pubKey *PubKey) Type() string {
|
|||
return keyType
|
||||
}
|
||||
|
||||
func (pubKey *PubKey) Equals(other crypto.PubKey) bool {
|
||||
func (pubKey *PubKey) Equals(other cryptotypes.PubKey) bool {
|
||||
if pubKey.Type() != other.Type() {
|
||||
return false
|
||||
}
|
||||
|
@ -216,19 +214,3 @@ func (pubKey PubKey) MarshalAminoJSON() ([]byte, error) {
|
|||
func (pubKey *PubKey) UnmarshalAminoJSON(bz []byte) error {
|
||||
return pubKey.UnmarshalAmino(bz)
|
||||
}
|
||||
|
||||
// AsTmPubKey converts our own PubKey into a Tendermint ED25519 pubkey.
|
||||
func (pubKey *PubKey) AsTmPubKey() crypto.PubKey {
|
||||
return tmed25519.PubKey(pubKey.Key)
|
||||
}
|
||||
|
||||
// FromTmEd25519 converts a Tendermint ED25519 pubkey into our own ED25519
|
||||
// PubKey.
|
||||
func FromTmEd25519(pubKey crypto.PubKey) (*PubKey, error) {
|
||||
tmPk, ok := pubKey.(tmed25519.PubKey)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("expected %T, got %T", tmed25519.PubKey{}, pubKey)
|
||||
}
|
||||
|
||||
return &PubKey{Key: []byte(tmPk)}, nil
|
||||
}
|
||||
|
|
|
@ -9,10 +9,10 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
tmed25519 "github.com/tendermint/tendermint/crypto/ed25519"
|
||||
"github.com/tendermint/tendermint/crypto/sr25519"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
ed25519 "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
|
@ -51,7 +51,7 @@ func TestPubKeyEquals(t *testing.T) {
|
|||
testCases := []struct {
|
||||
msg string
|
||||
pubKey cryptotypes.PubKey
|
||||
other crypto.PubKey
|
||||
other cryptotypes.PubKey
|
||||
expectEq bool
|
||||
}{
|
||||
{
|
||||
|
@ -71,7 +71,7 @@ func TestPubKeyEquals(t *testing.T) {
|
|||
{
|
||||
"different types",
|
||||
ed25519PubKey,
|
||||
sr25519.GenPrivKey().PubKey(),
|
||||
secp256k1.GenPrivKey().PubKey(),
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
@ -90,7 +90,7 @@ func TestPrivKeyEquals(t *testing.T) {
|
|||
testCases := []struct {
|
||||
msg string
|
||||
privKey cryptotypes.PrivKey
|
||||
other crypto.PrivKey
|
||||
other cryptotypes.PrivKey
|
||||
expectEq bool
|
||||
}{
|
||||
{
|
||||
|
@ -110,7 +110,7 @@ func TestPrivKeyEquals(t *testing.T) {
|
|||
{
|
||||
"different types",
|
||||
ed25519PrivKey,
|
||||
sr25519.GenPrivKey(),
|
||||
secp256k1.GenPrivKey(),
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ import (
|
|||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
// The code in this file is adapted from agl/ed25519.
|
||||
|
@ -24,7 +24,7 @@ func (zeroReader) Read(buf []byte) (int, error) {
|
|||
|
||||
// BenchmarkKeyGeneration benchmarks the given key generation algorithm using
|
||||
// a dummy reader.
|
||||
func BenchmarkKeyGeneration(b *testing.B, generateKey func(reader io.Reader) crypto.PrivKey) {
|
||||
func BenchmarkKeyGeneration(b *testing.B, generateKey func(reader io.Reader) types.PrivKey) {
|
||||
var zero zeroReader
|
||||
for i := 0; i < b.N; i++ {
|
||||
generateKey(zero)
|
||||
|
@ -33,7 +33,7 @@ func BenchmarkKeyGeneration(b *testing.B, generateKey func(reader io.Reader) cry
|
|||
|
||||
// BenchmarkSigning benchmarks the given signing algorithm using
|
||||
// the provided privkey.
|
||||
func BenchmarkSigning(b *testing.B, priv crypto.PrivKey) {
|
||||
func BenchmarkSigning(b *testing.B, priv types.PrivKey) {
|
||||
message := []byte("Hello, world!")
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
|
@ -47,7 +47,7 @@ func BenchmarkSigning(b *testing.B, priv crypto.PrivKey) {
|
|||
|
||||
// BenchmarkVerification benchmarks the given verification algorithm using
|
||||
// the provided privkey on a constant message.
|
||||
func BenchmarkVerification(b *testing.B, priv crypto.PrivKey) {
|
||||
func BenchmarkVerification(b *testing.B, priv types.PrivKey) {
|
||||
pub := priv.PubKey()
|
||||
// use a short message, so this time doesn't get dominated by hashing.
|
||||
message := []byte("Hello, world!")
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package multisig
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/sr25519"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
|
@ -19,10 +18,6 @@ const (
|
|||
var AminoCdc = codec.NewLegacyAmino()
|
||||
|
||||
func init() {
|
||||
// TODO We now register both Tendermint's PubKey and our own PubKey. In the
|
||||
// long-term, we should move away from Tendermint's PubKey, and delete this
|
||||
// first line.
|
||||
AminoCdc.RegisterInterface((*crypto.PubKey)(nil), nil)
|
||||
AminoCdc.RegisterInterface((*cryptotypes.PubKey)(nil), nil)
|
||||
AminoCdc.RegisterConcrete(ed25519.PubKey{},
|
||||
ed25519.PubKeyName, nil)
|
||||
|
|
|
@ -5,10 +5,8 @@ import (
|
|||
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
|
||||
proto "github.com/gogo/protobuf/proto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||
crypto "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
multisigtypes "github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
)
|
||||
|
@ -18,7 +16,7 @@ var _ types.UnpackInterfacesMessage = &LegacyAminoPubKey{}
|
|||
|
||||
// NewLegacyAminoPubKey returns a new LegacyAminoPubKey.
|
||||
// Panics if len(pubKeys) < k or 0 >= k.
|
||||
func NewLegacyAminoPubKey(k int, pubKeys []tmcrypto.PubKey) *LegacyAminoPubKey {
|
||||
func NewLegacyAminoPubKey(k int, pubKeys []cryptotypes.PubKey) *LegacyAminoPubKey {
|
||||
if k <= 0 {
|
||||
panic("threshold k of n multisignature: k <= 0")
|
||||
}
|
||||
|
@ -32,8 +30,8 @@ func NewLegacyAminoPubKey(k int, pubKeys []tmcrypto.PubKey) *LegacyAminoPubKey {
|
|||
return &LegacyAminoPubKey{Threshold: uint32(k), PubKeys: anyPubKeys}
|
||||
}
|
||||
|
||||
// Address implements crypto.PubKey Address method
|
||||
func (m *LegacyAminoPubKey) Address() tmcrypto.Address {
|
||||
// Address implements cryptotypes.PubKey Address method
|
||||
func (m *LegacyAminoPubKey) Address() cryptotypes.Address {
|
||||
return tmcrypto.AddressHash(m.Bytes())
|
||||
}
|
||||
|
||||
|
@ -91,7 +89,7 @@ func (m *LegacyAminoPubKey) VerifyMultisignature(getSignBytes multisigtypes.GetS
|
|||
return nil
|
||||
}
|
||||
|
||||
// VerifySignature implements crypto.PubKey VerifySignature method,
|
||||
// VerifySignature implements cryptotypes.PubKey VerifySignature method,
|
||||
// it panics because it can't handle MultiSignatureData
|
||||
// cf. https://github.com/cosmos/cosmos-sdk/issues/7109#issuecomment-686329936
|
||||
func (m *LegacyAminoPubKey) VerifySignature(msg []byte, sig []byte) bool {
|
||||
|
@ -99,11 +97,11 @@ func (m *LegacyAminoPubKey) VerifySignature(msg []byte, sig []byte) bool {
|
|||
}
|
||||
|
||||
// GetPubKeys implements the PubKey.GetPubKeys method
|
||||
func (m *LegacyAminoPubKey) GetPubKeys() []tmcrypto.PubKey {
|
||||
func (m *LegacyAminoPubKey) GetPubKeys() []cryptotypes.PubKey {
|
||||
if m != nil {
|
||||
pubKeys := make([]tmcrypto.PubKey, len(m.PubKeys))
|
||||
pubKeys := make([]cryptotypes.PubKey, len(m.PubKeys))
|
||||
for i := 0; i < len(m.PubKeys); i++ {
|
||||
pubKeys[i] = m.PubKeys[i].GetCachedValue().(tmcrypto.PubKey)
|
||||
pubKeys[i] = m.PubKeys[i].GetCachedValue().(cryptotypes.PubKey)
|
||||
}
|
||||
return pubKeys
|
||||
}
|
||||
|
@ -113,7 +111,7 @@ func (m *LegacyAminoPubKey) GetPubKeys() []tmcrypto.PubKey {
|
|||
|
||||
// Equals returns true if m and other both have the same number of keys, and
|
||||
// all constituent keys are the same, and in the same order.
|
||||
func (m *LegacyAminoPubKey) Equals(key tmcrypto.PubKey) bool {
|
||||
func (m *LegacyAminoPubKey) Equals(key cryptotypes.PubKey) bool {
|
||||
otherKey, ok := key.(multisigtypes.PubKey)
|
||||
if !ok {
|
||||
return false
|
||||
|
@ -145,7 +143,7 @@ func (m *LegacyAminoPubKey) Type() string {
|
|||
// UnpackInterfaces implements UnpackInterfacesMessage.UnpackInterfaces
|
||||
func (m *LegacyAminoPubKey) UnpackInterfaces(unpacker types.AnyUnpacker) error {
|
||||
for _, any := range m.PubKeys {
|
||||
var pk crypto.PubKey
|
||||
var pk cryptotypes.PubKey
|
||||
err := unpacker.UnpackAny(any, &pk)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -154,11 +152,11 @@ func (m *LegacyAminoPubKey) UnpackInterfaces(unpacker types.AnyUnpacker) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func packPubKeys(pubKeys []tmcrypto.PubKey) ([]*types.Any, error) {
|
||||
func packPubKeys(pubKeys []cryptotypes.PubKey) ([]*types.Any, error) {
|
||||
anyPubKeys := make([]*types.Any, len(pubKeys))
|
||||
|
||||
for i := 0; i < len(pubKeys); i++ {
|
||||
any, err := types.NewAnyWithValue(pubKeys[i].(proto.Message))
|
||||
any, err := types.NewAnyWithValue(pubKeys[i])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -3,19 +3,16 @@ package multisig_test
|
|||
import (
|
||||
"testing"
|
||||
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||
crypto "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/legacy/legacytx"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/codec/types"
|
||||
kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/legacy/legacytx"
|
||||
)
|
||||
|
||||
func TestAddress(t *testing.T) {
|
||||
|
@ -30,12 +27,12 @@ func TestEquals(t *testing.T) {
|
|||
pubKey1 := secp256k1.GenPrivKey().PubKey()
|
||||
pubKey2 := secp256k1.GenPrivKey().PubKey()
|
||||
|
||||
multisigKey := kmultisig.NewLegacyAminoPubKey(1, []tmcrypto.PubKey{pubKey1, pubKey2})
|
||||
otherMultisigKey := kmultisig.NewLegacyAminoPubKey(1, []tmcrypto.PubKey{pubKey1, multisigKey})
|
||||
multisigKey := kmultisig.NewLegacyAminoPubKey(1, []cryptotypes.PubKey{pubKey1, pubKey2})
|
||||
otherMultisigKey := kmultisig.NewLegacyAminoPubKey(1, []cryptotypes.PubKey{pubKey1, multisigKey})
|
||||
|
||||
testCases := []struct {
|
||||
msg string
|
||||
other tmcrypto.PubKey
|
||||
other cryptotypes.PubKey
|
||||
expectEq bool
|
||||
}{
|
||||
{
|
||||
|
@ -255,8 +252,8 @@ func TestPubKeyMultisigThresholdAminoToIface(t *testing.T) {
|
|||
|
||||
ab, err := kmultisig.AminoCdc.MarshalBinaryLengthPrefixed(multisigKey)
|
||||
require.NoError(t, err)
|
||||
// like other crypto.Pubkey implementations (e.g. ed25519.PubKey),
|
||||
// LegacyAminoPubKey should be deserializable into a crypto.LegacyAminoPubKey:
|
||||
// like other cryptotypes.Pubkey implementations (e.g. ed25519.PubKey),
|
||||
// LegacyAminoPubKey should be deserializable into a cryptotypes.LegacyAminoPubKey:
|
||||
var pubKey kmultisig.LegacyAminoPubKey
|
||||
err = kmultisig.AminoCdc.UnmarshalBinaryLengthPrefixed(ab, &pubKey)
|
||||
require.NoError(t, err)
|
||||
|
@ -264,8 +261,8 @@ func TestPubKeyMultisigThresholdAminoToIface(t *testing.T) {
|
|||
require.Equal(t, multisigKey.Equals(&pubKey), true)
|
||||
}
|
||||
|
||||
func generatePubKeysAndSignatures(n int, msg []byte) (pubKeys []tmcrypto.PubKey, signatures []signing.SignatureData) {
|
||||
pubKeys = make([]tmcrypto.PubKey, n)
|
||||
func generatePubKeysAndSignatures(n int, msg []byte) (pubKeys []cryptotypes.PubKey, signatures []signing.SignatureData) {
|
||||
pubKeys = make([]cryptotypes.PubKey, n)
|
||||
signatures = make([]signing.SignatureData, n)
|
||||
|
||||
for i := 0; i < n; i++ {
|
||||
|
@ -279,12 +276,12 @@ func generatePubKeysAndSignatures(n int, msg []byte) (pubKeys []tmcrypto.PubKey,
|
|||
}
|
||||
|
||||
func generateNestedMultiSignature(n int, msg []byte) (multisig.PubKey, *signing.MultiSignatureData) {
|
||||
pubKeys := make([]tmcrypto.PubKey, n)
|
||||
pubKeys := make([]cryptotypes.PubKey, n)
|
||||
signatures := make([]signing.SignatureData, n)
|
||||
bitArray := crypto.NewCompactBitArray(n)
|
||||
bitArray := cryptotypes.NewCompactBitArray(n)
|
||||
for i := 0; i < n; i++ {
|
||||
nestedPks, nestedSigs := generatePubKeysAndSignatures(5, msg)
|
||||
nestedBitArray := crypto.NewCompactBitArray(5)
|
||||
nestedBitArray := cryptotypes.NewCompactBitArray(5)
|
||||
for j := 0; j < 5; j++ {
|
||||
nestedBitArray.SetIndex(j, true)
|
||||
}
|
||||
|
|
|
@ -4,13 +4,12 @@ import (
|
|||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/internal/benchmarking"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
func BenchmarkKeyGeneration(b *testing.B) {
|
||||
benchmarkKeygenWrapper := func(reader io.Reader) crypto.PrivKey {
|
||||
benchmarkKeygenWrapper := func(reader io.Reader) types.PrivKey {
|
||||
priv := genPrivKey(reader)
|
||||
return &PrivKey{Key: priv}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ func (privKey *PrivKey) Bytes() []byte {
|
|||
|
||||
// PubKey performs the point-scalar multiplication from the privKey on the
|
||||
// generator point to get the pubkey.
|
||||
func (privKey *PrivKey) PubKey() crypto.PubKey {
|
||||
func (privKey *PrivKey) PubKey() cryptotypes.PubKey {
|
||||
_, pubkeyObject := secp256k1.PrivKeyFromBytes(secp256k1.S256(), privKey.Key)
|
||||
pk := pubkeyObject.SerializeCompressed()
|
||||
return &PubKey{Key: pk}
|
||||
|
@ -42,7 +42,7 @@ func (privKey *PrivKey) PubKey() crypto.PubKey {
|
|||
|
||||
// Equals - you probably don't need to use this.
|
||||
// Runs in constant time based on length of the
|
||||
func (privKey *PrivKey) Equals(other crypto.PrivKey) bool {
|
||||
func (privKey *PrivKey) Equals(other cryptotypes.LedgerPrivKey) bool {
|
||||
return privKey.Type() == other.Type() && subtle.ConstantTimeCompare(privKey.Bytes(), other.Bytes()) == 1
|
||||
}
|
||||
|
||||
|
@ -173,7 +173,7 @@ func (pubKey *PubKey) Type() string {
|
|||
return keyType
|
||||
}
|
||||
|
||||
func (pubKey *PubKey) Equals(other crypto.PubKey) bool {
|
||||
func (pubKey *PubKey) Equals(other cryptotypes.PubKey) bool {
|
||||
return pubKey.Type() == other.Type() && bytes.Equal(pubKey.Bytes(), other.Bytes())
|
||||
}
|
||||
|
||||
|
|
|
@ -12,9 +12,9 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/crypto/sr25519"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
@ -143,7 +143,7 @@ func TestPubKeyEquals(t *testing.T) {
|
|||
testCases := []struct {
|
||||
msg string
|
||||
pubKey cryptotypes.PubKey
|
||||
other crypto.PubKey
|
||||
other cryptotypes.PubKey
|
||||
expectEq bool
|
||||
}{
|
||||
{
|
||||
|
@ -163,7 +163,7 @@ func TestPubKeyEquals(t *testing.T) {
|
|||
{
|
||||
"different types",
|
||||
secp256K1PubKey,
|
||||
sr25519.GenPrivKey().PubKey(),
|
||||
ed25519.GenPrivKey().PubKey(),
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
@ -182,7 +182,7 @@ func TestPrivKeyEquals(t *testing.T) {
|
|||
testCases := []struct {
|
||||
msg string
|
||||
privKey cryptotypes.PrivKey
|
||||
other crypto.PrivKey
|
||||
other cryptotypes.PrivKey
|
||||
expectEq bool
|
||||
}{
|
||||
{
|
||||
|
@ -202,7 +202,7 @@ func TestPrivKeyEquals(t *testing.T) {
|
|||
{
|
||||
"different types",
|
||||
secp256K1PrivKey,
|
||||
sr25519.GenPrivKey(),
|
||||
ed25519.GenPrivKey(),
|
||||
false,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
tcrypto "github.com/tendermint/tendermint/crypto"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
type byter interface {
|
||||
|
@ -51,12 +51,12 @@ func TestNilEncodings(t *testing.T) {
|
|||
require.EqualValues(t, a, b)
|
||||
|
||||
// Check nil PubKey.
|
||||
var c, d tcrypto.PubKey
|
||||
var c, d cryptotypes.PubKey
|
||||
checkAminoJSON(t, &c, &d, true)
|
||||
require.EqualValues(t, c, d)
|
||||
|
||||
// Check nil PrivKey.
|
||||
var e, f tcrypto.PrivKey
|
||||
var e, f cryptotypes.PrivKey
|
||||
checkAminoJSON(t, &e, &f, true)
|
||||
require.EqualValues(t, e, f)
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
|
||||
tmbtcec "github.com/tendermint/btcd/btcec"
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -43,7 +43,7 @@ type (
|
|||
// CachedPubKey should be private, but we want to encode it via
|
||||
// go-amino so we can view the address later, even without having the
|
||||
// ledger attached.
|
||||
CachedPubKey tmcrypto.PubKey
|
||||
CachedPubKey types.PubKey
|
||||
Path hd.BIP44Params
|
||||
}
|
||||
)
|
||||
|
@ -53,7 +53,7 @@ type (
|
|||
// This function is marked as unsafe as it will retrieve a pubkey without user verification.
|
||||
// It can only be used to verify a pubkey but never to create new accounts/keys. In that case,
|
||||
// please refer to NewPrivKeySecp256k1
|
||||
func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (tmcrypto.PrivKey, error) {
|
||||
func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (types.LedgerPrivKey, error) {
|
||||
device, err := getDevice()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -70,7 +70,7 @@ func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (tmcrypto.PrivKey, error) {
|
|||
|
||||
// NewPrivKeySecp256k1 will generate a new key and store the public key for later use.
|
||||
// The request will require user confirmation and will show account and index in the device
|
||||
func NewPrivKeySecp256k1(path hd.BIP44Params, hrp string) (tmcrypto.PrivKey, string, error) {
|
||||
func NewPrivKeySecp256k1(path hd.BIP44Params, hrp string) (types.LedgerPrivKey, string, error) {
|
||||
device, err := getDevice()
|
||||
if err != nil {
|
||||
return nil, "", err
|
||||
|
@ -86,7 +86,7 @@ func NewPrivKeySecp256k1(path hd.BIP44Params, hrp string) (tmcrypto.PrivKey, str
|
|||
}
|
||||
|
||||
// PubKey returns the cached public key.
|
||||
func (pkl PrivKeyLedgerSecp256k1) PubKey() tmcrypto.PubKey {
|
||||
func (pkl PrivKeyLedgerSecp256k1) PubKey() types.PubKey {
|
||||
return pkl.CachedPubKey
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ func (pkl PrivKeyLedgerSecp256k1) Sign(message []byte) ([]byte, error) {
|
|||
}
|
||||
|
||||
// ShowAddress triggers a ledger device to show the corresponding address.
|
||||
func ShowAddress(path hd.BIP44Params, expectedPubKey tmcrypto.PubKey,
|
||||
func ShowAddress(path hd.BIP44Params, expectedPubKey types.PubKey,
|
||||
accountAddressPrefix string) error {
|
||||
device, err := getDevice()
|
||||
if err != nil {
|
||||
|
@ -154,7 +154,7 @@ func (pkl PrivKeyLedgerSecp256k1) Bytes() []byte {
|
|||
|
||||
// Equals implements the PrivKey interface. It makes sure two private keys
|
||||
// refer to the same public key.
|
||||
func (pkl PrivKeyLedgerSecp256k1) Equals(other tmcrypto.PrivKey) bool {
|
||||
func (pkl PrivKeyLedgerSecp256k1) Equals(other types.LedgerPrivKey) bool {
|
||||
if otherKey, ok := other.(PrivKeyLedgerSecp256k1); ok {
|
||||
return pkl.CachedPubKey.Equals(otherKey.CachedPubKey)
|
||||
}
|
||||
|
@ -234,7 +234,7 @@ func sign(device SECP256K1, pkl PrivKeyLedgerSecp256k1, msg []byte) ([]byte, err
|
|||
//
|
||||
// since this involves IO, it may return an error, which is not exposed
|
||||
// in the PubKey interface, so this function allows better error handling
|
||||
func getPubKeyUnsafe(device SECP256K1, path hd.BIP44Params) (tmcrypto.PubKey, error) {
|
||||
func getPubKeyUnsafe(device SECP256K1, path hd.BIP44Params) (types.PubKey, error) {
|
||||
publicKey, err := device.GetPublicKeySECP256K1(path.DerivationPath())
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("please open Cosmos app on the Ledger device - error: %v", err)
|
||||
|
@ -258,7 +258,7 @@ func getPubKeyUnsafe(device SECP256K1, path hd.BIP44Params) (tmcrypto.PubKey, er
|
|||
//
|
||||
// Since this involves IO, it may return an error, which is not exposed
|
||||
// in the PubKey interface, so this function allows better error handling.
|
||||
func getPubKeyAddrSafe(device SECP256K1, path hd.BIP44Params, hrp string) (tmcrypto.PubKey, string, error) {
|
||||
func getPubKeyAddrSafe(device SECP256K1, path hd.BIP44Params, hrp string) (types.PubKey, string, error) {
|
||||
publicKey, addr, err := device.GetAddressPubKeySECP256K1(path.DerivationPath(), hrp)
|
||||
if err != nil {
|
||||
return nil, "", fmt.Errorf("address %s rejected", addr)
|
||||
|
|
|
@ -6,10 +6,9 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
|
||||
cryptoAmino "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
@ -58,7 +57,7 @@ func TestPublicKeyUnsafeHDPath(t *testing.T) {
|
|||
|
||||
const numIters = 10
|
||||
|
||||
privKeys := make([]tmcrypto.PrivKey, numIters)
|
||||
privKeys := make([]types.LedgerPrivKey, numIters)
|
||||
|
||||
// Check with device
|
||||
for i := uint32(0); i < 10; i++ {
|
||||
|
@ -70,8 +69,8 @@ func TestPublicKeyUnsafeHDPath(t *testing.T) {
|
|||
require.NotNil(t, priv)
|
||||
|
||||
// Check other methods
|
||||
require.NoError(t, priv.(PrivKeyLedgerSecp256k1).ValidateKey())
|
||||
tmp := priv.(PrivKeyLedgerSecp256k1)
|
||||
require.NoError(t, tmp.ValidateKey())
|
||||
(&tmp).AssertIsPrivKeyInner()
|
||||
|
||||
pubKeyAddr, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, priv.PubKey())
|
||||
|
@ -151,7 +150,7 @@ func TestPublicKeyHDPath(t *testing.T) {
|
|||
|
||||
const numIters = 10
|
||||
|
||||
privKeys := make([]tmcrypto.PrivKey, numIters)
|
||||
privKeys := make([]types.LedgerPrivKey, numIters)
|
||||
|
||||
// Check with device
|
||||
for i := uint32(0); i < 10; i++ {
|
||||
|
@ -170,8 +169,8 @@ func TestPublicKeyHDPath(t *testing.T) {
|
|||
"Is your device using test mnemonic: %s ?", testutil.TestMnemonic)
|
||||
|
||||
// Check other methods
|
||||
require.NoError(t, priv.(PrivKeyLedgerSecp256k1).ValidateKey())
|
||||
tmp := priv.(PrivKeyLedgerSecp256k1)
|
||||
require.NoError(t, tmp.ValidateKey())
|
||||
(&tmp).AssertIsPrivKeyInner()
|
||||
|
||||
pubKeyAddr, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeAccPub, priv.PubKey())
|
||||
|
|
|
@ -4,8 +4,6 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
)
|
||||
|
@ -27,7 +25,7 @@ func NewMultisig(n int) *signing.MultiSignatureData {
|
|||
}
|
||||
|
||||
// GetIndex returns the index of pk in keys. Returns -1 if not found
|
||||
func getIndex(pk crypto.PubKey, keys []crypto.PubKey) int {
|
||||
func getIndex(pk types.PubKey, keys []types.PubKey) int {
|
||||
for i := 0; i < len(keys); i++ {
|
||||
if pk.Equals(keys[i]) {
|
||||
return i
|
||||
|
@ -60,7 +58,7 @@ func AddSignature(mSig *signing.MultiSignatureData, sig signing.SignatureData, i
|
|||
|
||||
// AddSignatureFromPubKey adds a signature to the multisig, at the index in
|
||||
// keys corresponding to the provided pubkey.
|
||||
func AddSignatureFromPubKey(mSig *signing.MultiSignatureData, sig signing.SignatureData, pubkey crypto.PubKey, keys []crypto.PubKey) error {
|
||||
func AddSignatureFromPubKey(mSig *signing.MultiSignatureData, sig signing.SignatureData, pubkey types.PubKey, keys []types.PubKey) error {
|
||||
if mSig == nil {
|
||||
return fmt.Errorf("value of mSig is nil %v", mSig)
|
||||
}
|
||||
|
@ -85,6 +83,6 @@ func AddSignatureFromPubKey(mSig *signing.MultiSignatureData, sig signing.Signat
|
|||
return nil
|
||||
}
|
||||
|
||||
func AddSignatureV2(mSig *signing.MultiSignatureData, sig signing.SignatureV2, keys []crypto.PubKey) error {
|
||||
func AddSignatureV2(mSig *signing.MultiSignatureData, sig signing.SignatureV2, keys []types.PubKey) error {
|
||||
return AddSignatureFromPubKey(mSig, sig.Data, sig.PubKey, keys)
|
||||
}
|
||||
|
|
|
@ -1,22 +1,21 @@
|
|||
package multisig
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
)
|
||||
|
||||
// PubKey defines a type which supports multi-signature verification via MultiSignatureData
|
||||
// which supports multiple SignMode's.
|
||||
type PubKey interface {
|
||||
crypto.PubKey
|
||||
types.PubKey
|
||||
|
||||
// VerifyMultisignature verifies the provide multi-signature represented by MultiSignatureData
|
||||
// using getSignBytes to retrieve the sign bytes to verify against for the provided mode.
|
||||
VerifyMultisignature(getSignBytes GetSignBytesFunc, sig *signing.MultiSignatureData) error
|
||||
|
||||
// GetPubKeys returns the crypto.PubKey's nested within the multi-sig PubKey
|
||||
GetPubKeys() []crypto.PubKey
|
||||
// GetPubKeys returns the types.PubKey's nested within the multi-sig PubKey
|
||||
GetPubKeys() []types.PubKey
|
||||
|
||||
// GetThreshold returns the threshold number of signatures that must be obtained to verify a signature.
|
||||
GetThreshold() uint
|
||||
|
|
|
@ -5,26 +5,39 @@ import (
|
|||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
)
|
||||
|
||||
// PubKey interface extends proto.Message
|
||||
// and tendermint crypto.PubKey
|
||||
// PubKey defines a public key and extends proto.Message.
|
||||
type PubKey interface {
|
||||
proto.Message
|
||||
tmcrypto.PubKey
|
||||
|
||||
Address() Address
|
||||
Bytes() []byte
|
||||
VerifySignature(msg []byte, sig []byte) bool
|
||||
Equals(PubKey) bool
|
||||
Type() string
|
||||
}
|
||||
|
||||
// PrivKey interface extends proto.Message
|
||||
// and tendermint crypto.PrivKey
|
||||
// LedgerPrivKey defines a private key that is not a proto message. For now,
|
||||
// LedgerSecp256k1 keys are not converted to proto.Message yet, this is why
|
||||
// they use LedgerPrivKey instead of PrivKey. All other keys must use PrivKey
|
||||
// instead of LedgerPrivKey.
|
||||
// TODO https://github.com/cosmos/cosmos-sdk/issues/7357.
|
||||
type LedgerPrivKey interface {
|
||||
Bytes() []byte
|
||||
Sign(msg []byte) ([]byte, error)
|
||||
PubKey() PubKey
|
||||
Equals(LedgerPrivKey) bool
|
||||
Type() string
|
||||
}
|
||||
|
||||
// PrivKey defines a private key and extends proto.Message. For now, it extends
|
||||
// LedgerPrivKey (see godoc for LedgerPrivKey). Ultimately, we should remove
|
||||
// LedgerPrivKey and add its methods here directly.
|
||||
// TODO https://github.com/cosmos/cosmos-sdk/issues/7357.
|
||||
type PrivKey interface {
|
||||
proto.Message
|
||||
tmcrypto.PrivKey
|
||||
LedgerPrivKey
|
||||
}
|
||||
|
||||
type (
|
||||
Address = tmcrypto.Address
|
||||
)
|
||||
|
||||
// IntoTmPubKey allows our own PubKey types be converted into Tendermint's
|
||||
// pubkey types.
|
||||
type IntoTmPubKey interface {
|
||||
AsTmPubKey() tmcrypto.PubKey
|
||||
}
|
||||
|
|
|
@ -71,3 +71,4 @@ Read about the [PROCESS](./PROCESS.md).
|
|||
- [ADR 028: Public Key Addresses](./adr-028-public-key-addresses.md)
|
||||
- [ADR 031: Protobuf Msg Services](./adr-031-msg-service.md)
|
||||
- [ADR 032: Typed Events](./adr-032-typed-events.md)
|
||||
- [ADR 035: Rosetta API Support](./adr-035-rosetta-api-support.md)
|
||||
|
|
|
@ -0,0 +1,274 @@
|
|||
# ADR 035: Rosetta API Support
|
||||
|
||||
## Authors
|
||||
|
||||
- Jonathan Gimeno (@jgimeno)
|
||||
- David Grierson (@senormonito)
|
||||
- Alessio Treglia (@alessio)
|
||||
|
||||
## Context
|
||||
|
||||
[Rosetta API](https://www.rosetta-api.org/) is an open-source specification and set of tools developed by Coinbase to
|
||||
standardise blockchain interactions.
|
||||
|
||||
Through the use of a standard API for integrating blockchain applications it will
|
||||
|
||||
* Be easier for a user to interact with a given blockchain
|
||||
* Allow exchanges to integrate new blockchains quickly and easily
|
||||
* Enable application developers to build cross-blockchain applications such as block explorers, wallets and dApps at
|
||||
considerably lower cost and effort.
|
||||
|
||||
## Decision
|
||||
|
||||
It is clear that adding Rosetta API support to the Cosmos SDK will bring value to all the developers and
|
||||
Cosmos SDK based chains in the ecosystem. How it is implemented is key.
|
||||
|
||||
The driving principles of the proposed design are:
|
||||
|
||||
1. **Extensibility:** it must be as riskless and painless as possible for application developers to set-up network
|
||||
configurations to expose Rosetta API-compliant services.
|
||||
2. **Long term support:** This proposal aims to provide support for all the supported Cosmos SDK release series.
|
||||
3. **Cost-efficiency:** Backporting changes to Rosetta API specifications from `master` to the various stable
|
||||
branches of Cosmos SDK is a cost that needs to be reduced.
|
||||
|
||||
We will achieve these delivering on these principles by the following:
|
||||
|
||||
1. There will be an external repo called [cosmos-rosetta-gateway](https://github.com/tendermint/cosmos-rosetta-gateway)
|
||||
for the implementation of the core Rosetta API features, particularly:
|
||||
a. The types and interfaces. This separates design from implementation detail.
|
||||
b. Some core implementations: specifically, the `Service` functionality as this is independent of the Cosmos SDK version.
|
||||
2. Due to differences between the Cosmos release series, each series will have its own specific API implementations of `Network` struct and `Adapter` interface.
|
||||
3. There will be two options for starting an API service in applications:
|
||||
a. API shares the application process
|
||||
b. API-specific process.
|
||||
|
||||
|
||||
## Architecture
|
||||
|
||||
### The External Repo
|
||||
|
||||
As section will describe the proposed external library, including the service implementation, plus the defined types and interfaces.
|
||||
|
||||
#### Service
|
||||
|
||||
`Service` is a simple `struct` that is started and listens to the port specified in the options. This is meant to be used across all the Cosmos SDK versions that are actively supported.
|
||||
|
||||
The constructor follows:
|
||||
|
||||
`func New(options Options, network Network) (*Service, error)`
|
||||
|
||||
#### Types
|
||||
|
||||
`Service` accepts an `Options` `struct` that holds service configuration values, such as the port the service would be listening to:
|
||||
|
||||
```golang
|
||||
type Options struct {
|
||||
ListenAddress string
|
||||
}
|
||||
```
|
||||
|
||||
The `Network` type holds network-specific properties (i.e. configuration values) and adapters. Pre-configured concrete types will be available for each Cosmos SDK release. Applications can also create their own custom types.
|
||||
|
||||
```golang
|
||||
type Network struct {
|
||||
Properties rosetta.NetworkProperties
|
||||
Adapter rosetta.Adapter
|
||||
}
|
||||
```
|
||||
|
||||
A `NetworkProperties` `struct` comprises basic values that are required by a Rosetta API `Service`:
|
||||
|
||||
```golang
|
||||
type NetworkProperties struct {
|
||||
// Mandatory properties
|
||||
Blockchain string
|
||||
Network string
|
||||
SupportedOperations []string
|
||||
}
|
||||
```
|
||||
|
||||
Rosetta API services use `Blockchain` and `Network` as identifiers, e.g. the developers of _gaia_, the application that powers the Cosmos Hub, may want to set those to `Cosmos Hub` and `cosmos-hub-3` respectively.
|
||||
|
||||
`SupportedOperations` contains the transaction types that are supported by the library. At the present time,
|
||||
only `cosmos-sdk/MsgSend` is supported in Launchpad. Additional operations will be added in due time.
|
||||
|
||||
For Launchpad we will map the amino type name to the operation supported, in Stargate we will use the protoc one.
|
||||
|
||||
#### Interfaces
|
||||
|
||||
Every SDK version uses a different format to connect (rpc, gRpc, etc), we have abstracted this in what is called the
|
||||
Adapter. This is an interface that defines the methods an adapter implementation must provide in order to be used
|
||||
in the `Network` interface.
|
||||
|
||||
Each Cosmos SDK release series will have their own Adapter implementations.
|
||||
Developers can implement their own custom adapters as required.
|
||||
|
||||
```golang
|
||||
type Adapter interface {
|
||||
DataAPI
|
||||
ConstructionAPI
|
||||
}
|
||||
|
||||
type DataAPI interface {
|
||||
server.NetworkAPIServicer
|
||||
server.AccountAPIServicer
|
||||
server.MempoolAPIServicer
|
||||
server.BlockAPIServicer
|
||||
server.ConstructionAPIServicer
|
||||
}
|
||||
|
||||
type ConstructionAPI interface {
|
||||
server.ConstructionAPIServicer
|
||||
}
|
||||
```
|
||||
|
||||
Example in pseudo-code of an Adapter interface:
|
||||
|
||||
```golang
|
||||
type SomeAdapter struct {
|
||||
cosmosClient client
|
||||
tendermintClient client
|
||||
}
|
||||
|
||||
func NewSomeAdapter(cosmosClient client, tendermintClient client) rosetta.Adapter {
|
||||
return &SomeAdapter{cosmosClient: cosmosClient, tendermintClient: tendermintClient}
|
||||
}
|
||||
|
||||
func (s SomeAdapter) NetworkStatus(ctx context.Context, request *types.NetworkRequest) (*types.NetworkStatusResponse, *types.Error) {
|
||||
resp := s.tendermintClient.CallStatus()
|
||||
// ... Parse status Response
|
||||
// build NetworkStatusResponse
|
||||
return networkStatusResp, nil
|
||||
}
|
||||
|
||||
func (s SomeAdapter) AccountBalance(ctx context.Context, request *types.AccountBalanceRequest) (*types.AccountBalanceResponse, *types.Error) {
|
||||
resp := s.cosmosClient.Account()
|
||||
// ... Parse cosmos specific account response
|
||||
// build AccountBalanceResponse
|
||||
return AccountBalanceResponse, nil
|
||||
}
|
||||
|
||||
// And we repeat for all the methods defined in the interface.
|
||||
```
|
||||
|
||||
For further information about the `Servicer` interfaces, please refer to the [Coinbase's rosetta-sdk-go's documentation](https://pkg.go.dev/github.com/coinbase/rosetta-sdk-go@v0.5.9/server).
|
||||
|
||||
### 2. Cosmos SDK Implementation
|
||||
|
||||
As described, each Cosmos SDK release series will have version specific implementations of `Network` and `Adapter`, as
|
||||
well as a `NewNetwork` constructor.
|
||||
|
||||
Due to separation of interface and implementation, application developers have the option to override as needed,
|
||||
using this code as reference.
|
||||
|
||||
```golang
|
||||
// NewNetwork returns the default application configuration.
|
||||
func NewNetwork(options Options) service.Network {
|
||||
cosmosClient := cosmos.NewClient(fmt.Sprintf("http://%s", options.CosmosEndpoint))
|
||||
tendermintClient := tendermint.NewClient(fmt.Sprintf("http://%s", options.TendermintEndpoint))
|
||||
|
||||
return service.Network{
|
||||
Properties: rosetta.NetworkProperties{
|
||||
Blockchain: options.Blockchain,
|
||||
Network: options.Network,
|
||||
SupportedOperations: []string{OperationTransfer},
|
||||
},
|
||||
Adapter: newAdapter(
|
||||
cosmosClient,
|
||||
tendermintClient,
|
||||
properties{
|
||||
Blockchain: options.Blockchain,
|
||||
Network: options.Network,
|
||||
OfflineMode: options.OfflineMode,
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. API service invocation
|
||||
|
||||
As stated at the start, application developers will have two methods for invocation of the Rosetta API service:
|
||||
|
||||
1. Shared process for both application and API
|
||||
2. Standalone API service
|
||||
|
||||
#### Shared Process (Only Stargate)
|
||||
|
||||
Rosetta API service could run within the same execution process as the application. New configuration option and
|
||||
command line flags would be provided to support this:
|
||||
|
||||
```golang
|
||||
if config.Rosetta.Enable {
|
||||
....
|
||||
get contecxt, flags, etc
|
||||
...
|
||||
|
||||
h, err := service.New(
|
||||
service.Options{ListenAddress: config.Rosetta.ListenAddress},
|
||||
rosetta.NewNetwork(cdc, options),
|
||||
)
|
||||
if err != nil {
|
||||
}
|
||||
|
||||
...
|
||||
|
||||
go func() {
|
||||
if err := h.Start(config); err != nil {
|
||||
errCh <- err
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
#### Separate API service
|
||||
|
||||
Client application developers can write a new command to launch a Rosetta API server as a separate process too:
|
||||
|
||||
```golang
|
||||
func RosettaCommand(cdc *codec.Codec) *cobra.Command {
|
||||
|
||||
...
|
||||
cmd := &cobra.Command{
|
||||
Use: "rosetta",
|
||||
....
|
||||
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
....
|
||||
get contecxt, flags, etc
|
||||
...
|
||||
|
||||
h, err := service.New(
|
||||
service.Options{Endpoint: endpoint},
|
||||
rosetta.NewNetwork(cdc, options),
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
...
|
||||
|
||||
h.Start()
|
||||
}
|
||||
}
|
||||
...
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
## Status
|
||||
|
||||
Proposed
|
||||
|
||||
## Consequences
|
||||
|
||||
### Positive
|
||||
|
||||
- Out-of-the-box Rosetta API support within Cosmos SDK.
|
||||
- Blockchain interface standardisation
|
||||
|
||||
## References
|
||||
|
||||
- https://www.rosetta-api.org/
|
||||
- https://github.com/tendermint/cosmos-rosetta-gateway
|
|
@ -148,7 +148,8 @@ AppModule 在模块上公开了一组有用的方法,这些方法有助于将
|
|||
模块的`处理程序`通常在名为 `handler.go` 的文件中定义,并包括:
|
||||
|
||||
- NewHandler 将消息发到对应的回调 `handler`。 该函数返回一个 `handler` 函数,此前这个函数在 `AppModule` 中注册,以在应用程序的模块管理器中用于初始化应用程序的路由器。接下来是 [nameservice tutorial](https://github.com/cosmos/sdk-tutorials/tree/master/nameservice) 的一个例子。
|
||||
+++ https://github.com/cosmos/sdk-tutorials/blob/master/nameservice/x/nameservice/handler.go#L12-L26
|
||||
|
||||
+++ https://github.com/cosmos/sdk-tutorials/blob/86a27321cf89cc637581762e953d0c07f8c78ece/nameservice/x/nameservice/internal/keeper/querier.go#L19-L32
|
||||
|
||||
- 模块定义的每种消息类型的处理函数。开发人员在这些函数中编写消息处理逻辑。这通常包括进行状态检查以确保消息有效,并调用 [`keeper`](https://docs.cosmos.network/master/basics/app-anatomy.html#keeper) 的方法来更新状态。
|
||||
|
||||
|
|
|
@ -19,10 +19,10 @@ simd query account $MY_VALIDATOR_ADDRESS --chain-id my-test-chain
|
|||
You should see the current balance of the account you created, equal to the original balance of `stake` you granted it minus the amount you delegated via the `gentx`. Now, create a second account:
|
||||
|
||||
```bash
|
||||
simd keys add recipient
|
||||
simd keys add recipient --keyring-backend test
|
||||
|
||||
# Put the generated address in a variable for later use.
|
||||
RECIPIENT=$(simd keys show recipient -a)
|
||||
RECIPIENT=$(simd keys show recipient -a --keyring-backend test)
|
||||
```
|
||||
|
||||
The command above creates a local key-pair that is not yet registered on the chain. An account is created the first time it receives tokens from another account. Now, run the following command to send tokens to the `recipient` account:
|
||||
|
@ -37,10 +37,10 @@ simd query account $RECIPIENT --chain-id my-test-chain
|
|||
Finally, delegate some of the stake tokens sent to the `recipient` account to the validator:
|
||||
|
||||
```bash
|
||||
simd tx staking delegate $(simd keys show my_validator --bech val -a) 500stake --from recipient --chain-id my-test-chain
|
||||
simd tx staking delegate $(simd keys show my_validator --bech val -a --keyring-backend test) 500stake --from recipient --chain-id my-test-chain
|
||||
|
||||
# Query the total delegations to `validator`.
|
||||
simd query staking delegations-to $(simd keys show my_validator --bech val -a) --chain-id my-test-chain
|
||||
simd query staking delegations-to $(simd keys show my_validator --bech val -a --keyring-backend test) --chain-id my-test-chain
|
||||
```
|
||||
|
||||
You should see two delegations, the first one made from the `gentx`, and the second one you just performed from the `recipient` account.
|
||||
|
|
|
@ -115,7 +115,7 @@ To create a new key in the keyring, run the `add` subcommand with a `<key_name>`
|
|||
$ simd keys add my_validator --keyring-backend test
|
||||
|
||||
# Put the generated address in a variable for later use.
|
||||
MY_VALIDATOR_ADDRESS=$(simd keys show my_validator -a)
|
||||
MY_VALIDATOR_ADDRESS=$(simd keys show my_validator -a --keyring-backend test)
|
||||
```
|
||||
|
||||
This command generates a new 24-word mnemonic phrase, persists it to the relevant backend, and outputs information about the keypair. If this keypair will be used to hold value-bearing tokens, be sure to write down the mnemonic phrase somewhere safe!
|
||||
|
|
|
@ -39,12 +39,12 @@ The `~/.simapp` folder has the following structure:
|
|||
|- priv_validator_key.json # Private key to use as a validator in the consensus protocol.
|
||||
```
|
||||
|
||||
Before starting the chain, you need to populate the state with at least one account. To do so, first [create a new account in the keyring](./keyring.md#adding-keys-to-the-keyring) named `my_validator` (feel free to choose another name).
|
||||
Before starting the chain, you need to populate the state with at least one account. To do so, first [create a new account in the keyring](./keyring.md#adding-keys-to-the-keyring) named `my_validator` under the `test` keyring backend (feel free to choose another name and another backend).
|
||||
|
||||
Now that you have created a local account, go ahead and grant it some `stake` tokens in your chain's genesis file. Doing so will also make sure your chain is aware of this account's existence:
|
||||
|
||||
```bash
|
||||
simd add-genesis-account $(simd keys show my_validator -a) 100000000stake --chain-id my-test-chain
|
||||
simd add-genesis-account $MY_VALIDATOR_ADDRESS 100000000stake
|
||||
```
|
||||
|
||||
Recall that `$MY_VALIDATOR_ADDRESS` is a variable that holds the address of the `my_validator` key in the [keyring](./keyring.md#adding-keys-to-the-keyring). Also note that the tokens in the SDK have the `{amount}{denom}` format: `amount` is is a 18-digit-precision decimal number, and `denom` is the unique token identifier with its denomination key (e.g. `atom` or `uatom`). Here, we are granting `stake` tokens, as `stake` is the token identifier used for staking in [`simapp`](https://github.com/cosmos/cosmos-sdk/tree/v0.40.0-rc2/simapp). For your own chain with its own staking denom, that token identifier should be used instead.
|
||||
|
@ -53,10 +53,10 @@ Now that your account has some tokens, you need to add a validator to your chain
|
|||
|
||||
```bash
|
||||
# Create a gentx.
|
||||
simd gentx --name my_validator --amount 100000stake --chain-id my-test-chain
|
||||
simd gentx my_validator --amount 100000stake --chain-id my-test-chain --keyring-backend test
|
||||
|
||||
# Add the gentx to the genesis file.
|
||||
simd collect-gentxs --chain-id my-test-chain
|
||||
simd collect-gentxs
|
||||
```
|
||||
|
||||
A `gentx` does three things:
|
||||
|
|
|
@ -33,7 +33,7 @@ if there was an error.
|
|||
## Data Folder Layout
|
||||
|
||||
`$DAEMON_HOME/cosmovisor` is expected to belong completely to `cosmovisor` and
|
||||
subprocesses the controlled by it. The folder content is organised as follows:
|
||||
subprocesses that are controlled by it. The folder content is organised as follows:
|
||||
|
||||
```
|
||||
.
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
master master
|
||||
v0.40.x v0.40
|
||||
launchpad/backports v0.39
|
2
go.mod
2
go.mod
|
@ -45,7 +45,7 @@ require (
|
|||
github.com/tendermint/btcd v0.1.1
|
||||
github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15
|
||||
github.com/tendermint/go-amino v0.16.0
|
||||
github.com/tendermint/tendermint v0.34.0-rc5
|
||||
github.com/tendermint/tendermint v0.34.0-rc6
|
||||
github.com/tendermint/tm-db v0.6.2
|
||||
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee
|
||||
golang.org/x/net v0.0.0-20200930145003-4acb6c075d10 // indirect
|
||||
|
|
12
go.sum
12
go.sum
|
@ -105,6 +105,7 @@ github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDk
|
|||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||
github.com/confio/ics23/go v0.0.0-20200817220745-f173e6211efb/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg=
|
||||
github.com/confio/ics23/go v0.6.3 h1:PuGK2V1NJWZ8sSkNDq91jgT/cahFEW9RGp4Y5jxulf0=
|
||||
github.com/confio/ics23/go v0.6.3/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg=
|
||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||
|
@ -119,6 +120,7 @@ github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfc
|
|||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d h1:49RLWk1j44Xu4fjHb6JFYmeUnDORVwHNkDxaQ0ctCVU=
|
||||
github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y=
|
||||
github.com/cosmos/iavl v0.15.0-rc3.0.20201009144442-230e9bdf52cd/go.mod h1:3xOIaNNX19p0QrX0VqWa6voPRoJRGGYtny+DH8NEPvE=
|
||||
github.com/cosmos/iavl v0.15.0-rc4 h1:P1wmET7BueqCzfxsn+BzVkDWDLY9ij2JNwkbIdM7RG8=
|
||||
github.com/cosmos/iavl v0.15.0-rc4/go.mod h1:5CsecJdh44Uj4vZ6WSPeWq84hNW5BwRI36ZsAbfJvRw=
|
||||
github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4=
|
||||
|
@ -274,12 +276,14 @@ github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0U
|
|||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.14.7/go.mod h1:oYZKL012gGh6LMyg/xA7Q2yq6j8bu0wa+9w14EEthWU=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.15.2 h1:HC+hWRWf+v5zTMPyoaYTKIJih+4sd4XRWmj0qlG87Co=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.15.2/go.mod h1:vO11I9oWA+KsxmfFQPhLnnIb1VDE24M+pdxZFiuZcA8=
|
||||
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
|
||||
|
@ -591,8 +595,8 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM
|
|||
github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E=
|
||||
github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME=
|
||||
github.com/tendermint/tendermint v0.34.0-rc4/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
|
||||
github.com/tendermint/tendermint v0.34.0-rc5 h1:2bnQfWyOMfTCbol5pwB8CgM2nxi6/Kz6zqlS6Udm/Cg=
|
||||
github.com/tendermint/tendermint v0.34.0-rc5/go.mod h1:yotsojf2C1QBOw4dZrTcxbyxmPUrT4hNuOQWX9XUwB4=
|
||||
github.com/tendermint/tendermint v0.34.0-rc6 h1:SVuKGvvE22KxfuK8QUHctUrmOWJsncZSYXIYtcnoKN0=
|
||||
github.com/tendermint/tendermint v0.34.0-rc6/go.mod h1:ugzyZO5foutZImv0Iyx/gOFCX6mjJTgbLHTwi17VDVg=
|
||||
github.com/tendermint/tm-db v0.6.2 h1:DOn8jwCdjJblrCFJbtonEIPD1IuJWpbRUUdR8GWE4RM=
|
||||
github.com/tendermint/tm-db v0.6.2/go.mod h1:GYtQ67SUvATOcoY8/+x6ylk8Qo02BQyLrAs+yAcLvGI=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
|
@ -638,6 +642,7 @@ golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPh
|
|||
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee h1:4yd7jl+vXjalO5ztz6Vc1VADv+S/80LGJmyl1ROJ2AI=
|
||||
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
|
@ -802,6 +807,7 @@ google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfG
|
|||
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20201014134559-03b6142f0dc9 h1:fG84H9C3EXfuDlzkG+VEPDYHHExklP6scH1QZ5gQTqU=
|
||||
google.golang.org/genproto v0.0.0-20201014134559-03b6142f0dc9/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
|
@ -819,6 +825,7 @@ google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
|
|||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
|
||||
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.33.0 h1:IBKSUNL2uBS2DkJBncPP+TwT0sp9tgA8A75NjHt6umg=
|
||||
|
@ -838,6 +845,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
|
|||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
|
||||
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
|
||||
|
|
|
@ -12,17 +12,17 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/applications/transfer/ty
|
|||
service Query {
|
||||
// DenomTrace queries a denomination trace information.
|
||||
rpc DenomTrace(QueryDenomTraceRequest) returns (QueryDenomTraceResponse) {
|
||||
option (google.api.http).get = "/ibc_transfer/v1beta1/denom_traces/{hash}";
|
||||
option (google.api.http).get = "/ibc/applications/transfer/v1beta1/denom_traces/{hash}";
|
||||
}
|
||||
|
||||
// DenomTraces queries all denomination traces.
|
||||
rpc DenomTraces(QueryDenomTracesRequest) returns (QueryDenomTracesResponse) {
|
||||
option (google.api.http).get = "/ibc_transfer/v1beta1/denom_traces";
|
||||
option (google.api.http).get = "/ibc/applications/transfer/v1beta1/denom_traces";
|
||||
}
|
||||
|
||||
// Params queries all parameters of the ibc-transfer module.
|
||||
rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {
|
||||
option (google.api.http).get = "/ibc_transfer/v1beta1/params";
|
||||
option (google.api.http).get = "/ibc/applications/transfer/v1beta1/params";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,79 +14,79 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/04-channel/types";
|
|||
service Query {
|
||||
// Channel queries an IBC Channel.
|
||||
rpc Channel(QueryChannelRequest) returns (QueryChannelResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}";
|
||||
}
|
||||
|
||||
// Channels queries all the IBC channels of a chain.
|
||||
rpc Channels(QueryChannelsRequest) returns (QueryChannelsResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels";
|
||||
}
|
||||
|
||||
// ConnectionChannels queries all the channels associated with a connection
|
||||
// end.
|
||||
rpc ConnectionChannels(QueryConnectionChannelsRequest) returns (QueryConnectionChannelsResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/connections/{connection}/channels";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/connections/{connection}/channels";
|
||||
}
|
||||
|
||||
// ChannelClientState queries for the client state for the channel associated
|
||||
// with the provided channel identifiers.
|
||||
rpc ChannelClientState(QueryChannelClientStateRequest) returns (QueryChannelClientStateResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/client_state";
|
||||
}
|
||||
|
||||
// ChannelConsensusState queries for the consensus state for the channel
|
||||
// associated with the provided channel identifiers.
|
||||
rpc ChannelConsensusState(QueryChannelConsensusStateRequest) returns (QueryChannelConsensusStateResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/version/"
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/consensus_state/version/"
|
||||
"{version_number}/height/{version_height}";
|
||||
}
|
||||
|
||||
// PacketCommitment queries a stored packet commitment hash.
|
||||
rpc PacketCommitment(QueryPacketCommitmentRequest) returns (QueryPacketCommitmentResponse) {
|
||||
option (google.api.http).get =
|
||||
"/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}";
|
||||
"/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/{sequence}";
|
||||
}
|
||||
|
||||
// PacketCommitments returns all the packet commitments hashes associated
|
||||
// with a channel.
|
||||
rpc PacketCommitments(QueryPacketCommitmentsRequest) returns (QueryPacketCommitmentsResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments";
|
||||
}
|
||||
|
||||
// PacketReceipt queries if a given packet sequence has been received on the queried chain
|
||||
rpc PacketReceipt(QueryPacketReceiptRequest) returns (QueryPacketReceiptResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_receipts/{sequence}";
|
||||
}
|
||||
|
||||
// PacketAcknowledgement queries a stored packet acknowledgement hash.
|
||||
rpc PacketAcknowledgement(QueryPacketAcknowledgementRequest) returns (QueryPacketAcknowledgementResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acks/{sequence}";
|
||||
}
|
||||
|
||||
// PacketAcknowledgements returns all the packet acknowledgements associated
|
||||
// with a channel.
|
||||
rpc PacketAcknowledgements(QueryPacketAcknowledgementsRequest) returns (QueryPacketAcknowledgementsResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_acknowledgements";
|
||||
}
|
||||
|
||||
|
||||
// UnreceivedPackets returns all the unreceived IBC packets associated with a
|
||||
// channel and sequences.
|
||||
rpc UnreceivedPackets(QueryUnreceivedPacketsRequest) returns (QueryUnreceivedPacketsResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/"
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/"
|
||||
"{packet_commitment_sequences}/unreceived_packets";
|
||||
}
|
||||
|
||||
// UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a
|
||||
// channel and sequences.
|
||||
rpc UnreceivedAcks(QueryUnreceivedAcksRequest) returns (QueryUnreceivedAcksResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/"
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/packet_commitments/"
|
||||
"{packet_ack_sequences}/unreceived_acks";
|
||||
}
|
||||
|
||||
// NextSequenceReceive returns the next receive sequence for a given channel.
|
||||
rpc NextSequenceReceive(QueryNextSequenceReceiveRequest) returns (QueryNextSequenceReceiveResponse) {
|
||||
option (google.api.http).get = "/ibc/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence";
|
||||
option (google.api.http).get = "/ibc/core/channel/v1beta1/channels/{channel_id}/ports/{port_id}/next_sequence";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,91 +6,6 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types";
|
|||
import "gogoproto/gogo.proto";
|
||||
import "google/protobuf/any.proto";
|
||||
|
||||
// Msg defines the ibc/client Msg service.
|
||||
service Msg {
|
||||
// CreateClient defines a rpc handler method for MsgCreateClient.
|
||||
rpc CreateClient(MsgCreateClient) returns (MsgCreateClientResponse);
|
||||
|
||||
// UpdateClient defines a rpc handler method for MsgUpdateClient.
|
||||
rpc UpdateClient(MsgUpdateClient) returns (MsgUpdateClientResponse);
|
||||
|
||||
// UpgradeClient defines a rpc handler method for MsgUpgradeClient.
|
||||
rpc UpgradeClient(MsgUpgradeClient) returns (MsgUpgradeClientResponse);
|
||||
|
||||
// SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.
|
||||
rpc SubmitMisbehaviour(MsgSubmitMisbehaviour) returns (MsgSubmitMisbehaviourResponse);
|
||||
}
|
||||
|
||||
// MsgCreateClient defines a message to create an IBC client
|
||||
message MsgCreateClient {
|
||||
option (gogoproto.equal) = false;
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// light client state
|
||||
google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""];
|
||||
// consensus state associated with the client that corresponds to a given
|
||||
// height.
|
||||
google.protobuf.Any consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""];
|
||||
// signer address
|
||||
string signer = 4;
|
||||
}
|
||||
|
||||
// MsgCreateClientResponse defines the Msg/CreateClient response type.
|
||||
message MsgCreateClientResponse { }
|
||||
|
||||
// MsgUpdateClient defines an sdk.Msg to update a IBC client state using
|
||||
// the given header.
|
||||
message MsgUpdateClient {
|
||||
option (gogoproto.equal) = false;
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// header to update the light client
|
||||
google.protobuf.Any header = 2;
|
||||
// signer address
|
||||
string signer = 3;
|
||||
}
|
||||
|
||||
// MsgUpdateClientResponse defines the Msg/UpdateClient response type.
|
||||
message MsgUpdateClientResponse { }
|
||||
|
||||
// MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client state
|
||||
message MsgUpgradeClient {
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// upgraded client state
|
||||
google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""];
|
||||
// height at which old chain halts and upgrades (i.e last block executed)
|
||||
Height upgrade_height = 3 [(gogoproto.moretags) = "yaml:\"upgrade_height\""];
|
||||
// proof that old chain committed to new client
|
||||
bytes proof_upgrade = 4 [(gogoproto.moretags) = "yaml:\"proof_upgrade\""];
|
||||
// signer address
|
||||
string signer = 5;
|
||||
}
|
||||
|
||||
// MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.
|
||||
message MsgUpgradeClientResponse { }
|
||||
|
||||
// MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for
|
||||
// light client misbehaviour.
|
||||
message MsgSubmitMisbehaviour {
|
||||
option (gogoproto.equal) = false;
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// misbehaviour used for freezing the light client
|
||||
google.protobuf.Any misbehaviour = 2;
|
||||
// signer address
|
||||
string signer = 3;
|
||||
}
|
||||
|
||||
// MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response type.
|
||||
message MsgSubmitMisbehaviourResponse { }
|
||||
|
||||
// IdentifiedClientState defines a client state with an additional client
|
||||
// identifier field.
|
||||
message IdentifiedClientState {
|
||||
|
@ -151,3 +66,9 @@ message Height {
|
|||
// the height within the given version
|
||||
uint64 version_height = 2 [(gogoproto.moretags) = "yaml:\"version_height\""];
|
||||
}
|
||||
|
||||
// Params defines the set of IBC light client parameters.
|
||||
message Params {
|
||||
// allowed_clients defines the list of allowed client state types.
|
||||
repeated string allowed_clients = 1 [(gogoproto.moretags) = "yaml:\"allowed_clients\""];
|
||||
}
|
||||
|
|
|
@ -9,13 +9,17 @@ import "gogoproto/gogo.proto";
|
|||
// GenesisState defines the ibc client submodule's genesis state.
|
||||
message GenesisState {
|
||||
// client states with their corresponding identifiers
|
||||
repeated IdentifiedClientState clients = 1 [(gogoproto.nullable) = false];
|
||||
repeated IdentifiedClientState clients = 1 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.castrepeated) = "IdentifiedClientStates"
|
||||
];
|
||||
// consensus states from each client
|
||||
repeated ClientConsensusStates clients_consensus = 2 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.castrepeated) = "ClientsConsensusStates",
|
||||
(gogoproto.moretags) = "yaml:\"clients_consensus\""
|
||||
];
|
||||
Params params = 3 [ (gogoproto.nullable) = false];
|
||||
// create localhost on initialization
|
||||
bool create_localhost = 3 [(gogoproto.moretags) = "yaml:\"create_localhost\""];
|
||||
bool create_localhost = 4 [(gogoproto.moretags) = "yaml:\"create_localhost\""];
|
||||
}
|
||||
|
|
|
@ -13,25 +13,30 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types";
|
|||
service Query {
|
||||
// ClientState queries an IBC light client.
|
||||
rpc ClientState(QueryClientStateRequest) returns (QueryClientStateResponse) {
|
||||
option (google.api.http).get = "/ibc/client/v1beta1/client_states/{client_id}";
|
||||
option (google.api.http).get = "/ibc/core/client/v1beta1/client_states/{client_id}";
|
||||
}
|
||||
|
||||
// ClientStates queries all the IBC light clients of a chain.
|
||||
rpc ClientStates(QueryClientStatesRequest) returns (QueryClientStatesResponse) {
|
||||
option (google.api.http).get = "/ibc/client/v1beta1/client_states";
|
||||
option (google.api.http).get = "/ibc/core/client/v1beta1/client_states";
|
||||
}
|
||||
|
||||
// ConsensusState queries a consensus state associated with a client state at
|
||||
// a given height.
|
||||
rpc ConsensusState(QueryConsensusStateRequest) returns (QueryConsensusStateResponse) {
|
||||
option (google.api.http).get = "/ibc/client/v1beta1/consensus_states/{client_id}/version/{version_number}/"
|
||||
option (google.api.http).get = "/ibc/core/client/v1beta1/consensus_states/{client_id}/version/{version_number}/"
|
||||
"height/{version_height}";
|
||||
}
|
||||
|
||||
// ConsensusStates queries all the consensus state associated with a given
|
||||
// client.
|
||||
rpc ConsensusStates(QueryConsensusStatesRequest) returns (QueryConsensusStatesResponse) {
|
||||
option (google.api.http).get = "/ibc/client/v1beta1/consensus_states/{client_id}";
|
||||
option (google.api.http).get = "/ibc/core/client/v1beta1/consensus_states/{client_id}";
|
||||
}
|
||||
|
||||
// ClientParams queries all parameters of the ibc client.
|
||||
rpc ClientParams(QueryClientParamsRequest) returns (QueryClientParamsResponse) {
|
||||
option (google.api.http).get = "/ibc/client/v1beta1/params";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,7 +70,10 @@ message QueryClientStatesRequest {
|
|||
// method.
|
||||
message QueryClientStatesResponse {
|
||||
// list of stored ClientStates of the chain.
|
||||
repeated IdentifiedClientState client_states = 1;
|
||||
repeated IdentifiedClientState client_states = 1 [
|
||||
(gogoproto.nullable) = false,
|
||||
(gogoproto.castrepeated) = "IdentifiedClientStates"
|
||||
];
|
||||
// pagination response
|
||||
cosmos.base.query.v1beta1.PageResponse pagination = 2;
|
||||
}
|
||||
|
@ -113,3 +121,12 @@ message QueryConsensusStatesResponse {
|
|||
// pagination response
|
||||
cosmos.base.query.v1beta1.PageResponse pagination = 2;
|
||||
}
|
||||
|
||||
// QueryClientParamsRequest is the request type for the Query/ClientParams RPC method.
|
||||
message QueryClientParamsRequest {}
|
||||
|
||||
// QueryClientParamsResponse is the response type for the Query/ClientParams RPC method.
|
||||
message QueryClientParamsResponse {
|
||||
// params defines the parameters of the module.
|
||||
Params params = 1;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
syntax = "proto3";
|
||||
package ibc.core.client.v1;
|
||||
|
||||
option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/02-client/types";
|
||||
|
||||
import "gogoproto/gogo.proto";
|
||||
import "google/protobuf/any.proto";
|
||||
import "ibc/core/client/v1/client.proto";
|
||||
|
||||
// Msg defines the ibc/client Msg service.
|
||||
service Msg {
|
||||
// CreateClient defines a rpc handler method for MsgCreateClient.
|
||||
rpc CreateClient(MsgCreateClient) returns (MsgCreateClientResponse);
|
||||
|
||||
// UpdateClient defines a rpc handler method for MsgUpdateClient.
|
||||
rpc UpdateClient(MsgUpdateClient) returns (MsgUpdateClientResponse);
|
||||
|
||||
// UpgradeClient defines a rpc handler method for MsgUpgradeClient.
|
||||
rpc UpgradeClient(MsgUpgradeClient) returns (MsgUpgradeClientResponse);
|
||||
|
||||
// SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour.
|
||||
rpc SubmitMisbehaviour(MsgSubmitMisbehaviour) returns (MsgSubmitMisbehaviourResponse);
|
||||
}
|
||||
|
||||
// MsgCreateClient defines a message to create an IBC client
|
||||
message MsgCreateClient {
|
||||
option (gogoproto.equal) = false;
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// light client state
|
||||
google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""];
|
||||
// consensus state associated with the client that corresponds to a given
|
||||
// height.
|
||||
google.protobuf.Any consensus_state = 3 [(gogoproto.moretags) = "yaml:\"consensus_state\""];
|
||||
// signer address
|
||||
string signer = 4;
|
||||
}
|
||||
|
||||
// MsgCreateClientResponse defines the Msg/CreateClient response type.
|
||||
message MsgCreateClientResponse { }
|
||||
|
||||
// MsgUpdateClient defines an sdk.Msg to update a IBC client state using
|
||||
// the given header.
|
||||
message MsgUpdateClient {
|
||||
option (gogoproto.equal) = false;
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// header to update the light client
|
||||
google.protobuf.Any header = 2;
|
||||
// signer address
|
||||
string signer = 3;
|
||||
}
|
||||
|
||||
// MsgUpdateClientResponse defines the Msg/UpdateClient response type.
|
||||
message MsgUpdateClientResponse { }
|
||||
|
||||
// MsgUpgradeClient defines an sdk.Msg to upgrade an IBC client to a new client state
|
||||
message MsgUpgradeClient {
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// upgraded client state
|
||||
google.protobuf.Any client_state = 2 [(gogoproto.moretags) = "yaml:\"client_state\""];
|
||||
// height at which old chain halts and upgrades (i.e last block executed)
|
||||
Height upgrade_height = 3 [(gogoproto.moretags) = "yaml:\"upgrade_height\""];
|
||||
// proof that old chain committed to new client
|
||||
bytes proof_upgrade = 4 [(gogoproto.moretags) = "yaml:\"proof_upgrade\""];
|
||||
// signer address
|
||||
string signer = 5;
|
||||
}
|
||||
|
||||
// MsgUpgradeClientResponse defines the Msg/UpgradeClient response type.
|
||||
message MsgUpgradeClientResponse { }
|
||||
|
||||
// MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for
|
||||
// light client misbehaviour.
|
||||
message MsgSubmitMisbehaviour {
|
||||
option (gogoproto.equal) = false;
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
// client unique identifier
|
||||
string client_id = 1 [(gogoproto.moretags) = "yaml:\"client_id\""];
|
||||
// misbehaviour used for freezing the light client
|
||||
google.protobuf.Any misbehaviour = 2;
|
||||
// signer address
|
||||
string signer = 3;
|
||||
}
|
||||
|
||||
// MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response type.
|
||||
message MsgSubmitMisbehaviourResponse { }
|
|
@ -4,7 +4,7 @@ package ibc.core.commitment.v1;
|
|||
option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/23-commitment/types";
|
||||
|
||||
import "gogoproto/gogo.proto";
|
||||
import "tendermint/crypto/proof.proto";
|
||||
import "confio/proofs.proto";
|
||||
|
||||
// MerkleRoot defines a merkle root hash.
|
||||
// In the Cosmos SDK, the AppHash of a block header becomes the root.
|
||||
|
@ -23,42 +23,18 @@ message MerklePrefix {
|
|||
|
||||
// MerklePath is the path used to verify commitment proofs, which can be an
|
||||
// arbitrary structured object (defined by a commitment type).
|
||||
// MerklePath is represented from root-to-leaf
|
||||
message MerklePath {
|
||||
option (gogoproto.goproto_stringer) = false;
|
||||
|
||||
KeyPath key_path = 1 [(gogoproto.nullable) = false, (gogoproto.moretags) = "yaml:\"key_path\""];
|
||||
repeated string key_path = 1 [(gogoproto.moretags) = "yaml:\"key_path\""];
|
||||
}
|
||||
|
||||
// MerkleProof is a wrapper type that contains a merkle proof.
|
||||
// MerkleProof is a wrapper type over a chain of CommitmentProofs.
|
||||
// It demonstrates membership or non-membership for an element or set of
|
||||
// elements, verifiable in conjunction with a known commitment root. Proofs
|
||||
// should be succinct.
|
||||
// MerkleProofs are ordered from leaf-to-root
|
||||
message MerkleProof {
|
||||
tendermint.crypto.ProofOps proof = 1;
|
||||
}
|
||||
|
||||
// KeyPath defines a slice of keys
|
||||
message KeyPath {
|
||||
option (gogoproto.goproto_stringer) = false;
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
repeated Key keys = 1;
|
||||
}
|
||||
|
||||
// Key defines a proof Key
|
||||
message Key {
|
||||
option (gogoproto.goproto_getters) = false;
|
||||
|
||||
bytes name = 1;
|
||||
KeyEncoding enc = 2;
|
||||
}
|
||||
|
||||
// KeyEncoding defines the encoding format of a key's bytes.
|
||||
enum KeyEncoding {
|
||||
option (gogoproto.goproto_enum_prefix) = false;
|
||||
|
||||
// URL encoding
|
||||
KEY_ENCODING_URL_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "URL"];
|
||||
// Hex encoding
|
||||
KEY_ENCODING_HEX = 1 [(gogoproto.enumvalue_customname) = "HEX"];
|
||||
}
|
||||
repeated ics23.CommitmentProof proofs = 1;
|
||||
}
|
|
@ -14,30 +14,30 @@ option go_package = "github.com/cosmos/cosmos-sdk/x/ibc/core/03-connection/types
|
|||
service Query {
|
||||
// Connection queries an IBC connection end.
|
||||
rpc Connection(QueryConnectionRequest) returns (QueryConnectionResponse) {
|
||||
option (google.api.http).get = "/ibc/connection/v1beta1/connections/{connection_id}";
|
||||
option (google.api.http).get = "/ibc/core/connection/v1beta1/connections/{connection_id}";
|
||||
}
|
||||
|
||||
// Connections queries all the IBC connections of a chain.
|
||||
rpc Connections(QueryConnectionsRequest) returns (QueryConnectionsResponse) {
|
||||
option (google.api.http).get = "/ibc/connection/v1beta1/connections";
|
||||
option (google.api.http).get = "/ibc/core/connection/v1beta1/connections";
|
||||
}
|
||||
|
||||
// ClientConnections queries the connection paths associated with a client
|
||||
// state.
|
||||
rpc ClientConnections(QueryClientConnectionsRequest) returns (QueryClientConnectionsResponse) {
|
||||
option (google.api.http).get = "/ibc/connection/v1beta1/client_connections/{client_id}";
|
||||
option (google.api.http).get = "/ibc/core/connection/v1beta1/client_connections/{client_id}";
|
||||
}
|
||||
|
||||
// ConnectionClientState queries the client state associated with the
|
||||
// connection.
|
||||
rpc ConnectionClientState(QueryConnectionClientStateRequest) returns (QueryConnectionClientStateResponse) {
|
||||
option (google.api.http).get = "/ibc/connection/v1beta1/connections/{connection_id}/client_state";
|
||||
option (google.api.http).get = "/ibc/core/connection/v1beta1/connections/{connection_id}/client_state";
|
||||
}
|
||||
|
||||
// ConnectionConsensusState queries the consensus state associated with the
|
||||
// connection.
|
||||
rpc ConnectionConsensusState(QueryConnectionConsensusStateRequest) returns (QueryConnectionConsensusStateResponse) {
|
||||
option (google.api.http).get = "/ibc/connection/v1beta1/connections/{connection_id}/consensus_state/"
|
||||
option (google.api.http).get = "/ibc/core/connection/v1beta1/connections/{connection_id}/consensus_state/"
|
||||
"version/{version_number}/height/{version_height}";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -106,8 +106,8 @@ message Header {
|
|||
.tendermint.types.ValidatorSet trusted_validators = 4 [(gogoproto.moretags) = "yaml:\"trusted_validators\""];
|
||||
}
|
||||
|
||||
// Fraction defines the protobuf message type for tmmath.Fraction
|
||||
// Fraction defines the protobuf message type for tmmath.Fraction that only supports positive values.
|
||||
message Fraction {
|
||||
int64 numerator = 1;
|
||||
int64 denominator = 2;
|
||||
uint64 numerator = 1;
|
||||
uint64 denominator = 2;
|
||||
}
|
||||
|
|
|
@ -252,12 +252,20 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App
|
|||
}
|
||||
ctx.Logger.Debug("Initialization: tmNode started")
|
||||
|
||||
// Add the tx service to the gRPC router.
|
||||
app.RegisterTxService(clientCtx)
|
||||
config := config.GetConfig(ctx.Viper)
|
||||
|
||||
// Add the tx service to the gRPC router. We only need to register this
|
||||
// service if API or gRPC is enabled, and avoid doing so in the general
|
||||
// case, because it spawns a new local tendermint RPC client.
|
||||
if config.API.Enable || config.GRPC.Enable {
|
||||
clientCtx = clientCtx.
|
||||
WithClient(local.New(tmNode))
|
||||
|
||||
app.RegisterTxService(clientCtx)
|
||||
}
|
||||
|
||||
var apiSrv *api.Server
|
||||
|
||||
config := config.GetConfig(ctx.Viper)
|
||||
if config.API.Enable {
|
||||
genDoc, err := genDocProvider()
|
||||
if err != nil {
|
||||
|
@ -266,8 +274,7 @@ func startInProcess(ctx *Context, clientCtx client.Context, appCreator types.App
|
|||
|
||||
clientCtx := clientCtx.
|
||||
WithHomeDir(home).
|
||||
WithChainID(genDoc.ChainID).
|
||||
WithClient(local.New(tmNode))
|
||||
WithChainID(genDoc.ChainID)
|
||||
|
||||
apiSrv = api.New(clientCtx, ctx.Logger.With("module", "api-server"))
|
||||
app.RegisterAPIRoutes(apiSrv, config.API)
|
||||
|
|
|
@ -39,7 +39,7 @@ func ShowNodeIDCmd() *cobra.Command {
|
|||
}
|
||||
}
|
||||
|
||||
// ShowValidator - ported from Tendermint, show this node's validator info
|
||||
// ShowValidatorCmd - ported from Tendermint, show this node's validator info
|
||||
func ShowValidatorCmd() *cobra.Command {
|
||||
cmd := cobra.Command{
|
||||
Use: "show-validator",
|
||||
|
@ -59,12 +59,16 @@ func ShowValidatorCmd() *cobra.Command {
|
|||
return printlnJSON(valPubKey)
|
||||
}
|
||||
|
||||
pubkey, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeConsPub, valPubKey)
|
||||
pubkey, err := cryptocodec.FromTmPubKeyInterface(valPubKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
pubkeyBech32, err := sdk.Bech32ifyPubKey(sdk.Bech32PubKeyTypeConsPub, pubkey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println(pubkey)
|
||||
fmt.Println(pubkeyBech32)
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
@ -114,7 +118,7 @@ against which this app has been compiled.
|
|||
BlockProtocol uint64
|
||||
P2PProtocol uint64
|
||||
}{
|
||||
Tendermint: tversion.Version,
|
||||
Tendermint: tversion.TMCoreSemVer,
|
||||
ABCI: tversion.ABCIVersion,
|
||||
BlockProtocol: tversion.BlockProtocol,
|
||||
P2PProtocol: tversion.P2PProtocol,
|
||||
|
|
|
@ -279,7 +279,7 @@ func NewSimApp(
|
|||
|
||||
// Create IBC Keeper
|
||||
app.IBCKeeper = ibckeeper.NewKeeper(
|
||||
appCodec, keys[ibchost.StoreKey], app.StakingKeeper, scopedIBCKeeper,
|
||||
appCodec, keys[ibchost.StoreKey], app.GetSubspace(ibchost.ModuleName), app.StakingKeeper, scopedIBCKeeper,
|
||||
)
|
||||
|
||||
// register the proposal types
|
||||
|
@ -609,6 +609,7 @@ func initParamsKeeper(appCodec codec.BinaryMarshaler, legacyAmino *codec.LegacyA
|
|||
paramsKeeper.Subspace(govtypes.ModuleName).WithKeyTable(govtypes.ParamKeyTable())
|
||||
paramsKeeper.Subspace(crisistypes.ModuleName)
|
||||
paramsKeeper.Subspace(ibctransfertypes.ModuleName)
|
||||
paramsKeeper.Subspace(ibchost.ModuleName)
|
||||
|
||||
return paramsKeeper
|
||||
}
|
||||
|
|
|
@ -4,9 +4,8 @@ import (
|
|||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/simulation"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
|
@ -20,7 +19,7 @@ const (
|
|||
)
|
||||
|
||||
// GenTx generates a signed mock transaction.
|
||||
func GenTx(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, chainID string, accNums, accSeqs []uint64, priv ...crypto.PrivKey) (sdk.Tx, error) {
|
||||
func GenTx(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, chainID string, accNums, accSeqs []uint64, priv ...cryptotypes.PrivKey) (sdk.Tx, error) {
|
||||
sigs := make([]signing.SignatureV2, len(priv))
|
||||
|
||||
// create a random length memo
|
||||
|
|
|
@ -12,7 +12,6 @@ import (
|
|||
|
||||
"github.com/spf13/cobra"
|
||||
tmconfig "github.com/tendermint/tendermint/config"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
tmos "github.com/tendermint/tendermint/libs/os"
|
||||
tmrand "github.com/tendermint/tendermint/libs/rand"
|
||||
"github.com/tendermint/tendermint/types"
|
||||
|
@ -23,6 +22,7 @@ import (
|
|||
"github.com/cosmos/cosmos-sdk/client/tx"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/server"
|
||||
srvconfig "github.com/cosmos/cosmos-sdk/server/config"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
|
@ -116,7 +116,7 @@ func InitTestnet(
|
|||
}
|
||||
|
||||
nodeIDs := make([]string, numValidators)
|
||||
valPubKeys := make([]crypto.PubKey, numValidators)
|
||||
valPubKeys := make([]cryptotypes.PubKey, numValidators)
|
||||
|
||||
simappConfig := srvconfig.DefaultConfig()
|
||||
simappConfig.MinGasPrices = minGasPrices
|
||||
|
@ -311,7 +311,7 @@ func initGenFiles(
|
|||
|
||||
func collectGenFiles(
|
||||
clientCtx client.Context, nodeConfig *tmconfig.Config, chainID string,
|
||||
nodeIDs []string, valPubKeys []crypto.PubKey, numValidators int,
|
||||
nodeIDs []string, valPubKeys []cryptotypes.PubKey, numValidators int,
|
||||
outputDir, nodeDirPrefix, nodeDaemonHome string, genBalIterator banktypes.GenesisBalancesIterator,
|
||||
) error {
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/require"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
tmtypes "github.com/tendermint/tendermint/types"
|
||||
|
@ -20,7 +19,9 @@ import (
|
|||
bam "github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/simapp/helpers"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/errors"
|
||||
|
@ -92,10 +93,7 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs
|
|||
bondAmt := sdk.NewInt(1000000)
|
||||
|
||||
for _, val := range valSet.Validators {
|
||||
// Currently validator requires tmcrypto.ed25519 keys, which don't support
|
||||
// our Marshaling interfaces, so we need to pack them into our version of ed25519.
|
||||
// There is ongoing work to add secp256k1 keys (https://github.com/cosmos/cosmos-sdk/pull/7604).
|
||||
pk, err := ed25519.FromTmEd25519(val.PubKey)
|
||||
pk, err := cryptocodec.FromTmPubKeyInterface(val.PubKey)
|
||||
require.NoError(t, err)
|
||||
pkAny, err := codectypes.PackAny(pk)
|
||||
require.NoError(t, err)
|
||||
|
@ -230,7 +228,7 @@ func createIncrementalAccounts(accNum int) []sdk.AccAddress {
|
|||
}
|
||||
|
||||
// AddTestAddrsFromPubKeys adds the addresses into the SimApp providing only the public keys.
|
||||
func AddTestAddrsFromPubKeys(app *SimApp, ctx sdk.Context, pubKeys []crypto.PubKey, accAmt sdk.Int) {
|
||||
func AddTestAddrsFromPubKeys(app *SimApp, ctx sdk.Context, pubKeys []cryptotypes.PubKey, accAmt sdk.Int) {
|
||||
initCoins := sdk.NewCoins(sdk.NewCoin(app.StakingKeeper.BondDenom(ctx), accAmt))
|
||||
|
||||
setTotalSupply(app, ctx, accAmt, len(pubKeys))
|
||||
|
@ -328,7 +326,7 @@ func CheckBalance(t *testing.T, app *SimApp, addr sdk.AccAddress, balances sdk.C
|
|||
// returned.
|
||||
func SignCheckDeliver(
|
||||
t *testing.T, txCfg client.TxConfig, app *bam.BaseApp, header tmproto.Header, msgs []sdk.Msg,
|
||||
chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...crypto.PrivKey,
|
||||
chainID string, accNums, accSeqs []uint64, expSimPass, expPass bool, priv ...cryptotypes.PrivKey,
|
||||
) (sdk.GasInfo, *sdk.Result, error) {
|
||||
|
||||
tx, err := helpers.GenTx(
|
||||
|
@ -377,7 +375,7 @@ func SignCheckDeliver(
|
|||
// GenSequenceOfTxs generates a set of signed transactions of messages, such
|
||||
// that they differ only by having the sequence numbers incremented between
|
||||
// every transaction.
|
||||
func GenSequenceOfTxs(txGen client.TxConfig, msgs []sdk.Msg, accNums []uint64, initSeqNums []uint64, numToGenerate int, priv ...crypto.PrivKey) ([]sdk.Tx, error) {
|
||||
func GenSequenceOfTxs(txGen client.TxConfig, msgs []sdk.Msg, accNums []uint64, initSeqNums []uint64, numToGenerate int, priv ...cryptotypes.PrivKey) ([]sdk.Tx, error) {
|
||||
txs := make([]sdk.Tx, numToGenerate)
|
||||
var err error
|
||||
for i := 0; i < numToGenerate; i++ {
|
||||
|
@ -407,8 +405,8 @@ func incrementAllSequenceNumbers(initSeqNums []uint64) {
|
|||
}
|
||||
|
||||
// CreateTestPubKeys returns a total of numPubKeys public keys in ascending order.
|
||||
func CreateTestPubKeys(numPubKeys int) []crypto.PubKey {
|
||||
var publicKeys []crypto.PubKey
|
||||
func CreateTestPubKeys(numPubKeys int) []cryptotypes.PubKey {
|
||||
var publicKeys []cryptotypes.PubKey
|
||||
var buffer bytes.Buffer
|
||||
|
||||
// start at 10 to avoid changing 1 to 01, 2 to 02, etc
|
||||
|
@ -424,7 +422,7 @@ func CreateTestPubKeys(numPubKeys int) []crypto.PubKey {
|
|||
}
|
||||
|
||||
// NewPubKeyFromHex returns a PubKey from a hex string.
|
||||
func NewPubKeyFromHex(pk string) (res crypto.PubKey) {
|
||||
func NewPubKeyFromHex(pk string) (res cryptotypes.PubKey) {
|
||||
pkBytes, err := hex.DecodeString(pk)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
|
@ -6,9 +6,9 @@ package mocks
|
|||
|
||||
import (
|
||||
client "github.com/cosmos/cosmos-sdk/client"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
types "github.com/cosmos/cosmos-sdk/types"
|
||||
gomock "github.com/golang/mock/gomock"
|
||||
crypto "github.com/tendermint/tendermint/crypto"
|
||||
reflect "reflect"
|
||||
)
|
||||
|
||||
|
@ -50,10 +50,10 @@ func (mr *MockAccountMockRecorder) GetAddress() *gomock.Call {
|
|||
}
|
||||
|
||||
// GetPubKey mocks base method
|
||||
func (m *MockAccount) GetPubKey() crypto.PubKey {
|
||||
func (m *MockAccount) GetPubKey() cryptotypes.PubKey {
|
||||
m.ctrl.T.Helper()
|
||||
ret := m.ctrl.Call(m, "GetPubKey")
|
||||
ret0, _ := ret[0].(crypto.PubKey)
|
||||
ret0, _ := ret[0].(cryptotypes.PubKey)
|
||||
return ret0
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/require"
|
||||
tmcfg "github.com/tendermint/tendermint/config"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
tmflags "github.com/tendermint/tendermint/libs/cli/flags"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
tmrand "github.com/tendermint/tendermint/libs/rand"
|
||||
|
@ -32,6 +31,7 @@ import (
|
|||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/server"
|
||||
"github.com/cosmos/cosmos-sdk/server/api"
|
||||
srvconfig "github.com/cosmos/cosmos-sdk/server/config"
|
||||
|
@ -148,7 +148,7 @@ type (
|
|||
Ctx *server.Context
|
||||
Dir string
|
||||
NodeID string
|
||||
PubKey crypto.PubKey
|
||||
PubKey cryptotypes.PubKey
|
||||
Moniker string
|
||||
APIAddress string
|
||||
RPCAddress string
|
||||
|
@ -184,7 +184,7 @@ func New(t *testing.T, cfg Config) *Network {
|
|||
|
||||
monikers := make([]string, cfg.NumValidators)
|
||||
nodeIDs := make([]string, cfg.NumValidators)
|
||||
valPubKeys := make([]crypto.PubKey, cfg.NumValidators)
|
||||
valPubKeys := make([]cryptotypes.PubKey, cfg.NumValidators)
|
||||
|
||||
var (
|
||||
genAccounts []authtypes.GenesisAccount
|
||||
|
|
|
@ -3,14 +3,13 @@ package testdata
|
|||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
// KeyTestPubAddr generates a new secp256k1 keypair.
|
||||
func KeyTestPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) {
|
||||
func KeyTestPubAddr() (cryptotypes.PrivKey, cryptotypes.PubKey, sdk.AccAddress) {
|
||||
key := secp256k1.GenPrivKey()
|
||||
pub := key.PubKey()
|
||||
addr := sdk.AccAddress(pub.Address())
|
||||
|
|
|
@ -11,6 +11,7 @@ message PublicKey {
|
|||
option (gogoproto.equal) = true;
|
||||
|
||||
oneof sum {
|
||||
bytes ed25519 = 1;
|
||||
bytes ed25519 = 1;
|
||||
bytes secp256k1 = 2;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,19 +4,9 @@ package tendermint.types;
|
|||
option go_package = "github.com/tendermint/tendermint/proto/tendermint/types";
|
||||
|
||||
import "gogoproto/gogo.proto";
|
||||
import "google/protobuf/timestamp.proto";
|
||||
import "tendermint/types/types.proto";
|
||||
|
||||
// DuplicateVoteEvidence contains evidence a validator signed two conflicting
|
||||
// votes.
|
||||
message DuplicateVoteEvidence {
|
||||
Vote vote_a = 1;
|
||||
Vote vote_b = 2;
|
||||
}
|
||||
|
||||
message LightClientAttackEvidence {
|
||||
LightBlock conflicting_block = 1;
|
||||
int64 common_height = 2;
|
||||
}
|
||||
import "tendermint/types/validator.proto";
|
||||
|
||||
message Evidence {
|
||||
oneof sum {
|
||||
|
@ -25,7 +15,24 @@ message Evidence {
|
|||
}
|
||||
}
|
||||
|
||||
// EvidenceData contains any evidence of malicious wrong-doing by validators
|
||||
message EvidenceData {
|
||||
// DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes.
|
||||
message DuplicateVoteEvidence {
|
||||
tendermint.types.Vote vote_a = 1;
|
||||
tendermint.types.Vote vote_b = 2;
|
||||
int64 total_voting_power = 3;
|
||||
int64 validator_power = 4;
|
||||
google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
||||
}
|
||||
|
||||
// LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client.
|
||||
message LightClientAttackEvidence {
|
||||
tendermint.types.LightBlock conflicting_block = 1;
|
||||
int64 common_height = 2;
|
||||
repeated tendermint.types.Validator byzantine_validators = 3;
|
||||
int64 total_voting_power = 4;
|
||||
google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true];
|
||||
}
|
||||
|
||||
message EvidenceList {
|
||||
repeated Evidence evidence = 1 [(gogoproto.nullable) = false];
|
||||
}
|
||||
|
|
|
@ -8,16 +8,12 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
tmed25519 "github.com/tendermint/tendermint/crypto/ed25519"
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/bech32"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -452,7 +448,7 @@ func ConsAddressFromBech32(address string) (addr ConsAddress, err error) {
|
|||
}
|
||||
|
||||
// get ConsAddress from pubkey
|
||||
func GetConsAddress(pubkey crypto.PubKey) ConsAddress {
|
||||
func GetConsAddress(pubkey cryptotypes.PubKey) ConsAddress {
|
||||
return ConsAddress(pubkey.Address())
|
||||
}
|
||||
|
||||
|
@ -616,7 +612,8 @@ const (
|
|||
|
||||
// Bech32ifyPubKey returns a Bech32 encoded string containing the appropriate
|
||||
// prefix based on the key type provided for a given PublicKey.
|
||||
func Bech32ifyPubKey(pkt Bech32PubKeyType, pubkey crypto.PubKey) (string, error) {
|
||||
// TODO: Remove Bech32ifyPubKey and all usages (cosmos/cosmos-sdk/issues/#7357)
|
||||
func Bech32ifyPubKey(pkt Bech32PubKeyType, pubkey cryptotypes.PubKey) (string, error) {
|
||||
var bech32Prefix string
|
||||
|
||||
switch pkt {
|
||||
|
@ -631,22 +628,11 @@ func Bech32ifyPubKey(pkt Bech32PubKeyType, pubkey crypto.PubKey) (string, error)
|
|||
|
||||
}
|
||||
|
||||
// This piece of code is to keep backwards-compatibility.
|
||||
// For ed25519 keys, our own ed25519 is registered in Amino under a
|
||||
// different name than TM's ed25519. But since users are already using
|
||||
// TM's ed25519 bech32 encoding, we explicitly say to bech32-encode our own
|
||||
// ed25519 the same way as TM's ed25519.
|
||||
// TODO: Remove Bech32ifyPubKey and all usages (cosmos/cosmos-sdk/issues/#7357)
|
||||
pkToMarshal := pubkey
|
||||
if ed25519Pk, ok := pubkey.(*ed25519.PubKey); ok {
|
||||
pkToMarshal = ed25519Pk.AsTmPubKey()
|
||||
}
|
||||
|
||||
return bech32.ConvertAndEncode(bech32Prefix, legacy.Cdc.MustMarshalBinaryBare(pkToMarshal))
|
||||
return bech32.ConvertAndEncode(bech32Prefix, legacy.Cdc.MustMarshalBinaryBare(pubkey))
|
||||
}
|
||||
|
||||
// MustBech32ifyPubKey calls Bech32ifyPubKey except it panics on error.
|
||||
func MustBech32ifyPubKey(pkt Bech32PubKeyType, pubkey crypto.PubKey) string {
|
||||
func MustBech32ifyPubKey(pkt Bech32PubKeyType, pubkey cryptotypes.PubKey) string {
|
||||
res, err := Bech32ifyPubKey(pkt, pubkey)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
@ -657,7 +643,7 @@ func MustBech32ifyPubKey(pkt Bech32PubKeyType, pubkey crypto.PubKey) string {
|
|||
|
||||
// GetPubKeyFromBech32 returns a PublicKey from a bech32-encoded PublicKey with
|
||||
// a given key type.
|
||||
func GetPubKeyFromBech32(pkt Bech32PubKeyType, pubkeyStr string) (crypto.PubKey, error) {
|
||||
func GetPubKeyFromBech32(pkt Bech32PubKeyType, pubkeyStr string) (cryptotypes.PubKey, error) {
|
||||
var bech32Prefix string
|
||||
|
||||
switch pkt {
|
||||
|
@ -677,36 +663,11 @@ func GetPubKeyFromBech32(pkt Bech32PubKeyType, pubkeyStr string) (crypto.PubKey,
|
|||
return nil, err
|
||||
}
|
||||
|
||||
aminoPk, err := cryptocodec.PubKeyFromBytes(bz)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var protoPk crypto.PubKey
|
||||
switch aminoPk.(type) {
|
||||
|
||||
// We are bech32ifying some secp256k1 keys in tests.
|
||||
case *secp256k1.PubKey:
|
||||
protoPk = aminoPk
|
||||
case *ed25519.PubKey:
|
||||
protoPk = aminoPk
|
||||
|
||||
// Real-life case.
|
||||
case tmed25519.PubKey:
|
||||
protoPk = &ed25519.PubKey{
|
||||
Key: aminoPk.Bytes(),
|
||||
}
|
||||
|
||||
default:
|
||||
// We only allow ed25519 pubkeys to be bech32-ed right now.
|
||||
return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidType, "bech32 pubkey does not support %T", aminoPk)
|
||||
}
|
||||
|
||||
return protoPk, nil
|
||||
return cryptocodec.PubKeyFromBytes(bz)
|
||||
}
|
||||
|
||||
// MustGetPubKeyFromBech32 calls GetPubKeyFromBech32 except it panics on error.
|
||||
func MustGetPubKeyFromBech32(pkt Bech32PubKeyType, pubkeyStr string) crypto.PubKey {
|
||||
func MustGetPubKeyFromBech32(pkt Bech32PubKeyType, pubkeyStr string) cryptotypes.PubKey {
|
||||
res, err := GetPubKeyFromBech32(pkt, pubkeyStr)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
|
|
@ -10,11 +10,11 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/suite"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"gopkg.in/yaml.v2"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -509,7 +509,7 @@ func (s *addressTestSuite) TestGetConsAddress() {
|
|||
pk := secp256k1.GenPrivKey().PubKey()
|
||||
s.Require().NotEqual(types.GetConsAddress(pk), pk.Address())
|
||||
s.Require().True(bytes.Equal(types.GetConsAddress(pk).Bytes(), pk.Address().Bytes()))
|
||||
s.Require().Panics(func() { types.GetConsAddress(crypto.PubKey(nil)) })
|
||||
s.Require().Panics(func() { types.GetConsAddress(cryptotypes.PubKey(nil)) })
|
||||
}
|
||||
|
||||
func (s *addressTestSuite) TestGetFromBech32() {
|
||||
|
|
|
@ -12,13 +12,13 @@ import (
|
|||
|
||||
"github.com/spf13/viper"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
simappparams "github.com/cosmos/cosmos-sdk/simapp/params"
|
||||
"github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||
|
@ -176,15 +176,15 @@ func TestParseQueryHeight(t *testing.T) {
|
|||
func TestProcessPostResponse(t *testing.T) {
|
||||
// mock account
|
||||
// PubKey field ensures amino encoding is used first since standard
|
||||
// JSON encoding will panic on crypto.PubKey
|
||||
// JSON encoding will panic on cryptotypes.PubKey
|
||||
|
||||
t.Parallel()
|
||||
type mockAccount struct {
|
||||
Address types.AccAddress `json:"address"`
|
||||
Coins types.Coins `json:"coins"`
|
||||
PubKey crypto.PubKey `json:"public_key"`
|
||||
AccountNumber uint64 `json:"account_number"`
|
||||
Sequence uint64 `json:"sequence"`
|
||||
Address types.AccAddress `json:"address"`
|
||||
Coins types.Coins `json:"coins"`
|
||||
PubKey cryptotypes.PubKey `json:"public_key"`
|
||||
AccountNumber uint64 `json:"account_number"`
|
||||
Sequence uint64 `json:"sequence"`
|
||||
}
|
||||
|
||||
// setup
|
||||
|
|
|
@ -3,10 +3,9 @@ package simulation
|
|||
import (
|
||||
"math/rand"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
)
|
||||
|
||||
|
@ -14,10 +13,10 @@ import (
|
|||
// eventually more useful data can be placed in here.
|
||||
// (e.g. number of coins)
|
||||
type Account struct {
|
||||
PrivKey crypto.PrivKey
|
||||
PubKey crypto.PubKey
|
||||
PrivKey cryptotypes.PrivKey
|
||||
PubKey cryptotypes.PubKey
|
||||
Address sdk.AccAddress
|
||||
ConsKey crypto.PrivKey
|
||||
ConsKey cryptotypes.PrivKey
|
||||
}
|
||||
|
||||
// Equals returns true if two accounts are equal
|
||||
|
|
|
@ -3,9 +3,8 @@ package signing
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
)
|
||||
|
||||
// SignatureV2 is a convenience type that is easier to use in application logic
|
||||
|
@ -15,7 +14,7 @@ import (
|
|||
// signatures.
|
||||
type SignatureV2 struct {
|
||||
// PubKey is the public key to use for verifying the signature
|
||||
PubKey crypto.PubKey
|
||||
PubKey cryptotypes.PubKey
|
||||
|
||||
// Data is the actual data of the signature which includes SignMode's and
|
||||
// the signatures themselves for either single or multi-signatures.
|
||||
|
@ -104,5 +103,5 @@ func (sds *SignatureDescriptors) UnpackInterfaces(unpacker codectypes.AnyUnpacke
|
|||
|
||||
// UnpackInterfaces implements the UnpackInterfaceMessages.UnpackInterfaces method
|
||||
func (sd *SignatureDescriptor) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
|
||||
return unpacker.UnpackAny(sd.PublicKey, new(crypto.PubKey))
|
||||
return unpacker.UnpackAny(sd.PublicKey, new(cryptotypes.PubKey))
|
||||
}
|
||||
|
|
|
@ -4,9 +4,8 @@ import (
|
|||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
)
|
||||
|
@ -92,7 +91,7 @@ func (t *Tx) ValidateBasic() error {
|
|||
if len(sigs) != len(t.GetSigners()) {
|
||||
return sdkerrors.Wrapf(
|
||||
sdkerrors.ErrUnauthorized,
|
||||
"wrong number of signers; expected %d, got %d", t.GetSigners(), len(sigs),
|
||||
"wrong number of signers; expected %d, got %d", len(t.GetSigners()), len(sigs),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -180,7 +179,7 @@ func (m *AuthInfo) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
|
|||
|
||||
// UnpackInterfaces implements the UnpackInterfaceMessages.UnpackInterfaces method
|
||||
func (m *SignerInfo) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error {
|
||||
return unpacker.UnpackAny(m.PublicKey, new(crypto.PubKey))
|
||||
return unpacker.UnpackAny(m.PublicKey, new(cryptotypes.PubKey))
|
||||
}
|
||||
|
||||
// RegisterInterfaces registers the sdk.Tx interface.
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
package types
|
||||
|
||||
import (
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/gogo/protobuf/proto"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -42,7 +41,7 @@ type (
|
|||
// Signature defines an interface for an application application-defined
|
||||
// concrete transaction type to be able to set and return transaction signatures.
|
||||
Signature interface {
|
||||
GetPubKey() crypto.PubKey
|
||||
GetPubKey() cryptotypes.PubKey
|
||||
GetSignature() []byte
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,7 @@ func NewVersionCommand() *cobra.Command {
|
|||
Short: "Print the application binary version information",
|
||||
RunE: func(cmd *cobra.Command, _ []string) error {
|
||||
verInfo := NewInfo()
|
||||
cmd.SetOut(cmd.OutOrStdout())
|
||||
|
||||
if long, _ := cmd.Flags().GetBool(flagLong); !long {
|
||||
cmd.Println(verInfo.Version)
|
||||
|
|
|
@ -17,8 +17,10 @@
|
|||
package version
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -36,12 +38,13 @@ var (
|
|||
|
||||
// Info defines the application version information.
|
||||
type Info struct {
|
||||
Name string `json:"name" yaml:"name"`
|
||||
AppName string `json:"server_name" yaml:"server_name"`
|
||||
Version string `json:"version" yaml:"version"`
|
||||
GitCommit string `json:"commit" yaml:"commit"`
|
||||
BuildTags string `json:"build_tags" yaml:"build_tags"`
|
||||
GoVersion string `json:"go" yaml:"go"`
|
||||
Name string `json:"name" yaml:"name"`
|
||||
AppName string `json:"server_name" yaml:"server_name"`
|
||||
Version string `json:"version" yaml:"version"`
|
||||
GitCommit string `json:"commit" yaml:"commit"`
|
||||
BuildTags string `json:"build_tags" yaml:"build_tags"`
|
||||
GoVersion string `json:"go" yaml:"go"`
|
||||
BuildDeps []buildDep `json:"build_deps" yaml:"build_deps"`
|
||||
}
|
||||
|
||||
func NewInfo() Info {
|
||||
|
@ -52,6 +55,7 @@ func NewInfo() Info {
|
|||
GitCommit: Commit,
|
||||
BuildTags: BuildTags,
|
||||
GoVersion: fmt.Sprintf("go version %s %s/%s", runtime.Version(), runtime.GOOS, runtime.GOARCH),
|
||||
BuildDeps: depsFromBuildInfo(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,3 +67,24 @@ build tags: %s
|
|||
vi.Name, vi.Version, vi.GitCommit, vi.BuildTags, vi.GoVersion,
|
||||
)
|
||||
}
|
||||
|
||||
func depsFromBuildInfo() (deps []buildDep) {
|
||||
buildInfo, ok := debug.ReadBuildInfo()
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, dep := range buildInfo.Deps {
|
||||
deps = append(deps, buildDep{dep})
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
type buildDep struct {
|
||||
*debug.Module
|
||||
}
|
||||
|
||||
func (d buildDep) String() string { return fmt.Sprintf("%s@%s", d.Path, d.Version) }
|
||||
func (d buildDep) MarshalJSON() ([]byte, error) { return json.Marshal(d.String()) }
|
||||
func (d buildDep) MarshalYAML() (interface{}, error) { return d.String(), nil }
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package version
|
||||
package version_test
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
@ -11,10 +11,11 @@ import (
|
|||
"github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
"github.com/cosmos/cosmos-sdk/version"
|
||||
)
|
||||
|
||||
func TestNewInfo(t *testing.T) {
|
||||
info := NewInfo()
|
||||
info := version.NewInfo()
|
||||
want := fmt.Sprintf(`:
|
||||
git commit:
|
||||
build tags:
|
||||
|
@ -23,7 +24,7 @@ build tags:
|
|||
}
|
||||
|
||||
func TestInfo_String(t *testing.T) {
|
||||
info := Info{
|
||||
info := version.Info{
|
||||
Name: "testapp",
|
||||
AppName: "testappd",
|
||||
Version: "1.0.0",
|
||||
|
@ -39,12 +40,12 @@ go version go1.14 linux/amd64`
|
|||
}
|
||||
|
||||
func Test_runVersionCmd(t *testing.T) {
|
||||
cmd := NewVersionCommand()
|
||||
cmd := version.NewVersionCommand()
|
||||
_, mockOut := testutil.ApplyMockIO(cmd)
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
fmt.Sprintf("--%s=''", cli.OutputFlag),
|
||||
fmt.Sprintf("--%s=false", flagLong),
|
||||
"--long=false",
|
||||
})
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
|
@ -52,11 +53,10 @@ func Test_runVersionCmd(t *testing.T) {
|
|||
mockOut.Reset()
|
||||
|
||||
cmd.SetArgs([]string{
|
||||
fmt.Sprintf("--%s=json", cli.OutputFlag),
|
||||
fmt.Sprintf("--%s=true", flagLong),
|
||||
fmt.Sprintf("--%s=json", cli.OutputFlag), "--long=true",
|
||||
})
|
||||
|
||||
info := NewInfo()
|
||||
info := version.NewInfo()
|
||||
stringInfo, err := json.Marshal(info)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, cmd.Execute())
|
||||
|
|
|
@ -8,11 +8,11 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
|
@ -35,7 +35,7 @@ func (suite *AnteTestSuite) TestSimulateGasCost() {
|
|||
feeAmount := testdata.NewTestFeeAmount()
|
||||
gasLimit := testdata.NewTestGasLimit()
|
||||
accSeqs := []uint64{0, 0, 0}
|
||||
privs := []crypto.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}
|
||||
privs := []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}
|
||||
accNums := []uint64{0, 1, 2}
|
||||
|
||||
testCases := []TestCase{
|
||||
|
@ -91,7 +91,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSigErrors() {
|
|||
|
||||
// Variable data per test case
|
||||
var (
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accNums []uint64
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
@ -100,7 +100,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSigErrors() {
|
|||
{
|
||||
"check no signatures fails",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{}, []uint64{}, []uint64{}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{}, []uint64{}, []uint64{}
|
||||
|
||||
// Create tx manually to test the tx's signers
|
||||
suite.Require().NoError(suite.txBuilder.SetMsgs(msgs...))
|
||||
|
@ -117,7 +117,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSigErrors() {
|
|||
{
|
||||
"num sigs dont match GetSigners",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{priv0}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{priv0}, []uint64{0}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -126,7 +126,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSigErrors() {
|
|||
{
|
||||
"unrecognized account",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{priv0, priv1, priv2}, []uint64{0, 1, 2}, []uint64{0, 0, 0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{priv0, priv1, priv2}, []uint64{0, 1, 2}, []uint64{0, 0, 0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -169,7 +169,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbers() {
|
|||
var (
|
||||
accNums []uint64
|
||||
msgs []sdk.Msg
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
||||
|
@ -180,7 +180,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbers() {
|
|||
msg := testdata.NewTestMsg(accounts[0].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg}
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -189,7 +189,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbers() {
|
|||
{
|
||||
"new tx from wrong account number",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{1}, []uint64{1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{1}, []uint64{1}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -198,7 +198,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbers() {
|
|||
{
|
||||
"new tx from correct account number",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{1}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -210,7 +210,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbers() {
|
|||
msg1 := testdata.NewTestMsg(accounts[0].acc.GetAddress(), accounts[1].acc.GetAddress())
|
||||
msg2 := testdata.NewTestMsg(accounts[1].acc.GetAddress(), accounts[0].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg1, msg2}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{1, 0}, []uint64{2, 0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{1, 0}, []uint64{2, 0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -219,7 +219,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbers() {
|
|||
{
|
||||
"new tx with correct account numbers",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 1}, []uint64{2, 0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 1}, []uint64{2, 0}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -251,7 +251,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbersAtBlockHeightZero() {
|
|||
var (
|
||||
accNums []uint64
|
||||
msgs []sdk.Msg
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
||||
|
@ -262,7 +262,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbersAtBlockHeightZero() {
|
|||
msg := testdata.NewTestMsg(accounts[0].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg}
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -271,7 +271,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbersAtBlockHeightZero() {
|
|||
{
|
||||
"new tx from wrong account number",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{1}, []uint64{1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{1}, []uint64{1}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -280,7 +280,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbersAtBlockHeightZero() {
|
|||
{
|
||||
"new tx from correct account number",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{1}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -293,7 +293,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbersAtBlockHeightZero() {
|
|||
msg2 := testdata.NewTestMsg(accounts[1].acc.GetAddress(), accounts[0].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg1, msg2}
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{1, 0}, []uint64{2, 0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{1, 0}, []uint64{2, 0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -303,7 +303,7 @@ func (suite *AnteTestSuite) TestAnteHandlerAccountNumbersAtBlockHeightZero() {
|
|||
"new tx with another signer and correct account numbers",
|
||||
func() {
|
||||
// Note that accNums is [0,0] at block 0.
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 0}, []uint64{2, 0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 0}, []uint64{2, 0}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -334,7 +334,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
|||
var (
|
||||
accNums []uint64
|
||||
msgs []sdk.Msg
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
||||
|
@ -345,7 +345,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
|||
msg := testdata.NewTestMsg(accounts[0].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg}
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -354,7 +354,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
|||
{
|
||||
"test sending it again fails (replay protection)",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -363,7 +363,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
|||
{
|
||||
"fix sequence, should pass",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{1}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -376,7 +376,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
|||
msg2 := testdata.NewTestMsg(accounts[2].acc.GetAddress(), accounts[0].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg1, msg2}
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}, []uint64{0, 1, 2}, []uint64{2, 0, 0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}, []uint64{0, 1, 2}, []uint64{2, 0, 0}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -394,7 +394,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
|||
func() {
|
||||
msg := testdata.NewTestMsg(accounts[1].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[1].priv}, []uint64{1}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[1].priv}, []uint64{1}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -415,7 +415,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSequences() {
|
|||
msg := testdata.NewTestMsg(accounts[0].acc.GetAddress(), accounts[1].acc.GetAddress())
|
||||
msgs = []sdk.Msg{msg}
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 1}, []uint64{3, 2}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 1}, []uint64{3, 2}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -445,7 +445,7 @@ func (suite *AnteTestSuite) TestAnteHandlerFees() {
|
|||
msgs := []sdk.Msg{testdata.NewTestMsg(addr0)}
|
||||
feeAmount := testdata.NewTestFeeAmount()
|
||||
gasLimit := testdata.NewTestGasLimit()
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv0}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv0}, []uint64{0}, []uint64{0}
|
||||
|
||||
testCases := []struct {
|
||||
desc string
|
||||
|
@ -517,7 +517,7 @@ func (suite *AnteTestSuite) TestAnteHandlerMemoGas() {
|
|||
// Same data for every test cases
|
||||
accounts := suite.CreateTestAccounts(1)
|
||||
msgs := []sdk.Msg{testdata.NewTestMsg(accounts[0].acc.GetAddress())}
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
|
||||
// Variable data per test case
|
||||
var (
|
||||
|
@ -596,7 +596,7 @@ func (suite *AnteTestSuite) TestAnteHandlerMultiSigner() {
|
|||
var (
|
||||
accNums []uint64
|
||||
msgs []sdk.Msg
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
||||
|
@ -605,7 +605,7 @@ func (suite *AnteTestSuite) TestAnteHandlerMultiSigner() {
|
|||
"signers in order",
|
||||
func() {
|
||||
msgs = []sdk.Msg{msg1, msg2, msg3}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}, []uint64{0, 1, 2}, []uint64{0, 0, 0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}, []uint64{0, 1, 2}, []uint64{0, 0, 0}
|
||||
suite.txBuilder.SetMemo("Check signers are in expected order and different account numbers works")
|
||||
},
|
||||
false,
|
||||
|
@ -616,7 +616,7 @@ func (suite *AnteTestSuite) TestAnteHandlerMultiSigner() {
|
|||
"change sequence numbers (only accounts 0 and 1 sign)",
|
||||
func() {
|
||||
msgs = []sdk.Msg{msg1}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 1}, []uint64{1, 1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv}, []uint64{0, 1}, []uint64{1, 1}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -626,7 +626,7 @@ func (suite *AnteTestSuite) TestAnteHandlerMultiSigner() {
|
|||
"change sequence numbers (only accounts 1 and 2 sign)",
|
||||
func() {
|
||||
msgs = []sdk.Msg{msg2}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[2].priv, accounts[0].priv}, []uint64{2, 0}, []uint64{1, 2}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[2].priv, accounts[0].priv}, []uint64{2, 0}, []uint64{1, 2}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -636,7 +636,7 @@ func (suite *AnteTestSuite) TestAnteHandlerMultiSigner() {
|
|||
"everyone signs again",
|
||||
func() {
|
||||
msgs = []sdk.Msg{msg1, msg2, msg3}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}, []uint64{0, 1, 2}, []uint64{3, 2, 2}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv, accounts[1].priv, accounts[2].priv}, []uint64{0, 1, 2}, []uint64{3, 2, 2}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -668,7 +668,7 @@ func (suite *AnteTestSuite) TestAnteHandlerBadSignBytes() {
|
|||
feeAmount sdk.Coins
|
||||
gasLimit uint64
|
||||
msgs []sdk.Msg
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
||||
|
@ -680,7 +680,7 @@ func (suite *AnteTestSuite) TestAnteHandlerBadSignBytes() {
|
|||
feeAmount = testdata.NewTestFeeAmount()
|
||||
gasLimit = testdata.NewTestGasLimit()
|
||||
msgs = []sdk.Msg{msg0}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
true,
|
||||
|
@ -752,7 +752,7 @@ func (suite *AnteTestSuite) TestAnteHandlerBadSignBytes() {
|
|||
func() {
|
||||
feeAmount = testdata.NewTestFeeAmount()
|
||||
gasLimit = testdata.NewTestGasLimit()
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[1].priv}, []uint64{0}, []uint64{1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[1].priv}, []uint64{0}, []uint64{1}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -762,7 +762,7 @@ func (suite *AnteTestSuite) TestAnteHandlerBadSignBytes() {
|
|||
"test wrong signer if public doesn't exist",
|
||||
func() {
|
||||
msgs = []sdk.Msg{testdata.NewTestMsg(accounts[1].acc.GetAddress())}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{1}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{1}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -792,7 +792,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSetPubKey() {
|
|||
var (
|
||||
accNums []uint64
|
||||
msgs []sdk.Msg
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
||||
|
@ -800,7 +800,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSetPubKey() {
|
|||
{
|
||||
"test good tx",
|
||||
func() {
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
msgs = []sdk.Msg{testdata.NewTestMsg(accounts[0].acc.GetAddress())}
|
||||
},
|
||||
false,
|
||||
|
@ -835,7 +835,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSetPubKey() {
|
|||
acc1 := suite.app.AccountKeeper.GetAccount(suite.ctx, accounts[1].acc.GetAddress())
|
||||
suite.Require().Nil(acc1.GetPubKey())
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[1].priv}, []uint64{1}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[1].priv}, []uint64{1}, []uint64{0}
|
||||
msgs = []sdk.Msg{testdata.NewTestMsg(accounts[1].acc.GetAddress())}
|
||||
suite.txBuilder.SetMsgs(msgs...)
|
||||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
|
@ -858,7 +858,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSetPubKey() {
|
|||
suite.Require().Nil(acc1.GetPubKey())
|
||||
|
||||
// Set incorrect accSeq, to generate incorrect signature.
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[1].priv}, []uint64{1}, []uint64{1}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[1].priv}, []uint64{1}, []uint64{1}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -888,11 +888,11 @@ func (suite *AnteTestSuite) TestAnteHandlerSetPubKey() {
|
|||
}
|
||||
}
|
||||
|
||||
func generatePubKeysAndSignatures(n int, msg []byte, _ bool) (pubkeys []crypto.PubKey, signatures [][]byte) {
|
||||
pubkeys = make([]crypto.PubKey, n)
|
||||
func generatePubKeysAndSignatures(n int, msg []byte, _ bool) (pubkeys []cryptotypes.PubKey, signatures [][]byte) {
|
||||
pubkeys = make([]cryptotypes.PubKey, n)
|
||||
signatures = make([][]byte, n)
|
||||
for i := 0; i < n; i++ {
|
||||
var privkey crypto.PrivKey
|
||||
var privkey cryptotypes.PrivKey
|
||||
privkey = secp256k1.GenPrivKey()
|
||||
|
||||
// TODO: also generate ed25519 keys as below when ed25519 keys are
|
||||
|
@ -910,7 +910,7 @@ func generatePubKeysAndSignatures(n int, msg []byte, _ bool) (pubkeys []crypto.P
|
|||
return
|
||||
}
|
||||
|
||||
func expectedGasCostByKeys(pubkeys []crypto.PubKey) uint64 {
|
||||
func expectedGasCostByKeys(pubkeys []cryptotypes.PubKey) uint64 {
|
||||
cost := uint64(0)
|
||||
for _, pubkey := range pubkeys {
|
||||
pubkeyType := strings.ToLower(fmt.Sprintf("%T", pubkey))
|
||||
|
@ -927,8 +927,8 @@ func expectedGasCostByKeys(pubkeys []crypto.PubKey) uint64 {
|
|||
}
|
||||
|
||||
func TestCountSubkeys(t *testing.T) {
|
||||
genPubKeys := func(n int) []crypto.PubKey {
|
||||
var ret []crypto.PubKey
|
||||
genPubKeys := func(n int) []cryptotypes.PubKey {
|
||||
var ret []cryptotypes.PubKey
|
||||
for i := 0; i < n; i++ {
|
||||
ret = append(ret, secp256k1.GenPrivKey().PubKey())
|
||||
}
|
||||
|
@ -938,10 +938,10 @@ func TestCountSubkeys(t *testing.T) {
|
|||
singleLevelMultiKey := kmultisig.NewLegacyAminoPubKey(4, genPubKeys(5))
|
||||
multiLevelSubKey1 := kmultisig.NewLegacyAminoPubKey(4, genPubKeys(5))
|
||||
multiLevelSubKey2 := kmultisig.NewLegacyAminoPubKey(4, genPubKeys(5))
|
||||
multiLevelMultiKey := kmultisig.NewLegacyAminoPubKey(2, []crypto.PubKey{
|
||||
multiLevelMultiKey := kmultisig.NewLegacyAminoPubKey(2, []cryptotypes.PubKey{
|
||||
multiLevelSubKey1, multiLevelSubKey2, secp256k1.GenPrivKey().PubKey()})
|
||||
type args struct {
|
||||
pub crypto.PubKey
|
||||
pub cryptotypes.PubKey
|
||||
}
|
||||
testCases := []struct {
|
||||
name string
|
||||
|
@ -965,7 +965,7 @@ func (suite *AnteTestSuite) TestAnteHandlerSigLimitExceeded() {
|
|||
// Same data for every test cases
|
||||
accounts := suite.CreateTestAccounts(8)
|
||||
var addrs []sdk.AccAddress
|
||||
var privs []crypto.PrivKey
|
||||
var privs []cryptotypes.PrivKey
|
||||
for i := 0; i < 8; i++ {
|
||||
addrs = append(addrs, accounts[i].acc.GetAddress())
|
||||
privs = append(privs, accounts[i].priv)
|
||||
|
@ -1019,7 +1019,7 @@ func (suite *AnteTestSuite) TestCustomSignatureVerificationGasConsumer() {
|
|||
var (
|
||||
accNums []uint64
|
||||
msgs []sdk.Msg
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accSeqs []uint64
|
||||
)
|
||||
|
||||
|
@ -1028,7 +1028,7 @@ func (suite *AnteTestSuite) TestCustomSignatureVerificationGasConsumer() {
|
|||
"verify that an secp256k1 account gets rejected",
|
||||
func() {
|
||||
msgs = []sdk.Msg{testdata.NewTestMsg(accounts[0].acc.GetAddress())}
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
},
|
||||
false,
|
||||
false,
|
||||
|
@ -1067,7 +1067,7 @@ func (suite *AnteTestSuite) TestAnteHandlerReCheck() {
|
|||
suite.txBuilder.SetMemo("thisisatestmemo")
|
||||
|
||||
// test that operations skipped on recheck do not run
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{accounts[0].priv}, []uint64{0}, []uint64{0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package ante
|
||||
|
||||
import (
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
|
@ -110,7 +109,7 @@ func (cgts ConsumeTxSizeGasDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, sim
|
|||
continue
|
||||
}
|
||||
|
||||
var pubkey crypto.PubKey
|
||||
var pubkey cryptotypes.PubKey
|
||||
|
||||
acc := cgts.ak.GetAccount(ctx, signer)
|
||||
|
||||
|
|
|
@ -3,13 +3,11 @@ package ante_test
|
|||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/tx/signing"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||
)
|
||||
|
||||
|
@ -28,7 +26,7 @@ func (suite *AnteTestSuite) TestValidateBasic() {
|
|||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{}, []uint64{}, []uint64{}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{}, []uint64{}, []uint64{}
|
||||
invalidTx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
@ -38,7 +36,7 @@ func (suite *AnteTestSuite) TestValidateBasic() {
|
|||
|
||||
suite.Require().NotNil(err, "Did not error on invalid tx")
|
||||
|
||||
privs, accNums, accSeqs = []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs = []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
validTx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
@ -69,7 +67,7 @@ func (suite *AnteTestSuite) TestValidateMemo() {
|
|||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
suite.txBuilder.SetMemo(strings.Repeat("01234567890", 500))
|
||||
invalidTx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
@ -120,7 +118,7 @@ func (suite *AnteTestSuite) TestConsumeGasForTxSize() {
|
|||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
suite.txBuilder.SetMemo(strings.Repeat("01234567890", 10))
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
@ -214,7 +212,7 @@ func (suite *AnteTestSuite) TestTxHeightTimeoutDecorator() {
|
|||
suite.txBuilder.SetMemo(strings.Repeat("01234567890", 10))
|
||||
suite.txBuilder.SetTimeoutHeight(tc.timeout)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
package ante_test
|
||||
|
||||
import (
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||
)
|
||||
|
@ -27,7 +26,7 @@ func (suite *AnteTestSuite) TestEnsureMempoolFees() {
|
|||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
@ -76,7 +75,7 @@ func (suite *AnteTestSuite) TestDeductFees() {
|
|||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
package ante_test
|
||||
|
||||
import (
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/ante"
|
||||
|
@ -25,7 +23,7 @@ func (suite *AnteTestSuite) TestSetup() {
|
|||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
@ -60,7 +58,7 @@ func (suite *AnteTestSuite) TestRecoverPanic() {
|
|||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
|
|
@ -5,11 +5,10 @@ import (
|
|||
"encoding/hex"
|
||||
"fmt"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
|
@ -424,7 +423,7 @@ func GetSignerAcc(ctx sdk.Context, ak AccountKeeper, addr sdk.AccAddress) (types
|
|||
}
|
||||
|
||||
// CountSubKeys counts the total number of keys for a multi-sig public key.
|
||||
func CountSubKeys(pub crypto.PubKey) int {
|
||||
func CountSubKeys(pub cryptotypes.PubKey) int {
|
||||
v, ok := pub.(*kmultisig.LegacyAminoPubKey)
|
||||
if !ok {
|
||||
return 1
|
||||
|
|
|
@ -3,13 +3,12 @@ package ante_test
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
||||
kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
|
@ -30,7 +29,7 @@ func (suite *AnteTestSuite) TestSetPubKey() {
|
|||
priv3, pub3, addr3 := testdata.KeyTestPubAddr()
|
||||
|
||||
addrs := []sdk.AccAddress{addr1, addr2, addr3}
|
||||
pubs := []crypto.PubKey{pub1, pub2, pub3}
|
||||
pubs := []cryptotypes.PubKey{pub1, pub2, pub3}
|
||||
|
||||
msgs := make([]sdk.Msg, len(addrs))
|
||||
// set accounts and create msg for each address
|
||||
|
@ -47,7 +46,7 @@ func (suite *AnteTestSuite) TestSetPubKey() {
|
|||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
suite.txBuilder.SetGasLimit(gasLimit)
|
||||
|
||||
privs, accNums, accSeqs := []crypto.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{0, 0, 0}
|
||||
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{0, 0, 0}
|
||||
tx, err := suite.CreateTestTx(privs, accNums, accSeqs, suite.ctx.ChainID())
|
||||
suite.Require().NoError(err)
|
||||
|
||||
|
@ -85,7 +84,7 @@ func (suite *AnteTestSuite) TestConsumeSignatureVerificationGas() {
|
|||
type args struct {
|
||||
meter sdk.GasMeter
|
||||
sig signing.SignatureData
|
||||
pubkey crypto.PubKey
|
||||
pubkey cryptotypes.PubKey
|
||||
params types.Params
|
||||
}
|
||||
tests := []struct {
|
||||
|
@ -148,20 +147,20 @@ func (suite *AnteTestSuite) TestSigVerification() {
|
|||
|
||||
type testCase struct {
|
||||
name string
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accNums []uint64
|
||||
accSeqs []uint64
|
||||
recheck bool
|
||||
shouldErr bool
|
||||
}
|
||||
testCases := []testCase{
|
||||
{"no signers", []crypto.PrivKey{}, []uint64{}, []uint64{}, false, true},
|
||||
{"not enough signers", []crypto.PrivKey{priv1, priv2}, []uint64{0, 1}, []uint64{0, 0}, false, true},
|
||||
{"wrong order signers", []crypto.PrivKey{priv3, priv2, priv1}, []uint64{2, 1, 0}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong accnums", []crypto.PrivKey{priv1, priv2, priv3}, []uint64{7, 8, 9}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong sequences", []crypto.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{3, 4, 5}, false, true},
|
||||
{"valid tx", []crypto.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{0, 0, 0}, false, false},
|
||||
{"no err on recheck", []crypto.PrivKey{}, []uint64{}, []uint64{}, true, false},
|
||||
{"no signers", []cryptotypes.PrivKey{}, []uint64{}, []uint64{}, false, true},
|
||||
{"not enough signers", []cryptotypes.PrivKey{priv1, priv2}, []uint64{0, 1}, []uint64{0, 0}, false, true},
|
||||
{"wrong order signers", []cryptotypes.PrivKey{priv3, priv2, priv1}, []uint64{2, 1, 0}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong accnums", []cryptotypes.PrivKey{priv1, priv2, priv3}, []uint64{7, 8, 9}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong sequences", []cryptotypes.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{3, 4, 5}, false, true},
|
||||
{"valid tx", []cryptotypes.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{0, 0, 0}, false, false},
|
||||
{"no err on recheck", []cryptotypes.PrivKey{}, []uint64{}, []uint64{}, true, false},
|
||||
}
|
||||
for i, tc := range testCases {
|
||||
suite.ctx = suite.ctx.WithIsReCheckTx(tc.recheck)
|
||||
|
@ -233,20 +232,20 @@ func (suite *AnteTestSuite) TestSigVerification_ExplicitAmino() {
|
|||
|
||||
type testCase struct {
|
||||
name string
|
||||
privs []crypto.PrivKey
|
||||
privs []cryptotypes.PrivKey
|
||||
accNums []uint64
|
||||
accSeqs []uint64
|
||||
recheck bool
|
||||
shouldErr bool
|
||||
}
|
||||
testCases := []testCase{
|
||||
{"no signers", []crypto.PrivKey{}, []uint64{}, []uint64{}, false, true},
|
||||
{"not enough signers", []crypto.PrivKey{priv1, priv2}, []uint64{0, 1}, []uint64{0, 0}, false, true},
|
||||
{"wrong order signers", []crypto.PrivKey{priv3, priv2, priv1}, []uint64{2, 1, 0}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong accnums", []crypto.PrivKey{priv1, priv2, priv3}, []uint64{7, 8, 9}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong sequences", []crypto.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{3, 4, 5}, false, true},
|
||||
{"valid tx", []crypto.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{0, 0, 0}, false, false},
|
||||
{"no err on recheck", []crypto.PrivKey{}, []uint64{}, []uint64{}, true, false},
|
||||
{"no signers", []cryptotypes.PrivKey{}, []uint64{}, []uint64{}, false, true},
|
||||
{"not enough signers", []cryptotypes.PrivKey{priv1, priv2}, []uint64{0, 1}, []uint64{0, 0}, false, true},
|
||||
{"wrong order signers", []cryptotypes.PrivKey{priv3, priv2, priv1}, []uint64{2, 1, 0}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong accnums", []cryptotypes.PrivKey{priv1, priv2, priv3}, []uint64{7, 8, 9}, []uint64{0, 0, 0}, false, true},
|
||||
{"wrong sequences", []cryptotypes.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{3, 4, 5}, false, true},
|
||||
{"valid tx", []cryptotypes.PrivKey{priv1, priv2, priv3}, []uint64{0, 1, 2}, []uint64{0, 0, 0}, false, false},
|
||||
{"no err on recheck", []cryptotypes.PrivKey{}, []uint64{}, []uint64{}, true, false},
|
||||
}
|
||||
for i, tc := range testCases {
|
||||
suite.ctx = suite.ctx.WithIsReCheckTx(tc.recheck)
|
||||
|
@ -270,7 +269,7 @@ func (suite *AnteTestSuite) TestSigVerification_ExplicitAmino() {
|
|||
|
||||
func (suite *AnteTestSuite) TestSigIntegration() {
|
||||
// generate private keys
|
||||
privs := []crypto.PrivKey{
|
||||
privs := []cryptotypes.PrivKey{
|
||||
secp256k1.GenPrivKey(),
|
||||
secp256k1.GenPrivKey(),
|
||||
secp256k1.GenPrivKey(),
|
||||
|
@ -288,7 +287,7 @@ func (suite *AnteTestSuite) TestSigIntegration() {
|
|||
suite.Require().Equal(initialSigCost*uint64(len(privs)), doubleCost-initialCost)
|
||||
}
|
||||
|
||||
func (suite *AnteTestSuite) runSigDecorators(params types.Params, _ bool, privs ...crypto.PrivKey) (sdk.Gas, error) {
|
||||
func (suite *AnteTestSuite) runSigDecorators(params types.Params, _ bool, privs ...cryptotypes.PrivKey) (sdk.Gas, error) {
|
||||
suite.SetupTest(true) // setup
|
||||
suite.txBuilder = suite.clientCtx.TxConfig.NewTxBuilder()
|
||||
|
||||
|
@ -343,7 +342,7 @@ func (suite *AnteTestSuite) TestIncrementSequenceDecorator() {
|
|||
|
||||
msgs := []sdk.Msg{testdata.NewTestMsg(addr)}
|
||||
suite.Require().NoError(suite.txBuilder.SetMsgs(msgs...))
|
||||
privs := []crypto.PrivKey{priv}
|
||||
privs := []cryptotypes.PrivKey{priv}
|
||||
accNums := []uint64{suite.app.AccountKeeper.GetAccount(suite.ctx, addr).GetAccountNumber()}
|
||||
accSeqs := []uint64{suite.app.AccountKeeper.GetAccount(suite.ctx, addr).GetSequence()}
|
||||
feeAmount := testdata.NewTestFeeAmount()
|
||||
|
|
|
@ -6,11 +6,11 @@ import (
|
|||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/suite"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/tx"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
|
@ -24,7 +24,7 @@ import (
|
|||
// TestAccount represents an account used in the tests in x/auth/ante.
|
||||
type TestAccount struct {
|
||||
acc types.AccountI
|
||||
priv crypto.PrivKey
|
||||
priv cryptotypes.PrivKey
|
||||
}
|
||||
|
||||
// AnteTestSuite is a test suite to be used with ante handler tests.
|
||||
|
@ -86,7 +86,7 @@ func (suite *AnteTestSuite) CreateTestAccounts(numAccs int) []TestAccount {
|
|||
}
|
||||
|
||||
// CreateTestTx is a helper function to create a tx given multiple inputs.
|
||||
func (suite *AnteTestSuite) CreateTestTx(privs []crypto.PrivKey, accNums []uint64, accSeqs []uint64, chainID string) (xauthsigning.Tx, error) {
|
||||
func (suite *AnteTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums []uint64, accSeqs []uint64, chainID string) (xauthsigning.Tx, error) {
|
||||
// First round: we gather all the signer infos. We use the "set empty
|
||||
// signature" hack to do that.
|
||||
var sigsV2 []signing.SignatureV2
|
||||
|
@ -142,7 +142,7 @@ type TestCase struct {
|
|||
}
|
||||
|
||||
// CreateTestTx is a helper function to create a tx given multiple inputs.
|
||||
func (suite *AnteTestSuite) RunTestCase(privs []crypto.PrivKey, msgs []sdk.Msg, feeAmount sdk.Coins, gasLimit uint64, accNums, accSeqs []uint64, chainID string, tc TestCase) {
|
||||
func (suite *AnteTestSuite) RunTestCase(privs []cryptotypes.PrivKey, msgs []sdk.Msg, feeAmount sdk.Coins, gasLimit uint64, accNums, accSeqs []uint64, chainID string, tc TestCase) {
|
||||
suite.Run(fmt.Sprintf("Case %s", tc.desc), func() {
|
||||
suite.Require().NoError(suite.txBuilder.SetMsgs(msgs...))
|
||||
suite.txBuilder.SetFeeAmount(feeAmount)
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
// +build norace
|
||||
|
||||
package cli_test
|
||||
|
||||
import (
|
||||
|
@ -12,7 +10,6 @@ import (
|
|||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/stretchr/testify/suite"
|
||||
tmcrypto "github.com/tendermint/tendermint/crypto"
|
||||
tmcli "github.com/tendermint/tendermint/libs/cli"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
|
@ -22,6 +19,7 @@ import (
|
|||
"github.com/cosmos/cosmos-sdk/crypto/hd"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keyring"
|
||||
kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/simapp"
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
|
||||
|
@ -63,7 +61,7 @@ func (s *IntegrationTestSuite) SetupSuite() {
|
|||
account2, _, err := kb.NewMnemonic("newAccount2", keyring.English, sdk.FullFundraiserPath, hd.Secp256k1)
|
||||
s.Require().NoError(err)
|
||||
|
||||
multi := kmultisig.NewLegacyAminoPubKey(2, []tmcrypto.PubKey{account1.GetPubKey(), account2.GetPubKey()})
|
||||
multi := kmultisig.NewLegacyAminoPubKey(2, []cryptotypes.PubKey{account1.GetPubKey(), account2.GetPubKey()})
|
||||
_, err = kb.SaveMultisig("multi", multi)
|
||||
s.Require().NoError(err)
|
||||
|
||||
|
|
|
@ -4,10 +4,10 @@ import (
|
|||
"fmt"
|
||||
|
||||
gogotypes "github.com/gogo/protobuf/types"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
|
@ -35,7 +35,7 @@ type AccountKeeperI interface {
|
|||
IterateAccounts(sdk.Context, func(types.AccountI) bool)
|
||||
|
||||
// Fetch the public key of an account at a specified address
|
||||
GetPubKey(sdk.Context, sdk.AccAddress) (crypto.PubKey, error)
|
||||
GetPubKey(sdk.Context, sdk.AccAddress) (cryptotypes.PubKey, error)
|
||||
|
||||
// Fetch the sequence of an account at a specified address.
|
||||
GetSequence(sdk.Context, sdk.AccAddress) (uint64, error)
|
||||
|
@ -90,7 +90,7 @@ func (ak AccountKeeper) Logger(ctx sdk.Context) log.Logger {
|
|||
}
|
||||
|
||||
// GetPubKey Returns the PubKey of the account at address
|
||||
func (ak AccountKeeper) GetPubKey(ctx sdk.Context, addr sdk.AccAddress) (crypto.PubKey, error) {
|
||||
func (ak AccountKeeper) GetPubKey(ctx sdk.Context, addr sdk.AccAddress) (cryptotypes.PubKey, error) {
|
||||
acc := ak.GetAccount(ctx, addr)
|
||||
if acc == nil {
|
||||
return nil, sdkerrors.Wrapf(sdkerrors.ErrUnknownAddress, "account %s does not exist", addr)
|
||||
|
|
|
@ -3,11 +3,10 @@ package legacytx
|
|||
import (
|
||||
"encoding/json"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
|
@ -57,8 +56,8 @@ func StdSignBytes(chainID string, accnum, sequence, timeout uint64, fee StdFee,
|
|||
|
||||
// Deprecated: StdSignature represents a sig
|
||||
type StdSignature struct {
|
||||
crypto.PubKey `json:"pub_key" yaml:"pub_key"` // optional
|
||||
Signature []byte `json:"signature" yaml:"signature"`
|
||||
cryptotypes.PubKey `json:"pub_key" yaml:"pub_key"` // optional
|
||||
Signature []byte `json:"signature" yaml:"signature"`
|
||||
}
|
||||
|
||||
// StdSignatureToSignatureV2 converts a StdSignature to a SignatureV2
|
||||
|
@ -75,7 +74,7 @@ func StdSignatureToSignatureV2(cdc *codec.LegacyAmino, sig StdSignature) (signin
|
|||
}, nil
|
||||
}
|
||||
|
||||
func pubKeySigToSigData(cdc *codec.LegacyAmino, key crypto.PubKey, sig []byte) (signing.SignatureData, error) {
|
||||
func pubKeySigToSigData(cdc *codec.LegacyAmino, key cryptotypes.PubKey, sig []byte) (signing.SignatureData, error) {
|
||||
multiPK, ok := key.(multisig.PubKey)
|
||||
if !ok {
|
||||
return &signing.SingleSignatureData{
|
||||
|
|
|
@ -3,11 +3,11 @@ package legacytx
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"gopkg.in/yaml.v2"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
||||
txtypes "github.com/cosmos/cosmos-sdk/types/tx"
|
||||
|
@ -73,7 +73,7 @@ func (fee StdFee) GasPrices() sdk.DecCoins {
|
|||
}
|
||||
|
||||
// Deprecated
|
||||
func NewStdSignature(pk crypto.PubKey, sig []byte) StdSignature {
|
||||
func NewStdSignature(pk cryptotypes.PubKey, sig []byte) StdSignature {
|
||||
return StdSignature{PubKey: pk, Signature: sig}
|
||||
}
|
||||
|
||||
|
@ -82,9 +82,9 @@ func (ss StdSignature) GetSignature() []byte {
|
|||
return ss.Signature
|
||||
}
|
||||
|
||||
// GetPubKey returns the public key of a signature as a crypto.PubKey using the
|
||||
// GetPubKey returns the public key of a signature as a cryptotypes.PubKey using the
|
||||
// Amino codec.
|
||||
func (ss StdSignature) GetPubKey() crypto.PubKey {
|
||||
func (ss StdSignature) GetPubKey() cryptotypes.PubKey {
|
||||
return ss.PubKey
|
||||
}
|
||||
|
||||
|
@ -238,8 +238,8 @@ func (tx StdTx) GetSignaturesV2() ([]signing.SignatureV2, error) {
|
|||
|
||||
// GetPubkeys returns the pubkeys of signers if the pubkey is included in the signature
|
||||
// If pubkey is not included in the signature, then nil is in the slice instead
|
||||
func (tx StdTx) GetPubKeys() []crypto.PubKey {
|
||||
pks := make([]crypto.PubKey, len(tx.Signatures))
|
||||
func (tx StdTx) GetPubKeys() []cryptotypes.PubKey {
|
||||
pks := make([]cryptotypes.PubKey, len(tx.Signatures))
|
||||
|
||||
for i, stdSig := range tx.Signatures {
|
||||
pks[i] = stdSig.GetPubKey()
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue