Skip to main content

获取 cycles

faucet

概述​

什么是 cycles​

为了使互联网计算机可持续发展,开发人员需要支付其容器所消耗的资源费用(例如存储、算力等),而 cycles 则用于支付这些资源费用。每一万亿个 cycles 等于1个 XDR,这意味着容器的运行成本与 ICP 代币的价格波动无关。

您可以通过以下方式获取 cycles:

  1. 您需要先获得一些 ICP 代币、进而使用 dfx 将 ICP 代币转换为 cycles。
  2. 当参加 DFINITY 基金会的一些活动(如黑客松)或申请开发者 Grants 时,您将收到一张优惠券,您可以兑换该优惠券以从 cycles 水龙头兑换 cycles。
  3. 您也可以通过一些第三方的 cycles 的服务购买 cycles,比如 Cycle.Express。

要求​

请按照此指南安装 IC SDK。

获取 ICP 代币​

接下来将介绍如何获取 ICP 代币、并将其转换为 cycles。

如何获取账户​

当您创建身份之后,您就会自动获得一个账本账户。

您可以在命令行运行以下命令获取您的账户 ID:

dfx ledger account-id

您将会在命令行看到类似的输出:

e213184a548871a47fb526f3cba24e2ee2fbbc8129c4ab497ef2ce535130a0a4
info

关于如何创建身份,您可以参考这里。关于身份的更多命令,请参考这里。

如何获取 ICP 代币​

获取 ICP 代币有几种不同的方式,包括但不限于:

  • 通过支持 ICP 代币的交易所直接购买。请查看该页面以了解可以购买 ICP 代币的交易所。

  • 通过参与 IC 治理的奖励获得代币。

  • 通过参与 DFINITY 基金会的开发者计划获得 ICP 代币。

  • 作为节点提供者获得 ICP 代币,以作为提供算力的报酬。

通常来说,价值 5 到 10 美元的 ICP 代币足以开始您的开发工作。后续您可以根据您的工作流程和实际用例来决定是否获取更多的 ICP 代币。

查询 ICP 代币余额​

当您获得了ICP 并转入您的账户之后,你可以通过以下命令查询余额:

dfx ledger balance --network ic

您将会看到类似如下的输出:

12.49840000 ICP

使用 cycles 钱包​

容器需要 cycles 来执行操作、并为所使用的资源付费,用户和开发人员可以通过一种称为 cycles 钱包的特殊容器来管理 cycles 的分配和所有权。

目前 cycles 钱包是一种复杂的解决方案,它本质上是一个容器、自身也会消耗 cycles。因此最近 DFINITY 基金会推出了一个叫做 cycles 账本的新功能,用来简化 cycles 的管理。

如何创建 cycles 钱包​

这里我们介绍如何自己手动创建钱包,如果您已经拥有 cycles 钱包(您可以通过 dfx identity get-wallet 来查看您的钱包配置),则可以跳过此步骤。

info

您可以查看该文档了解更多关于 cycles 钱包的信息。

创建一个新的容器​

Cycles 钱包本质上是一个特殊的容器,所以第一步我们需要创建一个新的容器,您可以参考 dfx ledger create-canister 来创建容器。下面是一个示例:

dfx ledger create-canister tsqwz-udeik-5migd-ehrev-pvoqv-szx2g-akh5s-fkyqc-zy6q7-snav6-uqe --amount 1.25 --network ic

该命令将在 IC 主网上创建一个容器,将指定的主体设置为容器的控制者,并向充值价值为 1.25 ICP 的 cycles。

如果创建成功会返回类似如下所示信息:

Transfer sent at BlockHeight: 20
Canister created with id: "53zcu-tiaaa-aaaaa-qaaba-cai"

安装 cycles 钱包代码​

创建容器完成后,我们将运行如下命令将 cycles 钱包代码安装到所创建的容器之中:

dfx identity --network ic deploy-wallet <canister-identifier>

关于 dfx identity deploy-wallet 的详细信息可以参考这里。

下面是一个示例:

