我正在使用IPFS-multihash方法在智能合约中存储IPFS散列。为此,我需要解码base58格式:
QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4转换为二进制(十六进制):
1220b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9但我无法在浏览器中使用bs58模块(我尝试使用Browserify)。你能告诉我在base58中解码和编码的javascript实现,这样我就可以在不使用node_modules的情况下实现上述方法吗?或者你能告诉我如何一步一步地使用Browserify来使用节点模块吗?
运行第一个命令后,在'node_modules‘文件夹中创建了'bs58’文件夹,folder.there不是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发布于 2019-05-10 17:03:15
对我来说,它是通过使用Base58 implementation并将结果转换为十六进制来工作的。
var MAP = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
var decoded = toHexString(from_b58(ipfsHash,MAP)).toUpperCase();感谢Chris G
发布于 2019-05-18 08:08:37
根据您的用例,单独处理Base58可能还不够。
考虑使用官方的cids库来为你的合同做好未来的准备。
IPFS内容标识符称为CID (docs)。当前的默认值是CIDv0 (相当于Base58btc中的原始多哈希),但CIDv1是已经在野外使用的选择性升级(它允许编码为任意基数)。IPFS it will switch to CIDv1 in Base32作为未来的新默认(但每个人都可以自由地使用其他基础):
<cidv0> ::= <multihash-content-address>
<cidv1> ::= <multibase-prefix><cid-version><multicodec-content-type><multihash-content-address>要使用cids库将完整的IPFS CID转换为十六进制,您可以执行以下操作:
const cidHex = new CID('bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy').buffer.toString('hex').toUpperCase()或者,如果你只关心原始的多哈希表,你可以通过.multihash从CID中提取出来
const mhHex = new CID('bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy').multihash.toString('hex').toUpperCase()cids library应该可以与browserify和其他捆绑器很好地协同工作。还有一个prebuilt version for the browser。
希望这能有所帮助:)
https://stackoverflow.com/questions/56073688
复制相似问题