使用默认燃料费钱包

代币和周期 中所述,ICP代币可以转换为 cycles 以驱动容器操作。 燃料费反映了 dapp 消耗的通信、计算和存储的运营成本。

与 ICP代币不同,燃料费仅与容器相关联,与用户或开发人员主体无关。 因为只有容器需要和消耗燃料费——执行操作并为他们使用的资源付费——用户和开发人员通过一种称为*cycles wallet*的特殊类型的容器来管理燃料费的分发和所有权。 因为cycles 钱包包含执行操作(例如创建新容器)所需的燃料费,所以这些操作是使用燃料费钱包的容器主体而不是您的用户主体来执行的。

为了使用本地容器执行环境,{sdk-short-name} 会在每个项目中自动为您创建一个默认的燃料费钱包,并且使用燃料费钱包执行的大部分操作都在幕后进行。 例如,燃料费钱包代表您注册容器主体并在本地容器执行环境中部署容器。

但是,在生产环境中,您需要显式注册并将燃料费转移到新容器,指定可以充当保管人的主体,并管理具有所有权的主体。 您可以使用在 Web 浏览器中运行的默认燃料费钱包 dapp 执行其中一些任务。 根据您要执行的具体操作,您还可以通过在终端中运行 dfx wallet 命令或直接调用默认燃料费钱包容器中的方法来执行这些燃料费和容器管理任务。

但是,您应该记住,对燃料费钱包容器的调用是使用与当前选择的用户身份关联的燃料费钱包主体执行的。 根据您当前选择的身份以及与该身份关联的委托人是否已添加为钱包的控制器或保管人,您可能会看到不同的结果或被拒绝访问特定方法。

要检查您当前使用的身份,请运行以下命令:

dfx identity whoami

控制器和保管人角色

可以将用户主体或容器主体分配给 controllercustodian 角色。

controller 是特权最高的角色,分配给控制器角色的主体可以执行特权任务,包括以下内容:

  • 添加和删除其他主体作为控制器。

  • 授权和取消授权其他委托人作为保管人。

  • 将条目添加到循环钱包地址簿。

  • 访问燃料费钱包余额和所有其他钱包相关信息。

  • 将循环发送到其他容器。

  • 接受来自其他容器的燃料费接收。

  • 重命名循环钱包。

  • 创建容器和额外的燃料费钱包。

分配给 保管人 角色的委托人只能执行周期钱包管理任务的子集,包括以下内容:

*访问燃料费钱包余额和所有其他钱包相关信息。 * 将燃料费发送到其他容器。 * 接受来自其他容器的燃料费接收。 *创建容器。

注意:授权委托人作为保管人不会自动授予委托人访问循环钱包的权限。 分配给保管人角色的身份也必须分配给循环钱包主体。 例如,如果您在本地项目中授权身份 alice_custodian 作为循环钱包 (rwlgt-iiaaa-aaaaa-aaaaa-cai) 的保管人,则还需要分配该用户以使用该钱包 使用`dfx identity set-wallet rwlgt-iiaaa-aaaaa-aaaaa-cai` 命令。

创建一个循环钱包

如果您正在进行本地开发,当您使用 dfx canister create 注册新的容器主体或使用 dfx deploy 注册、构建和部署容器时,将创建您的燃料费钱包。

如果您在 Internet Computer 上进行部署,您通常通过将 ICP 代币转换为燃料费、将燃料费转移到新的容器主体以及使用默认燃料费钱包 WebAssembly 模块 (WASM) 更新容器来创建燃料费钱包。

有一些 dapp 可以帮助您将 ICP 转换为燃料费并创建新的燃料费钱包,例如,NNS dapp

检查燃料费平衡

在本地canister执行环境或Internet Computer上有cycles钱包时,可以使用`dfx wallet balance命令或wallet_balance`方法查看当前cycle余额。

在本地开发时检查您的燃料费平衡

如果你在做本地开发,你可以使用`dfx wallet balance`命令逐个项目检查当前燃料费余额。

