Dfinity(icp)参考命令及规范-7
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
项目文件中每个容器的容器标识符。
例如,如果您有一个linkedup
由linkedup
和connectd
容器组成的项目,您可以使用CANISTER_ID_linkedup
和CANISTER_ID_connectd
环境变量来引用容器标识符——例如ryjl3-tyaaa-aaaaa-aaaba-cai
和rrkah-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
作为子类型列出,因为它可以是任何其他类型的子类型。同样,类型reserved
和opt t
也没有列为特定类型的超类型,因为它们是任何类型的超类型。有关的子类型规则的详细信息empty
,reserved
以及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.js
npm 包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.js
npm 包
Type natN 和 intN
类型nat8
, nat16
, nat32
, nat64
, int8
, int16
,int32
和int64
表示具有那么多位表示的数字,并且可以在更多“低级”接口中使用。
的范围natN
是{0 … 2^N-1}
,范围intN
是-2^(N-1) … 2^(N-1)-1
。
在线表示正是那么多位长。因此,对于较小的值,nat
比 更节省空间nat64
。
类型语法
nat8
,nat16
,nat32
,nat64
,int8
,int16
,int32
或int64
文本语法
同
nat
为nat8
,nat16
,nat32
,和nat64
。同int
为int8
,int16
,int32
和int64
。我们可以使用类型注释来区分不同的整数类型。
100 : nat8
-100 : int8
(42 : nat64)
对应的元子类型
natN
默认情况下转换为NatN
,但也可以WordN
在需要时对应。intN
翻译成IntN
.对应的 Rust 类型
相应大小的有符号和无符号整数。长度签未签名8 位i8u816 位i16u1632 位i32u3264 位i64u64
对应的 JavaScript 值
8 位、16 位和 32 位转换为数字类型。
int64
并nat64
转换为 中的BigNumber
对象bignumber.js
。
Type float32 and float64
类型float32
和float64
以单精度(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
对应于Float
。float32
并没有目前在元子表示。float32
Motoko 程序不能提供或使用坦率的接口。对应的 Rust 类型
f32
,f64
对应的 JavaScript 值
浮点数
Type bool
该bool
类型是一种逻辑数据类型,只能具有值true
或false
。
类型语法
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
对应于t
。vec t
可以翻译成BTreeSet
或HashSet
。vec record { KeyType; ValueType }
可以翻译成BTreeMap
或HashMap
。对应的 JavaScript 值
Array
,例如[ "text", "text2", … ]
Type opt t
该opt t
类型包含类型的所有值t
,再加上特殊的null
价值。它用于表示某些值是可选的,这意味着数据可能作为某种类型t
的值存在,或者可能作为值不存在null
。
该opt
类型可以嵌套(例如,opt opt text
),和的值null
和opt 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'
。t
是opt t
( 除非t
它本身是null
,opt …
或reserved
)的子类型。此外,由于与升级和高阶服务相关的技术原因,每个类型都是 的子类型opt t
,null
如果类型不匹配,则会产生。但是,建议用户不要直接使用该规则。超类型
每当
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
到所有具有文本字段的记录类型street
,city
以及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;
};
事实上,文本标签将被视为其领域的散列,并顺便说一句,address
和address2
是对偷拍同一类型。
如果省略标签,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.建表规约 [强制]表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是tinyint(1) ( 1表示是,0表示否). 说明:任何字段如果为非负数,必须是无符号. 正例:表达逻辑删除的 ...
- Bulk-Only传输协议 UFI命令块规范
USB设备分为5大类,即显示器.通信设备.音频设备.人机输入和海量存储.通常所用的U盘.移动硬盘均属于海量存储类.海量存储类的规范中包括4个独立的子规范,即CBI传输.Bulk-Only传输.ATA命 ...
- 保护网络安全的IPsec,怎么配置?配置步骤和参考命令奉上
网络中存在哪些安全隐患? IPsec如何解决这些安全隐患? IPsec的隧道模式和传输模式区别是什么? 华为设备如何配置IPsec? 如果你想IPsec相关概念和原理,可以看看我之前发过这篇:写文章- ...
- Dfinity (ICP)开发基本操作-4
Dfinity 开发基本操作 安装.升级或删除软件 直接从终端安装最新的 从终端 shell 下载和安装: 在本地计算机上打开终端外壳. 例如,在 macOS 上打开 Applications 文件夹 ...
- git 常见命令,规范 整理
move commit to stage area(把本地的1个commit还原到 暂存区) git reset --soft HEAD~1 把其他的commit的合并到现在到分支:git cherr ...
- Android Git 常用命令和规范
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/70332707 本文出自[赵彦军的博客] 文章目录 概念 git 操作流程图 专有名 ...
- Dfinity(ICP)基础开发教程-5
Dfinity 基础开发教程 教程概述 快速启动提供了没有停下来欣赏沿途的风景部署简单的默认应用程序快速路径. 此文章介绍了特定场景,并指出了在每个步骤中执行的操作和详细信息. 如果快速入门和教程不完 ...
- git常用命令及规范流程
参考地址:https://www.cnblogs.com/my--sunshine/p/7093412.html,感谢分享 官网地址:https://git-scm.com/book/zh/v2 gi ...
- git常用命令+git规范(附merge合并及冲突解决)
一.VCS版本控制系统 version control system(VCS),用于项目中存储.共享.合并.历史回退.代码追踪文件历史等功能. VCS软件: 2000年以前 2010年以前 2010年 ...
- python 命令行输入参数有误_python – 错误:参数太少,必须提供命令行包规范或–file...
当我运行conda命令来创建tensorflow环境时,它显示以下错误消息: (Anaconda3_411) C:\development\anaconda\Anaconda3_411>cond ...
最新文章
- Android 动画小知识点
- Java基础知识——异常Throwable和Exception
- BitBlt和StretchBlt的区别
- Android SDK tools,platform-tools,build-tools 区别
- lol韩服游戏内设置_lol韩服游戏内设置界面翻译
- Android下载文件
- Java Lambdas和低延迟
- 制作html弹窗,js制作一个简单的div弹窗:
- echarts实现动态的图表
- gcc “-I”(大写i),“-L”(大写l),“-l”(小写l)的区别
- 计算机兴趣小组活动总结,兴趣小组活动总结优秀范文
- OpenGL开发-第6章-纹理,让物体更漂亮
- 这可能是你能找到最全面的数据预处理介绍
- [Pyhon大数据分析] 五.人民网新闻话题抓取及Gephi构建主题知识图谱
- 特征锦囊:怎么找出数据集中有数据倾斜的特征?
- 创宇区块链|5 月安全月报
- java实行excel cell内换行
- java古典兔子问题(java50道经典编程题)
- 微型计算机的中央控制器包括,在微型计算机中CPU里控制器的作用是( )。
- 指南针为什么不叫指北针
热门文章
- NetBeans常用命令总结
- 有趣的23000词根
- iphone ios 手势
- DATAGUARD手记(DUPLICATE)(四)
- 无需外部晶振的SOP16封装串口扩展芯片/UART扩展芯片/1扩4芯片介绍及指令说明
- openbravo与淘宝对接文档一
- CloudStack快速安装使用
- 【无锡学院/南信大滨江学院】IOS快捷指令登陆校园网——Iphone12实测
- 2021/3/30前端百度笔试题
- Halcon区域形状特征-area_center、area_holes、select_shape、inner_circle和smallest_rectangle2算子