Dfinity参考命令及规范

DFX命令

DFINITY 命令行执行环境 ( dfx) 是用于创建、部署和管理您为 Internet Computer 区块链开发的应用程序的主要工具。

您可以使用dfx带有不同标志和子命令的父命令来执行不同类型的操作。

运行dfx命令的基本语法是:

dfx [option] [subcommand] [flag]

根据子命令,您指定的选项和标志可能适用于父命令或特定子命令。例如,用于启用或禁止详细日志记录的标志是dfx为父命令指定的,然后应用于任何子命令。

安装 DFINITY Canister SDK 后,您可以使用以下命令指定要执行的操作。有关说明如何使用这些命令的参考信息和示例,请选择适当的命令。

  • dfx
  • dfx bootstrap
  • dfx build
  • dfx cache
  • dfx canister
  • dfx config
  • dfx deploy
  • dfx help
  • dfx identity
  • dfx ledger
  • dfx new
  • dfx ping
  • dfx replica
  • dfx start
  • dfx stop
  • dfx upgrade
  • dfx wallet

DFX环境变量

您可以使用环境变量为 DFINITY Canister SDK 执行环境配置某些属性。

本节列出了当前支持的环境变量以及如何使用它们的示例。在大多数情况下,您可以通过在终端中执行命令或在文件中添加类似于以下内容的行来为会话设置环境变量.profile

export DFX_TELEMETRY_DISABLED=1

CANISTER_CANDID_PATH_{canister.name}

使用带有CANISTER_CANDID_PATH前缀的环境变量来引用在dfx.json项目文件中作为依赖项列出的容器的 Candid 描述文件的路径。

例如,如果您有一个在键下列出的whoami_assets容器,您可以使用环境变量来引用文件的位置,对于本地开发,它可能是:whoami``dependencies``CANISTER_CANDID_PATH_whoami_assets``whoami.did

$PROJECT_ROOT/.dfx/local/canisters/whoami/whoami.did

CANISTER_ID_{canister.name}

使用带有CANISTER_ID前缀的环境变量来引用dfx.json项目文件中每个容器的容器标识符。

例如,如果您有一个linkeduplinkedupconnectd容器组成的项目,您可以使用CANISTER_ID_linkedupCANISTER_ID_connectd环境变量来引用容器标识符——例如ryjl3-tyaaa-aaaaa-aaaba-cairrkah-fqaaa-aaaaa-aaaaq-cai——为您的项目创建。

DFX_CONFIG_ROOT

使用DFX_CONFIG_ROOT环境变量指定不同的位置来存储.cache和 的.config子目录dfx

默认情况下,.cache.config目录位于开发环境的主目录中。例如,在 macOS 上,默认位置在/Users/<YOUR-USER-NAME>目录中。使用DFX_CONFIG_ROOT环境变量为这些目录指定不同的位置。

DFX_CONFIG_ROOT=~/ic-root

DFX_INSTALLATION_ROOT

如果您不使用操作系统的默认位置,请使用DFX_INSTALLATION_ROOT环境变量为dfx二进制文件指定不同的位置。

.cache/dfinity/uninstall.sh脚本使用此环境变量来标识 DFINITY Canister SDK 安装的根目录。

DFX_TELEMETRY_DISABLED

使用DFX_TELEMETRY_DISABLED环境变量选择不收集有关dfx使用情况的数据。

默认情况下,dfx配置为收集匿名信息——即没有 IP 地址或用户信息等识别信息——有关dfx命令活动和错误的数据。默认情况下会启用收集匿名数据,以根据使用模式和行为改善开发人员体验。

但是,如果您想阻止收集有关dfx使用情况的数据,您可以通过将DFX_TELEMETRY_DISABLED环境变量设置为 1来明确选择退出。

DFX_TELEMETRY_DISABLED=1

DFX_VERSION

使用DFX_VERSION环境变量来标识要安装的 DFINITY Canister SDK 的特定版本。

DFX_VERSION=0.7.2 sh -ci "$(curl -fsSL https://sdk.dfinity.org/install.sh)"

