Kaia Contracts Wizard
はじめに
カイアは、シームレスな開発者体験を提供することを優先しており、これがカイア・コントラクト・ウィザード(KCW)創設の原動力となっています。 In essence, it simplifies the process of developing smart contracts by leveraging the components of Kaia contracts. KCWは、スマートコントラクトを簡単にブートストラップし、Kaia Contractsで利用可能な安全でテスト済みのコンポーネントを利用するためのインタラクティブなツールとして機能します。 要するに、Kaiaコントラクトのコンポーネントを活用することで、スマートコントラクトの開発プロセスを簡素化します。 Kaiaコントラクト・ウィザードがOpenZeppelinウィザードの基礎の上に構築されており、スマート・コントラクト開発のセキュリティをさらに強化していることは注目に値する。
このガイドでは、次のことを学ぶ:
- カイヤコントラクトウィザードの基本機能を理解する。
- Kaiaコントラクトウィザードを使用してスマートコントラクトコードを生成し、カスタマイズします。
- Foundry Scripting Systemを使用して、KaiaコントラクトをKaia Network (Kairos)にデプロイする。
カイアの コントラクトウィザードを探る
Kaiaコントラクトウィザードは、Kaiaコントラクトを使用してスマートコントラクトを記述する最も速く簡単な方法です。 このセクションでは、カイア・コントラクト・ウィザードの様々なコンポーネントとセグメントについて説明します。
現状では、カイアのコントラクトウィザードは以下のトークン標準をサポートしています:
- KIP-7 - カイアのFungibleトークン規格。 Fungibleとは、すべてのトークンが分割可能で交換可能、つまり同じ価値を持つことを意味する。 カジタブル・トークンの典型的な例のひとつがフィアット通過で、同額紙幣はそれぞれ同じ価値を持つ。
- KIP-17 - これはカイアのNon-fungibleトークン規格である。 Non-fungibleとは、各トークンが分割不可能であり、したがって一意であることを意味する。 KIP17トークンは、写真、ゲーム内のアイテム、不動産など、物理的な所有物であれ、仮想的な収集物であれ、ユニークなアイテムの所有権を表すことができる。 Non-fungibleとは、各トークンが分割不可能であり、したがって一意であることを意味する。 KIP17トークンは、写真、ゲーム内のアイテム、不動産など、物理的な所有物であれ、仮想的な収集物であれ、ユニークなアイテムの所有権を表すことができる。
- KIP-37 - これはKaiaのマルチ・トークン標準として知られている。なぜなら、1つのスマート・コントラクトでfungibleトークンとNon-fungibleトークンの両方を表現できるからだ。
Ethereum Equivalenceのサポートに伴い、KaiaコントラクトウィザードはERC20、ERC721、ERC1155もサポートしています。
カイアコントラクトウィザードは以下のセクションで構成されています:
-
トークン標準セクション:このタブは、カイアのコントラクトウィザードでサポートされているすべての異なるトークン標準から構成されています。
-
設定セクション:このセクションでは、トークン名、シンボル、プレミント(コントラクトがデプロイされたときにトークンが供給される)、URI(Non-fungibleトークンの場合)など、各トークン標準の事前設定を提供します。
-
特徴セクション:各トークン規格で利用可能なすべての特徴から構成されています。 各トークンで利用可能なさまざまなエクステンションの詳細については、以下のリンクを参照してください: 各トークンで利用可能なさまざまなエクステンションの詳 細については、以下のリンクを参照してください:
-
アクセス制御セクション:各トークン規格で利用可能なすべてのアクセス制御メカニズムから構成される。
-
インタラクティブ・コード表示セクション:ユーザーが設定したコンフィギュレーションで生成されたスマート・コントラクト・コードが表示されます。
カイアのコントラクトウィザードの様々な部分を探索した後、ご希望のコントラクトの種類を選択し(現在サポートされているのは、KIP7、KIP17、KIP37、ERC20、ERC721、ERC1155、Governor、およびカスタムコントラクト)、パラメータとご希望の機能(トークン名、シンボル、プレミント量、アクセス制御など)を設定すると、コントラクトウィザードが必要なコードをすべて生成します。 こうして生成されたコードは、すぐにコンパイルしてデプロイすることもできるし、出発点として利用し、アプリケーション固有のロジックでさらにカスタマイズすることもできる。 こうして生成されたコードは、すぐにコンパイルしてデプロイすることもできるし、出発点として利用し、アプリケーション固有のロジックでさらにカスタマイズすることもできる。
カイアネットワーク上でのカイアコントラクトのカスタマイズとデプロイ
このセクションでは、Kaiaコントラクトウィザードから生成されたコードを、Foundryを使用してKaia Testnet Kairosにデプロイします。 このセクションでは、Kaiaコントラクトウィザードから生成されたコードを、Foundryを使用してKaia Testnet Kairosにデプロイします。 生成されたコードは出発点となり、KIP7とKIP17トークンのエアドロップ契約に合わせてさらにカスタマイズされる。 もう一方では、KIP37用に生成されたコードがそのまま使われる。 もう一方では、KIP37用に生成されたコードがそのまま使われる。
始めよう!
前提条件
このチュートリアルに沿って進むために、前提条件を以下に示します:
- 必ずfoundryをインストールしてください。
- kaia-foundry-starterkit](https://github.com/ayo-klaytn/kaia-foundry-starterkit)のコードをクローンする。
- MetaMask:コントラクトのデプロイ、トランザクションへの署名、コントラクトとの対話に使用される。
- RPCエンドポイント:サポートされているエンドポイント・プロバイダーの1つから取得できます。
- FaucetからKAIAをテスト: 口座に十分なKAIAを入金してください。
はじめに
このガイドでは、KIP7とKIP17トークン標準のエアドロップ契約の簡単な実装方法を説明します。 エアドロップ契約では、プロジェクトの作成者は、各トークンをウォレットの特定の選択に直接鋳造します。 次のセクションでは、それぞれのトークン・エアードロップ・コントラクトをカスタマイズし、デプロイする方法を見ていきます。 エアドロップ契約では、プロジェクトの作成者は、各トークンをウォレットの特定の選択に直接鋳造します。 次のセクションでは、それぞれのトークン・エアードロップ・コントラクトをカスタマイズし、デプロイする方法を見ていきます。
トークンコントラクトのカスタマイズ
**KIP7契約をKIP7 Airdrop契約にカスタマイズする。
エアドロップ契約に変更する前に、KIP7契約をカスタマイズする必要があります。 そのためには、以下の手順に従ってください: そのためには、以下の手順に従ってください:
- wizard.kaia.io](https://wizard.kaia.io) に移動します。
- 契約タブでKIP7を選択する。
- 次に、SETTINGSタブに名前(KIP7 Token Airdrop)とシンボル(KTA)を入力します。 プレミントの欄は空のまま プレミントの欄は空のまま
- その後、FEATURESタブでMintable機能にチェックを入れると、自動的にACCESS CONTROLタブでOwnable機能が選択されます。
これらの設定を行った後のカイアの契約ウィザードはこのようになる:
以下は生成されたコードである:
// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@kaiachain/contracts/KIP/token/KIP7/KIP7.sol";import "@kaiachain/contracts/access/Ownable.sol";contract KIP7TokenAirdrop is KIP7, Ownable { constructor() KIP7("KIP7 Token Airdrop", "KTA") {} function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return super.supportsInterface(interfaceId); } function mint(address to, uint256 amount) public onlyOwner { _mint(to, amount); }}
次にすることは、上記のコー ドをエアドロップの実装に合うように修正することだ:
//SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@kaiachain/contracts/KIP/token/KIP7/KIP7.sol";import "@kaiachain/contracts/access/Ownable.sol";contract KIP7TokenAirdrop is KIP7, Ownable { constructor() KIP7("KIP7 Token Airdrop", "KTA") { } // airdrop fungible token function airdropTokens(address[] calldata wAddresses, uint[] calldata tAmount) public onlyOwner { require(wAddresses.length == tAmount.length, "Must be same lenght"); for (uint256 i = 0; i < wAddresses.length; i++) { _mintSingleTokens(wAddresses[i], tAmount[i]); } } function _mintSingleTokens(address wAddress, uint amount) private { _mint(wAddress, amount); } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return super.supportsInterface(interfaceId); }}
上で修正したコードから、airdropTokens()
という新しい関数を追加したことがわかります。 この関数は特定の選択されたアドレスにトークンをミン トし、コントラクトの作成者であるonlyOwner
によってのみ呼び出される。 この関数は特定の選択されたアドレスにトークンをミン トし、コントラクトの作成者であるonlyOwner
によってのみ呼び出される。
その後、public mint() onlyOwner 関数を _mintSingleTokens() private に変更しました。
KIP7エアドロップ契約コードの準備ができたので、次のステップは、プロジェクトディレクトリのsrcフォルダにairdropKIP7.solという名前の新しいファイルを作成し、修正したコードをそのファイルに貼り付けることです。
**KIP17契約をKIP17 Airdrop契約にカスタマイズする。
エアドロップ契約に変更する前に、KIP17契約をカスタマイズする必要があります。 そのためには、以下の手順に従ってください: そのためには、以下の手順に従ってください:
- wizard.kaia.io](https://wizard.kaia.io/) に移動します。
- 契約タブでKIP17を選択する。
- 次に、SETTINGSタブに名前(KIP7 NFT Airdrop)と記号(KNA)を記入する。 Base URIフィールドは空のままにしておく。
- 続いて、FEATURES タブで、Mintable、Auto-increment Ids、Enumerable の各機能にチェックを入れます。 ACCESS CONTROLタブのOwnable機能が自動的に選択されていることがわかります。 ACCESS CONTROLタブのOwnable機能が自動的に選択されていることがわかります。
これらの設定を行った後のカイアの契約ウィザードはこのようになる:
以下は生成されたコードである:
// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@kaiachain/contracts/KIP/token/KIP17/KIP17.sol";import "@kaiachain/contracts/KIP/token/KIP17/extensions/KIP17Enumerable.sol";import "@kaiachain/contracts/access/Ownable.sol";import "@kaiachain/contracts/utils/Counters.sol";contract KIP17NFTAirdrop is KIP17, KIP17Enumerable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; constructor() KIP17("KIP17 NFT Airdrop", "KNA") {} function safeMint(address to) public onlyOwner { uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(to, tokenId); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(KIP17, KIP17Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(KIP17, KIP17Enumerable) returns (bool) { return super.supportsInterface(interfaceId); }}
次にすることは、上記のコードをエアドロップの実装に合うように修正することだ:
// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@kaiachain/contracts/KIP/token/KIP17/KIP17.sol";import "@kaiachain/contracts/KIP/token/KIP17/extensions/KIP17Enumerable.sol";import "@kaiachain/contracts/access/Ownable.sol";import "@kaiachain/contracts/utils/Counters.sol";contract KIP17NftAirdrop is KIP17, KIP17Enumerable, Ownable { using Counters for Counters.Counter; Counters.Counter private _tokenIdCounter; constructor() KIP17("KIP17 NFT Airdrop", "KNA") {} // Airdrop NFTs function airdropNfts(address[] calldata wAddresses) public onlyOwner { require(wAddresses.length != 0, "Must no be equal to zero"); for (uint256 i = 0; i < wAddresses.length; i++) { _mintSingleNFT(wAddresses[i]); } } function _mintSingleNFT(address to) private { uint256 tokenId = _tokenIdCounter.current(); _tokenIdCounter.increment(); _safeMint(to, tokenId); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(KIP17, KIP17Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(KIP17, KIP17Enumerable) returns (bool) { return super.supportsInterface(interfaceId); }}
上で修正したコードから、**airdropNfts()**という新しい関数を追加したことがわかる。 この関数は、特定の選択されたアドレスにトークンを鋳造し、コントラクトの作成者であるonlyOwnerによってのみ呼び出される。 この関数は、特定の選択されたアドレスにトークンを鋳造し、コントラクトの作成者であるonlyOwnerによってのみ呼び出される。
その後、safeMint() public onlyOwner 関数を _mintSingleTokens() private に変更しました。
KIP17のエアドロップ契約コードの準備ができたので、次のステップは、プロジェクト・ディレクトリのsrcフォルダにairdropKIP17.solという名前の新しいファイルを作成し、修正したコードをそのファイルに貼り付けることです。
**KIP37契約のカスタマイズ
KIP37は一括鋳造に対応しているため、契約書だけをカスタマイズしてそのまま使用する。 KIP37は一括鋳造に対応しているため、契約書だけをカスタマイズしてそのまま使用する。 KIP37Contractをカスタマイズするには、以下の手順に従ってください:
- [wizard.kaia.io]に移動する(https://wizard.kaia.io)
- 契約タブでKIP37**を選択する。
- 次に、SETTINGSタブに名前(KIP7 NFT Airdrop)と記号(KNA)を記入する。 Base URIフィールドは空のまま にしておく。
- 続いて、FEATURES タブで、Mintable、Auto-increment Ids、Enumerable の各機能にチェックを入れます。 ACCESS CONTROLタブのOwnable機能が自動的に選択されていることがわかります。 ACCESS CONTROLタブのOwnable機能が自動的に選択されていることがわかります。
これらの設定を行った後のカイアの契約ウィザードはこのようになる:
以下は生成されたコードである:
// SPDX-License-Identifier: MITpragma solidity ^0.8.4;import "@kaiachain/contracts/KIP/token/KIP37/KIP37.sol";import "@kaiachain/contracts/access/Ownable.sol";contract KIP37MultiToken is KIP37, Ownable { constructor() KIP37("") {} function setURI(string memory newuri) public onlyOwner { _setURI(newuri); } function mint(address account, uint256 id, uint256 amount, bytes memory data) public onlyOwner { _mint(account, id, amount, data); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); }}
KIP37コントラクト・コードの準備ができたので、次のステップは、プロジェクト・ディレクトリのsrcフォルダにKIP37MultiToken.solという名前の新しいファイルを作成し、生成されたコードを貼り付けることだ。
すべてのKaiaコントラクトのコントラクトコードを生成した次のステップは、Foundry solidityスクリプトを使用してKaia Testnet Kairosにデプロイすることです。