/
base_address.go
47 lines (39 loc) · 1010 Bytes
/
base_address.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
38
39
40
41
42
43
44
45
46
47
package libada
import (
"github.com/Bitrue-exchange/libada-go/internal/bech32"
"github.com/fxamacker/cbor/v2"
)
type BaseAddress struct {
Network Network
Payment StakeCredential
Stake StakeCredential
}
func (b *BaseAddress) Bytes() []byte {
buf := make([]byte, 57)
buf[0] = (byte(b.Payment.Kind) << 4) | (byte(b.Stake.Kind) << 5) | (byte(b.Network) & 0xf)
copy(buf[1:29], b.Payment.Data)
copy(buf[29:], b.Stake.Data)
return buf
}
func (b *BaseAddress) String() string {
res, _ := bech32.Encode(b.Prefix(), b.Bytes())
return res
}
func (b *BaseAddress) Kind() AddressKind {
return BaseAddressKind
}
func (b *BaseAddress) MarshalCBOR() ([]byte, error) {
if len(b.Payment.Data) != Hash28Size || len(b.Stake.Data) != Hash28Size {
return nil, ErrInvalidCredSize
}
return cbor.Marshal(b.Bytes())
}
func (b *BaseAddress) GetNetwork() Network {
return b.Network
}
func (b *BaseAddress) Prefix() string {
if b.Network == Testnet {
return B32Prefix + TestnetSuffix
}
return B32Prefix
}