要检查本地项目中的燃料费余额:

  1. 打开终端并导航到项目的根目录。

  2. 通过运行以下命令启动本地容器执行环境:

    dfx start --background
  3. 通过运行以下命令,显示与当前选择的身份关联的燃料费钱包中的燃料费余额:

    dfx wallet balance

    该命令显示类似于以下内容的输出:

    78000000000000 cycles.

检查 Internet Computer 上的燃料费余额

如果您在 Internet Computer 上部署了cycles 钱包,您可以使用`dfx wallet balance` 命令查看网络上当前的cycles 余额。

要检查 Internet Computer 上的燃料费余额:

  1. 打开终端并导航到包含 dfx.json 配置文件的目录。

  2. 通过运行以下命令检查您与 Internet Computer 的连接:

    dfx ping ic
  3. 通过运行以下命令,显示与当前选择的身份关联的燃料费钱包中的燃料费余额:

    dfx wallet --network ic balance

    该命令显示类似于以下内容的输出:

    67991783875995 cycles.

调用燃料费 wallet_balance 方法

您还可以通过直接调用燃料费钱包容器中的`wallet_balance方法来检查燃料费余额。 例如,如果您的委托人是 `h5aet-waaaa-aaaab-qaamq-cai 燃料费钱包的控制器,您可以通过运行以下命令检查当前燃料费余额:

dfx canister --network ic call h5aet-waaaa-aaaab-qaamq-cai wallet_balance

该命令使用 Candid 格式返回余额作为记录,其中包含金额字段(由哈希 3_573_748_184 表示)和余额 6,895,656,625,450 次这样的燃料费:

(record { 3_573_748_184 = 6_895_656_625_450 })

添加控制器

如果您是循环钱包的控制器,您可以将其他用户主体或容器主体添加到控制器角色。 将委托人添加到控制器角色也会自动将委托人添加到保管人角色。

要将控制器添加到本地项目中的循环钱包:

  1. 打开终端并导航到项目的根目录。

  2. 通过运行以下命令启动本地容器执行环境:

    dfx start --background
  3. 通过运行类似于以下内容的命令,显示与当前选择的身份关联的循环钱包中的燃料费余额:

    dfx wallet add-controller <controller-principal>

    例如,您将运行以下命令来添加由主体 b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe 代表的用户作为本地燃料费钱包的控制器:

    dfx wallet add-controller b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe

    该命令显示类似于以下内容的输出:

    Added b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe as a controller.

列出当前的控制器

您可以使用 dfx wallet controllers 命令或 get_controllers 方法列出对指定周期钱包容器具有完全控制权的委托人。

列出本地项目中循环钱包的控制器:

  1. 打开终端并导航到项目的根目录。

  2. 通过运行以下命令启动本地容器执行环境:

    dfx start --background
  3. 通过运行以下命令列出对当前项目中的循环钱包具有完全控制权的委托人:

    dfx wallet controllers

    该命令显示控制周期钱包的委托人的文本表示,输出类似于以下内容:

    tsqwz-udeik-5migd-ehrev-pvoqv-szx2g-akh5s-fkyqc-zy6q7-snav6-uqe
    b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe

Remove a controller

您可以使用 dfx wallet remove-controller 命令或 remove_controller 方法将主体删除为控制器。

要在本地项目中删除循环钱包的控制器:

  1. 打开终端并导航到项目的根目录。

  2. 通过运行以下命令启动本地容器执行环境:

    dfx start --background
  3. 通过运行类似于以下内容的命令,指定要从当前项目中的控制器角色中删除的主体:

    dfx wallet remove-controller b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe

    命令输出类似于以下内容:

    Removed b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe as a controller.

授权托管人

您可以使用 dfx wallet authorize 命令或 authorize 方法授权委托人作为燃料费钱包的保管人。

授权委托人作为本地项目中循环钱包的保管人:

  1. 打开终端并导航到项目的根目录。

  2. 通过运行以下命令启动本地容器执行环境:

    dfx start --background
  3. 通过运行类似于以下内容的命令,指定要授权为当前项目和当前身份的保管人的主体:

    dfx wallet authorize b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe

    命令输出类似于以下内容:

    Authorized b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe as a custodian.

