如何使用 ipfs-http-client API 通过 Infura 的网关为 IPFS 固定哈希

How to pin a hash for IPFS through Infura's gateway using ipfs-http-client API

documentation 显示请求采用以下格式:

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

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

source code 中的 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 节点上。似乎有两种方法可以让您将哈希添加到节点(one without pinning, and the other with pinning),这两种方法都可以通过以下方式调用:

const result = await ipfs.add(data)

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

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

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/

如果您试图找到将内容发送到服务器的位置,它发生在 add 调用 https://github.com/ipfs/js-ipfs/blob/c47a6335b77d5284711f13a83349000820f85775/packages/ipfs-http-client/src/pin/add-all.js#L10-L33

addAll 函数中

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

Infura 确实通过授权令牌工作。您可以在此博客中阅读更多相关信息 post:https://blog.infura.io/part-2-getting-started-with-ipfs-on-infura/

希望这能消除任何混淆,并提供更多关于 Infura 如何与 IPFS 一起工作的信息。

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

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 节点的 repo 和 returns 该内容的 CID 并且可以在添加期间固定。

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

有关详细信息,请参阅 ipfs.add and ipfs.pin.add 的文档。