オリジナルのトークンをデプロイしてみよう
🪙 プロジェクトで使用するオリジナルのトークンを準備しよう
このプロジェクトでは、取引に使用するオリジナルのFungible token(FT)を2種類発行します。
- Token Gold(TGLD)
- Token Silver(TSLV)
トークン規格はDIP20というものを用います。
DIP20 とは?
Psychedelicという組織が作成したトークン標準になります。これは、ERC-20のトークン標準をICP上でも利用できるようにMotokoとRustで実装されています。
インターネット・コンピュータのLedger & Tokenizationワーキンググループによって開発されているFTの規格ICRC-1も存在するのですが、現在のICRC-1では、今回のプロジェクトに使用したい機能(Approve, Transfer From)が実装されていません。ICRC-1を拡張した次の標準ICRC-2では実装予定なのですが、2023年6月現在ではまだDraft中のため使用を見送ることにします。
今回は、GithubのサブモジュールとしてDIP20をプロジェクトに組み込み、オリジナルのトークンキャニスターをデプロイしたいと思います。
それでは始めていきましょう!
🐈⬛ DIP20 のサブモジュールを取り込もう
ターミナルでicp_basic_dex/src/下に移動し、DIP20リポジトリをサブモジュールとして取り込みましょう。
cd src/
git submodule add https://github.com/Psychedelic/DIP20.git
src/化にDIP20が追加され、プロジェクトのルートディレクトリに.gitmodulesファイルが生成されたら準備完了です。
.gitmodulesは、サブモジュールのプロパティを定義するファイルです。
icp_basic_dex/
├── .env
├── .git/
├── .gitignore
+├── .gitmodules
├── README.md
├── dfx.json
├── node_modules/
├── package-lock.json
├── package.json
├── src/
+│ ├── DIP20/
│ ├── declarations/
│ ├── icp_basic_dex_backend/
│ └── icp_basic_dex_frontend/
└── webpack.config.js
📝 設定ファイル dfx.json を編集しよう
取り込んだDIP20を使用してトークンキャニスターをデプロイするために、設定ファイルの編集を行います。
ファイルはdfx.jsonという名前で、このファイルに記載された情報をもとにキャニスターが作成されます。
プロジェクトのルートディレクトリに存在するdfx.jsonを、以下のように編集します。
ここでは、GoldDIP20とSilverDIP20というキャニスターを追加しています。
[dfx.json]
{
"canisters": {
"icp_basic_dex_backend": {
"main": "src/icp_basic_dex_backend/main.mo",
"type": "motoko"
},
"GoldDIP20": {
"main": "src/DIP20/motoko/src/token.mo",
"type": "motoko"
},
"SilverDIP20": {
"main": "src/DIP20/motoko/src/token.mo",
"type": "motoko"
},
"icp_basic_dex_frontend": {
"dependencies": [
"icp_basic_dex_backend"
],
"frontend": {
"entrypoint": "src/icp_basic_dex_frontend/src/index.html"
},
"source": [
"src/icp_basic_dex_frontend/assets",
"dist/icp_basic_dex_frontend/"
],
"type": "assets"
}
},
"defaults": {
"build": {
"args": "",
"packtool": ""
}
},
"output_env_file": ".env",
"version": 1
}
"canisters": {}の中に、作成したいキャニスターの情報を記述します。
"GoldDIP20":、"SilverDIP20:"はキャニスターにつける名前です。キャニスターが作成される際mlsv7-lyaaa-aaaag-aatla-caiのような一意なIDが割り振られますが、これを扱いやすくするために名前をつけることができます。DFXを通じて開発者が実際にキャニスターとやりとりをする際に活用されます。
"type":はキャニスターのタイプを指定します。例えば、上記ではMotoko言語で実装されたキャニスターであるため、タイプにMotokoと指定しています。
"main":はキャニスターのソースコードパスを指定します。DIP20のMotokoで作成されたインタフェースを使用するため、このようなパスを指定しています。