列出当前保管人

您可以使用 dfx wallet custodians 命令或 get_custodians 方法返回当前定义为燃料费钱包托管人的委托人列表。

列出本地项目中循环钱包的保管人:

  1. 打开终端并导航到项目的根目录。

  2. 通过运行以下命令启动本地容器执行环境:

    dfx start --background
  3. 通过运行以下命令,列出当前项目中对燃料费钱包具有保管人角色的委托人:

    dfx wallet custodians

    该命令显示类似于以下内容的输出:

    tsqwz-udeik-5migd-ehrev-pvoqv-szx2g-akh5s-fkyqc-zy6q7-snav6-uqe
    b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe

删除对保管人的授权

您可以使用 dfx wallet deauthorize 命令或 deauthorize 方法将委托人删除为循环钱包的保管人。 取消对先前添加为控制器的主体的授权也会自动从控制器角色中删除该主体。

要在本地项目中删除循环钱包的保管人:

  1. 打开终端并导航到项目的根目录。

  2. 通过运行以下命令启动本地容器执行环境:

    dfx start --background
  3. 通过运行类似于以下的命令,指定要从当前项目中的保管人角色中删除的主体:

    dfx wallet deauthorize b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe

    命令输出类似于以下内容:

    Deauthorized b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe as a custodian.

将燃料费发送到容器

您可以使用 wallet_send 方法的 dfx wallet send 命令将特定数量的燃料费发送到特定容器。 请记住,您指定的容器必须是燃料费钱包或具有 wallet_receive 方法来接受循环。

如果您在 Internet Computer 上部署了燃料费钱包,则可以使用`dfx wallet send` 命令在容器之间发送燃料费。

要将燃料费发送到在 Internet Computer 上运行的另一个容器:

  1. 打开终端并导航到包含 dfx.json 配置文件的目录。

  2. 通过运行以下命令检查您与 Internet Computer 的连接:

    dfx ping ic
  3. 获取要接收燃料费的容器的委托人。

    例如,运行以下命令以在 Internet Computer 上显示与当前用户身份关联的燃料费钱包主体:

    dfx identity --network ic get-wallet

    该命令显示燃料费钱包主体,其输出类似于以下内容:

    gastn-uqaaa-aaaae-aaafq-cai
  4. 通过运行类似于以下内容的命令将燃料费发送到容器:

    dfx wallet --network ic send <destination> <amount>

    例如:

    dfx wallet --network ic send gastn-uqaaa-aaaae-aaafq-cai 10000000000

    如果传输成功,该命令不会显示任何输出。

    注意:燃料费钱包中可以存储的最大循环数为 2128

  5. 通过运行以下命令检查燃料费钱包余额以查看更新的可用燃料费数:

    dfx wallet --network ic balance

    例如:

    67991699387090 cycles.

列出通讯录条目

您可以使用`dfx 钱包地址` 命令或`list_addresses` 方法列出已为燃料费钱包配置的主体和角色。

要查看在 Internet Computer 上运行的燃料费钱包的地址簿条目:

  1. 打开终端并导航到包含 dfx.json 配置文件的目录。

  2. 通过运行以下命令检查您与 Internet Computer 的连接:

    dfx ping ic
  3. 通过运行以下命令获取燃料费钱包的地址簿条目:

    dfx wallet --network ic addresses

    该命令显示燃料费钱包的控制器和保管人,输出类似于以下内容:

    Id: tsqwz-udeik-5migd-ehrev-pvoqv-szx2g-akh5s-fkyqc-zy6q7-snav6-uqe, Kind: Unknown, Role: Controller, Name: No name set.
    Id: ejta3-neil3-qek6c-i7rdw-sxreh-lypfe-v6hjg-6so7x-5ugze-3iohr-2qe, Kind: Unknown, Role: Custodian, Name: No name set.
    Id: b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe, Kind: Unknown, Role: Controller, Name: No name set.