dfx identity deploy-wallet 53zcu-tiaaa-aaaaa-qaaba-cai --network ic

它会在 IC 主网上在指定容器 53zcu-tiaaa-aaaaa-qaaba-cai 安装 cycles 钱包 Wasm 代码。

使用 cycles 账本​

Cycles 账本是一种用于替代 cycles 钱包的 cycles 管理方案。

Cycles 账本和 cycles 钱包之间最大的区别在于:

  • cycles 账本是一个全局单一的账本容器;
  • 而 cycles 钱包必须由每个开发者独立部署。

此外 cycles 钱包还存在一些缺点,包括:

  • cycles 钱包是一种将 cycles 与主体关联的复杂解决方案;
  • cycles 钱包本身会消耗 cycles,这意味着开发者需要支付 cycles 来存储 cycles;
  • 如果丢失了 cycles 钱包的容器 ID,那么该 cycles 钱包中的 cycles 也会丢失。

而 cycles 账本则解决了这些问题。简而言之,cycles 账本通过提供让主体持有 cycles 的能力、简化了 cycles 管理。

目前 cycles 账本遵循 ICRC-1、ICRC-2 和 ICRC-3 标准。除了标准的账本功能外,cycles 账本还与 NNS 容器和用户容器交互、以提供 cycles 账本特有的功能,包括:

  • 接受来自其他容器发送的 cycles;
  • 向其他容器发送 cycles;
  • 使用 cycles 创建新容器。
info

需要注意的是,cycles 账本无法提供用 cycles 对其他容器进行任意调用的功能,而 cycles 钱包则可以。这是因为开放调用上下文会给 cyles 账本增添复杂性。

如果需要用 cycles 对其他容器进行任意调用,可以像以前一样使用 cycles 钱包。

接下会介绍关于 dfx cycles 命令及其子命令的一些用法,这里我们只会涉及一些基本参数和操作。请在 dfx cycles 命令及其子命令上使用 -h 参数查看详细信息。

要求​

要使用 cycles 账本,您需要 dfx 版本 >= 0.19.0、并且需要设置以下环境变量:

DFX_CYCLES_LEDGER_SUPPORT_ENABLE=1

在 dfx 0.19.0 中,cycles 账本还是 Beta 版本,所以您需要通过设置以上的环境变量来显示的启用。如果您未设置该环境变量,类似 dfx deploy --network ic、dfx canister create <CANISTER_NAME> --network ic 等需要消耗 cycles 的命令仍然会从 cycles 钱包获取 cycles。

检查 cycles 余额​

您可以执行以下命令查看当前身份的 cycles 余额。

dfx cycles balance --network ic

将 ICP 转换为 cycles​

您可以执行以下命令将 ICP 账本中的 ICP 转换为 cycles。

dfx cycles convert --amount <AMOUNT> --network ic

请将 <AMOUNT> 替换为要转换为 cycles 的 ICP 数量,例如 2.7。

您也可以使用 --icp 和 --e8s 选项以 ICP 和 e8s(其中 100,000,000 e8s = 1 ICP)为单位指定需要转换的数量。例如,2.7 可以表示为 --icp 2 --e8s 70_000_000。

Cycles 转账​

您可以执行以下命令将 cycles 转移到另一个主体。

dfx cycles transfer <AMOUNT> <PRINCIPAL_ID> --network ic

请将 <AMOUNT> 替换为 cycles 数量,例如 34000000;将 <PRINCIPAL_ID> 替换为要转账 cycles 的目标主体。

info

Cycles 账本转账支持使用 500k 或 5TC 等后缀,请在这里查看完整的后缀列表。

为容器充值​

您可以使用以下命令通过 cycles 账本对容器进行 cycles 充值。

dfx cycles top-up <AMOUNT> <CANISTER_ID> --network ic

请将 <AMOUNT> 替换为 cycles 数量,例如 34000000,并将 <CANISTER_ID> 替换为要充值 cycles 的容器 ID。

使用循环创建容器​

