package moneroutil
import (
"bytes"
)
type Address struct {
network int
spendingKey []byte
viewingKey []byte
}
func (a *Address) Base58() (result string) {
prefix := []byte{byte(a.network)}
checksum := GetChecksum(prefix, a.spendingKey, a.viewingKey)
result = string(EncodeMoneroBase58(prefix, a.spendingKey, a.viewingKey, checksum[:]))
return
func NewAddress(address string) (result *Address, err string) {
raw := DecodeMoneroBase58([]byte(address))
if len(raw) != 69 {
err = "Address is the wrong length"
checksum := GetChecksum(raw[:65])
if bytes.Compare(checksum[:], raw[65:]) != 0 {
err = "Checksum does not validate"
result = &Address{
network: int(raw[0]),
spendingKey: raw[1:33],
viewingKey: raw[33:65],