什么是 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 仅由您自己控制,它支持无需信任的托管服务。

介绍iCAN Canister和Hub Canister的公共接口。
类型
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 用于创建管理中心。
// 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。
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
