Documentation ¶
Overview ¶
Package namesys implements resolvers and publishers for the IPFS naming system (IPNS).
The core of IPFS is an immutable, content-addressable Merkle graph. That works well for many use cases, but doesn't allow you to answer questions like "what is Alice's current homepage?". The mutable name system allows Alice to publish information like:
The current homepage for alice.example.com is /ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj
or:
The current homepage for node QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy is /ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj
The mutable name system also allows users to resolve those references to find the immutable IPFS object currently referenced by a given mutable name.
For command-line bindings to this functionality, see:
ipfs name ipfs dns ipfs resolve
Index ¶
- Constants
- Variables
- func AddPubsubNameSystem(ctx context.Context, ns NameSystem, host p2phost.Host, r routing.IpfsRouting, ...) error
- func CreateRoutingEntryData(pk ci.PrivKey, val path.Path, seq uint64, eol time.Time) (*pb.IpnsEntry, error)
- func InitializeKeyspace(ctx context.Context, pub Publisher, pins pin.Pinner, key ci.PrivKey) error
- func IpnsKeysForID(id peer.ID) (name, ipns string)
- func IpnsSelectorFunc(k string, vals [][]byte) (int, error)
- func NewIpnsRecordValidator(kbook pstore.KeyBook) *record.ValidChecker
- func NewRoutingPublisher(route routing.ValueStore, ds ds.Datastore) *ipnsPublisher
- func NewRoutingResolver(route routing.ValueStore, cachesize int) *routingResolver
- func PublishEntry(ctx context.Context, r routing.ValueStore, ipnskey string, rec *pb.IpnsEntry) error
- func PublishPublicKey(ctx context.Context, r routing.ValueStore, k string, pubk ci.PubKey) error
- func PutRecordToRouting(ctx context.Context, k ci.PrivKey, value path.Path, seqnum uint64, ...) error
- type DNSResolver
- type LookupTXTFunc
- type NameSystem
- type ProquintResolver
- type Publisher
- type PubsubPublisher
- type PubsubResolver
- type Resolver
- type ResolverLookup
Constants ¶
const ( // DefaultDepthLimit is the default depth limit used by Resolve. DefaultDepthLimit = 32 // UnlimitedDepth allows infinite recursion in ResolveN. You // probably don't want to use this, but it's here if you absolutely // trust resolution to eventually complete and can't put an upper // limit on how many steps it will take. UnlimitedDepth = 0 )
const DefaultRecordTTL = 24 * time.Hour
const DefaultResolverCacheTTL = time.Minute
const PublishPutValTimeout = time.Minute
Variables ¶
var ErrBadRecord = errors.New("record could not be unmarshalled")
ErrBadRecord should be returned when an ipns record cannot be unmarshalled
var ErrExpiredRecord = errors.New("expired record")
ErrExpiredRecord should be returned when an ipns record is invalid due to being too old
var ErrInvalidPath = errors.New("record path invalid")
ErrInvalidPath should be returned when an ipns record path is not in a valid format
var ErrKeyFormat = errors.New("record key could not be parsed into peer ID")
ErrKeyFormat should be returned when an ipns record key is incorrectly formatted (not a peer ID)
var ErrPublicKeyNotFound = errors.New("public key not found in peer store")
ErrPublicKeyNotFound should be returned when the public key corresponding to the ipns record path cannot be retrieved from the peer store
var ErrPublishFailed = errors.New("Could not publish name.")
ErrPublishFailed signals an error when attempting to publish.
var ErrResolveFailed = errors.New("Could not resolve name.")
ErrResolveFailed signals an error when attempting to resolve.
var ErrResolveRecursion = errors.New(
"Could not resolve name (recursion limit exceeded).")
ErrResolveRecursion signals a recursion-depth limit.
var ErrSignature = errors.New("record signature verification failed")
ErrSignature should be returned when an ipns record fails signature verification
var ErrUnrecognizedValidity = errors.New("unrecognized validity type")
ErrUnrecognizedValidity is returned when an IpnsRecord has an unknown validity type.
Functions ¶
func AddPubsubNameSystem ¶ added in v0.4.14
func AddPubsubNameSystem(ctx context.Context, ns NameSystem, host p2phost.Host, r routing.IpfsRouting, ds ds.Datastore, ps *floodsub.PubSub) error
AddPubsubNameSystem adds the pubsub publisher and resolver to the namesystem
func CreateRoutingEntryData ¶ added in v0.3.8
func InitializeKeyspace ¶ added in v0.3.2
InitializeKeyspace sets the ipns record for the given key to point to an empty directory. TODO: this doesnt feel like it belongs here
func IpnsKeysForID ¶ added in v0.3.8
func IpnsSelectorFunc ¶ added in v0.3.8
IpnsSelectorFunc selects the best record by checking which has the highest sequence number and latest EOL
func NewIpnsRecordValidator ¶ added in v0.4.14
func NewIpnsRecordValidator(kbook pstore.KeyBook) *record.ValidChecker
NewIpnsRecordValidator returns a ValidChecker for IPNS records. The validator function will get a public key from the KeyBook to verify the record's signature. Note that the public key must already have been fetched from the network and put into the KeyBook by the caller.
func NewRoutingPublisher ¶
func NewRoutingPublisher(route routing.ValueStore, ds ds.Datastore) *ipnsPublisher
NewRoutingPublisher constructs a publisher for the IPFS Routing name system.
func NewRoutingResolver ¶
func NewRoutingResolver(route routing.ValueStore, cachesize int) *routingResolver
NewRoutingResolver constructs a name resolver using the IPFS Routing system to implement SFS-like naming on top. cachesize is the limit of the number of entries in the lru cache. Setting it to '0' will disable caching.
func PublishEntry ¶ added in v0.3.8
func PublishPublicKey ¶ added in v0.3.8
Types ¶
type DNSResolver ¶
type DNSResolver struct {
// contains filtered or unexported fields
}
DNSResolver implements a Resolver on DNS domains
type LookupTXTFunc ¶ added in v0.3.5
type NameSystem ¶
type NameSystem interface { Resolver Publisher ResolverLookup }
Namesys represents a cohesive name publishing and resolving system.
Publishing a name is the process of establishing a mapping, a key-value pair, according to naming rules and databases.
Resolving a name is the process of looking up the value associated with the key (name).
func NewNameSystem ¶
func NewNameSystem(r routing.ValueStore, ds ds.Datastore, cachesize int) NameSystem
NewNameSystem will construct the IPFS naming system based on Routing
type ProquintResolver ¶
type ProquintResolver struct{}
type Publisher ¶
type Publisher interface { // Publish establishes a name-value mapping. // TODO make this not PrivKey specific. Publish(ctx context.Context, name ci.PrivKey, value path.Path) error // TODO: to be replaced by a more generic 'PublishWithValidity' type // call once the records spec is implemented PublishWithEOL(ctx context.Context, name ci.PrivKey, value path.Path, eol time.Time) error }
Publisher is an object capable of publishing particular names.
type PubsubPublisher ¶ added in v0.4.14
type PubsubPublisher struct {
// contains filtered or unexported fields
}
PubsubPublisher is a publisher that distributes IPNS records through pubsub
func NewPubsubPublisher ¶ added in v0.4.14
func NewPubsubPublisher(ctx context.Context, host p2phost.Host, ds ds.Datastore, cr routing.ContentRouting, ps *floodsub.PubSub) *PubsubPublisher
NewPubsubPublisher constructs a new Publisher that publishes IPNS records through pubsub. The constructor interface is complicated by the need to bootstrap the pubsub topic. This could be greatly simplified if the pubsub implementation handled bootstrap itself
type PubsubResolver ¶ added in v0.4.14
type PubsubResolver struct {
// contains filtered or unexported fields
}
PubsubResolver is a resolver that receives IPNS records through pubsub
func NewPubsubResolver ¶ added in v0.4.14
func NewPubsubResolver(ctx context.Context, host p2phost.Host, cr routing.ContentRouting, pkf routing.PubKeyFetcher, ps *floodsub.PubSub) *PubsubResolver
NewPubsubResolver constructs a new Resolver that resolves IPNS records through pubsub. same as above for pubsub bootstrap dependencies
func (*PubsubResolver) Cancel ¶ added in v0.4.14
func (r *PubsubResolver) Cancel(name string) bool
Cancel cancels a topic subscription; returns true if an active subscription was canceled
func (*PubsubResolver) GetSubscriptions ¶ added in v0.4.14
func (r *PubsubResolver) GetSubscriptions() []string
GetSubscriptions retrieves a list of active topic subscriptions
type Resolver ¶
type Resolver interface { // Resolve performs a recursive lookup, returning the dereferenced // path. For example, if ipfs.io has a DNS TXT record pointing to // /ipns/QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy // and there is a DHT IPNS entry for // QmatmE9msSfkKxoffpHwNLNKgwZG8eT9Bud6YoPab52vpy // -> /ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj // then // Resolve(ctx, "/ipns/ipfs.io") // will resolve both names, returning // /ipfs/Qmcqtw8FfrVSBaRmbWwHxt3AuySBhJLcvmFYi3Lbc4xnwj // // There is a default depth-limit to avoid infinite recursion. Most // users will be fine with this default limit, but if you need to // adjust the limit you can use ResolveN. Resolve(ctx context.Context, name string) (value path.Path, err error) // ResolveN performs a recursive lookup, returning the dereferenced // path. The only difference from Resolve is that the depth limit // is configurable. You can use DefaultDepthLimit, UnlimitedDepth, // or a depth limit of your own choosing. // // Most users should use Resolve, since the default limit works well // in most real-world situations. ResolveN(ctx context.Context, name string, depth int) (value path.Path, err error) }
Resolver is an object capable of resolving names.
func NewDNSResolver ¶ added in v0.3.5
func NewDNSResolver() Resolver
NewDNSResolver constructs a name resolver using DNS TXT records.
type ResolverLookup ¶ added in v0.4.14
type ResolverLookup interface { // GetResolver retrieves a resolver associated with a subsystem GetResolver(subs string) (Resolver, bool) }
ResolverLookup is an object capable of finding resolvers for a subsystem
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package namesys_pb is a generated protocol buffer package.
|
Package namesys_pb is a generated protocol buffer package. |