Как закрепить хэш для IPFS через шлюз Infura с помощью API ipfs-http-клиента

#javascript #ipfs #js-ipfs

Вопрос:

В документации показано, что запрос должен быть в следующем формате:

завиток -X ПОСТ «https://ipfs.infura.io:5001/api/v0/pin/add?arg=amp;progress=»

В настоящее время я использую API JavaScript ipfs-http-клиент для выполнения 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)
 

Мне интересно, как я должен выбрать, чтобы добавить хэш и закрепить его.

Ответ №1:

Вы можете добавлять и закреплять данные за одну операцию:

 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, что полезно, если у вас нет контента, но, возможно, вы хотите помочь воспроизвести его в сети. Сначала он проверит репозиторий, чтобы узнать, присутствует ли контент, — если нет, он найдет его в сети и добавит в репозиторий, а затем предотвратит сбор мусора (ручная операция, во время которой все не закрепленное содержимое удаляется из вашего репозитория).

Дополнительные сведения см. в документах для ipfs.add и ipfs.pin.add.

Комментарии:

1. Знаете ли вы, как долго сохраняется закрепленный контент, прежде чем его отправят на сбор мусора? В документации Infura говорится, что по крайней мере 6 месяцев, но я видел заявления людей о том, что они намного короче

Ответ №2:

Я никогда не использовал 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 реализует тот же API, что и сам узел JS-IPFS, и вы можете найти подробную информацию о методах здесь https://github.com/ipfs/js-ipfs/blob/master/docs/core-api/

Если вы пытались найти, где что было отправлено на сервер, это происходит в addAll функции, которая add вызывала https://github.com/ipfs/js-ipfs/blob/c47a6335b77d5284711f13a83349000820f85775/packages/ipfs-http-client/src/pin/add-all.js#L10-L33

addAll выводит несколько идентификаторов CID и повторно AsyncIterable<CID> запускает и last(all(...)) просто выбирает последний CID (будет только один идентификатор CID, потому add что выводит только один).

Комментарии:

1. Я на самом деле заметил, что есть два addAll , один из которых вы связали, а этот без закрепления github.com/ipfs/js-ipfs/blob/. … Способ, которым вы их вызываете, кажется одинаковым, поэтому я не уверен, как вызвать функцию, которая закрепляет хэш.

Ответ №3:

Infura работает через токен аутентификации. Вы можете прочитать больше об этом в этом посте в блоге: https://blog.infura.io/part-2-getting-started-with-ipfs-on-infura/

Надеюсь, это должно прояснить любую путаницу и дать дополнительную информацию о том, как Infura работает с IPFS.

Комментарии:

1. Спасибо вам за ваш ответ. На самом деле меня больше интересовало, как «привязать» хэш к узлу IPFS.

2. Понял — прямо сейчас все загруженные файлы «закрепляются» при загрузке в IPFS через Infura, но в ближайшее время появятся некоторые обновления службы IPFS, в которых будет более подробная информация о закреплении