Реализация javascript Base58

Я использую метод 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

Использовать это, например? gist.github.com/diafygi/90a3e80ca1c2793220e5

Chris G 10.05.2019 10:36

Спасибо @ChrisG. Это сработало! Просто нужно было преобразовать его в Hex String.

ak07_ 10.05.2019 10:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
3 704
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Для меня это сработало, используя Реализация 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 библиотека должен нормально работать с браузерами и другими упаковщиками. Также есть готовая версия для браузера.

Надеюсь это поможет :)

Другие вопросы по теме