0

我正在使用 IPFS-multihash 方法将 IPFS 哈希存储在智能合约中。为此,我需要解码 base58 格式:

QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4

二进制(十六进制):

1220b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9

但我无法在浏览器中使用 bs58 模块(我尝试使用 Browserify)。你能告诉我base58中解码和编码的javascript实现,以便我可以在不使用node_modules的情况下实现上述方法吗?或者你能告诉我如何准确地使用 Browserify 逐步使用节点模块吗?

运行第一个命令后,在“node_modules”文件夹中创建了“bs58”文件夹......没有 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
4

2 回答 2

0

根据您的用例,仅处理 Base58 可能还不够。

考虑使用官方 cids库来确保您的合同不会过时。

IPFS 内容标识符称为 CID ( docs )。当前默认值为 CIDv0(等于 Base58btc 中的原始多哈希),但 CIDv1 是已在野外使用的可选升级(它允许编码到任意基数)。IPFS 它将在未来切换到 Base32 中的 CIDv1 作为新的默认值(但如果他们愿意,每个人都可以自由使用其他基础):

<cidv0> ::= <multihash-content-address>
<cidv1> ::= <multibase-prefix><cid-version><multicodec-content-type><multihash-content-address>

要将完整的 IPFS CID 转换为带有cids库的十六进制,您可以执行以下操作:

const cidHex = new CID('bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy').buffer.toString('hex').toUpperCase()

或者如果您只关心原始多哈希,您可以通过以下方式从 CID 中提取它.multihash

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

cids应该可以与 browserify 和其他捆绑器一起正常工作。浏览器也有一个预构建的版本

希望这可以帮助 :)

于 2019-05-18T00:08:37.203 回答
0

对我来说,它通过使用 Base58 实现并将生成的结果转换为十六进制来工作。

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

谢克里斯 G

于 2019-05-10T09:03:14.790 回答