デジタル・アセット・プロジェクトの作成と作成
ブロックチェーン・アプリケーション・ビルダーを使用して、デジタル・アセットを操作するスマート・コントラクト・プロジェクトを作成および構成できます。
Blockchain App Builder For Besuは、ERC-20またはERC-1155トークンの自己完結型Hardhatプロジェクトを生成します。拡張機能でトークン標準およびサポートされている機能を選択します。Blockchain App Builderのcomposer関数は、一致するSDKをコピーし、具体的なUniversal Upgradeable Proxy Standard (UUPS)トークン契約を作成し、スマート・コントラクトをデプロイおよびアップグレードするスクリプトを追加します。
composer関数を使用して、トークンABIおよびアカウント契約が明示的な機能プロファイルから導出されるプロジェクトを作成します。プロジェクトの作成時にトークンがデプロイされず、npm installコマンドが自動的に実行されません。
デジタル・アセット・プロジェクトを作成およびデプロイする前に、Besu拡張用のBlockchain App Builderをインストールし、Visual Studio Codeワークスペースを開く必要があります。生成されたプロジェクトをデプロイするには、Node.jsおよびnpmがインストールされている必要があります。また、アクセス可能なHardhatまたはBesuネットワーク、契約をデプロイできるアカウント、および既存のガバナンス契約およびガバナンスUUIDも必要です。
生成されたデプロイメント・スクリプトには、GOVERNANCE_ADDRESSおよびGOVERNANCE_UUID環境変数が必要です。Composer関数は、このガバナンス・コンテキストを、生成されたアカウントおよびトークン・プロキシにリンクします。デプロイメントのアクティブ化は、構成されたガバナンス・ワークフローの対象となります。
プロジェクトを作成
- Blockchain App Builder For Besuアクティビティ・バーで「モジュール」ビューを開きます。
- 「Open Module Composer」を選択し、「Module Composer」タブを選択します。
- 「新規ハードハット・プロジェクトの作成」で、プロジェクト名を入力し、その親フォルダを選択します。coompose関数は、
<parent_folder>/<project_name>ディレクトリ構造を使用してプロジェクトを作成します。プロジェクト名には、文字、数字、ピリオド、ハイフンおよびアンダースコアを含めることができますが、二重ピリオド(..)は使用できません。プロジェクト名は文字またはアンダースコアで始まり、文字、数字およびアンダースコアのみを含めることができます。宛先は空である必要があります。compose関数は、空でないプロジェクトフォルダを上書きしません。
- トークン標準、コンポジション・モードおよび機能を選択します。これについては、次の項で説明します。
- Solidityの契約名を入力します。たとえば、「DepositToken」と入力します。
- 生成されたコンポジション・プレビューを確認し、「パッケージの生成」を選択します。
プロジェクトの生成が成功すると、拡張機能はプロジェクトを「契約」ビューにインポートします。
構成モード
- 厳密な構成モード: 生成されたトークンは、選択したオプション機能のみを公開するベースを継承します。構成時に選択されない機能を追加するには、実装のアップグレードが必要です。
- 生成されたトークンは、全面互換性ベースを継承します。実行時構成は適用可能な動作を制御しますが、より広いメソッド・サーフェスはABIに残ります。
ERC-20プロジェクトの作成
- ERC-5892: 標準アクセス制御バックエンド。
- ERC-6617: ビットベースのアクセス制御バックエンド。
次に、次の表で説明する機能を構成します。
| 入力 | 値 | ノート |
|---|---|---|
| ミント | 使用不可、直接、承認必須 | 「承認要」では、要求/承認ワークフローが追加されます。 |
| 書き込み | 使用不可、直接、承認必須 | 「承認要」では、要求/承認ワークフローが追加されます。 |
| 保留 | オンまたはオフ | 保留ワークフローをサポートします。 |
| ロール | オンまたはオフ | NOTARY認可が必要なため、承認のミント、承認の書き込み、または保留可能なワークフローに対して自動的に有効化されます。 |
| 日次限度 | オンまたはオフ | 日次制限強制の有無にかかわらず、アカウント・バリアントを選択します。 |
| 複数レベルの承認 | オンまたはオフ | アカウントおよび承認ポリシーおよび承認順序による保留の実行を有効にします。保持可能な機能が自動的に有効になります。 |
次の動作は、常にERC-20で生成されたプロファイルの一部です: 転送可能な動作、委任された操作、一時停止可能な動作、およびガバナンス承認フロー。構成機能によってロールが自動的に有効になった場合、ロールもプロファイルに含まれます。
たとえば、保留のないダイレクト・ミントのダイレクト・バーン・トークンは、厳密なベースERC20DirectMintBurnUpgradeableを生成します。かわりに、複数レベルの承認を有効にすると、保持可能な複数レベルの承認ベースが選択され、追加のERC20MultiLevelApprovalHelperLibライブラリがデプロイされます。
ERC-1155プロジェクトの作成
ERC-1155プロジェクトでは、ERC-5982アクセス制御バックエンドがデフォルトで使用されます。アセット・タイプを1つ選択します。
- Fungible token: fungible supplyのトークン・クラス。
- 全NFT: 非フラクショナルNFTクラス。
- 小数NFT: 小数所有権を持つNFTクラス。
- fungibleトークンとnon-fungibleトークンの組合せ: fungibleトークンとNFTの両方のクラス。
直接ミントを設定し、有効または無効として書き込みます。ERC-1155では、承認によるミントおよび書き込みはサポートされていません。compose関数には、常に転送可能な動作、委任されたオペレータ承認(setApprovalForAllおよびisApprovedForAll)、一時停止可能な動作、ガバナンスおよびERC-5982アクセス制御が含まれます。
ロールを有効化できます。NFTアセット・タイプの場合、ロック可能なNFTも有効にできます。ロックは、代替トークンには使用できず、ミントと書き込みの両方が無効になっている場合は無効になります。分割可能/分割不可の動作は、選択した資産タイプから導出され、個別に入力されません。日次限度、保留可能な動作および複数レベルの承認はサポートされていません。
複合ERC-1155プロファイルは、厳密な構成を選択した場合でも、全面ERC1155CombinedTokenUpgradeableベースを使用します。その他の厳密なプロファイルでは、アセット・タイプおよびミント/バーン固有のベースが使用されます。
生成されたプロジェクト・コンテンツ
compose関数は、次のプロジェクト構造を作成します。
<project>/
├── contracts/
│ ├── obp-sdk/ # copied ERC-20 or ERC-1155 SDK source
│ └── <ContractName>/
│ ├── <ContractName>Upgradeable.sol
│ └── generated.manifest.json # selected profile and generated paths
├── scripts/
│ ├── deploy/<contract-name>/deploy-<contract-name>.ts
│ └── upgrade/
│ ├── upgrade-<contract-name>.ts
│ └── upgrade-<contract-name>-account.ts
├── .obp-bap/
│ ├── plugins/ # bundled Hardhat plugin archives
│ └── project.json # Composer project metadata
├── config/hardhat-env.ts
├── hardhat.config.ts
├── package.json
└── README.mdcontracts/obp-sdk/にあるSDKは、生成されたプロジェクトにコピーされ、生成後にプロジェクトによって所有されます。マニフェストには、トークン標準、構成モード、選択された基本契約とアカウント契約、および完全な正規化機能プロファイルが記録されます
生成エラーのトラブルシューティング
| メッセージまたは条件 | 解決策 |
|---|---|
Select one identity-permission module |
ERC-20にはERC-5982またはERC-6617を選択します。 |
Contract name must start with a letter/underscore |
有効なSolidity識別子を使用してください。 |
Project name is requiredまたは安全でない名前
|
パス・セパレータまたは二重ピリオド(..)のない単純なプロジェクト名を指定します。 |
Choose a parent folder |
コンポーザで絶対親フォルダを選択します。 |
| ターゲット・フォルダが存在し、空ではありません | 新しいプロジェクト名または空の宛先を選択します。compose関数はプロジェクトを上書きしません。 |
| ERC-1155承認ベースのミントまたは書き込みはサポートされていません | ERC-1155のミントおよび書込みには、「無効」または「直接」を選択します。 |
GOVERNANCE_ADDRESS and GOVERNANCE_UUID are required |
生成されたデプロイ・スクリプトを実行する前に、両方の値を構成します。 |
契約プロジェクトを生成した後、「契約」ビューでインポートしたプロジェクトを使用して、フォームをコンパイル、デプロイおよびオープンしたり、フォームを実行できます。生成されたマニフェストを契約に保持します。拡張ツールはマニフェストを使用して、生成されたトークンとアカウントのABIを選択したコンポーザプロファイルとペアにします。