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 を自分のハブにインポートします。
-
WebAssembly 制御
最新の WebAssembly ファイルをダウンロードします。
利点#
iCAN 開発者プラットフォームは、開発者が Canister を管理するのを助けます。将来的な目標は、IC 上の包括的な契約管理プラットフォームになることです。
-
ランダムサブネットでの管理ハブの作成
ランダムサブネットで作成されたハブを通じて、Canister を作成するサブネットを選択できます。
-
便利な管理
Canister に名前を付けたり、タグを付けたり、説明を付けたりして、便利に管理できます。
-
信頼のない管理
ハブ Canister は自分自身でのみ制御され、信頼のないホスティングサービスをサポートします。
アーキテクチャ図#
API#
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{
// 自分のハブの情報を取得する(この関数を自分のアイデンティティで呼び出す)
// @return (ハブ名, ハブCanister ID)の配列
getHub : query () -> async [(Text, Principal)];
// 現在のハブのwasmと使用中のサイクル引き出しwasmを取得する
// @return (ハブwasm, サイクル引き出しwasm)
getWasms : query () -> async ([Nat8], [Nat8]);
// 現在のicanの管理者を取得する
// @return 管理者の配列
getAdministrators : query () -> async [Principal];
// Canister管理ハブを作成する
// @param name : ハブ名
// @param amount : icp e8sの金額
createHub : (name : Text, amount : Nat64) -> async Result.Result<Principal, Error>;
// ハブにハブ情報を追加する
// @param name : ハブ名
// @param hub_id : ハブCanisterのPrincipal
addHub : (name : Text, hub_id : Principal) -> async Text;
// ハブセットからハブを削除する
deleteHub : (hub_id : Principal) -> async Result.Result<(), Error>;
// icpをサイクルに変換し、ターゲットCanisterにサイクルを入金する
transformIcp : (args : TransformArgs) -> async Result.Result<(), Error>;
};
Hub Canister
Hub Canister はユーザーがデプロイした個人管理 Canister です。
public type Hub = actor{
// 現在のバージョンのハブCanisterのwasmを取得する
// @return Wasmバージョン
getVersion : query() -> async Nat;
// このハブCanisterの所有者を取得する
// @return 所有者の配列
getOwners : query() -> async [Principal];
// ハブCanisterの状態を取得する(所有者のみ)
getStatus : query() -> async Result.Result<Status, Error>;
// このハブが管理するCanistersを取得する(所有者のみ)
getCanisters : query() -> async Result.Result<[Canister], Error>;
// 指定されたCanisterのwasmを取得する(所有者のみ)
getWasm : query (canister_id : Principal) -> async Result.Result<[Nat8], Error>;
// Canisterをハブに入れる(ハブCanisterによって制御されていなくても問題ない)(所有者のみ)
// @param c : ハブCanisterに入れるべき
putCanister : (c : Canister) -> async Result.Result<(), Error>;
// ハブCanisterによってCanisterをデプロイする(所有者のみ)
// @return #ok(新しいCanisterのPrincipal)または#err(Error)
deployCanister : (args : DeployArgs) -> async Result.Result<Principal, Error>;
// Canister設定を更新する(所有者のみ)
updateCanisterSettings : (args : UpdateSettingsArgs) -> async Result.Result<(), Error>;
// 指定されたCanisterを開始する(ハブCanisterによって制御されるべき)(所有者のみ)
// @param principal : ターゲットCanisterのPrincipal
startCanister : (principal : Principal) -> async Result.Result<(), Error>;
// Canisterを停止する(所有者のみ)
// @param principal : ターゲットCanisterのPrincipal
stopCanister : (principal : Principal) -> async Result.Result<(), Error>;
// ターゲットCanisterにサイクルを入金する(ターゲットCanisterにチャージするのと同じ)
// @param id : ターゲットCanisterのPrincipal, サイクル金額 : どれだけのサイクルをチャージするべきか
depositCycles(id : Principal, cycle_amount : Nat, ) : async Result.Result<(), Error>;
// ハブCanisterからCanisterを削除し、そこからサイクルを引き出す(所有者のみ)
// @param CanisterのPrincipal
delCanister : ( id : Principal ) -> async Result.Result<(), Error>;
// ハブCanisterにサイクルwasmをインストールする(所有者のみ)
// @param wasm : サイクルwasmのバイナリ(自分のサイクルwasmをハブCanisterにデプロイできます)
installCycleWasm : (wasm : [Nat8]) -> async Result.Result<(), Error>;
// ハブの所有者を変更する(所有者のみ)
// @param : 新しい所有者の配列
changeOwner : (newOwners : [Principal]) -> async Result.Result<(), Error>;
};
ロードマップ#
2022Q2 MVP リリース。
2022Q3 現在の Canister 管理を全面的にサポート。
-
以前に作成したコンテナをインポート
-
Actor Class Canister のデプロイをサポート
-
Hub Canister にさらに多くの管理者を追加することをサポート(チーム協力をサポート)
-
iCAN をオープンソース化し、コミュニティ DAO に引き渡す
特定のタイプの Canister(アセット Canisters、NFT Canisters)をワンクリックで作成し、フロントエンドアセットをアップロードすることをサポート。
2022Q4 ログ管理プラットフォームを立ち上げ。データ復旧をサポート。
2022Q4-2023 IC の最良の Canister 管理プラットフォームおよび開発者インフラストラクチャになる。
チーム#
Mixlabs は、アジアのトップ大学とコミュニティ開発者で構成されたブロックチェーン方向の最前線技術ラボです。主にブロックチェーン方向の最前線技術研究、孵化、エコシステムサポートに従事しています。
ぜひ私たちに参加してください!
ウェブサイト:icantool.app
ツイッター:@iCAN_DAPP