支持的类型

本节列出了 Candid 支持的所有类型。对于每种类型,参考包括以下信息:

  • 类型语法和类型的文本表示的语法。
  • 每种类型的升级规则是根据类型的可能子类型超类型给出的。
  • Rust、Motoko 和 Javascript 中的对应类型。

子类型是您可以将方法结果更改为的类型。超类型是您可以将方法参数更改为的类型。

您应该注意,此参考仅列出了与每种类型相关的特定子类型和超类型。它不会重复有关可应用于任何类型的子类型和超类型的公共信息。例如,引用不会empty作为子类型列出,因为它可以是任何其他类型的子类型。同样,类型reservedopt t也没有列为特定类型的超类型,因为它们是任何类型的超类型。有关的子类型规则的详细信息emptyreserved以及opt t类型,请参阅以下部分:

  • opt t
  • reserved
  • empty

Type text

text类型用于人类可读的文本。更准确地说,它的值是 unicode 代码点序列(不包括代理部分)。

  • 类型语法

    text

  • 文本语法

""
"Hello"
"Escaped characters: \n \r \t \\ \" \'"
"Unicode escapes: \u{2603} is ☃ and \u{221E} is ∞"
"Raw bytes (must be utf8): \E2\98\83 is also ☃"
  • 对应的元子类型

    Text

  • 对应的 Rust 类型

    String 或者 &str

  • 对应的 JavaScript 值

    "String"

Type blob

blob类型可用于二进制数据,即字节序列。使用该blob类型编写的接口可以与使用vec nat8.

  • 类型语法

    blob

  • 文本语法

    blob <text>where<text>代表一个文本文字,所有字符都代表它们的 utf8 编码,以及任意字节序列 ( "\CA\FF\FE")。

  • 亚型

    vec nat8,以及 的所有子类型vec nat8

  • 超类型

    vec nat8,以及 的所有超类型vec nat8

  • 对应的元子类型

    Blob

  • 对应的 Rust 类型

    Vec<u8> 或者 &[u8]

  • 对应的 JavaScript 值

    [ 1, 2, 3, 4, ... ]

Type nat

nat类型包含所有自然(非负)数。它是无界的,可以表示任意大数。在线编码是 LEB128,因此仍然可以有效地表示小数。

  • 类型语法

    nat

  • 文本语法

1234
1_000_000
0xDEAD_BEEF
  • 超类型

    int

  • 对应的元子类型

    Nat

  • 对应的 Rust 类型

    candid::Nat 或者 u128

  • 对应的 JavaScript 值

    new BigNumber("10000")来自bignumber.jsnpm 包

    Type int

    int类型包含所有整数。它是无界的,可以表示任意的小数或大数。在线编码是 SLEB128,因此仍然可以有效地表示小数。

    • 类型语法

      int

    • 文本语法

    1234
    -1234
    +1234
    1_000_000
    -1_000_000
    +1_000_000
    0xDEAD_BEEF
    -0xDEAD_BEEF
    +0xDEAD_BEEF
    
    • 亚型

      nat

    • 对应的元子类型

      Int

    • 对应的 Rust 类型

      candid::Int 或者 i128

    • 对应的 JavaScript 值

      new BigNumber("-10000")来自bignumber.jsnpm 包

Type natN 和 intN

类型nat8, nat16, nat32, nat64, int8, int16,int32int64表示具有那么多位表示的数字,并且可以在更多“低级”接口中使用。

的范围natN{0 … 2^N-1},范围intN-2^(N-1) … 2^(N-1)-1

在线表示正是那么多位长。因此,对于较小的值,nat比 更节省空间nat64

  • 类型语法

    nat8, nat16, nat32, nat64, int8, int16,int32int64

  • 文本语法

    natnat8nat16nat32,和nat64。同intint8int16int32int64。我们可以使用类型注释来区分不同的整数类型。

