2018-01-07 12:27:56 -08:00
|
|
|
package types
|
2018-01-06 14:22:21 -08:00
|
|
|
|
|
|
|
import (
|
2018-03-17 11:18:04 -07:00
|
|
|
"encoding/hex"
|
|
|
|
"errors"
|
2018-05-26 14:21:29 -07:00
|
|
|
"fmt"
|
2018-03-17 11:18:04 -07:00
|
|
|
|
2018-05-26 14:21:29 -07:00
|
|
|
bech32cosmos "github.com/cosmos/bech32cosmos/go"
|
|
|
|
crypto "github.com/tendermint/go-crypto"
|
2018-03-01 23:49:07 -08:00
|
|
|
cmn "github.com/tendermint/tmlibs/common"
|
2018-01-06 14:22:21 -08:00
|
|
|
)
|
|
|
|
|
2018-05-26 14:21:29 -07:00
|
|
|
//Address is a go crypto-style Address
|
2018-03-01 23:49:07 -08:00
|
|
|
type Address = cmn.HexBytes
|
|
|
|
|
2018-05-26 14:21:29 -07:00
|
|
|
// Bech32CosmosifyAcc takes Address and returns the Bech32Cosmos encoded string
|
|
|
|
func Bech32CosmosifyAcc(addr Address) (string, error) {
|
|
|
|
return bech32cosmos.ConvertAndEncode("cosmosaccaddr", addr.Bytes())
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bech32CosmosifyAccPub takes AccountPubKey and returns the Bech32Cosmos encoded string
|
|
|
|
func Bech32CosmosifyAccPub(pub crypto.PubKey) (string, error) {
|
|
|
|
return bech32cosmos.ConvertAndEncode("cosmosaccpub", pub.Bytes())
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bech32CosmosifyVal returns the Bech32Cosmos encoded string for a validator address
|
|
|
|
func Bech32CosmosifyVal(addr Address) (string, error) {
|
|
|
|
return bech32cosmos.ConvertAndEncode("cosmosvaladdr", addr.Bytes())
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bech32CosmosifyValPub returns the Bech32Cosmos encoded string for a validator pubkey
|
|
|
|
func Bech32CosmosifyValPub(pub crypto.PubKey) (string, error) {
|
|
|
|
return bech32cosmos.ConvertAndEncode("cosmosvalpub", pub.Bytes())
|
|
|
|
}
|
|
|
|
|
2018-03-17 11:18:04 -07:00
|
|
|
// create an Address from a string
|
2018-05-26 14:21:29 -07:00
|
|
|
func GetAccAddressHex(address string) (addr Address, err error) {
|
2018-03-17 11:18:04 -07:00
|
|
|
if len(address) == 0 {
|
|
|
|
return addr, errors.New("must use provide address")
|
|
|
|
}
|
|
|
|
bz, err := hex.DecodeString(address)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return Address(bz), nil
|
|
|
|
}
|
2018-05-26 14:21:29 -07:00
|
|
|
|
|
|
|
// create an Address from a string
|
|
|
|
func GetAccAddressBech32Cosmos(address string) (addr Address, err error) {
|
|
|
|
if len(address) == 0 {
|
|
|
|
return addr, errors.New("must use provide address")
|
|
|
|
}
|
|
|
|
|
|
|
|
hrp, bz, err := bech32cosmos.DecodeAndConvert(address)
|
|
|
|
|
|
|
|
if hrp != "cosmosaccaddr" {
|
|
|
|
return addr, fmt.Errorf("Invalid Address Prefix. Expected cosmosaccaddr, Got %s", hrp)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return Address(bz), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// create an Address from a string
|
|
|
|
func GetValAddressHex(address string) (addr Address, err error) {
|
|
|
|
if len(address) == 0 {
|
|
|
|
return addr, errors.New("must use provide address")
|
|
|
|
}
|
|
|
|
bz, err := hex.DecodeString(address)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return Address(bz), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// create an Address from a string
|
|
|
|
func GetValAddressBech32Cosmos(address string) (addr Address, err error) {
|
|
|
|
if len(address) == 0 {
|
|
|
|
return addr, errors.New("must use provide address")
|
|
|
|
}
|
|
|
|
|
|
|
|
hrp, bz, err := bech32cosmos.DecodeAndConvert(address)
|
|
|
|
|
|
|
|
if hrp != "cosmosvaladdr" {
|
|
|
|
return addr, fmt.Errorf("Invalid Address Prefix. Expected cosmosvaladdr, Got %s", hrp)
|
|
|
|
}
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return Address(bz), nil
|
|
|
|
}
|