查看原文
其他

如何在 NodeJS 中以编程方式将 ICP 转换为 Cycles

Dfifans Internet Computer 2023-05-02


除非有一个库(例如 cmc-js)可以帮助将 ICP 实用程序令牌转换为 JavaScript 中的 Cycles,否则以下教程可能会帮助您实现这种转换。


简介


长话短说,要将 ICP 转换为 Cycles,您需要两件事:


  • 转换由 Cycles 铸币容器(CMC)通过函数返回的值的汇率 get_icp_xdr_conversion_rate


  • 一个可以进行转换的函数。


依赖项


要在 JavaScript 中轻松查询 CMC,您需要 agent-js(及其对等依赖项)。


此外,由于以下解决方案在 NodeJS 上下文中而不是在浏览器中运行,因此还需要 node-fetch 来为以前的库提供一种执行方式 XMLHttpRequest



Candid


必须使用 Cycles 铸币容器的接口描述来初始化通信通道。


CMC candid 文件可以在互联网计算机 repo 上下载,它的绑定文件(.idl.js.d.ts 等)可以使用 didc 命令行工具或 Canlista(该工具的 GUI 版本)生成,但如果您不想进行此类操作,您可以直接从我的博客平台项目 Papyrs 后端 repo 下载所有这些文件。


在下面的代码片段中,我使用了这些特定的绑定。


XDR 转换率


在主网上,CMC 的容器 ID 是 rkp4c-7iaaa-aaaaa-aaaca-caid,这个 ID 应该用来实例化 actor,以便查询 get_icp_xdr_conversion_rate 哪个返回 xdr_permyriad_per_icp,我们正在寻找的 XDR 中的实际转化率。


1 XDR 等于 1 万亿个 Cycles,我将结果转换为万亿比率,然后再返回。



将 ICP 转换为 Cycles


我们的目标是转换可读的数字,这就是为什么我们首先需要一个映射 number 到的小工具 BigInt(因为转换函数会处理这些类型)。



上述函数结果的一些示例(数字 -> bigint):



最后,为了有效地将 ICP 转换为 Cycles,我们可以实现与转换率的交叉乘法。



Demo


放在一个小 Demo 中,例如,可以将上面的函数链接起来,将转换的结果记录到控制台。



如果在命令行中运行,示例应该输出这样的结果:



结论


我希望这个小教程会很有用,如果您有任何改进的想法,请告诉我!


到无限和超越,David!


如需更多冒险,请在 Twitter(@daviddalbusco)上关注我。


在 internetcomputer.org 上开始构建,并在 forum.dfinity.org 加入开发者社区。



作者:David Dal Busco

翻译:Catherine



-              -


在区块链上建立社交媒体平台的竞赛

Web3 基础设施:现在和未来 | 2022 年 GWEI 峰会

互联网计算机仪表板:去中心化、治理、代币经济学等





你关心的 DFINITY 内容
技术进展 | 项目信息 | 全球活动


长按关注 DFINITY 微信公众号

随时答疑解惑


*添加小助手微信 comiocn 进交流社群


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存