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

希望这对您有所帮助:)