-
Notifications
You must be signed in to change notification settings - Fork 1
/
decoder.go
37 lines (30 loc) · 1.07 KB
/
decoder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package addrconv
import (
"errors"
"github.com/RaghavSood/addrconv/address"
"github.com/RaghavSood/addrconv/base58"
"github.com/RaghavSood/addrconv/cashaddr"
"strings"
)
func (network Network) Decode(encodedAddress string) (address.Address, error) {
return network.decodeByGuessingEncoding(encodedAddress)
}
func (network Network) decodeByGuessingEncoding(encodedAddress string) (decodedAddress address.Address, err error) {
// Let's try base58 first, since it's the most common, and more
// or less all networks support it
decodedAddress, err = base58.CheckDecode(encodedAddress)
if err == nil { // Decoding was successful, we're done
return decodedAddress, nil
}
if network.SupportsCashAddr() {
encodedCashAddress := encodedAddress
if !strings.HasPrefix(encodedAddress, network.CashAddrPrefix+":") {
encodedCashAddress = network.CashAddrPrefix + ":" + encodedAddress
}
decodedAddress, err = cashaddr.CheckDecodeCashAddress(encodedCashAddress)
if err == nil {
return decodedAddress, nil
}
}
return decodedAddress, errors.New("Unknown address type")
}