2024-01-03 13:36:23 +00:00
|
|
|
package encoding
|
2024-01-03 13:21:48 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"errors"
|
|
|
|
"git.lumeweb.com/LumeWeb/libs5-go/internal/bases"
|
2024-01-03 13:27:04 +00:00
|
|
|
"git.lumeweb.com/LumeWeb/libs5-go/utils"
|
2024-01-03 13:21:48 +00:00
|
|
|
"github.com/multiformats/go-multibase"
|
|
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
|
|
errorNotBase58BTC = errors.New("not a base58btc string")
|
|
|
|
)
|
|
|
|
|
2024-01-03 20:28:40 +00:00
|
|
|
type NodeIdCode = int
|
|
|
|
|
2024-01-03 13:21:48 +00:00
|
|
|
type NodeId struct {
|
|
|
|
Bytes []byte
|
|
|
|
}
|
|
|
|
|
2024-01-03 13:36:23 +00:00
|
|
|
func NewNodeId(bytes []byte) *NodeId {
|
2024-01-03 13:21:48 +00:00
|
|
|
return &NodeId{Bytes: bytes}
|
|
|
|
}
|
|
|
|
|
2024-01-05 15:50:22 +00:00
|
|
|
func DecodeNodeId(nodeId string) (*NodeId, error) {
|
2024-01-03 13:21:48 +00:00
|
|
|
encoding, ret, err := multibase.Decode(nodeId)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if encoding != multibase.Base58BTC {
|
|
|
|
return nil, errorNotBase58BTC
|
|
|
|
}
|
|
|
|
|
2024-01-03 13:36:23 +00:00
|
|
|
return NewNodeId(ret), nil
|
2024-01-03 13:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (nodeId *NodeId) Equals(other interface{}) bool {
|
|
|
|
if otherNodeId, ok := other.(*NodeId); ok {
|
|
|
|
return bytes.Equal(nodeId.Bytes, otherNodeId.Bytes)
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
|
|
|
func (nodeId *NodeId) HashCode() int {
|
2024-01-03 13:27:04 +00:00
|
|
|
return utils.HashCode(nodeId.Bytes[:4])
|
2024-01-03 13:21:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (nodeId *NodeId) ToBase58() (string, error) {
|
|
|
|
return bases.ToBase58BTC(nodeId.Bytes)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (nodeId *NodeId) ToString() (string, error) {
|
|
|
|
return nodeId.ToBase58()
|
|
|
|
}
|