如何在 NodeJS 中以编程方式将 ICP 转换为 Cycles
除非有一个库(例如 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 微信公众号
随时答疑解惑
*添加小助手微信 comiocn 进交流社群