mirror of
https://github.com/libp2p/go-libp2p-peerstore.git
synced 2025-03-27 13:30:11 +08:00
ds key encoding: b58 => b32 (no padding).
This commit is contained in:
parent
61b5355499
commit
4e2e2de65f
@ -76,6 +76,12 @@
|
||||
"hash": "QmUQy76yspPa3fRyY3GzXFTg9n8JVwFru6ue3KFRt4MeTw",
|
||||
"name": "go-buffer-pool",
|
||||
"version": "0.1.1"
|
||||
},
|
||||
{
|
||||
"author": "whyrusleeping",
|
||||
"hash": "QmfVj3x4D6Jkq9SEoi5n2NmoUomLwoeiwnYz2KQa15wRw6",
|
||||
"name": "base32",
|
||||
"version": "0.0.2"
|
||||
}
|
||||
],
|
||||
"gxVersion": "0.4.0",
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"time"
|
||||
|
||||
lru "github.com/hashicorp/golang-lru"
|
||||
base32 "github.com/whyrusleeping/base32"
|
||||
|
||||
ds "github.com/ipfs/go-datastore"
|
||||
query "github.com/ipfs/go-datastore/query"
|
||||
@ -31,7 +32,7 @@ var (
|
||||
)
|
||||
|
||||
// Peer addresses are stored under the following db key pattern:
|
||||
// /peers/addr/<b58 of peer id>/<hash of maddr>
|
||||
// /peers/addr/<b32 peer id no padding>/<hash of maddr>
|
||||
var abBase = ds.NewKey("/peers/addrs")
|
||||
|
||||
var _ pstore.AddrBook = (*dsAddrBook)(nil)
|
||||
@ -107,7 +108,7 @@ func keysAndAddrs(p peer.ID, addrs []ma.Multiaddr) ([]ds.Key, []ma.Multiaddr, er
|
||||
var (
|
||||
keys = make([]ds.Key, len(addrs))
|
||||
clean = make([]ma.Multiaddr, len(addrs))
|
||||
parentKey = abBase.ChildString(peer.IDB58Encode(p))
|
||||
parentKey = abBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p)))
|
||||
i = 0
|
||||
)
|
||||
|
||||
@ -120,7 +121,7 @@ func keysAndAddrs(p peer.ID, addrs []ma.Multiaddr) ([]ds.Key, []ma.Multiaddr, er
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
keys[i] = parentKey.ChildString(hash.B58String())
|
||||
keys[i] = parentKey.ChildString(base32.RawStdEncoding.EncodeToString(hash))
|
||||
clean[i] = addr
|
||||
i++
|
||||
}
|
||||
@ -293,7 +294,7 @@ func (mgr *dsAddrBook) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL time.
|
||||
|
||||
func (mgr *dsAddrBook) dbUpdateTTL(p peer.ID, oldTTL time.Duration, newTTL time.Duration) error {
|
||||
var (
|
||||
prefix = abBase.ChildString(peer.IDB58Encode(p))
|
||||
prefix = abBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p)))
|
||||
q = query.Query{Prefix: prefix.String(), KeysOnly: false}
|
||||
results query.Results
|
||||
err error
|
||||
@ -336,7 +337,7 @@ func (mgr *dsAddrBook) dbUpdateTTL(p peer.ID, oldTTL time.Duration, newTTL time.
|
||||
// Addrs returns all of the non-expired addresses for a given peer.
|
||||
func (mgr *dsAddrBook) Addrs(p peer.ID) []ma.Multiaddr {
|
||||
var (
|
||||
prefix = abBase.ChildString(peer.IDB58Encode(p))
|
||||
prefix = abBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p)))
|
||||
q = query.Query{Prefix: prefix.String(), KeysOnly: false, ReturnExpirations: true}
|
||||
results query.Results
|
||||
err error
|
||||
@ -411,7 +412,7 @@ func (mgr *dsAddrBook) AddrStream(ctx context.Context, p peer.ID) <-chan ma.Mult
|
||||
func (mgr *dsAddrBook) ClearAddrs(p peer.ID) {
|
||||
var (
|
||||
err error
|
||||
prefix = abBase.ChildString(peer.IDB58Encode(p))
|
||||
prefix = abBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p)))
|
||||
deleteFn func() error
|
||||
)
|
||||
|
||||
|
@ -4,6 +4,8 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
|
||||
base32 "github.com/whyrusleeping/base32"
|
||||
|
||||
ds "github.com/ipfs/go-datastore"
|
||||
query "github.com/ipfs/go-datastore/query"
|
||||
|
||||
@ -13,7 +15,7 @@ import (
|
||||
)
|
||||
|
||||
// Public and private keys are stored under the following db key pattern:
|
||||
// /peers/keys/<b58 of peer id>/{pub, priv}
|
||||
// /peers/keys/<b32 peer id no padding>/{pub, priv}
|
||||
var (
|
||||
kbBase = ds.NewKey("/peers/keys")
|
||||
pubSuffix = ds.NewKey("/pub")
|
||||
@ -31,7 +33,7 @@ func NewKeyBook(_ context.Context, store ds.TxnDatastore, _ Options) (pstore.Key
|
||||
}
|
||||
|
||||
func (kb *dsKeyBook) PubKey(p peer.ID) ic.PubKey {
|
||||
key := kbBase.ChildString(peer.IDB58Encode(p)).Child(pubSuffix)
|
||||
key := kbBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p))).Child(pubSuffix)
|
||||
|
||||
var pk ic.PubKey
|
||||
if value, err := kb.ds.Get(key); err == nil {
|
||||
@ -68,7 +70,7 @@ func (kb *dsKeyBook) AddPubKey(p peer.ID, pk ic.PubKey) error {
|
||||
return errors.New("peer ID does not match public key")
|
||||
}
|
||||
|
||||
key := kbBase.ChildString(peer.IDB58Encode(p)).Child(pubSuffix)
|
||||
key := kbBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p))).Child(pubSuffix)
|
||||
val, err := pk.Bytes()
|
||||
if err != nil {
|
||||
log.Errorf("error while converting pubkey byte string for peer %s: %s\n", p.Pretty(), err)
|
||||
@ -82,7 +84,7 @@ func (kb *dsKeyBook) AddPubKey(p peer.ID, pk ic.PubKey) error {
|
||||
}
|
||||
|
||||
func (kb *dsKeyBook) PrivKey(p peer.ID) ic.PrivKey {
|
||||
key := kbBase.ChildString(peer.IDB58Encode(p)).Child(privSuffix)
|
||||
key := kbBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p))).Child(privSuffix)
|
||||
value, err := kb.ds.Get(key)
|
||||
if err != nil {
|
||||
log.Errorf("error while fetching privkey from datastore for peer %s: %s\n", p.Pretty(), err)
|
||||
@ -104,7 +106,7 @@ func (kb *dsKeyBook) AddPrivKey(p peer.ID, sk ic.PrivKey) error {
|
||||
return errors.New("peer ID does not match private key")
|
||||
}
|
||||
|
||||
key := kbBase.ChildString(peer.IDB58Encode(p)).Child(privSuffix)
|
||||
key := kbBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p))).Child(privSuffix)
|
||||
val, err := sk.Bytes()
|
||||
if err != nil {
|
||||
log.Errorf("error while converting privkey byte string for peer %s: %s\n", p.Pretty(), err)
|
||||
|
@ -5,6 +5,8 @@ import (
|
||||
"context"
|
||||
"encoding/gob"
|
||||
|
||||
base32 "github.com/whyrusleeping/base32"
|
||||
|
||||
ds "github.com/ipfs/go-datastore"
|
||||
|
||||
pool "github.com/libp2p/go-buffer-pool"
|
||||
@ -13,7 +15,7 @@ import (
|
||||
)
|
||||
|
||||
// Metadata is stored under the following db key pattern:
|
||||
// /peers/metadata/<b58 peer id>/<key>
|
||||
// /peers/metadata/<b32 peer id no padding>/<key>
|
||||
var pmBase = ds.NewKey("/peers/metadata")
|
||||
|
||||
type dsPeerMetadata struct {
|
||||
@ -39,7 +41,7 @@ func NewPeerMetadata(_ context.Context, store ds.Datastore, _ Options) (pstore.P
|
||||
}
|
||||
|
||||
func (pm *dsPeerMetadata) Get(p peer.ID, key string) (interface{}, error) {
|
||||
k := pmBase.ChildString(peer.IDB58Encode(p)).ChildString(key)
|
||||
k := pmBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p))).ChildString(key)
|
||||
value, err := pm.ds.Get(k)
|
||||
if err != nil {
|
||||
if err == ds.ErrNotFound {
|
||||
@ -56,7 +58,7 @@ func (pm *dsPeerMetadata) Get(p peer.ID, key string) (interface{}, error) {
|
||||
}
|
||||
|
||||
func (pm *dsPeerMetadata) Put(p peer.ID, key string, val interface{}) error {
|
||||
k := pmBase.ChildString(peer.IDB58Encode(p)).ChildString(key)
|
||||
k := pmBase.ChildString(base32.RawStdEncoding.EncodeToString([]byte(p))).ChildString(key)
|
||||
var buf pool.Buffer
|
||||
if err := gob.NewEncoder(&buf).Encode(&val); err != nil {
|
||||
return err
|
||||
|
@ -4,6 +4,8 @@ import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
base32 "github.com/whyrusleeping/base32"
|
||||
|
||||
ds "github.com/ipfs/go-datastore"
|
||||
query "github.com/ipfs/go-datastore/query"
|
||||
|
||||
@ -91,8 +93,8 @@ func uniquePeerIds(ds ds.TxnDatastore, prefix ds.Key, extractor func(result quer
|
||||
ids := make(peer.IDSlice, len(idset))
|
||||
i := 0
|
||||
for id := range idset {
|
||||
pid, _ := peer.IDB58Decode(id)
|
||||
ids[i] = pid
|
||||
pid, _ := base32.RawStdEncoding.DecodeString(id)
|
||||
ids[i], _ = peer.IDFromBytes(pid)
|
||||
i++
|
||||
}
|
||||
return ids, nil
|
||||
|
Loading…
Reference in New Issue
Block a user