100 : nat8
-100 : int8
(42 : nat64)
  • 对应的元子类型

    natN默认情况下转换为NatN,但也可以WordN在需要时对应。intN翻译成IntN.

  • 对应的 Rust 类型

    相应大小的有符号和无符号整数。长度签未签名8 位i8u816 位i16u1632 位i32u3264 位i64u64

  • 对应的 JavaScript 值

    8 位、16 位和 32 位转换为数字类型。int64nat64转换为 中的BigNumber对象bignumber.js

Type float32 and float64

类型float32float64以单精度(32 位)和双精度(64 位)表示 IEEE 754 浮点数。

  • 类型语法

    float32, float64

  • 文本语法

    与 相同的语法int,加上浮点文字如下:

1245.678
+1245.678
-1_000_000.000_001
34e10
34E+10
34e-10
0xDEAD.BEEF
0xDEAD.BEEFP-10
0xDEAD.BEEFp+10
  • 对应的元子类型

    float64对应于Floatfloat32没有目前在元子表示。float32Motoko 程序不能提供或使用坦率的接口。

  • 对应的 Rust 类型

    f32, f64

  • 对应的 JavaScript 值

    浮点数

Type bool

bool类型是一种逻辑数据类型,只能具有值truefalse

  • 类型语法

    bool

  • 文本语法

    true, false

  • 对应的元子类型

    Bool

  • 对应的 Rust 类型

    bool

  • 对应的 JavaScript 值

    true, false

    Type vec t(向量)

vec类型表示向量(序列、列表、数组)。type 的值vec t包含零个或多个 type 值的序列t

  • 类型语法

    vec bool, vec nat8, vec vec text, 等等。

  • 文本语法

vec {}
vec { "john@doe.com"; "john.doe@example.com" };
  • 亚型

    每当t是 的子类型时t',则vec t是 的子类型vec t'blob是 的子类型vec nat8

  • 超类型

    每当t是 的超类型时t',则vec t是 的超类型vec t'blob是 的超类型vec nat8

  • 对应的元子类型

    [T],其中 Motoko 类型T对应于t

  • 对应的 Rust 类型

    Vec<T>&[T],其中 Rust 类型T对应于tvec t可以翻译成BTreeSetHashSetvec record { KeyType; ValueType }可以翻译成BTreeMapHashMap

  • 对应的 JavaScript 值

    Array,例如 [ "text", "text2", … ]

Type opt t

opt t类型包含类型的所有值t,再加上特殊的null价值。它用于表示某些值是可选的,这意味着数据可能作为某种类型t的值存在,或者可能作为值不存在null

opt类型可以嵌套(例如,opt opt text),和的值nullopt null是不同的值。

opt类型扮演的偷拍接口的演变至关重要的作用,如后所述具有特殊的子类型规则。

  • 类型语法

    opt bool, opt nat8, opt opt text, 等等。

  • 文本语法

null
opt true
opt 8
opt null
opt opt "test"
  • 亚型

    子类型化的规范规则opt是:每当t是 的子类型时t',则opt t是 的子类型opt t'null是 的子类型opt t'topt t( 除非t它本身是null,opt …reserved)的子类型。此外,由于与升级和高阶服务相关的技术原因,每个类型都是 的子类型opt tnull如果类型不匹配,则会产生。但是,建议用户不要直接使用该规则。

  • 超类型

    每当t是 的超类型时t',则opt t是 的超类型opt t'

  • 对应的元子类型

    ?T,其中 Motoko 类型T对应于t

  • 对应的 Rust 类型

    Option<T>,其中 Rust 类型T对应于t.

  • 对应的 JavaScript 值

    null翻译成[].opt 8翻译成[8].opt opt "test"翻译成[["test"]].

Type record { n : t, … }

record类型是标记的值的集合。例如,下面的代码给出了名字address到所有具有文本字段的记录类型streetcity以及country和数字领域zip_code

type address = record {street : text;city : text;zip_code : nat;country : text;
};

记录类型声明中字段的顺序无关紧要。每个字段可以有不同的类型(与向量不同)。记录字段的标签也可以是 32 位自然数,如下例所示:

type address2 = record {288167939 : text;1103114667 : text;220614283 : nat;492419670 : text;
};

