Я использую метод IPFS-multihash для хранения хэша IPFS в смарт-контрактах. Для этого мне нужно декодировать формат base58:
QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4
в двоичный (как шестнадцатеричный):
1220b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
Но я не могу использовать модуль bs58 в браузере (я пытался использовать Browserify). Можете ли вы сказать мне реализацию javascript для декодирования и кодирования в base58, чтобы я мог реализовать вышеуказанный метод без использования node_modules? Или вы можете рассказать, как именно я могу использовать Browserify для пошагового использования модуля узла?
После запуска первой команды папка «bs58» создается в папке «node_modules»… папки lib нет. Можете ли вы указать мне точные команды, которые я должен использовать?
npm install --save bs58
npm install -g browserify
browserify < lib/bs58.js > lib/bs85.bundle.js
Моя файловая структура примерно такая:
-node_modules
-src
|___index.html
|___js
|____app.js
Спасибо @ChrisG. Это сработало! Просто нужно было преобразовать его в Hex String.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Для меня это сработало, используя Реализация Base58 и преобразовав полученный результат в шестнадцатеричный.
var MAP = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
var decoded = toHexString(from_b58(ipfsHash,MAP)).toUpperCase();
Благодаря Крис Джи
В зависимости от вашего варианта использования одной обработки Base58 может быть недостаточно.
Рассмотрите возможность использования официальной библиотеки cids для защиты ваших контрактов в будущем.
Идентификаторы контента IPFS называются CID (документы). Текущее значение по умолчанию — CIDv0 (соответствует необработанному мультихэшу в Base58btc), но CIDv1 — это предварительное обновление, уже используемое в дикой природе (оно позволяет кодировать произвольные базы). IPFS переключится на CIDv1 в Base32 в качестве новой базы по умолчанию в будущем (но каждый сможет использовать другую базу, если захочет):
<cidv0> ::= <multihash-content-address>
<cidv1> ::= <multibase-prefix><cid-version><multicodec-content-type><multihash-content-address>
Чтобы преобразовать полный CID IPFS в шестнадцатеричный с помощью библиотеки cids, вы должны сделать что-то вроде:
const cidHex = new CID('bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy').buffer.toString('hex').toUpperCase()
или, если вас интересует только необработанный мультихэш, вы можете извлечь его из CID через .multihash:
const mhHex = new CID('bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy').multihash.toString('hex').toUpperCase()
cids библиотека должен нормально работать с браузерами и другими упаковщиками.
Также есть готовая версия для браузера.
Надеюсь это поможет :)
Использовать это, например? gist.github.com/diafygi/90a3e80ca1c2793220e5