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
Package namesys defines Resolver and Publisher interfaces for IPNS paths, that is, IPFS paths in the form of /ipns/<name_to_be_resolved>. A "resolved" IPNS path becomes an /ipfs/<cid> path.
Traditionally, these paths would be in the form of /ipns/peer_id, which references an IPNS record in a distributed ValueStore (usually the IPFS DHT).
Additionally, the /ipns/ namespace can also be used with domain names that use DNSLink (/ipns/<dnslink_name>, https://docs.ipfs.io/concepts/dnslink/)
The package provides implementations for all three resolvers.
Index ¶
- Constants
- Variables
- func ContextWithTTL(ctx context.Context, ttl time.Duration) context.Context
- func IpnsDsKey(id peer.ID) ds.Key
- func PkKeyForID(id peer.ID) string
- 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, r routing.ValueStore, k ci.PubKey, entry *pb.IpnsEntry) error
- type DNSResolver
- type IpnsPublisher
- func (p *IpnsPublisher) GetPublished(ctx context.Context, id peer.ID, checkRouting bool) (*pb.IpnsEntry, error)
- func (p *IpnsPublisher) ListPublished(ctx context.Context) (map[peer.ID]*pb.IpnsEntry, error)
- func (p *IpnsPublisher) Publish(ctx context.Context, k ci.PrivKey, value path.Path) error
- func (p *IpnsPublisher) PublishWithEOL(ctx context.Context, k ci.PrivKey, value path.Path, eol time.Time) error
- type IpnsResolver
- type LookupTXTFunc
- type NameSystem
- type Option
- type Publisher
- type Resolver
- type Result
Constants ¶
const DefaultRecordEOL = 24 * time.Hour
DefaultRecordEOL specifies the time that the network will cache IPNS records after being publihsed. Records should be re-published before this interval expires.
const DefaultResolverCacheTTL = time.Minute
DefaultResolverCacheTTL defines max ttl of a record placed in namesys cache.
Variables ¶
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.
Functions ¶
func ContextWithTTL ¶
ContextWithTTL returns a copy of the parent context with an added value representing the TTL
func IpnsDsKey ¶
IpnsDsKey returns a datastore key given an IPNS identifier (peer ID). Defines the storage key for IPNS records in the local datastore.
func PkKeyForID ¶
PkKeyForID returns the public key routing key for the given peer ID.
func PublishEntry ¶
func PublishEntry(ctx context.Context, r routing.ValueStore, ipnskey string, rec *pb.IpnsEntry) error
PublishEntry stores the given IpnsEntry in the ValueStore with the given ipnskey.
func PublishPublicKey ¶
PublishPublicKey stores the given public key in the ValueStore with the given key.
func PutRecordToRouting ¶
func PutRecordToRouting(ctx context.Context, r routing.ValueStore, k ci.PubKey, entry *pb.IpnsEntry) error
PutRecordToRouting publishes the given entry using the provided ValueStore, keyed on the ID associated with the provided public key. The public key is also made available to the routing system so that entries can be verified.
Types ¶
type DNSResolver ¶
type DNSResolver struct {
// contains filtered or unexported fields
}
DNSResolver implements a Resolver on DNS domains
func NewDNSResolver ¶
func NewDNSResolver(lookup LookupTXTFunc) *DNSResolver
NewDNSResolver constructs a name resolver using DNS TXT records.
func (*DNSResolver) Resolve ¶
func (r *DNSResolver) Resolve(ctx context.Context, name string, options ...opts.ResolveOpt) (path.Path, error)
Resolve implements Resolver.
func (*DNSResolver) ResolveAsync ¶
func (r *DNSResolver) ResolveAsync(ctx context.Context, name string, options ...opts.ResolveOpt) <-chan Result
ResolveAsync implements Resolver.
type IpnsPublisher ¶
type IpnsPublisher struct {
// contains filtered or unexported fields
}
IpnsPublisher is capable of publishing and resolving names to the IPFS routing system.
func NewIpnsPublisher ¶
func NewIpnsPublisher(route routing.ValueStore, ds ds.Datastore) *IpnsPublisher
NewIpnsPublisher constructs a publisher for the IPFS Routing name system.
func (*IpnsPublisher) GetPublished ¶
func (p *IpnsPublisher) GetPublished(ctx context.Context, id peer.ID, checkRouting bool) (*pb.IpnsEntry, error)
GetPublished returns the record this node has published corresponding to the given peer ID.
If `checkRouting` is true and we have no existing record, this method will check the routing system for any existing records.
func (*IpnsPublisher) ListPublished ¶
ListPublished returns the latest IPNS records published by this node and their expiration times.
This method will not search the routing system for records published by other nodes.
func (*IpnsPublisher) Publish ¶
Publish implements Publisher. Accepts a keypair and a value, and publishes it out to the routing system
func (*IpnsPublisher) PublishWithEOL ¶
func (p *IpnsPublisher) PublishWithEOL(ctx context.Context, k ci.PrivKey, value path.Path, eol time.Time) error
PublishWithEOL is a temporary stand in for the ipns records implementation see here for more details: https://github.com/ipfs/specs/tree/master/records
type IpnsResolver ¶
type IpnsResolver struct {
// contains filtered or unexported fields
}
IpnsResolver implements NSResolver for the main IPFS SFS-like naming
func NewIpnsResolver ¶
func NewIpnsResolver(route routing.ValueStore) *IpnsResolver
NewIpnsResolver constructs a name resolver using the IPFS Routing system to implement SFS-like naming on top.
func (*IpnsResolver) Resolve ¶
func (r *IpnsResolver) Resolve(ctx context.Context, name string, options ...opts.ResolveOpt) (path.Path, error)
Resolve implements Resolver.
func (*IpnsResolver) ResolveAsync ¶
func (r *IpnsResolver) ResolveAsync(ctx context.Context, name string, options ...opts.ResolveOpt) <-chan Result
ResolveAsync implements Resolver.
type LookupTXTFunc ¶
LookupTXTFunc is a function that lookups TXT record values.
type NameSystem ¶
NameSystem 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, opts ...Option) (NameSystem, error)
NewNameSystem will construct the IPFS naming system based on Routing
type Option ¶
type Option func(*mpns) error
func WithCache ¶
WithCache is an option that instructs the name system to use a (LRU) cache of the given size.
func WithDNSResolver ¶
func WithDNSResolver(rslv madns.BasicResolver) Option
WithDNSResolver is an option that supplies a custom DNS resolver to use instead of the system default.
func WithDatastore ¶
WithDatastore is an option that supplies a datastore to use instead of an in-memory map datastore. The datastore is used to store published IPNS records and make them available for querying.
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 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 specify it as an option. Resolve(ctx context.Context, name string, options ...opts.ResolveOpt) (value path.Path, err error) // ResolveAsync performs recursive name lookup, like Resolve, but it returns // entries as they are discovered in the DHT. Each returned result is guaranteed // to be "better" (which usually means newer) than the previous one. ResolveAsync(ctx context.Context, name string, options ...opts.ResolveOpt) <-chan Result }
Resolver is an object capable of resolving names.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package republisher provides a utility to automatically re-publish IPNS records related to the keys in a Keystore.
|
Package republisher provides a utility to automatically re-publish IPNS records related to the keys in a Keystore. |