Skip to content

Commit

Permalink
Merge PR: add validator address prefix converting function && tag v0.…
Browse files Browse the repository at this point in the history
…18.1 (#134)

* FINISH: add val prefix converting

* FINISH: ut of val addr prefix converting

* remove useless code

* FIX: ut bug
  • Loading branch information
RevelationOfTuring authored Apr 26, 2021
1 parent a41bfcc commit 960b28e
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 7 deletions.
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -511,8 +511,6 @@ github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78=
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/okex/cosmos-sdk v0.39.2-exchain3 h1:1dfu855mhlS1QP9pz3A2bVAZb3KyJ7ldlL/PmxPtK/A=
github.com/okex/cosmos-sdk v0.39.2-exchain3/go.mod h1:IvlniaZoJAtzILHgcmnfaJ5S125TYJWfJvGqY9zSXb4=
github.com/okex/exchain v0.17.1 h1:DGlOvWLH7z9JBY2RvxAYdAtucNcIP5mDm94oc5hlzdI=
github.com/okex/exchain v0.17.1/go.mod h1:DMRbGNv6X86+DToFyhEpp4SjV53iTy+Lt3uGvw/PMXQ=
github.com/okex/exchain v0.18.2 h1:zi5wD++knq+9qv9MSfgSUfA+LhZqnAbATe7yvyUHeyk=
github.com/okex/exchain v0.18.2/go.mod h1:6fSdvquHgB8FzmxBbjMXOv0R+pIGD46jdLybaAKDKEM=
github.com/okex/iavl v0.14.3-exchain h1:kwRIwpFD6B8mDDqoaxeUN3Pg2GW0Vr+sA+b86renWcA=
Expand Down
25 changes: 22 additions & 3 deletions utils/address.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,37 @@
package utils

import sdk "github.com/cosmos/cosmos-sdk/types"
import (
"fmt"

sdk "github.com/cosmos/cosmos-sdk/types"
)

// AccAddrPrefixConvert converts the account address between two different prefixes
func AccAddrPrefixConvert(srcPrefx, srcAccAddrStr, dstPrefix string) (dstAccAddrStr string, err error) {
config := sdk.GetConfig()
// set source prefix
config.SetBech32PrefixForAccount(srcPrefx, srcPrefx+"pub")
config.SetBech32PrefixForAccount(srcPrefx, fmt.Sprintf("%s%s", srcPrefx, sdk.PrefixPublic))
accAddr, err := sdk.AccAddressFromBech32(srcAccAddrStr)
if err != nil {
return
}

// set destination prefix
config.SetBech32PrefixForAccount(dstPrefix, dstPrefix+"pub")
config.SetBech32PrefixForAccount(dstPrefix, fmt.Sprintf("%s%s", dstPrefix, sdk.PrefixPublic))
return accAddr.String(), err
}

// ValAddrPrefixConvert converts the validator address between two different prefixes
func ValAddrPrefixConvert(srcPrefx, srcValAddrStr, dstPrefix string) (dstValAddrStr string, err error) {
config := sdk.GetConfig()
// set source prefix
config.SetBech32PrefixForValidator(srcPrefx, fmt.Sprintf("%s%s", srcPrefx, sdk.PrefixPublic))
valAddr, err := sdk.ValAddressFromBech32(srcValAddrStr)
if err != nil {
return
}

// set destination prefix
config.SetBech32PrefixForValidator(dstPrefix, fmt.Sprintf("%s%s", dstPrefix, sdk.PrefixPublic))
return valAddr.String(), err
}
29 changes: 29 additions & 0 deletions utils/address_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,14 @@ package utils
import (
"testing"

sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/stretchr/testify/require"
)

const (
defaultValAddr = "exvaloper1qj5c07sm6jetjz8f509qtrxgh4psxkv3m2wy6x"
accAddrWithOKExChainPrefix = "okexchain1qj5c07sm6jetjz8f509qtrxgh4psxkv32x0qas"
valAddrWithOKExChainPrefix = "okexchainvaloper1qj5c07sm6jetjz8f509qtrxgh4psxkv3tzllpj"
)

func TestAccAddrPrefixConvert(t *testing.T) {
Expand All @@ -28,4 +31,30 @@ func TestAccAddrPrefixConvert(t *testing.T) {
dstAccAddrStr, err = AccAddrPrefixConvert("ex", defaultAddr, "okexchainx")
require.NoError(t, err)
require.NotEqual(t, accAddrWithOKExChainPrefix, dstAccAddrStr)

// recover the account prefix
sdk.GetConfig().SetBech32PrefixForAccount("ex", "expub")
}

func TestValAddrPrefixConvert(t *testing.T) {
dstValAddrStr, err := ValAddrPrefixConvert("exvaloper", defaultValAddr, "okexchainvaloper")
require.NoError(t, err)
require.Equal(t, valAddrWithOKExChainPrefix, dstValAddrStr)

// error check
// wrong source prefix
_, err = ValAddrPrefixConvert("exxvaloper", defaultValAddr, "okexchainvaloper")
require.Error(t, err)

// wrong source validator address
_, err = ValAddrPrefixConvert("exvaloper", defaultValAddr+"a", "okexchainvaloper")
require.Error(t, err)

// wrong destination validator address
dstValAddrStr, err = ValAddrPrefixConvert("exvaloper", defaultValAddr, "okexchainxvaloper")
require.NoError(t, err)
require.NotEqual(t, valAddrWithOKExChainPrefix, dstValAddrStr)

// recover the validator prefix
sdk.GetConfig().SetBech32PrefixForValidator("exvaloper", "exvaloperpub")
}
2 changes: 0 additions & 2 deletions utils/evm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,6 @@ const (
)

func TestToCosmosAddress(t *testing.T) {
// init prefix with ex
sdk.GetConfig().SetBech32PrefixForAccount("ex", "expub")
expectedAccAddr, err := sdk.AccAddressFromBech32(defaultAddr)
require.NoError(t, err)

Expand Down

0 comments on commit 960b28e

Please sign in to comment.