查看原文
其他

互联网计算机基础 - 第 1 部分:主体和身份

DFINITY 2022-07-07


这篇文章启动了互联网计算机基础系列,其中定义了“主体”(principal)和“身份”(identity)来管理部署在互联网计算机上的应用程序。


关于这个系列


在本系列中,我将介绍开发人员在开始与互联网计算机交互和构建简单应用程序时需要了解的基本概念。


如果您已经具备构建 Web 应用程序的背景,至少了解一种编程语言,并且能够通过命令行与您的计算机进行交互,那么示例将更容易理解。


在第一篇文章中,我们将开始熟悉主体和身份的概念,以管理部署到互联网计算机的应用程序。


什么是互联网计算机?


互联网计算机(Internet Computer)是一个用于构建互联网应用程序的新平台,它结合了 AWS 等云提供商的功能与 Ethereum 或 Solana 等分布式区块链的功能。互联网计算机非常适合三个用例:


  • 使网络/移动应用程序更加透明、弹性和抗审查;


  • 加速代币、NFT、DeFi 等区块链应用程序以网络速度运行,比以太坊等区块链快数百或数千倍且成本更低;


  • 将这两种类型的应用程序组合到一个包中,允许开发人员提供新型服务,如下一代 NFT 和开放治理。


在实施层面,互联网计算机是一个遍布全球的分布式数据中心(节点)网络,运行应用程序代码并存储数据。互联网计算机是一种协议,这意味着节点的网络是开放的,因此任何人都可以加入以提供计算能力并赚取 Gas 费作为回报。


互联网计算机应用程序由称为容器的简单构建块组成,您可以将容器视为类似于面向对象编程中的对象的东西。容器结合了代码和数据,可以与外部世界进行通信,包括用户、网络服务和其他容器。


什么是“主体”?


“主体”(principal)是互联网计算机上开发人员或容器的标识符,大多数情况下,当开发人员部署和管理互联网计算机容器时,我们使用主体来识别他们。


以下是主体的文本表示示例:



主体类似于公共 SSH 密钥,例如,您将公共 SSH 密钥添加到 GitHub 以便能够访问私有存储库。同样,您需要将您的主体注册到您计划在未来与之交互的服务中。主体(如公共 SSH 密钥)不是机密的,因此您可以在需要时与任何人共享它们。


主体和公共 SSH 密钥的典型属性:


  • 他们不是秘密;


  • 他们需要注册您需要访问的服务;


  • 您需要一个额外的密钥来进行身份验证(不用担心 - 您已经自动创建了一个)。


为什么需要主体?


作为开发人员,您需要一个主体来向互联网计算机表明自己的身份,以执行以下功能:


  • 部署容器(与部署 dapp 或智能合约相同);


  • 与已部署的容器交互,例如,通过调用容器的方法;


  • 管理容器,例如,停止或更改参数,以及管理托管付款(请参阅后面关于 Cycle Wallets 的文章)。


容器使用主体来确保每个操作仅由授权用户执行,例如,用户需要将自己标识为特定主体,以便能够使用更新的代码重新部署容器或将容器支付余额转移到另一个钱包。


互联网身份(Internet Identity)在幕后也使用主体来向各种面向用户的 dapp 识别您,但是,在这种情况下,您很少会直接看到您的主体。


如何获得当前主体?


大多数时候,您将在 IC dapp 开发过程中与主体互动。在您的开发机器上,您可以通过在控制台中输入以下命令来获取当前主体:



请注意,您需要先安装并运行 dfx 命令,然后才能看到您的主体。


什么是“身份”?


由于主体是非对称加密密钥对的公钥的文本表示,因此每个主体都有一个关联的私钥。这两个密钥都存储为一个称为“身份”(identity)的对象,您可以在您的机器上安装多个身份,并且每个身份都有一个名称。


虽然名称相似,但像 Identities 这样的命令不同于通过 Internet Identity 服务创建的 Web 身份。


身份存储在 ~/.config/dfx/identity/<identity_name>/identity.pem 路径的用户目录中,命令行应用程序将使用该 .pem 文件向服务确认您的身份。此过程类似于访问 SSH 服务器,您需要私有 SSH 密钥来证明您的身份并访问您之前添加公钥的服务器。


如果您丢失了您的身份文件(例如,丢失了您的计算机),您将无法再将自己标识为该主体。


身份 .pem 文件是高度机密的,你永远不应该与任何人分享它们。


默认情况下,当 dfx 第一次在您的新机器上运行时会创建一个新身份。此身份称为“默认身份”,默认情况下将用于所有 IC 交互,除非您手动选择其他身份。


您还可以从创建身份的旧计算机复制您的身份,因为您可以复制您的 SSH 密钥。


如何管理多个身份?


您可以在同一台机器上安装多个身份,要创建新身份,您可以运行 dfx identity new <identity_name>。例如,您可以运行以下命令来创建一个新的身份名称 “new_identity”:



要切换身份,您可以使用 dfx identity use <identity_name>



要获取当前使用的主体,您可以使用 dfx identity whoami



要获取所有身份的列表,可以使用 dfx identity list 命令:



如何在机器之间复制身份?


正如我之前提到的,您可以在机器之间复制您的身份,以避免向您的服务注册多个主体,此过程类似于在计算机之间复制 SSH 密钥。


首先,您需要从创建身份 .pem 文件的原始计算机复制您的身份文件,每个身份的 .pem 文件存储在 ~/.config/dfx/identity/<identity_name>/identity.pem


假设您将 identity.pem 文件从旧计算机复制到 ~/import/identity.pem 新计算机上,然后,您可以运行此命令来导入此文件以识别为这台计算机上的身份之一:



然后您可以通过调用来激活导入的身份:



如何为容器设置主体?


部署容器时,需要确保将当前主体设置为容器控制器,控制器是由其负责人确定的可以管理容器的人员,例如:


  • 部署和更新容器;


  • 容器钱包中的 Cycles 控制(用于支付计算和数据存储费用)。


要显示其中一个容器的主体,您可以运行 dfx canister status <canister_name>。例如:



要将其中一个身份设置为控制器,您可以使用 dfx canister update-settings <canister_name> --controller <identity_name_or_principal_id>。例如:



总结


主体是标识容器和用户的公钥的文本表示,每个委托人都是身份的一部分,一对公钥(主体)和一个秘钥。


身份信息存储在您机器上的 ~/.config/dfx/identity 文件夹中。


管理身份需要了解一些命令:


  • dfx identity import - 在机器之间复制身份并导入它们


  • dfx identity new - 创造一个新的身份


  • dfx identity use - 在身份之间切换


  • dfx identity whoami - 检查当前使用的身份


在本系列的下一篇文章中,我们将介绍 Cycles 钱包以及如何支付在 ICP 上托管您的容器的费用。


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



作者:Mikhail Turilin

翻译:Catherine



-              -


ORIGYN 基金会与欧足联儿童基金会达成合作

如何对 DeFi 和 NFT 进行“自己的研究”

互联网计算机更新:可持续性提案、IC 采用和 Distrikt Pod





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


长按关注 DFINITY 微信公众号

随时答疑解惑


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


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

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