diff --git a/docusaurus/docs/getting-started/dev-account/img/account.png b/docusaurus/docs/getting-started/dev-account/img/account.png new file mode 100644 index 0000000..f5bc8ba Binary files /dev/null and b/docusaurus/docs/getting-started/dev-account/img/account.png differ diff --git a/docusaurus/docs/getting-started/dev-account/index.md b/docusaurus/docs/getting-started/dev-account/index.md new file mode 100644 index 0000000..9ba3566 --- /dev/null +++ b/docusaurus/docs/getting-started/dev-account/index.md @@ -0,0 +1,146 @@ +--- +title: 开发者账号 +image: './img/account.png' +description: '' +keywords: [DFINITY, ICP, IC, 互联网计算机, developer, 开发者, account, 账号,主体,身份] +--- + +import TeamContact from '../../contact.md'; + +# 开发者账号 + +![img](./img/account.png) + +## 概览 {#overview} + +ICP 开发者[账号](https://ic123.xyz/docs/getting-started/ic-glossary/#account)、或者[身份](https://ic123.xyz/docs/getting-started/ic-glossary/#identity),使用公私钥对进行身份验证。账号由[主体](https://ic123.xyz/docs/getting-started/ic-glossary/#principal)来标识。主体则是一个通用的标识,用于表示用户、容器以及一些将来的其他概念。开发者账号的主体值是从账号对应的公钥中派生出来的。 + +ICP 开发者账号类似比特币或以太坊的钱包地址,其中一个主要的区别在于 ICP 账号没有初始余额。 + +## ICP 身份术语 {#icp-identity-terms} + +与 ICP 身份相关的术语还包括: + +- 账本账号标识符:与您的 ICP 账本账号相关联的标识符。 + +- 钱包:用于存储各种代币。开发者主要使用 cycles 钱包来管理开发智能合约所需的 cycles。 + +- 互联网身份 (Internet Identity) :ICP 的原生身份验证服务。互联网身份不使用用户名和密码、而是使用存储在本地设备硬件中的通行密钥 (passkey)。 + +### 账本与钱包的区别 {#ledger-wallet-difference} + +在 ICP 上,账本是一个系统容器、用于存储账号及其交易。用户拥有一个账本账号标识符,账本账户用于持有 ICP 代币。要获取您的账本账户的信息,您需要查询账本系统容器。 + +ICP 上的钱包则用于存储 cycles,这些 cycles 可以发送给容器、以支付其消耗的资源。 + +在典型的开发者工作流程中,开发者会将 ICP 代币存入对应的账本账户,然后将这些代币转换为 cycles 存储在 cycles 钱包中。 + +## 创建账号 {#creat-account} + +要创建一个新的开发者账户,请使用 [IC SDK](https://ic123.xyz/docs/getting-started/install-dfx/) 工具 `dfx`,命令如下所示: + +```bash +dfx identity new +``` + +使用 `dfx` 创建的身份是全局的,并不限于某个特定项目。身份名称必须使用以下字符:`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-_@0123456789` + +### 存储账户密钥 + +当使用 `dfx` 创建新的身份时,私钥会存储在 `~/.config/dfx/identity//identity.pem` 文件中。请务必将此文件备份到安全的地方。 + +另外您可以使用 `--storage-mode` 标志来创建受密码保护的 PEM 文件、或明文 PEM 文件。以下是一些示例: + +```bash +dfx identity new --storage-mode password-protected +``` + +或者: + +```bash +dfx identity new --storage-mode plaintext +``` + +更多关于创建账号的信息,请参考[该指南](https://ic123.xyz/docs/getting-started/use-dfx/#create-identity)。 + +## 获取账号主体 {#get-principal} + +您可以通过以下命令获取账号的主体标识符: + +```bash +dfx identity use +dfx identity get-principal +``` + +主体标识符的格式类似于: + +``` +itk7v-ihlxk-ktdrh-fcnst-vkoou-orj77-52ogl-jqwj5-zpfdv-az3lr-xqe +``` + +您还可以通过运行以下命令来检查相应的私钥: + +```bash +dfx identity export default +``` + +结果类似如下所示: + +``` +-----BEGIN EC PRIVATE KEY----- +MHQCAQEEIIGTvo7+8q+dRVoDWPVp1hBziKUEOffo1PDkY2Vn8sKMoAcGBSuBBAAK +oUQDQgAEXFFBa0oxGdamv537nusjtgVuzElEMtEbbj4dQ1xyu2WMa+PU9q9LIK26 +Ar821EwGwp1Qc9Vv93FGPTvRb4HVXQ== +-----END EC PRIVATE KEY----- +``` + +## 导入账号 {#import-account} + +您可以使用以下命令将现有的 PEM 文件导入成为您的身份: + +```bash +dfx identity import pem_file-name +``` + +此命令也支持 `--storage-mode` 标志,允许导入受密码保护的 PEM 文件、或明文 PEM 文件。 + +## 如何充值 ICP {#top-up-icp} + +当您拥有了开发者账号,您需要使用 ICP 来充值该账号。首先,您需要使用以下命令获取账户的账本账号标识符: + +```bash +dfx identity use +dfx ledger account-id +``` + +该命令将返回对应账号在 ICP 账本上的账号编号: + +``` +e213184a548871a47fb526f3cba24e2ee2fbbc8129c4ab497ef2ce535130a0a4 +``` + +接下来您需要将 ICP 代币发送到该账本账号标识符。您可以通过以下途径获取 ICP 代币: + +- 直接通过交易所购买 ICP 代币,请查看[该页面](https://coinmarketcap.com/currencies/internet-computer/#markets)以了解可以购买 ICP 代币的交易所; + +- 通过参与 [IC 治理](https://ic123.xyz/docs/ic-web3/stake-icp/)的奖励获得代币。; + +- 通过 Internet Computer Association(ICA)或 DFINITY 基金会的 [grant 计划](https://ic123.xyz/docs/ecosystem-guide/dev-grants/)获得代币; + +- 作为[节点提供者](https://ic123.xyz/docs/ecosystem-guide/node-provider-faq/)获得 ICP 代币,以作为提供算力的报酬。 + +当您的账号中收到了 ICP 代币,您可以使用以下命令查看余额: + +```bash +dfx ledger balance --network ic +``` + +结果类似如下所示: + +``` +19.420000 ICP +``` + +更多关于 ICP 账本的命令,请参考[该指南](https://ic123.xyz/docs/getting-started/use-dfx/#ledger)。 + + diff --git a/docusaurus/docs/getting-started/dev-workflow/img/developer-build.png b/docusaurus/docs/getting-started/dev-workflow/img/developer-build.png new file mode 100644 index 0000000..99cd6ff Binary files /dev/null and b/docusaurus/docs/getting-started/dev-workflow/img/developer-build.png differ diff --git a/docusaurus/docs/getting-started/dev-workflow/img/developer-call.png b/docusaurus/docs/getting-started/dev-workflow/img/developer-call.png new file mode 100644 index 0000000..7ed8d38 Binary files /dev/null and b/docusaurus/docs/getting-started/dev-workflow/img/developer-call.png differ diff --git a/docusaurus/docs/getting-started/dev-workflow/img/workflow.jpg b/docusaurus/docs/getting-started/dev-workflow/img/workflow.jpg new file mode 100644 index 0000000..32cf93d Binary files /dev/null and b/docusaurus/docs/getting-started/dev-workflow/img/workflow.jpg differ diff --git a/docusaurus/docs/getting-started/dev-workflow/index.md b/docusaurus/docs/getting-started/dev-workflow/index.md new file mode 100644 index 0000000..01d13b9 --- /dev/null +++ b/docusaurus/docs/getting-started/dev-workflow/index.md @@ -0,0 +1,63 @@ +--- +title: 开发流程 +image: './img/workflow.jpg' +description: '' +keywords: [DFINITY, ICP, IC, 互联网计算机, developer, 开发者, workflow] +--- + +import TeamContact from '../../contact.md'; + +# 开发流程 + +![img](./img/workflow.jpg) + +## 概览 {#overview} + +ICP (Internet Computer Protocol) 接受并执行以 WebAssembly (Wasm) 二进制格式编写的智能合约。理论上,开发者可以直接在 Wasm 字节码中编写有效的智能合约。然而这样做过于繁琐且耗时,标准做法是使用更高级的编程语言(例如 JavaScript/TypeScript, Motoko, Python 或 Rust )编写智能合约代码,然后将其编译成 Wasm。 + +ICP 生态系统中的主要开发工具是 dfx。dfx 是一个命令行多功能工具,在整个开发过程中开发者都会用到它:从生成开发者密钥,到设置新项目,进而到编译、部署和管理智能合约。 + +![img](./img/developer-build.png) + +默认情况下,dfx 生成的项目结构会包含两个智能合约:前端[容器](https://ic123.xyz/docs/getting-started/ic-glossary/#canister)和后端容器。 + +- 前端容器包含 Web 资产,如 JavaScript、HTML、CSS 和图像,这些资产会提供给浏览器; +- 后端容器则定义了智能合约的实际程序逻辑。 + +:::info + +前端和后端容器的配置只是一种约定。实际上您可以编写一个单一的容器,它既包含了智能合约的程序逻辑、又托管了 Web 资产。 + +::: + +由于智能合约可以使用不同的编程语言编写,因此它们都需要在接受参数和返回结果的二进制格式上达成一致。这种通用格式允许用户和智能合约调用其他智能合约,而不用关心它们是用哪种语言编写的。在传统编程中,这个概念被称为[应用程序二进制接口](https://en.wikipedia.org/wiki/Application_binary_interface)(ABI)。ICP 拥有自己的 ABI 语言,称之为 [Candid](https://ic123.xyz/docs/getting-started/ic-glossary/#candid),它类似于 JSON 或 Protobuf、但专为 ICP 而定制。 + +在开发过程中,dfx 使用后端的 ABI 自动生成前端的 JavaScript 样板代码。生成的样板代码在底层使用了一个名为 [agent-js](https://github.com/dfinity/agent-js/tree/main) 的库对 Candid 值进行编码,并从浏览器向后端容器发出 HTTP 请求。您可以认为 agent-js 类似于以太坊中的 web3.js。 + +[Wasm 标准](https://webassembly.org/)仅定义了 Wasm 虚拟机的指令和内存。至于 Wasm 程序如何与其他程序和用户交互则由托管虚拟机的宿主决定。ICP 作为 Wasm 的宿主,提供了一组函数供 Wasm 代码读取传入的参数、调用系统和其他智能合约、并返回结果,这些函数统称为**系统 API** 。开发者不应直接使用系统 API,因为过于底层且容易出错。相反,开发人员应使用特定语言的容器开发包 (CDK),这些库是对系统 API 的高级封装。 + +## 部署智能合约 {#deploying-smart-contracts} + +开发者可以在本地测试网络或 ICP 主网上部署智能合约。本地测试网络内置于 dfx 中,可以通过 `dfx start` 命令运行。本地测试网络由单个节点(即本地计算机)组成。请注意,截至目前 ICP 没有官方的公共测试网络。 + +开发者需要 ICP 代币或 cycles 以在 ICP 主网上部署智能合约。使用 ICP 代币时,dfx 会自动将所需数量的代币转换为 cycles,这是因为所有与智能合约相关的操作都需要使用 cycles 进行支付。有关如何获取 cycles 的更多信息,请参阅[此指南](https://ic123.xyz/docs/getting-started/get-cycles/)。 + +部署智能合约的命令是 `dfx deploy`,它会自动将源代码构建为 Wasm 二进制文件、并将其部署到目标网络。默认情况下该命令会针对本地测试网络,通过传递额外的 `–-network ic` 参数,可以指示该命令使用主网进行部署。这里无需指定要连接的节点的 URL,因为 dfx 已经预先配置了主网边界(RPC)节点的 URLs,但是您可以通过编辑 dfx 配置文件来更改 URL。 + +更多关于 dfx 开发相关的命令请参考[该指南](https://ic123.xyz/docs/getting-started/use-dfx/#development)。 + +## 调用智能合约 {#calling-smart-contracts} + +通常调用后端智能合约的方法有三种: + +- 使用浏览器加载托管在前端智能合约中的网页,并使用网页的用户界面与后端智能合约进行交互。 + 在底层,用户界面使用 JavaScript 和 agent-js 向后端智能合约发送消息。这是普通用户与智能合约交互的标准方式。 + +- 使用 `dfx canister call` 命令,并将输入参数作为命令行参数传递。 + 在底层,dfx 使用名为 `ic-agent` 的 Rust 库向智能合约发送消息。 + +- 编写一个链下程序,并使用[代理库](https://internetcomputer.org/docs/current/developer-docs/developer-tools/off-chain/agents/overview)向后端智能合约发送消息。 + +![img](./img/developer-call.png) + + diff --git a/docusaurus/sidebars.js b/docusaurus/sidebars.js index 3920f71..3cf94c3 100644 --- a/docusaurus/sidebars.js +++ b/docusaurus/sidebars.js @@ -19,7 +19,9 @@ const sidebars = { newbieSidebar: [ "getting-started/hello-world/index", "getting-started/icp-overview/index", + "getting-started/dev-workflow/index", "getting-started/install-dfx/index", + "getting-started/dev-account/index", "getting-started/get-cycles/index", "getting-started/ic-glossary/index", "getting-started/use-dfx/index",