默认循环钱包中的其他方法

默认周期钱包容器包括不作为 dfx wallet 命令公开的其他方法。 其他方法支持更高级的周期管理任务,例如创建新容器和管理事件。

创建一个新的燃料费钱包

使用 wallet_create_wallet 方法来创建一个具有初始燃料费余额的新燃料费钱包容器,并且可以选择将特定主体作为其控制器。 如果您未指定控制主体,则用于创建新钱包的燃料费钱包将成为新钱包的控制器。

例如,您可以运行类似于以下的命令来创建新钱包并将委托人分配为控制器:

dfx canister --network  call f3yw6-7qaaa-aaaab-qaabq-cai wallet_create_wallet '(record { cycles = 5000000000000 : nat64; controller = principal "vpqee-nujda-46rtu-4noo7-qnxmb-zqs7g-5gvqf-4gy7t-vuprx-u2urx-gqe"})'

该命令返回新钱包的主体:

(record { 1_313_628_723 = principal "dcxxq-jqaaa-aaaab-qaavq-cai" })

注册一个新的容器主体

使用 wallet_create_canister 方法在 Internet Computer 上注册新的容器主体。 此方法创建一个具有初始燃料费余额的新“空”容器占位符,并且可以选择将特定主体作为其控制器。 注册容器主体后,您可以为容器安装代码作为单独的步骤。

例如,您可以运行类似于以下的命令来创建新钱包并将委托人分配为控制器:

dfx canister --network  call f3yw6-7qaaa-aaaab-qaabq-cai wallet_create_canister '(record { cycles = 5000000000000 : nat64; controller = principal "vpqee-nujda-46rtu-4noo7-qnxmb-zqs7g-5gvqf-4gy7t-vuprx-u2urx-gqe"})'

该命令返回您创建的新容器的主体:

(record { 1_313_628_723 = principal "dxqg5-iyaaa-aaaab-qaawa-cai" })

从容器接收燃料费

使用 wallet_receive 方法作为接收燃料费的端点。

从钱包转发调用

使用 wallet_call 方法以循环钱包主体作为调用者来转发调用。

管理地址

使用以下方法管理通讯录条目:

  • add_address: (address: AddressEntry) → ();

  • remove_address: (address: principal) → ();

管理事件

使用以下方法检索事件和图表信息。

  • get_events: (opt record { from: opt nat32; to: opt nat32; }) → (vec Event) 查询;

  • get_chart: (opt record { count: opt nat32; precision: opt nat64; } ) → (vec record { nat64; nat64; }) 查询;

例如,您可以使用 get_events 方法返回 canister_create 和其他事件,方法是运行类似于以下的命令:

dfx canister call <cycles-wallet-principal> get_events '(record {from = null; to = null})'

如果循环钱包(gastn-uqaaa-aaaae-aaafq-cai)部署在 Internet Computer 主网络上,您可以运行如下所示的命令来返回事件:

dfx canister --network ic call gastn-uqaaa-aaaae-aaafq-cai get_events '(record {from = null; to = null})'

该命令的输出采用 Candid 格式,类似于以下内容:

