ブロックチェーン・アプリケーション・ビルダーを使用したトークン化のサポート
ブロックチェーン・アプリケーション・ビルダーを使用して、トークンの完全なライフサイクルを管理できます。既存のアセットをトークン化し、トークン・ライフサイクル管理に使用するトークン・クラスおよびメソッドを自動的に生成できます。
トークン化
トークン化は、物理アセットまたはデジタル・アセットがトークンによって表されるプロセスであり、ブロックチェーン上で転送、追跡および格納できます。資産をトークンとして表すことで、ブロックチェーン台帳を使用して資産の状態と所有権を確立し、標準のブロックチェーン・プラットフォーム機能を使用して資産の所有権を譲渡できます。
ブロックチェーン・アプリケーション・ビルダーにはトークン化サポートが含まれています。トークン・クラスとメソッドは自動的に生成され、開発者がトークンの複雑なビジネス・ロジックを作成できるように、追加のトークン・メソッドが提供されます。自動生成されたプロジェクトには、トークン・ライフサイクル・クラスと関数、CRUDメソッド、および追加のトークンSDKメソッドが含まれており、引数の自動検証、マーシャリング/アンマーシャリングおよび透過的な永続性機能をサポートしています。これらのコントローラ・メソッドを使用して、トークンの初期化、アクセスの制御、アカウントの設定、ロールの管理およびトークンのライフ・サイクルの管理を行うことができます。
次の図は、トークンAPIやトークンSDKなど、ブロックチェーン・アプリケーション・ビルダーによって実装されるトークン・アーキテクチャを示しています。
- 自動生成されたトークンAPI
- ブロックチェーン・アプリケーション・ビルダーは、トークンおよびトークンのライフサイクルをサポートするメソッドを自動的に生成します。これらの方法を使用すると、追加のコーディングなしで、トークンの初期化、ロールとアカウントの管理、その他のトークン・ライフサイクル・タスクの完了を行うことができます。
- トークンSDK
- Token SDKには、トークン・アプリケーションの複雑なビジネス・ロジックを開発するのに役立つメソッドが含まれています。
- マルチバージョン並列性制御(MVCC)の最適化
- トークンチェーンコードのMVCC最適化により、転送、ミント、書き込み、および保持操作のエラーを減らすことができます。
トークンと口座/残高モデル
ブロックチェーン・アプリケーション・ビルダーは、真菌性トークンおよび非真菌性トークンをサポートします。Fungibleトークンは、交換可能な値を持ちます。真菌性トークンの量はすべて、同じクラスのトークンと同じ量と同じ値を持ちます。存在しないトークンは一意です。トークンは全体でも小数でもかまいません。小数トークンは、指定した小数点以下の桁数に基づいて、小さい部分に分割できます。
トークンは動作によっても記述できます。ファンクション・トークンでサポートされる動作には、mintable
、transferable
、divisible
、holdable
、burnable
およびroles
(minter
、burner
およびholder
)があります。サポートされる非真菌トークンの動作には、mintable
、transferable
、singleton
、indivisible
、burnable
およびroles
(minter
およびburner
)があります。
トークン化機能では、アカウント/残高モデルを使用して、トークン化された資産をアカウントの残高として表します。口座は、預金や振替、その他の状態遷移が口座の残高に影響を及ぼす一般的な銀行口座と似ています。トランザクション金額が有効になるように、すべての勘定科目の残高がグローバルに追跡されます。保留残高(実行可能なトークンの場合)およびトランザクション履歴も追跡されます。
トークンを所有したり、トークン関連の操作を任意の時点で完了するユーザーは、ネットワーク上のアカウントを持っている必要があります。すべてのアカウントは、一意のID (account_id
)で識別されます。アカウントIDは、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールID (user_id
)を、現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダID (org_id
)と組み合せて作成します。アカウント作成にはすぐに使用できる方法が用意されています。アカウントIDには組織IDが含まれているため、ユーザーは複数の組織でサポートできます。
トークン標準
ブロックチェーン・アプリケーション・ビルダーは、トークン・タクソノミ・フレームワーク、ERC-721標準およびERC-1155標準の標準と分類を拡張して、トークンの構造と動作を定義します。ERC-1155は、真菌性トークンと非真菌性トークン(NFT)の両方をサポートする標準です。ERC-721はNFTの標準です。トークン・タクソノミ・フレームワークは、トークン・タクソノミ・イニシアチブによって開発されました。詳細は、「トークン・タクソノミ・フレームワーク」を参照してください。
標準 | サポートされるトークン・タイプ |
---|---|
トークン・タクソノミ・フレームワーク |
|
ERC-721 |
|
ERC-1155 |
|
トークン化フロー
ブロックチェーン・アプリケーション・ビルダーは、入力仕様ファイルの構文を拡張することでトークン化をサポートしているため、CLIまたはVisual Studio Codeを使用して、他のプロジェクトを作成するのと同じ方法でトークン固有のプロジェクトを作成します。詳細は、「入力仕様ファイル」を参照してください。
![トークン・ワークフロー図 トークン・ワークフロー図](img/token_workflow.png)
- 使用するトークン標準を決定します。
- 指定するトークン動作(
mintable
、transferable
、divisible
、indivisible
、singleton
、holdable
、burnable
およびroles
)を決定します。 - 入力仕様ファイルでトークン・アセットとそのプロパティを定義します。
- 入力仕様ファイルからチェーンコード・プロジェクトをスキャフォールドします。これにより、スキャフォールドされたプロジェクトが作成されます。これには、トークン・アセット定義とそのプロパティを含むモデル、およびトークンの動作とメソッドを含むコントローラが含まれます。
- チェーンコード・プロジェクトをデプロイおよびテストします。
- トークン・チェーンコードがデプロイされ、初期化メソッドに渡されるリスト内のユーザーは、チェーンコードの
Token Admin
ユーザーになります。 - トークン化されたアセットが初期化され、トークンの特定のインスタンスの一意の識別子である
token_id
が作成されます。 - アカウントは、トークンを所有するすべてのユーザーまたはトークン関連の操作を完了するすべてのユーザーに対して作成する必要があります。
- トークンに
roles
動作が指定されている場合は、トークン関連の操作を完了する前に、ロールをユーザーに追加する必要があります。 - トークン・ライフサイクル・メソッドは、トークン・アセットに指定された動作に基づいて使用できます。たとえば、アカウントのトークンをミントするメソッドをコールできます。
アクセス制御
Token Admin
やToken Minter
などのロールが関連付けられている特定のメソッドをコールできます。所有権ベースの制御により、所有していないアセットへのユーザーのアクセスを制限できます。所有権ベースのアクセス制御では、アセットを所有するユーザー(Token Owner
やAccount Owner
など)が特定のメソッドを呼び出すことができます。メソッドのアクセス制御の詳細は、次のトピックで説明するメソッドの個々のエントリを参照してください。
- トークン管理者
Token Admin
ユーザーは、トークン・チェーンコードのデプロイ時に割り当てることができます。Token Admin
ユーザー情報は状態データベースに保存されます。Token Admin
ユーザーは、他のユーザーに対してToken Admin
権限を付与および削除できます。Token Admin
ユーザーは、独自のToken Admin
権限を削除できません。Token Admin
ユーザーは、任意のユーザーにOrg Admin
、minter、burnerまたはnotaryロールを割り当てることができます。- 組織管理
- 拡張トークン・タクソノミ・フレームワーク・メソッドは、
Org Admin
ロールをサポートします。Token Admin
ユーザーは、Org Admin
ロールを任意のユーザーに割り当てることができます。Org Admin
ユーザーには管理権限がありますが、組織内でのみ権限があります。勘定科目の作成や勘定科目残高の表示はできますが、組織内のユーザーのみが行えます。マイナー・ロール、バーナー・ロールまたは公証人ロールを持つOrg Admin
ユーザーは、そのロールを組織内の他のユーザーに割り当てることができます。 - トークン・ミンター
- minterロールが割り当てられているユーザーは、
Token Minter
であり、トークンをミントできます。 - トークンバーナー
- バーナ・ロールが割り当てられているユーザーは、
Token Burner
であり、トークンを書き込むことができます。 - 公証人
- 公証人ロールが割り当てられているユーザーは、
Token Notary
です。Token Notary
は、支払者と受取人の間のトランザクションでサード・パーティとして機能します。Token Notary
は、支払人から受取人へのトークン転送の完了をトリガーするか、かわりに支払人のアカウントにトークンを返すことができます。 - Vaultマネージャ
- ボールト・ロールが割り当てられているユーザーは、
Vault Manager
です。Vault Manager
は、ロックされたNFTのロックを解除できます。ボールト・ロールは、拡張ERC-721およびERC-1155標準にのみ適用されます。ボールト・ロールをユーザーに割り当てることは、NFTをロックするための前提条件です。ボールト・ロールを割り当てることができるのは、チェーンコードごとに1人のユーザーのみです。
また、一部の方法では、ロールベースのアクセス制御と所有権ベースのアクセス制御も組み合されています。たとえば、ロールベースのアクセス制御では、最小限のロールを持つユーザーがトークンを作成できます。所有権ベースのアクセス制御を使用すると、トークン所有者はトークンのカスタムプロパティーを変更できますが、トークンメタデータを変更することはできません。minterロールを持つユーザーが非fungibleトークン(NFT)を作成すると、そのユーザーはNFTの所有者になります。そのNFTの所有者として、カスタム・プロパティを変更できます(アート・コレクション・トークンの場合、トークン価格はカスタム・プロパティです)。トークン作成者がNFTを別のユーザーに転送すると、2番目のユーザーが所有者となり、トークンを作成したユーザーはトークンの所有者ではなくなります。所有権ベースのアクセス制御のため、新しい所有者はカスタムプロパティー値を更新できるようになりましたが、以前の所有者は更新できなくなります。ロールベースのアクセス制御のため、前の所有者は引き続きNFTをミントできますが、新しいユーザーはできません。
独自のアクセス制御関数を記述したり、アクセス制御を無効にすることもできます。次の例に、アクセスを制御する自動生成されたコードを示します。
await this.Ctx.<Token Standard>Auth.checkAuthorization(...)
auth, err := t.Ctx.<Token Standard>Auth.CheckAuthorization(...)
ノート:
自動生成されたアクセス制御関数を削除するには、TypeScriptまたはGoプロジェクトから前のコード行を削除します。MVCCの最適化
Hyperledger Fabricデータベースでは、マルチバージョン同時実行性制御(MVCC)を使用して、二重支出とデータの不整合を回避します。同じ状態が更新されると、新しいバージョンのレコードによって古いバージョンが上書きされます。ブロック内の同じキーを更新する同時リクエストがある場合、MVCC_READ_CONFLICTエラーが生成される可能性があります。
転送、ミント、バーンおよびホールド操作のMVCCエラーを減らすために、トークン・チェーンコードのMVCC最適化を有効にできます。この最適化は、Oracle Blockchain Platformでのみ機能します。デフォルトでは、最適化は無効になっています。最適化を有効にするには、適用可能な次のステップを完了します。
- CLI:
ochain init
コマンドでブール-m
または--enable_mvcc_optimization
パラメータを指定します。デフォルトでは、パラメータはfalse
に設定されます。最適化を有効にするには、ochain init
コマンドラインに-m true
を追加します。 - Visual Studio Code: チェーンコードを作成するときに、「チェーンコードの作成」ウィンドウで「MVCC最適化の有効化」を選択します。
以前のバージョンのブロックチェーン・アプリケーション・ビルダーで作成されたチェーンコードで最適化を使用するには、次のステップを実行します:
- 最新バージョンのBlockchain App Builderをインストールした後、「CLIでのチェーンコード・プロジェクトのアップグレード」および「Visual Studio Codeでのチェーンコード・プロジェクトのアップグレード」の説明に従ってチェーンコードをアップグレードします。
- チェーンコードのルート・フォルダにある
.ochain.json
ファイルを編集して、enableMvccOptimization
をtrue
に設定します。 - チェーンコードを同期します。チェーンコードは最適化を追加し、チェーンコードのルート・フォルダに2つの新しいフォルダ(
statedb
およびtokens
)を作成します。同期の詳細は、仕様ファイルの変更と生成されたソース・コードとの同期および仕様ファイルの変更と生成されたソース・コードとの同期を参照してください。
MVCC_READ_CONFLICTエラーを回避するその他の方法(このエラーの生成時にクライアント・アプリケーションの再試行リクエストが発生すること、またはキューを使用して同時リクエストをブロックチェーン・ネットワークに送信する前に取得することなど)。詳細は、Hyperledger Fabricドキュメントの読取り/書込みセット・セマンティクスを参照してください。
ノート:
MVCC最適化は、Oracle Blockchain PlatformとHyperledger Fabricの両方のピアを含むハイブリッド・ネットワーク、またはローカルのHyperledger Fabricネットワークでのテストでは機能しません。ハイブリッドネットワーク上でMVCC最適化を有効にしないでください。これにより、ピア間の不整合が発生する可能性があります。