事实上,文本标签将被视为其领域的散列,并顺便说一句,addressaddress2是对偷拍同一类型。

如果省略标签,Candid 会自动分配按顺序增加的标签。此行为导致以下缩短的语法,通常用于表示对和元组。类型record { text; text; opt bool }相当于record { 0 : text; 1: text; 2: opt bool }

  • 类型语法
record {}
record { first_name : text; second_name : text }
record { "name with spaces" : nat; "unicode, too: ☃" : bool }
record { text; text; opt bool }
  • 文本语法
record {}
record { first_name = "John"; second_name = "Doe" }
record { "name with spaces" = 42; "unicode, too: ☃" = true }
record { "a"; "tuple"; null }
  • 亚型

    记录的子类型是具有附加字段(任何类型)的记录类型,其中某些字段的类型更改为子类型,或者删除了可选字段。但是,删除方法结果中的可选字段是不好的做法。您可以将字段的类型更改为opt empty以指示不再使用该字段。例如,如果您有一个函数返回以下类型的记录:

record {first_name : text; middle_name : opt text; second_name : text; score : int
}

您可以将其演变为返回以下类型记录的函数:

record {first_name : text; middle_name : opt empty; second_name : text; score : nat; country : text
}

在我们已弃用该middle_name字段的地方,更改了该字段的类型score并添加了该country字段。

  • 超类型

    记录的超类型是删除了某些字段、某些字段的类型更改为超类型或添加了可选字段的记录类型。后者允许您使用附加字段扩展参数记录。使用旧接口的客户端不会在其记录中包含该字段,该字段将在升级服务中按预期解码为null.例如,如果您有一个需要类型记录的函数:

record { first_name : text; second_name : text; score : nat }

您可以将其演变为期望类型记录的函数:

record { first_name : text; score: int; country : opt text }
  • 对应的元子类型

    如果记录类型看起来像是可以引用元组(即从 0 开始的连续标签),则使用 Motoko 元组类型(例如(T1, T2, T3))。否则,使用 Motoko 记录({ first_name :Text, second_name : Text })。如果字段名称是 Motoko 中的保留名称,则会附加一个反下划线。所以record { if : bool }对应于{ if_ : Bool }。如果(即使如此)字段名称不是有效的 Motoko 标识符,则使用字段哈希代替:record { ☃ : bool }对应于.{ *11272781* : Boolean }

  • 对应的 Rust 类型

    struct#[derive(CandidType, Deserialize)]trait定义的用户。您可以使用该#[serde(rename = "DifferentFieldName")]属性来重命名字段名称。如果记录类型是元组,则可以将其转换为元组类型,例如(T1, T2, T3).

  • 对应的 JavaScript 值

    如果记录类型是元组,则将值转换为数组,例如["Candid", 42].否则它会转换为记录对象。例如,{ "first name": "Candid", age: 42 }。如果字段名称是散列,我们使用_hash_作为字段名称,例如,{ _1_: 42, "1": "test" }

Type variant { n : t, … }

variant类型表示一个值,该值是从给定的情况下,或只有一个标签。所以类型的值:

type shape = variant {dot : null;circle : float64;rectangle : record { width : float64; height : float64 };"												

Dfinity(icp)参考命令及规范-7相关推荐

  1. 数据库规范设计说明书(参考阿里开发规范)

    1.建表规约 [强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是tinyint(1) ( 1表示是,0表示否). 说明:任何字段如果为非负数,必须是无符号. 正例:表达逻辑删除的 ...

  2. Bulk-Only传输协议 UFI命令块规范

    USB设备分为5大类,即显示器.通信设备.音频设备.人机输入和海量存储.通常所用的U盘.移动硬盘均属于海量存储类.海量存储类的规范中包括4个独立的子规范,即CBI传输.Bulk-Only传输.ATA命 ...

  3. 保护网络安全的IPsec,怎么配置?配置步骤和参考命令奉上

    网络中存在哪些安全隐患? IPsec如何解决这些安全隐患? IPsec的隧道模式和传输模式区别是什么? 华为设备如何配置IPsec? 如果你想IPsec相关概念和原理,可以看看我之前发过这篇:写文章- ...

  4. Dfinity (ICP)开发基本操作-4

    Dfinity 开发基本操作 安装.升级或删除软件 直接从终端安装最新的 从终端 shell 下载和安装: 在本地计算机上打开终端外壳. 例如,在 macOS 上打开 Applications 文件夹 ...

  5. git 常见命令,规范 整理

    move commit to stage area(把本地的1个commit还原到 暂存区) git reset --soft HEAD~1 把其他的commit的合并到现在到分支:git cherr ...

  6. Android Git 常用命令和规范

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70332707 本文出自[赵彦军的博客] 文章目录 概念 git 操作流程图 专有名 ...

  7. Dfinity(ICP)基础开发教程-5

    Dfinity 基础开发教程 教程概述 快速启动提供了没有停下来欣赏沿途的风景部署简单的默认应用程序快速路径. 此文章介绍了特定场景,并指出了在每个步骤中执行的操作和详细信息. 如果快速入门和教程不完 ...

  8. git常用命令及规范流程

    参考地址:https://www.cnblogs.com/my--sunshine/p/7093412.html,感谢分享 官网地址:https://git-scm.com/book/zh/v2 gi ...

  9. git常用命令+git规范(附merge合并及冲突解决)

    一.VCS版本控制系统 version control system(VCS),用于项目中存储.共享.合并.历史回退.代码追踪文件历史等功能. VCS软件: 2000年以前 2010年以前 2010年 ...

  10. python 命令行输入参数有误_python – 错误:参数太少,必须提供命令行包规范或–file...

    当我运行conda命令来创建tensorflow环境时,它显示以下错误消息: (Anaconda3_411) C:\development\anaconda\Anaconda3_411>cond ...

最新文章

  1. 机器学习常用损失函数总览:基本形式、原理、特点
  2. HDU 1428 漫步校园
  3. iphone和android,iPhone 和 Android 产品经理有哪些异同?
  4. asp.net 页面全生命周期
  5. mysql 不停机_mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)
  6. [转]vc++ release 版的生成
  7. springboot系列十二 Spring-Data-ElasticSearch Jpa、QueryBuilder、MatchQuery、位置搜索、GeoPoint...
  8. 7个最优秀的手机游戏引擎
  9. c语言程序设计数组说课,C语言程序设计说课PPT课件(超好)
  10. Elasticsearch 解决集群 Yellow 与 Red 的问题
  11. 浅谈面试中常提到的乐观锁与悲观锁
  12. lpc1768的gpio库函数_LPC1768之GPIO输入和输出配置基础例程
  13. 【软件测试】如何梳理你测试的业务
  14. 准备交赎金?当心Phobos勒索病毒二次加密!
  15. Redis——Redis事务性原理
  16. 计算机科学与技术8G够,高手们.请问8G物理内存设置多少虚拟内存适合
  17. 金融业分布式数据库选型及HTAP场景实践
  18. PR 2022 最新重大更新 离线语音转文本教程
  19. C语言浮点数IEEE754
  20. 人脸定位原来这么简单,小白也能上手人脸识别——人脸识别概述

热门文章

  1. 非洲正在打造一个与硅谷完全不同的人工智能产业
  2. 易语言 文件捆绑机的原理【转载】
  3. vlan PVID和VID详解
  4. Ubuntu压缩文件的分卷压缩和解压
  5. WMTS服务及地图瓦片原理
  6. arm嵌入式系统C语言代码,ARM嵌入式系统C语言编程.pdf
  7. 【历史上的今天】11 月 28 日:中国顶级域名 CN 被注册;上世纪最大的论坛诞生;首个 Fortran 程序开发者逝世
  8. 当yum安装包时显示系统空间不足,求指教
  9. 前沿科技分论坛精彩回顾 | 第二届始祖数字化可持续发展峰会
  10. 仿牛客社区项目3.2——发布帖子(异步通信技术AJAX)