Base58 javascript 实现
Base58 javascript implementation
我正在使用 IPFS-multihash 方法在智能合约中存储 IPFS 哈希。
为此,我需要解码 base58 格式:
QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4
转二进制(十六进制):
1220b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
但是我无法在浏览器中使用 bs58 模块(我尝试使用 Browserify)。能不能告诉我base58解码和编码的javascript实现,这样我不用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
对我来说,它通过使用 Base58 implementation 并将结果转换为十六进制来工作。
var MAP = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
var decoded = toHexString(from_b58(ipfsHash,MAP)).toUpperCase();
感谢Chris G
根据您的用例,仅处理 Base58 可能不够。
考虑使用官方 cids 库来 future-proof 你的合同。
IPFS 内容标识符称为 CID(docs). Current default is CIDv0 (equal to a raw multihash in Base58btc), but CIDv1 are an opt-in upgrade already used in the wild (it allows encoding to arbitrary bases). 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。
希望这对您有所帮助:)
我正在使用 IPFS-multihash 方法在智能合约中存储 IPFS 哈希。 为此,我需要解码 base58 格式:
QmaozNR7DZHQK1ZcU9p7QdrshMvXqWK6gpu5rmrkPdT3L4
转二进制(十六进制):
1220b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
但是我无法在浏览器中使用 bs58 模块(我尝试使用 Browserify)。能不能告诉我base58解码和编码的javascript实现,这样我不用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
对我来说,它通过使用 Base58 implementation 并将结果转换为十六进制来工作。
var MAP = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
var decoded = toHexString(from_b58(ipfsHash,MAP)).toUpperCase();
感谢Chris G
根据您的用例,仅处理 Base58 可能不够。
考虑使用官方 cids 库来 future-proof 你的合同。
IPFS 内容标识符称为 CID(docs). Current default is CIDv0 (equal to a raw multihash in Base58btc), but CIDv1 are an opt-in upgrade already used in the wild (it allows encoding to arbitrary bases). 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
:
const mhHex = new CID('bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy').multihash.toString('hex').toUpperCase()
cids
library 应该可以与 browserify 和其他捆绑器一起正常工作。
还有一个prebuilt version for the browser。
希望这对您有所帮助:)