Как проверить предоставленную строку - это допустимый путь IPFS или IPNS?

Я хочу проверить, что предоставленная строка является допустимым путем IPFS или IPNS или не находится в домене ipfs.

Например, когда я делаю:

ipfs ls <invalid-hash>
//waits keep searching ... 

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

Я мог ждать N-секунд как порог для ipfs, чтобы возвращать результаты для ipfs cat valid-hash, ipfs ls valid-hash, но результаты ipfs cat valid-hash или ipfs ls valid-hash может занимать больше времени, чем N секунд, на которые нельзя положиться.

[~]$ ipfs cat <hash-id that exists in the ipfs domain>
//returns a results maybe after 10 minutes if the hash-id string is valid.

[~]$ ipfs cat <hash-id that does not exists in the ipfs domain>
//HALTS. and does not return me that hash-id is invalid.

Я использовал: https://github.com/xicombd/is-ipfs но строка invalid-hash, которую я передаю в функции, возвращает true, поэтому она не работает должным образом на моей стороне, никаких советов?

Например: (Я запускаю команды внутри узла.)

[$] node 
const isIPFS = require('is-ipfs')
> isIPFS.multihash('QmYooooooooooooooooooooooooooooooooaoooooooooo')
true //returns true but it is an invalid ipfs hash that does not exist in the ipfs domain and should have returned false.

Благодарим вас за ценное время и помощь.

5 голосов | спросил alper 30 32016vEurope/Moscow11bEurope/MoscowWed, 30 Nov 2016 05:35:12 +0300 2016, 05:35:12

2 ответа


3

На самом деле вы не можете делать то, что хотите. Если вы подумаете об этом еще и учтите архитектуру распределенной системы p2p, такой как IPFS, определение «действительное» или «существующее» на самом деле не так очевидно.

Если вы запрашиваете IPFS для файла, соответствующего заданному хэшу, он просматривает набор доступных узлов в сети, пытаясь найти тот, у которого есть доступный файл. Но если он не может найти ни одного, это может быть по разным причинам. Для непопулярного контента, который не кэшируется многими узлами, и только несколько узлов связывают его, есть вероятность, что узел, публикующий этот файл, просто будет в этот конкретный момент.

Как вы описали - вы можете попробовать таймауты, но они могут дать вам ложные негативы.

Что вы можете сделать, хотя вы можете использовать IPNS, чтобы назвать файл (точнее - хэш файла) и использовать имя для перехода к нему. Конечно, вы можете сломать его, если опубликуете неправильный хэш, но его легко избежать, автоматизируя добавление файла в IPFS и именовав его в IPNS. ​​

ответил Michał Kłeczek 28 J0000006Europe/Moscow 2017, 17:10:07
0

Вы можете посмотреть реализацию Мартина «Господин Чико» Lundfall

https://github.com/MrChico/verifyIPFS

Я копирую экстракт README

# verifyIPFS
Smart contract library functions for recreating the hash of an ipfs object given its content.

## Usage
Add the data file to IPFS:

ipfs add testfile -q

Will return:

QmRsjnNkEpnDdmYB7wMR7FSy1eGZ12pDuhST3iNLJTzAXF

Now try the same thing with the `generateHash`-function:

(truffle console)

truffle(default)> fs = require('fs')
truffle(default)> var verify; verifyIPFS.new().then(a => {verify = a})
truffle(default)> var testfile = fs.readFileSync('./testfile').toString()
truffle(default)> verify.generateHash(testfile).then(a => {console.log(web3.toAscii(a))})

returns

QmRsjnNkEpnDdmYB7wMR7FSy1eGZ12pDuhST3iNLJTzAXF
ответил Herman Junge 30 32016vEurope/Moscow11bEurope/MoscowWed, 30 Nov 2016 08:39:21 +0300 2016, 08:39:21

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132