It outputs to stdout, and <key> is a base58 encoded multihash. `, }, Arguments: []cmds.Argument{ cmds.StringArg("key", true, false, "The base58 multihash of an existing block to get"), }, Run: func(req cmds.Request) (interface{}, error) { n, err := req.Context().GetNode() if err != nil { return nil, err } key := req.Arguments()[0] if !u.IsValidHash(key) { return nil, cmds.Error{"Not a valid hash", cmds.ErrClient} } h, err := mh.FromB58String(key) if err != nil { return nil, err } k := u.Key(h) ctx, _ := context.WithTimeout(context.TODO(), time.Second*5) b, err := n.Blocks.GetBlock(ctx, k) if err != nil { return nil, err } log.Debugf("BlockGet key: '%q'", b.Key())
func CreateRoot(n *core.IpfsNode, keys []ci.PrivKey, ipfsroot string) (*Root, error) { root := new(Root) root.LocalDirs = make(map[string]*Node) root.Ipfs = n abspath, err := filepath.Abs(ipfsroot) if err != nil { return nil, err } root.IpfsRoot = abspath root.Keys = keys if len(keys) == 0 { log.Warning("No keys given for ipns root creation") } else { k := keys[0] pub := k.GetPublic() hash, err := pub.Hash() if err != nil { log.Errorf("Read Root Error: %s", err) return nil, err } root.LocalLink = &Link{u.Key(hash).Pretty()} } for _, k := range keys { hash, err := k.GetPublic().Hash() if err != nil { log.Error("failed to hash public key.") continue } name := u.Key(hash).Pretty() nd := new(Node) nd.Ipfs = n nd.key = k nd.repub = NewRepublisher(nd, shortRepublishTimeout, longRepublishTimeout) go nd.repub.Run() pointsTo, err := n.Namesys.Resolve(name) if err != nil { log.Warning("Could not resolve value for local ipns entry, providing empty dir") nd.Nd = &mdag.Node{Data: ft.FolderPBData()} root.LocalDirs[name] = nd continue } if !u.IsValidHash(pointsTo) { log.Criticalf("Got back bad data from namesys resolve! [%s]", pointsTo) return nil, nil } node, err := n.Resolver.ResolvePath(pointsTo) if err != nil { log.Warning("Failed to resolve value from ipns entry in ipfs") continue } nd.Nd = node root.LocalDirs[name] = nd } return root, nil }