ERC-1155用スキャフォールドGoトークンプロジェクト
ブロックチェーン・アプリケーション・ビルダーは、トークン指定ファイルから入力を受け取り、完全に機能するスキャフォールド済チェーンコード・プロジェクトを生成します。
プロジェクトは、トークン・ライフサイクル・クラスおよび関数(CRUDおよび非CRUDメソッドを含む)を自動的に生成します。引数の検証、マーシャリング/アンマーシャリングおよび透過的な永続性機能はすべて自動的にサポートされます。
スキャフォールドされたプロジェクトおよびトークンに直接関連しないメソッドの詳細は、「スキャフォールドされたGoチェーンコード・プロジェクト」を参照してください。
モデル
透過的永続性機能(または簡略化されたORM)は、OchainModel
クラスで取得されます。次のモデルは、非代替トークン全体を示しています。
package model
type ArtCollection struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"artcollection"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"whole" validate:"regexp=^whole$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
Behaviors []string `json:"Behaviors" final:"[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Owner string `json:"Owner,omitempty" validate:"string"`
CreatedBy string `json:"CreatedBy,omitempty" validate:"string"`
TransferredBy string `json:"TransferredBy,omitempty" validate:"string"`
CreationDate string `json:"CreationDate,omitempty" validate:"string"`
TransferredDate string `json:"TransferredDate,omitempty" validate:"string"`
IsBurned bool `json:"IsBurned" validate:"bool"`
BurnedBy string `json:"BurnedBy,omitempty" validate:"string"`
BurnedDate string `json:"BurnedDate,omitempty" validate:"string"`
TokenUri string `json:"TokenUri" mandatory:"true" validate:"string,max=2000"`
TokenMetadata ArtCollectionMetadata `json:"TokenMetadata"`
Price int `json:"Price" validate:"int"`
On_sale_flag bool `json:"On_sale_flag" validate:"bool"`
}
type ArtCollectionMetadata struct {
Painting_name string `json:"Painting_name" validate:"string"`
Description string `json:"Description" validate:"string"`
Image string `json:"Image" validate:"string"`
Painter_name string `json:"Painter_name" validate:"string"`
}
type Loyalty struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"loyalty"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"fungible" validate:"regexp=^fungible$"`
TokenUnit string `json:"TokenUnit" final:"fractional" validate:"regexp=^fractional$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":10000}"`
Divisible map[string]interface{} `json:"Divisible" final:"{\"Decimal\":2}"`
Behaviors []string `json:"Behaviors" final:"[\"divisible\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Currency_name string `json:"Currency_name" validate:"string"`
Token_to_currency_ratio int `json:"Token_to_currency_ratio" validate:"int"`
Metadata interface{} `json:"Metadata,omitempty"`
}
次のモデルは、小数単位の非代替トークンを示しています。type RealEstateProperty struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"realestateproperty"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"fractional" validate:"regexp=^fractional$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":0}"`
Behaviors []string `json:"Behaviors" final:"[\"divisible\",\"mintable\",\"transferable\",\"roles\"]"`
Divisible map[string]interface{} `json:"Divisible" final:"{\"Decimal\":0}"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
CreatedBy string `json:"CreatedBy,omitempty" validate:"string"`
CreationDate string `json:"CreationDate,omitempty" validate:"string"`
IsBurned bool `json:"IsBurned" validate:"bool"`
TokenUri string `json:"TokenUri" mandatory:"true" validate:"string,max=2000"`
Quantity float64 `json:"Quantity,omitempty"`
TokenMetadata RealEstatePropertyMetadata `json:"TokenMetadata"`
PropertySellingPrice int `json:"PropertySellingPrice" validate:"int"`
PropertyRentingPrice int `json:"PropertyRentingPrice" validate:"int"`
}
type RealEstatePropertyMetadata struct {
PropertyType string `json:"PropertyType" validate:"string"`
PropertyName string `json:"PropertyName" validate:"string"`
PropertyAddress string `json:"PropertyAddress" validate:"string"`
PropertyImage string `json:"PropertyImage" validate:"string"`
}
コントローラ
メインコントローラは1つのみです。
type Controller struct {
Ctx trxcontext.TrxContext
}
クラス、関数またはファイルはいくつでも作成できますが、メイン・コントローラ・クラス内で定義されているメソッドのみが呼出し可能です。その他の方法は非表示です。
トークンSDKメソッドを使用して、ビジネス・アプリケーションのカスタム・メソッドを記述できます。
自動生成されたトークン・メソッド
Blockchain App Builderは、トークンとトークンのライフサイクルをサポートするメソッドを自動的に生成します。これらの方法を使用すると、トークンを初期化し、ロールとアカウントを管理し、その他のトークン・ライフサイクル・タスクを追加のコーディングなしで完了できます。コントローラメソッドを起動可能にするには、publicである必要があります。publicメソッド名は大文字で始まります。小文字で始まるメソッド名はprivateです。
アクセス制御管理のメソッド
-
IsTokenAdmin
- このメソッドは、ファンクションのコール元が
Token Admin
の場合はブール値true
を戻し、それ以外の場合はfalse
を戻します。このメソッドは、チェーンコードのToken Admin
によってのみコールできます。 -
AddTokenAdmin
- このメソッドは、ユーザーをチェーンコードの
Token Admin
として追加します。このメソッドをコールできるのは、チェーンコードのToken Admin
のみです。 -
RemoveTokenAdmin
- このメソッドは、チェーンコードの
Token Admin
としてユーザーを削除します。このメソッドをコールできるのは、チェーンコードのToken Admin
のみです。Token Admin
として自分自身を削除することはできません。 -
GetAllTokenAdmins
- このメソッドは、チェーンコードの
Token Admin
であるすべてのユーザーのリストを返します。このメソッドをコールできるのは、チェーンコードのToken Admin
のみです。
トークン構成管理のメソッド
-
Init
- このメソッドは、チェーンコードがインスタンス化されるときにコールされます。すべての
Token Admin
は、adminList
パラメータのuserId
およびorgId
情報によって識別されます。userId
は、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールIDです。orgId
は、現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) IDです。チェーンコードを初めてデプロイする場合、adminList
パラメータは必須です。チェーンコードをアップグレードする場合は、空のリスト([]
)を渡します。チェーンコードを最初にデプロイしたユーザーの場合、チェーンコードのアップグレード時にadminList
パラメータに新しい管理者を指定することもできます。adminList
パラメータ内のその他の情報は、アップグレード時に無視されます。 -
Create<Token Name>Token
- このメソッドはトークンを作成します。定義されているすべてのトークンには、独自のcreateメソッドがあります。真菌性トークンの場合、このメソッドはチェーンコードの
Token Admin
によってのみコールできます。非代替トークンの場合、minterロールが仕様ファイルに定義されていれば、minterロールを持つすべてのユーザーがこのメソッドをコールしてNFTを作成できます。minterロールが定義されていない場合、どのユーザーもこのメソッドを使用して(mint) NFTを作成できます。このメソッドを呼び出すユーザーがNFTの所有者になります。 -
Update<Token Name>Token
- このメソッドはトークンを更新します。定義されているすべてのトークンには、独自の更新メソッドがあります。トークン・メタデータまたは非代替トークンのトークンURIは更新できません。真菌性トークンの場合、このメソッドはチェーンコードの
Token Admin
によってのみコールできます。非代替トークンの場合、このメソッドはトークン所有者のみが呼び出すことができます。 -
GetTokenHistory
- このメソッドは、指定されたトークンIDの履歴を返します。誰でもこのメソッドを呼び出すことができます。
-
GetAllTokens
- このメソッドは、状態データベースに保存されているすべてのトークン・アセットを返します。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。 -
GetTokenById
- このメソッドは、トークンが状態データベースに存在する場合、トークン・オブジェクトを返します。小数NFTの場合、所有者のリストも返されます。このメソッドは、チェーンコードまたはトークン所有者の
Token Admin
によってのみコールできます。 -
GetAllTokensByUser
- このメソッドは、指定されたユーザーが所有するすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者によってのみコールできます。 -
OwnerOf
- このメソッドは、指定されたトークンIDの所有者のアカウントID、組織IDおよびユーザーIDを返します。誰でもこのメソッドを呼び出すことができます。
-
URI
- このメソッドは、指定されたトークンのURIを返します。誰でもこのメソッドを呼び出すことができます。
-
Name
- このメソッドは、トークン・クラスの名前を返します。誰でもこのメソッドを呼び出すことができます。
-
TotalSupply
- このメソッドは、ミント・トークンの合計数を返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
TotalNetSupply
- このメソッドは、ミント・トークンの合計数から焼却済トークンの数を引いた数を返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
GetTokensByName
- このメソッドは、指定されたトークン名のすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
GetTokenDecimal
- このメソッドは、指定されたトークンの小数点以下の桁数を返します。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。
アカウント管理のメソッド
-
CreateAccount
- このメソッドは、指定されたユーザーおよび関連するトークン・アカウントのアカウントを、真菌可能トークンまたは非真菌性トークンに対して作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。ユーザー・アカウントは、ユーザーが所有するNFTアカウントおよび真菌可能トークン・アカウントを追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。ユーザー・アカウントには、
orgId
パラメータおよびuserId
パラメータのSHA-256ハッシュによって形成される一意のIDがあります。ユーザーは、一意のアカウントIDを持つ複数の真菌可能トークン・アカウントを持つことができます。Fungibleトークン・アカウントIDは、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータ、チルダ記号で区切られた定数文字列ft
(~
)、およびチルダ記号(~
)で区切られた作成中の真菌可能アカウントの索引を示すカウンタ番号によって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
によって形成されます。ユーザーが所有するすべての非代替トークン(全体または小数)は、このアカウントにリンクされます。ユーザー・アカウントIDは
ouaccount~
で始まります。トークン・アカウントIDはoaccount~
で始まります。 -
CreateUserAccount
- このメソッドは、指定されたユーザーのアカウントを作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。ユーザー・アカウントは、ユーザーが所有するNFTアカウントおよび真菌可能トークン・アカウントを追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。
アカウントIDは、
orgId
パラメータおよびuserId
パラメータのSHA-256ハッシュです。このメソッドをコールできるのは、チェーンコードのToken Admin
のみです。 -
CreateTokenAccount
- このメソッドは、ユーザー・アカウントに関連付ける真菌可能または非真菌可能トークン・アカウントを作成します。
ユーザーは、一意のアカウントIDを持つ複数の真菌可能トークン・アカウントを持つことができます。Fungibleトークン・アカウントIDは、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータ、チルダ記号で区切られた定数文字列ft
(~
)、およびチルダ記号(~
)で区切られた作成中の真菌可能アカウントの索引を示すカウンタ番号によって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
によって形成されます。ユーザーが所有するすべての非代替トークン(全体または小数)は、このアカウントにリンクされます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
AssociateFungibleTokenAccount
- このメソッドは、ユーザーの真菌可能トークン・アカウントを特定の真菌可能トークンに関連付けます。
このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
GetAccountHistory
- このメソッドは、指定されたトークン・アカウントの履歴を返します。これは非同期メソッドです。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者によってのみコールできます。 -
GetAccount
- このメソッドは、指定されたユーザーのトークン・アカウント詳細を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccount Owner
によってのみコールできます。 -
GetAllAccounts
- このメソッドは、すべてのユーザー・アカウントの詳細を返します。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
GetAccountDetailsByUser
- このメソッドは、指定されたユーザーのアカウント・サマリーと、そのユーザーに関連付けられている真菌性トークンおよび非真菌性トークンの詳細を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccount Owner
によってのみコールできます。 -
GetUserByAccountId
- このメソッドは、指定されたアカウントIDのユーザーの詳細を返します。このメソッドは、どのユーザーでもコールできます。
ロール管理方法
-
AddRole
- このメソッドは、指定されたユーザーおよびトークンにロールを追加します。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。指定されたユーザーには、真菌可能トークンに関連付けられたトークン・アカウント、またはNFTロールの非真菌可能トークン・アカウントが必要です。トークンの指定ファイルに、指定されたロールが存在する必要があります。 -
IsInRole
- このメソッドは、ユーザーに指定されたロールがあるかどうかを示すブール値を返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccount Owner
によってのみコールできます。指定されたユーザーには、真菌可能トークンに関連付けられたトークン・アカウント、またはNFTロールの非真菌可能トークン・アカウントが必要です。トークンの指定ファイルに、指定されたロールが存在する必要があります。 -
RemoveRole
- このメソッドは、指定されたユーザーおよびトークンからロールを削除します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。指定されたユーザーには、真菌可能トークンに関連付けられたトークン・アカウント、またはNFTロールの非真菌可能トークン・アカウントが必要です。トークンの指定ファイルに、指定されたロールが存在する必要があります。 -
GetAccountsByRole
- このメソッドは、指定されたロールおよびトークンのすべてのアカウントIDのリストを返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
GetUsersByRole
- このメソッドは、指定されたロールおよびトークンのすべてのユーザーのリストを返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。
トランザクション履歴管理のメソッド
-
GetAccountTransactionHistory
- このメソッドは、勘定科目トランザクション履歴を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者によってのみコールできます。非代替トークンの場合、このメソッドはリモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。 -
GetTransactionById
- このメソッドは、指定されたトランザクションIDのトランザクション詳細を返します。誰でもこのメソッドを呼び出すことができます。
-
DeleteHistoricalTransactions
- このメソッドは、指定したタイムスタンプより前のトランザクションを状態データベースから削除します。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。
トークン動作管理のメソッド- 最小化可能な動作
-
MintBatch
- このメソッドは、バッチ操作で複数のトークンを作成(分)します。このメソッドは、真菌性トークンまたは小数非真菌性トークンのみを作成します。
真菌性トークンの場合、minterロールが仕様ファイルに定義されていれば、minterロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。トークンの作成または更新時にそのプロパティが指定されていた場合、トークンの
max_mint_quantity
プロパティを超えるミントはできません。非代替トークンの場合、minterロールが仕様ファイルに定義されていれば、minterロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。また、呼び出し元もトークンの作成者である必要があります。ミントできる小数非真菌トークンの量に上限はありません。
このメソッドを使用して、非代替トークン全体をミントすることはできません。
トークン動作管理のメソッド- 転送可能な動作
-
BatchTransferFrom
- このメソッドは、トークンIDのリストで指定されたトークンを別のユーザーに転送するバッチ操作を完了します。
NFTの場合、メソッドによってNFTの所有権が移動されるため、NFTの送信者はトークンを所有している必要があります。
小数NFTの場合、ユーザー(トークンの作成者を含む)が所有するすべてのシェアを転送すると、トークンの所有権が失われます。トークンのいずれかのシェアがユーザーに転送されると、そのユーザーは自動的に小数NFTの所有者の1人になります。
このメソッドは、メソッドのコール元が指定された送信者であることを検証しません。このメソッドは、どのユーザーでもコールできます。
-
SafeBatchTransferFrom
- このメソッドは、トークンIDのリストで指定されたトークンを別のユーザーに転送するバッチ操作を完了します。
NFTの場合、メソッドによってNFTの所有権が移動されるため、NFTの送信者はトークンを所有している必要があります。
小数NFTの場合、ユーザー(トークンの作成者を含む)が所有するすべてのシェアを転送すると、トークンの所有権が失われます。トークンのいずれかのシェアがユーザーに転送されると、そのユーザーは自動的に小数NFTの所有者の1人になります。
メソッドのコール元は、指定された送信者である必要があります。このメソッドは、どのユーザーでもコールできます。
-
BalanceOfBatch
- このメソッドは、トークン・アカウントの残高を取得するバッチ操作を完了します。アカウント詳細は、組織ID、ユーザーIDおよびトークンIDの3つの個別のリストで指定されます。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者によってのみコールできます。口座所有者は、自分が所有する口座の残高詳細のみを表示できます。 -
ExchangeToken
- このメソッドは、指定されたアカウント間でトークンを交換します。この方法は、NFTと真菌可能トークン、または真菌可能トークンとNFTとの間の交換のみをサポートします。このメソッドは、アカウント所有者のみがコールできます。
トークン動作管理のメソッド- 書き込み可能な動作
SDKメソッド
アクセス制御管理のメソッド
-
CheckAuthorization
- このメソッドは、操作にアクセス制御チェックを追加するために使用します。これは非同期関数です。自動生成されるほとんどの方法には、アクセス制御があります。特定のトークン・メソッドは、トークンの
ERC721Admin
またはAccount Owner
、または複数のアカウントを持つユーザーに対してMultipleAccountOwner
によってのみ実行できます。CheckAuthorization
メソッドは、Ctx
オブジェクトを介してアクセスするerc721Auth
クラスの一部です。アクセス制御マッピングは、次のテキストに示すように、oChainUtil.go
ファイルで説明されています。アクセス制御を変更するには、oChainUtil.go
ファイルを編集します。var t TokenAccess var r RoleAccess var a AccountAccess var as AccountStatusAccess var h HoldAccess var ad AdminAccess var trx TransactionAccess var tc TokenConversionAccess var auth AuthAccess var erc721ad ERC721AdminAccess var erc721t ERC721TokenAccess var erc721r ERC721RoleAccess var erc721a ERC721AccountAccess var erc721as ERC721AccountStatusAccess var erc721trx ERC721TransactionAccess var erc1155ad ERC1155AdminAccess var erc1155t ERC1155TokenAccess var erc1155a ERC1155AccountAccess var erc1155as ERC1155AccountStatusAccess var erc1155trx ERC1155TransactionAccess var erc1155role ERC1155RoleAccess trx.DeleteHistoricalTransactions = []string{"Admin"} ad.AddAdmin = []string{"Admin"} ad.RemoveAdmin = []string{"Admin"} ad.GetAllAdmins = []string{"Admin", "OrgAdmin"} ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"} ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"} t.Save = []string{"Admin"} t.GetAllTokens = []string{"Admin", "OrgAdmin"} t.Update = []string{"Admin"} t.GetTokenDecimals = []string{"Admin", "OrgAdmin"} t.GetTokensByName = []string{"Admin", "OrgAdmin"} t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"} t.GetNetTokens = []string{"Admin", "OrgAdmin"} t.Get = []string{"Admin", "OrgAdmin"} t.GetTokenHistory = []string{"Admin", "OrgAdmin"} a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"} a.GetAllAccounts = []string{"Admin"} a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"} a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.History = []string{"Admin", "AccountOwner"} a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"} a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"} a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"} as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetAccountsByRole = []string{"Admin"} r.GetUsersByRole = []string{"Admin"} r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"} tc.InitializeExchangePoolUser = []string{"Admin"} tc.AddConversionRate = []string{"Admin"} tc.UpdateConversionRate = []string{"Admin"} tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.TokenConversion = []string{"Admin", "AnyAccountOwner"} tc.GetExchangePoolUser = []string{"Admin"} erc721ad.AddAdmin = []string{"Admin"} erc721ad.GetAllAdmins = []string{"Admin"} erc721ad.IsTokenAdmin = []string{"Admin"} erc721ad.RemoveAdmin = []string{"Admin"} erc721trx.DeleteHistoricalTransactions = []string{"Admin"} erc721t.Save = []string{"Admin"} erc721t.GetAllTokens = []string{"Admin"} erc721t.Update = []string{"Admin"} erc721t.GetTokensByName = []string{"Admin"} erc721t.AddRoleMember = []string{"Admin"} erc721t.RemoveRoleMember = []string{"Admin"} erc721t.IsInRole = []string{"Admin", "AccountOwner"} erc721t.Get = []string{"Admin", "TokenOwner"} erc721t.GetAllTokensByUser = []string{"Admin", "AccountOwner"} erc721t.TotalSupply = []string{"Admin"} erc721t.TotalNetSupply = []string{"Admin"} erc721t.History = []string{"Admin"} erc721a.CreateAccount = []string{"Admin"} erc721a.CreateUserAccount = []string{"Admin"} erc721a.CreateTokenAccount = []string{"Admin"} erc721a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"} erc721a.GetAllAccounts = []string{"Admin"} erc721a.History = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"} erc721a.GetAccountByUser = []string{"Admin", "MultipleAccountOwner"} erc721a.BalanceOf = []string{"Admin", "MultipleAccountOwner"} erc721as.Get = []string{"Admin", "AccountOwner"} erc721as.ActivateAccount = []string{"Admin"} erc721as.SuspendAccount = []string{"Admin"} erc721as.DeleteAccount = []string{"Admin"} erc721r.GetAccountsByRole = []string{"Admin"} erc721r.GetUsersByRole = []string{"Admin"} erc1155ad.AddAdmin = []string{"Admin"} erc1155ad.GetAllAdmins = []string{"Admin"} erc1155ad.IsUserTokenAdmin = []string{"Admin"} erc1155ad.RemoveAdmin = []string{"Admin"} erc1155t.AddRoleMember = []string{"Admin"} erc1155t.IsInRole = []string{"Admin"} erc1155t.GetAllTokens = []string{"Admin"} erc1155t.GetAllTokensByUser = []string{"Admin", "AccountOwner"} erc1155t.Get = []string{"Admin", "TokenOwner"} erc1155t.RemoveRoleMember = []string{"Admin"} erc1155t.TotalNetSupply = []string{"Admin"} erc1155t.TotalSupply = []string{"Admin"} erc1155t.GetTokenDecimal = []string{"Admin"} erc1155t.GetTokensByName = []string{"Admin"} erc1155t.GetTotalMintedTokens = []string{"Admin"} erc1155t.GetNetTokens = []string{"Admin"} erc1155t.Save = []string{"Admin"} erc1155t.Update = []string{"Admin"} erc1155trx.DeleteHistoricalTransactions = []string{"Admin"} erc1155role.GetAccountsByRole = []string{"Admin"} erc1155role.GetUsersByRole = []string{"Admin"} erc1155a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"} erc1155a.BalanceOfBatch = []string{"Admin"} erc1155a.CreateAccount = []string{"Admin"} erc1155a.CreateTokenAccount = []string{"Admin"} erc1155a.CreateUserAccount = []string{"Admin"} erc1155a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"} erc1155a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"} erc1155a.GetAccountsByUser = []string{"Admin", "AccountOwner"} erc1155a.GetAccount = []string{"Admin", "AccountOwner"} erc1155a.History = []string{"Admin", "AccountOwner"} erc1155a.GetAllAccounts = []string{"Admin"} erc1155a.ExchangeToken = []string{"AccountOwner"} erc1155a.GetAccountDetailsByUser = []string{"Admin", "AccountOwner"} erc1155as.Get = []string{"Admin", "AccountOwner"} erc1155as.ActivateAccount = []string{"Admin"} erc1155as.SuspendAccount = []string{"Admin"} erc1155as.DeleteAccount = []string{"Admin"} var accessMap TokenAccessControl accessMap.Token = t accessMap.Account = a accessMap.AccountStatus = as accessMap.Hold = h accessMap.Role = r accessMap.Admin = ad accessMap.Auth = auth accessMap.TokenConversion = tc accessMap.ERC721ADMIN = erc721ad accessMap.ERC721TOKEN = erc721t accessMap.ERC721ACCOUNT = erc721a accessMap.ERC721AccountStatus = erc721as accessMap.ERC721ROLE = erc721r accessMap.ERC721TRANSACTION = erc721trx accessMap.ERC1155Account = erc1155a accessMap.ERC1155AccountStatus = erc1155as accessMap.ERC1155Admin = erc1155ad accessMap.ERC1155Token = erc1155t accessMap.ERC1155Transaction = erc1155trx accessMap.ERC1155Role = erc1155role
-
IsUserTokenAdmin
- このメソッドは、指定されたユーザーが
Token Admin
の場合はブール値true
を、それ以外の場合はfalse
を返します。このメソッドは、トークン・チェーンコードのToken Admin
によってのみコールできます。 -
AddAdmin
- このメソッドは、トークン・チェーンコードの
Token Admin
としてユーザーを追加します。このメソッドは、トークン・チェーンコードのToken Admin
によってのみコールできます。 -
RemoveAdmin
- このメソッドは、トークン・チェーンコードの
Token Admin
としてユーザーを削除します。このメソッドは、トークン・チェーンコードのToken Admin
によってのみコールできます。Token Admin
として自分自身を削除することはできません。 -
GetAllAdminUsers
- このメソッドは、すべての
Token Admin
ユーザーのリストを返します。
トークン構成管理のメソッド
-
Save
- このメソッドはトークンを作成します。定義されているすべてのトークンには、独自のcreateメソッドがあります。非代替トークンの場合、minterロールが仕様ファイルに定義されている場合、minterロールを持つすべてのユーザーがこのメソッドをコールしてNFTを作成できます。そうでない場合は、どのユーザーもこの方法を使用してNFTを作成できます(最小)。このメソッドをコールするユーザーは、NFTの所有者(全体または小数)になります。
-
Update
- このメソッドはトークンを更新します。トークン・メタデータまたは非代替トークンのトークンURIは更新できません。
-
History (Token)
- このメソッドは、指定されたトークンIDの履歴を返します。
-
GetAllTokens
- このメソッドは、状態データベースに保存されているすべてのトークン・アセットを返します。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。 -
Get (Token)
- このメソッドは、トークンが状態データベースに存在する場合、トークン・オブジェクトを返します。このメソッドは、チェーンコードまたはトークン所有者の
Token Admin
によってのみコールできます。小数NFTの場合、所有者のリストも返されます。 -
GetAllTokensByUser
- このメソッドは、指定されたユーザーが所有するすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
-
OwnerOf
- このメソッドは、指定されたトークンIDの所有者のアカウントID、組織IDおよびユーザーIDを返します。
-
TokenURI
- このメソッドは、指定されたトークンのURIを返します。誰でもこのメソッドを呼び出すことができます。
-
Name
- このメソッドは、トークン・クラスの名前を返します。誰でもこのメソッドを呼び出すことができます。
-
TotalSupply
- このメソッドは、ミント・トークンの合計数を返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。
-
TotalNetSupply
- このメソッドは、ミント・トークンの合計数から焼却済トークンの数を引いた数を返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。
-
GetTokensByName
- このメソッドは、指定されたトークン名のすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
-
GetDecimals
- このメソッドは、指定されたトークンの小数点以下の桁数を返します。トークンに対して分割可能な動作が指定されていない場合は、小数点以下ゼロのデフォルト値が返されます。
アカウント管理のメソッド
-
CreateAccount
- このメソッドは、指定されたユーザーおよび関連するトークン・アカウントのアカウントを、真菌可能トークンまたは非真菌性トークンに対して作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。ユーザー・アカウントは、ユーザーが所有するNFTアカウントおよび真菌可能トークン・アカウントを追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。ユーザー・アカウントには、
orgId
パラメータおよびuserId
パラメータのSHA-256ハッシュによって形成される一意のIDがあります。ユーザーは、一意のアカウントIDを持つ複数の真菌可能トークン・アカウントを持つことができます。Fungibleトークン・アカウントIDは、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータ、チルダ記号で区切られた定数文字列ft
(~
)、およびチルダ記号(~
)で区切られた作成中の真菌可能アカウントの索引を示すカウンタ番号によって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
によって形成されます。ユーザーが所有するすべての非代替トークン(全体または小数)は、この単一の非代替トークン・アカウントにリンクされます。 -
CreateUserAccount
- このメソッドは、指定されたユーザーのアカウントを作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。ユーザー・アカウントは、ユーザーが所有するNFTアカウントおよび真菌可能トークン・アカウントを追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。
アカウントIDは、
orgId
パラメータおよびuserId
パラメータのSHA-256ハッシュです。このメソッドをコールできるのは、チェーンコードのToken Admin
のみです。 -
CreateTokenAccount
- このメソッドは、ユーザー・アカウントに関連付ける真菌可能または非真菌可能トークン・アカウントを作成します。
ユーザーは、一意のアカウントIDを持つ複数の真菌可能トークン・アカウントを持つことができます。Fungibleトークン・アカウントIDは、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータ、チルダ記号で区切られた定数文字列ft
(~
)、およびチルダ記号(~
)で区切られた作成中の真菌可能アカウントの索引を示すカウンタ番号によって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータのSHA-256ハッシュ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
によって形成されます。ユーザーが所有するすべての非代替トークン(全体または小数)は、この単一の非代替トークン・アカウントにリンクされます。このメソッドをコールできるのは、チェーンコードの
Token Admin
のみです。 -
AssociateTokenToToken
- このメソッドは、ユーザーの真菌可能トークン・アカウントを特定の真菌可能トークンに関連付けます。
-
GetAccountHistory
- このメソッドは、指定されたトークン・アカウントの履歴を返します。
-
GetAccountWithStatus
- このメソッドは、アカウント・ステータスを含む、指定されたユーザーのトークン・アカウント詳細を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccount Owner
によってのみコールできます。 -
GetAccount
- このメソッドは、指定されたユーザーのトークン・アカウント詳細を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccount Owner
によってのみコールできます。 -
GetAllAccounts
- このメソッドは、すべてのユーザー・アカウントの詳細を返します。
-
GetAccountDetailsByUser
- このメソッドは、指定されたユーザーのアカウント・サマリーと、そのユーザーに関連付けられている真菌性トークンおよび非真菌性トークンの詳細を返します。
-
GetUserByAccountId
- このメソッドは、指定されたアカウントIDのユーザーの詳細を返します。
ロール管理方法
-
AddRoleMember
- このメソッドは、指定されたユーザーおよびトークンにロールを追加します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。
-
IsInRole
- このメソッドは、ユーザーに指定されたロールがあるかどうかを示すブール値を返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。
-
RemoveRoleMember
- このメソッドは、指定されたユーザーおよびトークンからロールを削除します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。
-
GetAccountsByRole
- このメソッドは、指定されたロールおよびトークンのすべてのアカウントIDのリストを返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。
-
GetUsersByRole
- このメソッドは、指定されたロールおよびトークンのすべてのユーザーのリストを返します。FungibleトークンはトークンIDによって指定されます。無効でないトークンは、トークン名で指定されます。
トランザクション履歴管理のメソッド
-
GetAccountTransactionHistory
- このメソッドは、勘定科目トランザクション履歴を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者によってのみコールできます。非代替トークンの場合、このメソッドはリモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。 -
GetTransactionById
- このメソッドは、指定されたトランザクションIDのトランザクション詳細を返します。
-
DeleteHistoricalTransactions
- このメソッドは、指定したタイムスタンプより前のトランザクションを状態データベースから削除します。
トークン動作管理のメソッド- 最小化可能な動作
-
MintBatch
- このメソッドは、バッチ操作で複数のトークンを作成(分)します。このメソッドは、真菌性トークンまたは小数非真菌性トークンのみを作成します。
真菌性トークンの場合、minterロールが仕様ファイルに定義されていれば、minterロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。トークンの作成または更新時にそのプロパティが指定されていた場合、トークンの
max_mint_quantity
プロパティを超えるミントはできません。非代替トークンの場合、minterロールが仕様ファイルに定義されていれば、minterロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。また、呼び出し元もトークンの作成者である必要があります。ミントできる小数非真菌トークンの量に上限はありません。
このメソッドを使用して、非代替トークン全体をミントすることはできません。
トークン動作管理のメソッド- 転送可能な動作
-
BatchTransferFrom
- このメソッドは、トークンIDのリストで指定されたトークンを別のユーザーに転送するバッチ操作を完了します。
NFTの場合、メソッドによってNFTの所有権が移動されるため、NFTの送信者はトークンを所有している必要があります。
小数NFTの場合、ユーザー(トークンの作成者を含む)が所有するすべてのシェアを転送すると、トークンの所有権が失われます。トークンのいずれかのシェアがユーザーに転送されると、そのユーザーは自動的に小数NFTの所有者の1人になります。
このメソッドは、メソッドのコール元が指定された送信者であることを検証しません。
-
SafeBatchTransferFrom
- このメソッドは、トークンIDのリストで指定されたトークンを別のユーザーに転送するバッチ操作を完了します。
NFTの場合、メソッドによってNFTの所有権が移動されるため、NFTの送信者はトークンを所有している必要があります。
小数NFTの場合、ユーザー(トークンの作成者を含む)が所有するすべてのシェアを転送すると、トークンの所有権が失われます。トークンのいずれかのシェアがユーザーに転送されると、そのユーザーは自動的に小数NFTの所有者の1人になります。
メソッドのコール元は、指定された送信者である必要があります。
-
BalanceOfBatch
- このメソッドは、トークン・アカウントの残高を取得するバッチ操作を完了します。アカウント詳細は、組織ID、ユーザーIDおよびトークンIDの3つの個別のリストで指定されます。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者によってのみコールできます。口座所有者は、自分が所有する口座の残高詳細のみを表示できます。 -
ExchangeToken
- このメソッドは、指定されたアカウント間でトークンを交換します。この方法は、NFT(全体または小数)と真菌可能トークンまたは真菌可能トークンとNFT(全体または小数)の間の交換のみをサポートします。このメソッドは、アカウント所有者のみがコールできます。
トークン動作管理のメソッド- 書き込み可能な動作