Реализация javascript Base58 - PullRequest
0 голосов
/ 10 мая 2019

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

В зависимости от вашего варианта использования, одной только 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()

или, если вы заботитесь только о raw multihash, вы можете извлечь его из CID через .multihash:

const mhHex = new CID('bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy').multihash.toString('hex').toUpperCase()

Библиотека cids должна нормально работать с browserify и другими пакетами.Для браузера есть предустановленная версия .

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

0 голосов
/ 10 мая 2019

Для меня это сработало с использованием реализации Base58 и преобразованием полученного результата в шестнадцатеричное.

var MAP = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
var decoded = toHexString(from_b58(ipfsHash,MAP)).toUpperCase();

Благодаря Крису Г

...