在设置了 DFX_CYCLES_LEDGER_SUPPORT_ENABLE=1 环境变量之后,您可以使用 dfx canister create 或 dfx deploy 命令通过 cycles 账本创建新容器。

dfx canister create <CANISTER_NAME> --network ic
dfx deploy <CANISTER_NAME> --network ic

请将 <CANISTER_NAME> 替换为需要创建的容器名称,创建容器所需的 cycles 则会由 cycles 账本提供。

费用​

调用 cycles 账本的大多数功能都会产生费用,详细情况如下:

  • 使用 cycles 账本在不同的主体之间转账时,费用为每笔交易 100 百万(100m)cycles;
  • 从 cycles 账本向其他容器发送 cycles 时,费用为 100 百万(100m)循环;
  • 创建容器时,所需的费用包括调用费用(100 百万循环)和容器创建费用。其中容器创建费用随着目标子网的大小线性增长。

将 ICP 转换为 cycles​

在您已经获取了 ICP 代币之后,您可以将 ICP 代币转换为 cycles。

如何从 ICP 充值 cycles 钱包​

如果您已经拥有了 cycles 钱包,希望直接将 ICP 代币转换为 cycles,可以使用 dfx ledger top-up 命令。下面是一个示例:

dfx ledger top-up --icp 1 5a46r-jqaaa-aaaaa-qaadq-cai --network ic

其中 5a46r-jqaaa-aaaaa-qaadq-cai 是示例的 cycles 钱包容器 ID,您可以替换为您自己的钱包容器 ID。

更多关于 dfx ledger top-up 的信息,请参考这里。

如何从 ICP 充值 cycles 账本​

请参考 cycles 账本中将 ICP 转换为 cycles 章节。

如何给容器充值 cycles​

除了给 cycles 钱包充值,您也可以给普通容器进行充值。

查看容器 cycles 余额​

在决定是否给容器充值之前,您可以通过 dfx canister status 命令来查看容器的状态,包括容器的 cycles 余额,以下是一个示例:

dfx canister status b5wdk-xiaaa-aaaan-qlsqq-cai --network=ic

如何从 ICP 充值容器​

同样可以使用 dfx ledger top-up 命令。下面是一个示例:

dfx ledger top-up --icp 1 b5wdk-xiaaa-aaaan-qlsqq-cai --network ic

其中 b5wdk-xiaaa-aaaan-qlsqq-cai 是示例的 容器 ID,您可以替换为您自己的容器 ID。

如何从 cycles 账本充值容器​

请参考 cycles 账本中为容器充值章节。

如何从 cycles 钱包充值容器​

  • 使用 dfx canister deposit-cycles 从 cycles 钱包充值容器,以下是一个示例:

    dfx canister deposit-cycles 2000000000000 b5wdk-xiaaa-aaaan-qlsqq-cai --network ic

    其中 b5wdk-xiaaa-aaaan-qlsqq-cai 是示例的 容器 ID,您可以替换为您自己的容器 ID。

  • 使用 dfx wallet send 从 cycles 钱包充值容器,以下是一个示例:

    dfx wallet send 2000000000000 b5wdk-xiaaa-aaaan-qlsqq-cai --network ic

    其中 b5wdk-xiaaa-aaaan-qlsqq-cai 是示例的 容器 ID,您可以替换为您自己的容器 ID。

总结​

至此您已经准备好在 IC 上托管网站或按照我们的 dApps 教程进行操作,您可以在这里找到相关教程。

有问题么?​

欢迎大家随时向我们提出任何技术问题。我们会尽力尽快回应。

  1. 上网比较方便的,在 ICP China 的 Twitter Community,用中文发帖提问

  2. 有经验的开发者在 DFINITY 基金会运营的开发者论坛上用英文提问

    info

    https://forum.dfinity.org/ ,可以 cue 我们:Ben,Paul,Vincent ,Herbert。

  3. 深度 ICP 用户可以在 OpenChat 上的 IC123.xyz Community 里的频道 ic123.xyz 工作组 里提问题

    欢迎您申请 DFINITY 基金会的 Developer Grant 项目,加入互联网计算机的大家庭!