(
  vec { record { 23_515 = 0; 1_191_829_844 = variant { 4_271_600_268 = record { 23_515 = principal "tsqwz-udeik-5migd-ehrev-pvoqv-szx2g-akh5s-fkyqc-zy6q7-snav6-uqe"; 1_224_700_491 = null; 1_269_754_742 = variant { 4_218_395_836 };} }; 2_781_795_542 = 1_621_456_688_636_513_683;}; record { 23_515 = 1; 1_191_829_844 = variant { 4_271_600_268 = record { 23_515 = principal "ejta3-neil3-qek6c-i7rdw-sxreh-lypfe-v6hjg-6so7x-5ugze-3iohr-2qe"; 1_224_700_491 = null; 1_269_754_742 = variant { 2_494_206_670 };} }; 2_781_795_542 = 1_621_461_468_638_569_551;}; record { 23_515 = 2; 1_191_829_844 = variant { 1_205_528_161 = record { 2_190_693_645 = 11_000_000_000_000; 2_631_180_839 = principal "gvvca-vyaaa-aaaae-aaaga-cai";} }; 2_781_795_542 = 1_621_462_573_993_647_258;}; record { 23_515 = 3; 1_191_829_844 = variant { 1_205_528_161 = record { 2_190_693_645 = 11_000_000_000_000; 2_631_180_839 = principal "gsueu-yaaaa-aaaae-aaagq-cai";} }; 2_781_795_542 = 1_621_462_579_193_578_440;}; record { 23_515 = 4; 1_191_829_844 = variant { 1_955_698_212 = record { 2_190_693_645 = 0; 2_374_371_241 = "install_code"; 2_631_180_839 = principal "aaaaa-aa";} }; 2_781_795_542 = 1_621_462_593_047_590_026;}; record { 23_515 = 5; 1_191_829_844 = variant { 1_955_698_212 = record { 2_190_693_645 = 0; 2_374_371_241 = "install_code"; 2_631_180_839 = principal "aaaaa-aa";} }; 2_781_795_542 = 1_621_462_605_779_157_885;}; record { 23_515 = 6; 1_191_829_844 = variant { 1_955_698_212 = record { 2_190_693_645 = 0; 2_374_371_241 = "authorize"; 2_631_180_839 = principal "gsueu-yaaaa-aaaae-aaagq-cai";} }; 2_781_795_542 = 1_621_462_609_036_146_536;}; record { 23_515 = 7; 1_191_829_844 = variant { 1_955_698_212 = record { 2_190_693_645 = 0; 2_374_371_241 = "greet"; 2_631_180_839 = principal "gvvca-vyaaa-aaaae-aaaga-cai";} }; 2_781_795_542 = 1_621_463_144_066_333_270;}; record { 23_515 = 8; 1_191_829_844 = variant { 4_271_600_268 = record { 23_515 = principal "ejta3-neil3-qek6c-i7rdw-sxreh-lypfe-v6hjg-6so7x-5ugze-3iohr-2qe"; 1_224_700_491 = null; 1_269_754_742 = variant { 2_494_206_670 };} }; 2_781_795_542 = 1_621_463_212_828_477_570;}; record { 23_515 = 9; 1_191_829_844 = variant { 1_955_698_212 = record { 2_190_693_645 = 0; 2_374_371_241 = "wallet_balance"; 2_631_180_839 = principal "gastn-uqaaa-aaaae-aaafq-cai";} }; 2_781_795_542 = 1_621_878_637_071_884_946;}; record { 23_515 = 10; 1_191_829_844 = variant { 4_271_600_268 = record { 23_515 = principal "b5quc-npdph-l6qp4-kur4u-oxljq-7uddl-vfdo6-x2uo5-6y4a6-4pt6v-7qe"; 1_224_700_491 = null; 1_269_754_742 = variant { 4_218_395_836 };} }; 2_781_795_542 = 1_621_879_473_916_547_313;}; record { 23_515 = 11; 1_191_829_844 = variant { 313_999_214 = record { 1_136_829_802 = principal "gastn-uqaaa-aaaae-aaafq-cai"; 3_573_748_184 = 10_000_000_000;} }; 2_781_795_542 = 1_621_977_470_023_492_664;}; record { 23_515 = 12; 1_191_829_844 = variant { 2_171_739_429 = record { 25_979 = principal "gastn-uqaaa-aaaae-aaafq-cai"; 3_573_748_184 = 10_000_000_000; 4_293_698_680 = 0;} }; 2_781_795_542 = 1_621_977_470_858_839_320;};},
)

在此示例中,有十二个事件记录。 角色字段(由哈希“1_269_754_742”表示)指定主体是控制器(由哈希“4_218_395_836”表示)还是保管人(由哈希“2_494_206_670”表示)。 此示例中的事件还说明了一个金额字段(由哈希“3_573_748_184”表示),传输了 10,000,000,000 燃料费。