IC中的账户及相关操作

账户分类

在IC中有如下三个账户:

  • identity:identity账户是主体标识,其可以与ICP账户(account id)相互映射,并且identity是控制canister的钥匙。

  • ledger:ledger账户是ICP账户(account id),所有和ICP相关的操作都在ledger中进行。

  • wallet:wallet账户是部署了cycle wallet程序的canister,identity必须设置了wallet才能部署canister。

principal

principal 首次使用 DFINITY Canister SDK 时,dfx 命令行工具会使用 PEM 文件中的公钥/私钥对为您创建默认的开发人员身份。开发人员身份是由派生的principal数据类型和代表principal的文本进行表示,也就是principal identifier(主体身份)。

account id

开发人员身份还可用于派生出account id(帐户标识符,类似于比特币或以太坊地址),用于在ledger canister中持有 ICP 代币。

wallet

wallet 在 Internet Computer上,钱包是一种专门用于cycle的应用程序。钱包应用程序被实现为一个canister,并在互联网计算机上运行。

钱包使您能够管理cycle余额,将ICP代币转换为cycle,将cycle分发到您自己或其他用户的canister中作为访问或提供互联网服务的一种方式。

当需要创建canister或者操作canister时,必须要绑定一个wallet canister到当前主体标识才可以进行操作。

操作

在整个IC中账户操作有如下一些:

  • DFX canister SDK第一次使用时就会关联一个主体标识(principal identity)。使用命令: dfx identity get-principal 可以获取当前主体标识。
  • 每个主体标识都会派生出一个在leger canister中唯一标识的account id,类似address。使用命令: dfx ledger account-id 可以获取当前的ICP地址。
  • 第一个canister需要使用leger canister创建,并指定canister的controller,并会向其中存入指定数量cycle。使用命令: dfx ledger --network ic create-canister tsqwz-udeik-5migd-ehrev-pvoqv-szx2g-akh5s-fkyqc-zy6q7-snAV6-uqe --amount .25 可以创建一个canister,并指定了controller主体以及初始化的cycle。
  • 第一个创建的canister是空的,需要对其部署wallet程序来创建一个wallet canister。使用命令: dfx identity --network ic deploy-wallet gastn-uqaaa-aaaae-aaafq-cai 可以在创建的一个canister中部署wallet程序。该canister称为wallet canister。
  • 默认情况下部署wallet后,该wallet canister会作为当前主体的cycle wallet,也可以使用如下命令设置当前主体的cycle wallet: dfx identity --network ic set-wallet --force gastn-uqaaa-aaaae-aaafq-cai 成功设置后,当前identity使用该cycle wallet进行canister操作。
  • 当前主体存在cycle wallet后,就可以使用canister相关操作。例如命令: dfx deploy --network ic 部署当前project中的所有canister,部署完成后,这些canister的controller为当前主体。

controller

controller是具有特殊权限的身份,该权限用于管理其控制的canister。只有controller身份可用于安装、升级或删除其控制的canister。

可以使用与user或canister关联的principal identifier来指定controller身份。

ledger canister

ledger Internet Computer将所有涉及ICP代币的交易在一个被称为ledger canister的管理canister中进行记录。ledger canister中是一个简化的并行区块链,它与其他网络管理canister一起在互联网计算机的子网中运行。

ledger canister实现了一个智能合约,该合约持有账户和余额,并保留影响账户和余额的交易历史。记录交易用以跟踪以下特定事件:

  • 铸造 ICP 代币。
  • 转移 ICP 代币。
  • 燃烧 ICP 代币。