iCAN：最易于使用的容器管理平台

什么是 iCAN？-- IC 上最易于使用的 Canister 管理平台。

背景

目前，开发者只能通过 NNS 钱包和 DFX 命令行来管理他们的容器。

NNS 钱包仅显示有关 Canister 的基本信息。并且开发者不能轻易使用 NNS 钱包管理 Canister。只有 Canister id 没有其他信息，使得开发者无法方便地使用 NNS 钱包管理自己的 canister。

难以通过 DFX CLI 管理容器状态。

介绍

使用 UI 界面来方便的部署和管理您的 CANISTERS

iCAN = IC + Canister。它是一个基于 IC 的链上 Canister 管理工具。

iCAN 帮助开发者通过图形界面管理 Canister，创建合约、下载 WebAssembly 模块、管理 Canister 状态指标等。

功能

精细化管理

a.Canister 设置的动态更改

b. 更方便的容器管理

c.Canister 的详细描述

状态检测

a. 支持直接使用 ICP 向充值 Canister，直接将 Cycles 存入 Canister

b. 及时反馈 Canister 状态，让开发者了解 Canister 当前状态并及时管理

创建和删除

a. 图形化的 Canister 管理界面

b. 能够创建和删除 Canister，并自动取回 Cycles

支持导入

将之前创建的 Canisters 导入您自己的 hub。

WebAssembly 控制

下载最新的 WebAssembly 文件

优势

iCAN 开发者平台帮助开发者管理 Canister。未来的目标是成为 IC 上的全面的合约管理平台。

在随机子网中创建管理 Hub

通过在随机子网中创建的 Hub，您可以选择要创建 Canister 的子网。

便捷管理

您可以命名 Canister、标记它们或给它们一个描述，以便您可以方便地管理它们。

无信任管理

Hub Canister 仅由您自己控制，它支持无需信任的托管服务。

架构图

API

介绍 iCAN Canister 和 Hub Canister 的公共接口。

类型

Copy
module{
public type Error = {
#Invalid_Caller;
#Invalid_CanisterId;
#No_Wasm;
#No_Record;
#Insufficient_Cycles;
#Ledger_Transfer_Failed : Nat; // value : log id
#Create_Canister_Failed : Nat;
};
public type Canister = {
name : Text;
description : Text;
canister_id : Principal;
wasm : ?[Nat8];
};
public type Status = {
cycle_balance : Nat;
memory : Nat;
};
public type UpdateSettingsArgs = {
canister_id : Principal;
settings : canister_settings
};
public type TransformArgs = {
icp_amount : Nat64; // e8s
to_canister_id : Principal
};
public type DeployArgs = {
name : Text;
description : Text;
settings : ?canister_settings;
deploy_arguments : ?[Nat8];
wasm : ?[Nat8];
cycle_amount : Nat;
preserve_wasm : Bool;
};
public type canister_settings = {
freezing_threshold : ?Nat;
controllers : ?[Principal];
memory_allocation : ?Nat;
compute_allocation : ?Nat;
};
};

iCAN Canister

iCAN Canister 用于创建管理中心。

Copy
// iCAN Canister Public Service Interface
public type iCAN = actor{
// get your own hubs' info (call this function use your identity)
// @return array of (Hub Name, Hub Canister Id)
getHub : query () -> async [(Text, Principal)];
// get current hub wasm and cycle withdraw wasm in use
// @return (hub wasm, cycle withdraw wasm)
getWasms : query () -> async ([Nat8], [Nat8]);
// get administrators of ican at present
// @return array of administrators
getAdministrators : query () -> async [Principal];
// create canister management hub
// @param name : hub name
// @param amount : icp e8s amount
createHub : (name : Text, amount : Nat64) -> async Result.Result<Principal, Error>;
// add hub info to your hubs
// @param name : hub name
// @param hub_id : hub canister principal
addHub : (name : Text, hub_id : Principal) -> async Text;
// delete hub from your hub set
deleteHub : (hub_id : Principal) -> async Result.Result<(), Error>;
// transform icp to cycles and deposit the cycles to target cansiter
transformIcp : (args : TransformArgs) -> async Result.Result<(), Error>;
};

Hub Canister

Hub Canister 是用户部署的个人管理 Canister。

Copy
public type Hub = actor{
// get current version hub canister's wasm
// @return Wasm Version
getVersion : query() -> async Nat;
// get owners of this hub canister
// @return owners array
getOwners : query() -> async [Principal];
// get status of hub canister ( owner only )
getStatus : query() -> async Result.Result<Status, Error>;
// get canisters managed by this hub ( owner only )
getCanisters : query() -> async Result.Result<[Canister], Error>;
// get wasm of specified canister ( owner only )
getWasm : query (canister_id : Principal) -> async Result.Result<[Nat8], Error>;
// put canister into hub ( not matter if not controlled by hub canister ) ( owner only )
// @param c : should be put into hub canister
putCanister : (c : Canister) -> async Result.Result<(), Error>;
// deploy canister by hub canister ( owner only )
// @return #ok(new canister's principal) or #err(Error)
deployCanister : (args : DeployArgs) -> async Result.Result<Principal, Error>;
// update canister settings ( owner only )
updateCanisterSettings : (args : UpdateSettingsArgs) -> async Result.Result<(), Error>;
// start the specify canister, which should be controlled by hub canister ( owner only )
// @param principal : target canister's principal
startCanister : (principal : Principal) -> async Result.Result<(), Error>;
// stop canister ( owner only )
// @param principal : target canister's principal
stopCanister : (principal : Principal) -> async Result.Result<(), Error>;
// deposit cycles to target canister ( equal to top up to target canister)
// @param id : target canister principal, cycle amount : how much cycles should be top up
depositCycles(id : Principal, cycle_amount : Nat, ) : async Result.Result<(), Error>;
// delete canister from hub canister and withdraw cycles from it ( owner only )
// @param canister's principal
delCanister : ( id : Principal ) -> async Result.Result<(), Error>;
// install cycle wasm to hub canister ( owner only )
// @param wasm : cycle wasm blob (you can deploy your own cycle wasm to your hub canister)
installCycleWasm : (wasm : [Nat8]) -> async Result.Result<(), Error>;
// change hub owner ( owner only )
// @param : new owners array
changeOwner : (newOwners : [Principal]) -> async Result.Result<(), Error>;
};

路线图

2022Q2 MVP 发布。

2022Q3全面支持当前的 Canister 管理。

导入之前创建的容器

支持部署 Actor Class Canister

支持向 Hub Canister 添加更多管理员（支持团队合作）

开源 iCAN 并交给社区 DAO

支持一键创建特定类型的 Canister（asset canisters, NFT canisters）并上传前端 assets。

2022Q4 上线日志管理平台。支持数据恢复。

2022Q4-2023成为 IC 的最佳 Canister 管理平台和开发者基础设施。

团队

Mixlabs 是由亚洲顶尖大学和社区开发者组成的区块链方向前沿技术实验室。主要从事区块链方向的前沿技术研究、孵化和生态支持。

快来加入我们吧！

网站：icantool.app

推特：@iCAN_DAPP

电子邮件：team@icantool.app

https://embed.0xecho.com.ipns.page/?color-theme=light&desc=hello%20world&has-h-padding=true&has-v-padding=true&modules=like%2Cdislike%2Ctip%2Ccomment&receiver=ddd009.eth&target_uri=https%3A%2F%2Fmirror.xyz%2Fddd009.eth%2F7ukjsRePZ3lOFt9L-nJ6rmRtKsaXWZtaEwFV8WGxJqU&height=800&display=iframe