func register(node *ipfsutil.Node, id ID) error { hash := id.Hash() peers, err := ipfsutil.Locate(node, hash, 1, 5*time.Second) if err != nil && err != util.ErrTimeout { return err } // Check if some id is our own: if len(peers) > 0 { self, err := node.Identity() if err != nil { return err } wasSelf := false for _, peer := range peers { if peer.ID == self { wasSelf = true } } if wasSelf { return ErrAlreadyRegistered } } // If it was an timeout, it's probably not yet registered. otherHash, err := ipfsutil.AddBlock(node, id.asBlockData()) if !bytes.Equal(otherHash, hash) { log.Warningf("Hash differ during register; did the hash func changed?") } if err != nil { return err } return nil }