IC 入门课第二课
课程大纲
- 使用 SDK 搭建一个简易网站
- Motoko 语言简介
- Canister 智能合约
- 用 Motoko 做后端
- 用 Javascript 做前端
第二课-课程要求
用 motoko 实现一个快排函数:
quicksort : [var Int] -> ()
要求:
- 用 moc 调试运行
- 把函数封装在一个 canister 里面
public func qsort(arr: [Int]): async [Int] - 部署到主网
- 使用主网的 Candid UI 调试运行
https://a4gq6-oaaaa-aaaab-qaa4q-cai.raw.ic0.app
课程内容回顾
ICP上的智能合约
Motoko 编程语言基本介绍
ICP 为什么需要一门新的语言?
- 不是必须的,C, C++, Rust 都可以编译到 Wasm
- 缺少一个高级语言同时满足:安全、高效、容易上手
- 适配平台特性:Actor 模型、权限管理、代码升级、跨语言调用
1.Motoko 语言的特点
- 静态类型,语法接近 JavaScript/TypeScript
- 面向对象,但不支持继承
- 支持 await/async 异步通信
- 结构化类型推断
- 安全的数值计算
- 没有 NULL 指针
- 自动内存回收机制 (GC, copying/compacting/generational)
2.Motoko 基础概念
- 程序 (program)
- 声明 (declaration)
- 表达式 (expression)
- 值 (value)
- 变量 (variable)
- 类型 (type)
官方介绍文档:https://smartcontracts.org/docs/language-guide/motoko-introduction.html
注意点:
- 使⽤ := 作为通⽤赋值运算符
- 代码块结束需 ;
- 声明可变变量需 var 语法
- 如果方法有返回值,最后一行代码块表示返回语句,可以不加分号
3.Motoko 基础库
数字类型:Int Int8 Int16 Int32 Int64 Nat Nat8 Nat16 Nat32 Nat64 Float
常用类型:Bool Char Array Text Option Result Iter Func None Hash
数据结构:Buffer List AssocList Stack Deque Heap RBTree HashMap Trie TrieMap TriSet
系统工具:Principal Blob Random CertifiedData Time Debug Prelude
https://smartcontracts.org/docs/base-libraries/stdlib-intro.html
https://github.com/dfinity/motoko-base
4.Motoko Canister
每个 Canister 都是一个 Actor,它的公共方法 (public method) 可供异步调用。
1 | actor { |
数据描述语言 Candid 用来规范 Canister 所提供的数据类型、服务接口等。
1 | service : { |
candid介绍:What is Candid?
5.moc编译器
1 | # 查看编译器位置 |
VS Code 插件
主要是Vs Code插件的演示,
- WSL插件
- motoko代码编译检查插件:需要在project的根目录下打开vscode . 代码提示才有效果
Candid UI
本地:http://127.0.0.1:8000/?canisterId=r7inp-6aaaa-aaaaa-aaabq-cai
ic:https://a4gq6-oaaaa-aaaab-qaa4q-cai.raw.ic0.app/
Motoko Playground
地址:https://m7sm4-2iaaa-aaaab-qabra-cai.raw.ic0.app/
作业点评
- 快排的学习和使⽤
- 边界检查:
- 空数组报错
- 分治点报错
- 数组下标越界
- 语法的学习和使⽤
示例:
1 | import Array "mo:base/Array"; |
官方示例:https://github.com/dfinity/examples/blob/master/motoko/quicksort/src/Quicksort.mo