func publish(ctx context.Context, n *core.IpfsNode, k crypto.PrivKey, ref path.Path, opts *publishOpts) (*IpnsEntry, error) { if opts.verifyExists { // verify the path exists _, err := core.Resolve(ctx, n.Namesys, n.Resolver, ref) if err != nil { return nil, err } } eol := time.Now().Add(opts.pubValidTime) err := n.Namesys.PublishWithEOL(ctx, k, ref, eol) if err != nil { return nil, err } hash, err := k.GetPublic().Hash() if err != nil { return nil, err } return &IpnsEntry{ Name: key.Key(hash).String(), Value: ref.String(), }, nil }
func PutRecordToRouting(ctx context.Context, k ci.PrivKey, value path.Path, seqnum uint64, eol time.Time, r routing.ValueStore, id peer.ID) error { ctx, cancel := context.WithCancel(ctx) defer cancel() namekey, ipnskey := IpnsKeysForID(id) entry, err := CreateRoutingEntryData(k, value, seqnum, eol) if err != nil { return err } ttl, ok := checkCtxTTL(ctx) if ok { entry.Ttl = proto.Uint64(uint64(ttl.Nanoseconds())) } errs := make(chan error, 2) go func() { errs <- PublishEntry(ctx, r, ipnskey, entry) }() go func() { errs <- PublishPublicKey(ctx, r, namekey, k.GetPublic()) }() err = waitOnErrChan(ctx, errs) if err != nil { return err } err = waitOnErrChan(ctx, errs) if err != nil { return err } return nil }
func spawnDHT(pk ci.PrivKey, dstore repo.Datastore, bootstraps []ma.Multiaddr) (*dht.IpfsDHT, error) { pub := pk.GetPublic() local, err := peer.IDFromPublicKey(pub) if err != nil { return nil, err } fmt.Println("Local peer ID: ", local.Pretty()) ps := pstore.NewPeerstore() ps.AddPrivKey(local, pk) ps.AddPubKey(local, pub) listenaddr, err := ma.NewMultiaddr("/ip4/0.0.0.0/tcp/0") if err != nil { return nil, err } s, err := swarm.NewNetwork(context.Background(), []ma.Multiaddr{listenaddr}, local, ps, metrics.NewBandwidthCounter()) if err != nil { fatal(err) } host := basichost.New(s) idht := dht.NewDHT(context.Background(), host, dstore) idht.Validator[IpnsValidatorTag] = namesys.IpnsRecordValidator idht.Selector[IpnsValidatorTag] = namesys.IpnsSelectorFunc err = doBootstrap(host, idht, bootstraps) if err != nil { return nil, err } return idht, nil }