IC 入门课第一课

课程大纲

  1. 使用 SDK 搭建一个简易网站
  2. Motoko 语言简介
  3. Canister 智能合约
  4. 用 Motoko 做后端
  5. 用 Javascript 做前端

第一课-课程要求

  1. 使用 SDK 搭建一个简易网站
    dfx new –no-frontend
  2. 领取 cycles 钱包
  3. 将网站部署到 ic0.app 主网
  4. 思考题:假如开发团队不再维护代码了,用户该怎么办?

DFINITY 开发者中心,下载 DFINITY Canister SDK

1
sh -ci "$(curl -fsSL https://smartcontracts.org/install.sh)"

使用 DFINITY Canister SDK

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 新建项目 

# 将以下命令中 <project_name> 替换成自己的项目名称

dfx new <project_name> --no-frontend

# 2. 启动项目,加上 --backgroud 可以运行在后台

dfx start

# 3. 部署项目到本地网络,在logs中可以看到canister_id

dfx deploy

# 4. 访问部署在本地的项目(仅限assets类型的目录)

# 用前端 assets 的 canister_id 替换以下命令中的 <canister_id>

http://<canister_id>.localhost:8000

获取cycles钱包

1
2
3
4
5
6
7
8
9
10
11
12
13
开发者需要使用 Cycles 钱包才能在主网部署合约,且需要Cycles钱包中有一定的Cycles(相比于以太网的gas,但比以太网的gas低的多的多)
一.课程学员用优惠码领取步骤:
1. 下载并安装 SDK
2. 使用 dfx 命令检查自己的 principal id
dfx identity get-principal
3. 使用 dfx 命令兑换 cycles 钱包
dfx canister --network=ic --no-wallet \
call fg7gi-vyaaa-aaaal-qadca-cai redeem '("xxxxx-yyyyy-zzzzz")'
4. 使用 dfx 关联钱包
dfx identity --network=ic set-wallet CANISTER_ID

二.官方水龙头(Cycles Faucet)领取Cycles:
参考步骤链接:https://internetcomputer.org/docs/current/developer-docs/quickstart/cycles-faucet

部署到 ic0.app 主网

1
2
3
4
5
6
7
8
9
10
# 1. 设置在 IC 网络的默认钱包 
# 将以下命令中 <Wallet ID> 替换成自己的钱包ID
dfx identity --network=ic set-wallet --force <Wallet ID>
# 2. 查询 IC 网络中的钱包余额
dfx wallet --network=ic balance
# 3. 部署项目到 IC 网络,保存
canister_id dfx deploy --network=ic
# 4. 访问部署在 IC 网络的项目
# 将以下命令中 <canister_id> 替换成自己应用的canister_id
https://<canister_id>.ic0.app

思考假如开发团队不再维护代码了,用户该怎么办?

。。。

拓展

回收cycles

1
2
3
4
5
6
7
8
9
10
11
12
13
# 回收前后,查询钱包cycles余额 dfx wallet --network=ic balance 123

# 回收 cycles 步骤,分两步:
dfx canister --network=ic stop --all
dfx canister --network=ic delete --all

# 使用canister id 回收 cycles 步骤,分三步:
# 1.查询canisterID为 <canister_id> 的canister的状态
dfx canister --network ic status <canister_id>
# 2.停止canisterID为 <canister_id> 的canister
dfx canister --network=ic stop <canister_id>
# 3.删除canisterID为 <canister_id> 的canister并回收cycles
dfx canister --network=ic delete <canister_id>