1

文档显示请求采用以下格式:

curl -X POST "https://ipfs.infura.io:5001/api/v0/pin/add?arg=&progress="

我目前正在使用 JavaScript 的 API ipfs-http-client进行 Http 调用。

源代码中的add函数似乎没有提供一种指示固定的方法:

module.exports = (options) => {
  const all = addAll(options)

  return configure(() => {
    return async function add (path, options = {}) { // eslint-disable-line require-await
      return last(all({
        path,
        ...options
      }, options))
    }
  })(options)
}

更新

我应该更清楚我的问题。我主要希望能够将我的哈希“固定”在 IPFS 节点上。似乎有两种方法可以让您将哈希添加到节点(一种没有固定,另一种有固定),这两种方法都可以通过以下方式调用:

const result = await ipfs.add(data)

我想知道我应该如何选择添加哈希并将其固定。

4

3 回答 3

2

您可以在一个操作中添加和固定:

await ipfs.add(buf, {
  pin: true  // <-- this is the default
})

或者两个:

const { cid } = ipfs.add(buf, {
  pin: false
})

await ipfs.pin.add(cid)

简而言之ipfs.add,将内容添加到 IPFS 节点的存储库并返回该内容的CID,并且可以在添加期间固定。

ipfs.pin.add只需固定一个 CID,如果您没有内容,这很有用,但可能想帮助在网络上复制它。它将首先检查 repo 以查看内容是否存在 - 如果不存在,它将在网络上找到它并将其添加到 repo 然后防止它被垃圾收集(手动操作,在此期间所有未固定的内容都会从您的回购)。

有关更多信息,请参阅ipfs.addipfs.pin.add的文档。

于 2021-03-17T09:17:58.483 回答
0

我从未使用过 infura,也不太了解他们的身份验证应该如何工作(链接页面没有提供太多细节)。但假设它通过身份验证令牌工作,它会是这样的:

const IPFSClient = require('ipfs-http-client')
const { CID } = IPFSClient
const ipfs = IPFSClient({
  url: new URL('https://ipfs.infura.io:5001'),
  headers: {
    authorization: `Bearer ${TOKEN}`
  }
})

const cid = await ipfs.pin.add(new CID('QmWATWQ7fVPP2EFGu71UkfnqhYXDYH566qy47CnJDgvs8u'))
console.log(cid)

IPFS 客户端实现与 JS-IPFS 节点本身相同的 API,您可以在此处找到有关方法的详细信息https://github.com/ipfs/js-ipfs/blob/master/docs/core-api/

如果您试图找到将东西发送到服务器的位置,则它发生在调用https://github.com/ipfs/js-ipfs/blob/c47a6335b77d5284711f13a83349000820f85775/packages/ipfs-http-client/src/addAll的函数中销/add-all.js#L10-L33add

addAll固定多个 CID 并重新调整AsyncIterable<CID>,然后last(all(...))选择最后一个CID(将只有一个 CID,因为只有一个 CID add)。

于 2021-03-16T22:02:09.497 回答
0

Infura 确实通过身份验证令牌工作。您可以在这篇博文中了解更多信息:https ://blog.infura.io/part-2-getting-started-with-ipfs-on-infura/

希望这可以消除任何混淆,并提供有关 Infura 如何与 IPFS 一起使用的更多信息。

于 2021-03-16T22:06:20.357 回答