diff --git a/address.go b/address.go index 4aac6b6..5784288 100644 --- a/address.go +++ b/address.go @@ -9,39 +9,46 @@ import ( "golang.org/x/crypto/blake2b" ) -type AddressType byte +type ShelleyAddressType byte // refer to pg.120 in https://hydra.iohk.io/build/7918420/download/1/ledger-spec.pdf const ( - Base AddressType = 0x00 - Ptr AddressType = 0x04 - Enterprise AddressType = 0x06 - Stake AddressType = 0x0E + Base ShelleyAddressType = 0x00 + Ptr ShelleyAddressType = 0x04 + Enterprise ShelleyAddressType = 0x06 + Stake ShelleyAddressType = 0x0E ) -// Address represents a Cardano address. -type Address struct { +type Address interface { + Bech32() string + MarshalCBOR() ([]byte, error) + UnmarshalCBOR(data []byte) error + Bytes() []byte +} + +// ShelleyAddress represents a Cardano address. +type ShelleyAddress struct { Network Network - Type AddressType + Type ShelleyAddressType Pointer Pointer Payment StakeCredential Stake StakeCredential } -// NewAddress creates an Address from a bech32 encoded string. -func NewAddress(bech string) (Address, error) { +// NewShelleyAddress creates an ShelleyAddress from a bech32 encoded string. +func NewAddress(bech string) (ShelleyAddress, error) { _, bytes, err := bech32.DecodeToBase256(bech) if err != nil { - return Address{}, err + return ShelleyAddress{}, err } return NewAddressFromBytes(bytes) } -// NewAddressFromBytes creates an Address from bytes. -func NewAddressFromBytes(bytes []byte) (Address, error) { - addr := Address{ - Type: AddressType(bytes[0] >> 4), +// NewAddressFromBytes creates an ShelleyAddress from bytes. +func NewAddressFromBytes(bytes []byte) (ShelleyAddress, error) { + addr := ShelleyAddress{ + Type: ShelleyAddressType(bytes[0] >> 4), Network: Network(bytes[0] & 0x01), } @@ -184,13 +191,13 @@ func NewAddressFromBytes(bytes []byte) (Address, error) { } // MarshalCBOR implements cbor.Marshaler. -func (addr *Address) MarshalCBOR() ([]byte, error) { +func (addr *ShelleyAddress) MarshalCBOR() ([]byte, error) { em, _ := cbor.CanonicalEncOptions().EncMode() return em.Marshal(addr.Bytes()) } // UnmarshalCBOR implements cbor.Unmarshaler. -func (addr *Address) UnmarshalCBOR(data []byte) error { +func (addr *ShelleyAddress) UnmarshalCBOR(data []byte) error { bytes := []byte{} if err := cborDec.Unmarshal(data, &bytes); err != nil { return nil @@ -209,8 +216,8 @@ func (addr *Address) UnmarshalCBOR(data []byte) error { return nil } -// Bytes returns the CBOR encoding of the Address as bytes. -func (addr *Address) Bytes() []byte { +// Bytes returns the CBOR encoding of the ShelleyAddress as bytes. +func (addr *ShelleyAddress) Bytes() []byte { var networkByte uint8 switch addr.Network { case Testnet, Preprod: @@ -238,8 +245,8 @@ func (addr *Address) Bytes() []byte { return addrBytes } -// Bech32 returns the Address encoded as bech32. -func (addr *Address) Bech32() string { +// Bech32 returns the ShelleyAddress encoded as bech32. +func (addr *ShelleyAddress) Bech32() string { addrStr, err := bech32.EncodeFromBase256(getHrp(addr.Network, addr.Type), addr.Bytes()) if err != nil { panic(err) @@ -247,13 +254,13 @@ func (addr *Address) Bech32() string { return addrStr } -// String returns the Address encoded as bech32. -func (addr Address) String() string { +// String returns the ShelleyAddress encoded as bech32. +func (addr ShelleyAddress) String() string { return addr.Bech32() } -// NewBaseAddress returns a new Base Address. -func NewBaseAddress(network Network, payment StakeCredential, stake StakeCredential) (Address, error) { +// NewBaseShelleyAddress returns a new Base Address. +func NewBaseAddress(network Network, payment StakeCredential, stake StakeCredential) (ShelleyAddress, error) { addrType := Base if payment.Type == ScriptCredential && stake.Type == KeyCredential { addrType = Base + 1 @@ -262,7 +269,7 @@ func NewBaseAddress(network Network, payment StakeCredential, stake StakeCredent } else if payment.Type == ScriptCredential && stake.Type == ScriptCredential { addrType = Base + 3 } - return Address{Type: addrType, Network: network, Payment: payment, Stake: stake}, nil + return ShelleyAddress{Type: addrType, Network: network, Payment: payment, Stake: stake}, nil } // Pointer is the location of the Stake Registration Certificate in the blockchain. @@ -272,31 +279,31 @@ type Pointer struct { CertIndex uint64 } -// NewPointerAddress returns a new Pointer Address. -func NewPointerAddress(network Network, payment StakeCredential, ptr Pointer) (Address, error) { +// NewPointerShelleyAddress returns a new Pointer Address. +func NewPointerAddress(network Network, payment StakeCredential, ptr Pointer) (ShelleyAddress, error) { addrType := Ptr if payment.Type == ScriptCredential { addrType = Ptr + 1 } - return Address{Type: addrType, Network: network, Payment: payment, Pointer: ptr}, nil + return ShelleyAddress{Type: addrType, Network: network, Payment: payment, Pointer: ptr}, nil } -// NewEnterpriseAddress returns a new Enterprise Address. -func NewEnterpriseAddress(network Network, payment StakeCredential) (Address, error) { +// NewEnterpriseShelleyAddress returns a new Enterprise Address. +func NewEnterpriseAddress(network Network, payment StakeCredential) (ShelleyAddress, error) { addrType := Enterprise if payment.Type == ScriptCredential { addrType = Enterprise + 1 } - return Address{Type: addrType, Network: network, Payment: payment}, nil + return ShelleyAddress{Type: addrType, Network: network, Payment: payment}, nil } -// NewStakeAddress returns a new Stake Address. -func NewStakeAddress(network Network, stake StakeCredential) (Address, error) { +// NewStakeShelleyAddress returns a new Stake Address. +func NewStakeAddress(network Network, stake StakeCredential) (ShelleyAddress, error) { addrType := Stake if stake.Type == ScriptCredential { addrType = Stake + 1 } - return Address{Type: addrType, Network: network, Stake: stake}, nil + return ShelleyAddress{Type: addrType, Network: network, Stake: stake}, nil } func decodeFromNat(data []byte) (uint64, uint, error) { @@ -345,7 +352,7 @@ func Blake224Hash(b []byte) ([]byte, error) { return hash.Sum(nil), err } -func getHrp(network Network, addrType AddressType) string { +func getHrp(network Network, addrType ShelleyAddressType) string { hrp := "addr" if addrType == Stake || addrType == Stake+1 { hrp = "stake" diff --git a/byron_address.go b/byron_address.go new file mode 100644 index 0000000..018fa36 --- /dev/null +++ b/byron_address.go @@ -0,0 +1,22 @@ +package cardano + +import ( + "github.com/Bitrue-exchange/libada-go" + "github.com/cosmos/btcutil/base58" +) + +type ByronAddress struct { + libada.LegacyAddress +} + +func NewByronAddress(b58 string) (*ByronAddress, error) { + ba := &ByronAddress{} + err := ba.UnmarshalCBOR(base58.Decode(b58)) + if err != nil { + return nil, err + } + return ba, nil +} +func (ba *ByronAddress) Bech32() string { + return "" +} diff --git a/go.mod b/go.mod index b4b3ba8..5391055 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,9 @@ go 1.18 require ( filippo.io/edwards25519 v1.0.0 + github.com/Bitrue-exchange/libada-go v0.0.1-rc github.com/blockfrost/blockfrost-go v0.1.0 + github.com/cosmos/btcutil v1.0.5 github.com/dgraph-io/badger/v3 v3.2103.2 github.com/echovl/ed25519 v0.2.0 github.com/matoous/go-nanoid/v2 v2.0.0 @@ -23,6 +25,7 @@ require ( github.com/dgraph-io/ristretto v0.1.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/fxamacker/cbor/v2 v2.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -33,6 +36,7 @@ require ( github.com/hashicorp/go-retryablehttp v0.7.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/islishude/base58 v1.0.1 // indirect github.com/klauspost/compress v1.12.3 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect diff --git a/go.sum b/go.sum index 2ee6f79..d846c8c 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/Bitrue-exchange/libada-go v0.0.1-rc h1:duA44UKnJvDDit+6/EKWbPYMV6bzfpA/ldwb3eqd+0Q= +github.com/Bitrue-exchange/libada-go v0.0.1-rc/go.mod h1:dDA2Sx73XOqa1z7DZ32sgcJY5oAJGtFHwV++9HLpkNM= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= @@ -60,6 +62,8 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= +github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -86,6 +90,8 @@ github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3 github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fxamacker/cbor/v2 v2.3.0 h1:aM45YGMctNakddNNAezPxDUpv38j44Abh+hifNuqXik= +github.com/fxamacker/cbor/v2 v2.3.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -173,6 +179,10 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/islishude/base58 v1.0.1 h1:oY9rmolPWkTfNA31gFHA1D7f5zoueyajgv3qWlhFDEQ= +github.com/islishude/base58 v1.0.1/go.mod h1:YaFmRvjG56e35g5kjLwvU0pmHPdB2eoeoE9xBILnaRo= +github.com/islishude/bip32 v1.0.2 h1:pZ/OnlCePDeMsVZtGEXimCLc8ZVHrIRkZHx7Sp7ZdAc= +github.com/islishude/bip32 v1.0.2/go.mod h1:QVwq9Zrte7nf6N3kiWXSMj1xJnPfQe/Z26AI5WBh/bo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -268,6 +278,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= diff --git a/internal/cbor/decode.go b/internal/cbor/decode.go index 57cb2c8..1e8beb2 100644 --- a/internal/cbor/decode.go +++ b/internal/cbor/decode.go @@ -728,8 +728,6 @@ func (d *decoder) parseToValue(v reflect.Value, tInfo *typeInfo) error { //nolin } v.Set(reflect.ValueOf(NewByteString(rb.Bytes()))) return nil - } else { - return fillByteString(t, b, v) } return fillByteString(t, b, v) case cborTypeTextString: diff --git a/tx_builder_test.go b/tx_builder_test.go index 0bc823c..ed0151d 100644 --- a/tx_builder_test.go +++ b/tx_builder_test.go @@ -159,7 +159,7 @@ func TestSimpleTx(t *testing.T) { t.Fatal(err) } txIn := NewTxInput(txHashIn, 0, NewValue(tc.input)) - txOut := NewTxOutput(addrOut, NewValue(tc.output)) + txOut := NewTxOutput(&addrOut, NewValue(tc.output)) txBuilder := NewTxBuilder(alonzoProtocol) @@ -227,7 +227,7 @@ func TestMintingAssets(t *testing.T) { NewTxInput(txHash, 0, NewValue(inputAmount)), ) txBuilder.AddOutputs( - NewTxOutput(addr, NewValueWithAssets(transferAmount, newAsset.MultiAsset())), + NewTxOutput(&addr, NewValueWithAssets(transferAmount, newAsset.MultiAsset())), ) txBuilder.Mint(newAsset) @@ -235,7 +235,7 @@ func TestMintingAssets(t *testing.T) { txBuilder.SetTTL(100000) txBuilder.Sign(paymentKey.PrvKey()) txBuilder.Sign(policyKey.PrvKey()) - txBuilder.AddChangeIfNeeded(addr) + txBuilder.AddChangeIfNeeded(&addr) tx, err := txBuilder.Build() if err != nil { t.Fatal(err) @@ -354,7 +354,7 @@ func TestSendingMultiAssets(t *testing.T) { NewTxInput(txHash, 0, tc.txInputAmount), ) txBuilder.AddOutputs( - NewTxOutput(addr, tc.txOutputAmount), + NewTxOutput(&addr, tc.txOutputAmount), ) txBuilder.SetTTL(100000) txBuilder.Sign(paymentKey.PrvKey()) @@ -367,7 +367,7 @@ func TestSendingMultiAssets(t *testing.T) { }, }) - txBuilder.AddChangeIfNeeded(addr) + txBuilder.AddChangeIfNeeded(&addr) tx, err := txBuilder.Build() if err != nil { if tc.wantErr { @@ -438,7 +438,7 @@ func TestAddChangeIfNeeded(t *testing.T) { }, outputs: []*TxOutput{ { - Address: receiver, + Address: &receiver, Amount: NewValue(200000), }, }, @@ -458,7 +458,7 @@ func TestAddChangeIfNeeded(t *testing.T) { }, outputs: []*TxOutput{ { - Address: receiver, + Address: &receiver, Amount: NewValue(txBuilder.MinCoinsForTxOut(emptyTxOut)), }, }, @@ -477,7 +477,7 @@ func TestAddChangeIfNeeded(t *testing.T) { }, outputs: []*TxOutput{ { - Address: receiver, + Address: &receiver, Amount: NewValue(txBuilder.MinCoinsForTxOut(emptyTxOut)), }, }, @@ -496,7 +496,7 @@ func TestAddChangeIfNeeded(t *testing.T) { }, outputs: []*TxOutput{ { - Address: receiver, + Address: &receiver, Amount: NewValue(txBuilder.MinCoinsForTxOut(emptyTxOut)), }, }, @@ -515,7 +515,7 @@ func TestAddChangeIfNeeded(t *testing.T) { }, outputs: []*TxOutput{ { - Address: receiver, + Address: &receiver, Amount: NewValue(txBuilder.MinCoinsForTxOut(emptyTxOut)), }, }, @@ -535,7 +535,7 @@ func TestAddChangeIfNeeded(t *testing.T) { }, outputs: []*TxOutput{ { - Address: receiver, + Address: &receiver, Amount: NewValue(txBuilder.MinCoinsForTxOut(emptyTxOut)), }, }, @@ -560,7 +560,7 @@ func TestAddChangeIfNeeded(t *testing.T) { txBuilder.AddOutputs(tc.fields.outputs...) txBuilder.SetTTL(tc.fields.ttl) txBuilder.Sign(key.PrvKey()) - txBuilder.AddChangeIfNeeded(changeAddr) + txBuilder.AddChangeIfNeeded(&changeAddr) tx, err := txBuilder.Build() if err != nil { if tc.wantErr { diff --git a/tx_test.go b/tx_test.go index d62e42c..7b072d3 100644 --- a/tx_test.go +++ b/tx_test.go @@ -48,7 +48,7 @@ func TestTxEncoding(t *testing.T) { NewTxInput(txHash, 0, NewValue(inputAmount)), ) txBuilder.AddOutputs( - NewTxOutput(addr, NewValueWithAssets(transferAmount, newAsset.MultiAsset())), + NewTxOutput(&addr, NewValueWithAssets(transferAmount, newAsset.MultiAsset())), ) txBuilder.Mint(newAsset) @@ -56,7 +56,7 @@ func TestTxEncoding(t *testing.T) { txBuilder.SetTTL(100000) txBuilder.Sign(paymentKey.PrvKey()) txBuilder.Sign(policyKey.PrvKey()) - txBuilder.AddChangeIfNeeded(addr) + txBuilder.AddChangeIfNeeded(&addr) txBuilder.AddAuxiliaryData(&AuxiliaryData{ Metadata: Metadata{ 0: map[interface{}]interface{}{ @@ -71,7 +71,6 @@ func TestTxEncoding(t *testing.T) { if err != nil { t.Fatal(err) } - txBytes, err := wantTx.MarshalCBOR() if err != nil { t.Fatal(err) diff --git a/wallet/wallet.go b/wallet/wallet.go index 1116edd..2c93a0a 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -127,7 +127,7 @@ func (w *Wallet) findUtxos() ([]cardano.UTxO, error) { } walletUtxos := []cardano.UTxO{} for _, addr := range addrs { - addrUtxos, err := w.node.UTxOs(addr) + addrUtxos, err := w.node.UTxOs(&addr) if err != nil { return nil, err } @@ -137,20 +137,20 @@ func (w *Wallet) findUtxos() ([]cardano.UTxO, error) { } // AddAddress generates a new payment address and adds it to the wallet. -func (w *Wallet) AddAddress() (cardano.Address, error) { +func (w *Wallet) AddAddress() (cardano.ShelleyAddress, error) { index := uint32(len(w.addrKeys)) newKey := w.rootKey.Derive(index) w.addrKeys = append(w.addrKeys, newKey) payment, err := cardano.NewKeyCredential(newKey.PubKey()) if err != nil { - return cardano.Address{}, err + return cardano.ShelleyAddress{}, err } return cardano.NewEnterpriseAddress(w.network, payment) } // BaseAddresses returns all base addresses. -func (w *Wallet) BaseAddresses() ([]cardano.Address, error) { - addresses := make([]cardano.Address, len(w.addrKeys)) +func (w *Wallet) BaseAddresses() ([]cardano.ShelleyAddress, error) { + addresses := make([]cardano.ShelleyAddress, len(w.addrKeys)) for i, key := range w.addrKeys { payment, err := cardano.NewKeyCredential(key.PubKey()) if err != nil { @@ -170,8 +170,8 @@ func (w *Wallet) BaseAddresses() ([]cardano.Address, error) { } // EnterpriseAddresses returns all enterprise addresses. -func (w *Wallet) EnterpriseAddresses() ([]cardano.Address, error) { - addresses := make([]cardano.Address, len(w.addrKeys)) +func (w *Wallet) EnterpriseAddresses() ([]cardano.ShelleyAddress, error) { + addresses := make([]cardano.ShelleyAddress, len(w.addrKeys)) for i, key := range w.addrKeys { payment, err := cardano.NewKeyCredential(key.PubKey()) if err != nil { @@ -188,15 +188,15 @@ func (w *Wallet) EnterpriseAddresses() ([]cardano.Address, error) { // Deprecated: replaced with EnterpriseAddresses() due to vague naming // Addresses returns all wallet's addresss. -func (w *Wallet) Addresses() ([]cardano.Address, error) { +func (w *Wallet) Addresses() ([]cardano.ShelleyAddress, error) { return w.EnterpriseAddresses() } // StakeAddress returns wallet's stake address -func (w *Wallet) StakeAddress() (cardano.Address, error) { +func (w *Wallet) StakeAddress() (cardano.ShelleyAddress, error) { stake, err := cardano.NewKeyCredential(w.stakeKey.PubKey()) if err != nil { - return cardano.Address{}, err + return cardano.ShelleyAddress{}, err } return cardano.NewStakeAddress(w.network, stake) }