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メソッドを使用して、ビジネス・アプリケーションのカスタム・メソッドを記述できます。
自動生成されたトークン・メソッド
ブロックチェーン・アプリケーション・ビルダーは、トークンおよびトークン・ライフサイクルをサポートするメソッドを自動的に生成します。これらのメソッドを使用して、トークンの初期化、ロールとアカウントの管理、およびその他のトークン・ライフサイクル・タスクを追加コーディングなしで行えます。コントローラ・メソッドを呼び出し可能にするには、パブリックである必要があります。パブリック・メソッド名は大文字で始まります。小文字で始まるメソッド名はプライベートです。
アクセス制御管理のメソッド
-
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
- このメソッドはトークンを作成します。定義されているすべてのトークンには、独自の作成メソッドがあります。代替可能トークンの場合、このメソッドはチェーンコードの
Token Admin
のみがコールできます。非代替トークンの場合、ミンター・ロールが仕様ファイルに定義されていれば、ミンター・ロールを持つすべてのユーザーがこのメソッドをコールしてNFTを作成できます。ミンター・ロールが定義されていない場合、どのユーザーもこのメソッドを使用して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
- このメソッドは、ミントされたトークンの合計数を返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。このメソッドは、チェーンコードの
Token Admin
のみがコールできます。 -
TotalNetSupply
- このメソッドは、ミントされたトークンの合計数からバーンされたトークンの数を引いた数を返します。代替可能トークンはトークン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を持つ複数の代替可能トークン・アカウントを持つことができます。代替可能トークン・アカウントIDは、
orgId
パラメータ、userId
パラメータ、チルダ記号(~
)で区切られた定数文字列ft
、およびチルダ記号(~
)で区切られた作成中の代替可能アカウントの索引を示すカウンタ番号のSHA-256ハッシュによって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
のSHA-256ハッシュによって形成されます。ユーザーが所有するすべての非代替トークン(ホールまたはフラクショナル)は、このアカウントにリンクされます。ユーザー・アカウントIDは
ouaccount~
で始まります。トークン・アカウントIDはoaccount~
で始まります。 -
CreateUserAccount
- このメソッドは、指定されたユーザーのアカウントを作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。ユーザー・アカウントは、ユーザーが保持するNFTアカウントおよび代替可能トークン・アカウントを追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。
アカウントIDは、
orgId
パラメータおよびuserId
パラメータのSHA-256ハッシュです。このメソッドは、チェーンコードのToken Admin
のみがコールできます。 -
CreateTokenAccount
- このメソッドは、ユーザー・アカウントに関連付ける代替可能または非代替トークン・アカウントを作成します。
ユーザーは、一意のアカウントIDを持つ複数の代替可能トークン・アカウントを持つことができます。代替可能トークン・アカウントIDは、
orgId
パラメータ、userId
パラメータ、チルダ記号(~
)で区切られた定数文字列ft
、およびチルダ記号(~
)で区切られた作成中の代替可能アカウントの索引を示すカウンタ番号のSHA-256ハッシュによって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
のSHA-256ハッシュによって形成されます。ユーザーが所有するすべての非代替トークン(ホールまたはフラクショナル)は、このアカウントにリンクされます。このメソッドは、チェーンコードの
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
のみがコールできます。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。指定されたユーザーには、代替可能トークンに関連付けられたトークン・アカウント、またはNFTロールの非代替トークン・アカウントが必要です。トークンの仕様ファイルに、指定されたロールが存在する必要があります。 -
IsInRole
- このメソッドは、ユーザーに指定されたロールがあるかどうかを示すブール値を返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccountOwner
のみがコールできます。指定されたユーザーには、代替可能トークンに関連付けられたトークン・アカウント、またはNFTロールの非代替トークン・アカウントが必要です。トークンの仕様ファイルに、指定されたロールが存在する必要があります。 -
RemoveRole
- このメソッドは、指定されたユーザーおよびトークンからロールを削除します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。このメソッドは、チェーンコードの
Token Admin
のみがコールできます。指定されたユーザーには、代替可能トークンに関連付けられたトークン・アカウント、またはNFTロールの非代替トークン・アカウントが必要です。トークンの仕様ファイルに、指定されたロールが存在する必要があります。 -
GetAccountsByRole
- このメソッドは、指定されたロールおよびトークンのすべてのアカウントIDのリストを返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。このメソッドは、チェーンコードの
Token Admin
のみがコールできます。 -
GetUsersByRole
- このメソッドは、指定されたロールおよびトークンのすべてのユーザーのリストを返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。このメソッドは、チェーンコードの
Token Admin
のみがコールできます。
トランザクション履歴管理のメソッド
-
GetAccountTransactionHistory
- このメソッドは、アカウント・トランザクション履歴を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者のみがコールできます。非代替トークンの場合、このメソッドはリモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。 -
GetTransactionById
- このメソッドは、指定されたトランザクションIDのトランザクション詳細を返します。だれでもこのメソッドをコールできます。
-
DeleteHistoricalTransactions
- このメソッドは、指定したタイムスタンプより前のトランザクションを状態データベースから削除します。このメソッドは、チェーンコードの
Token Admin
のみがコールできます。
トークン動作管理のメソッド - ミント可能動作
-
MintBatch
- このメソッドは、バッチ操作で複数のトークンを作成(ミント)します。このメソッドは、代替可能トークンまたはフラクショナル非代替トークンのみを作成します。
代替可能トークンの場合、ミンター・ロールが仕様ファイルに定義されていれば、ミンター・ロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。トークンの作成または更新時にトークンの
max_mint_quantity
プロパティが指定されていた場合、このプロパティを超えるミントはできません。非代替トークンの場合、ミンター・ロールが仕様ファイルに定義されていれば、ミンター・ロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。また、コール元はトークンの作成者でもある必要があります。ミントできるフラクショナル非代替トークンの数量に上限はありません。
このメソッドを使用して、ホール非代替トークンをミントすることはできません。
トークン動作管理のメソッド - 転送可能動作
-
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
- このメソッドはトークンを作成します。定義されているすべてのトークンには、独自の作成メソッドがあります。非代替トークンの場合、ミンター・ロールが仕様ファイルに定義されていれば、ミンター・ロールを持つすべてのユーザーがこのメソッドをコールして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
- このメソッドは、ミントされたトークンの合計数を返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。
-
TotalNetSupply
- このメソッドは、ミントされたトークンの合計数からバーンされたトークンの数を引いた数を返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。
-
GetTokensByName
- このメソッドは、指定されたトークン名のすべてのトークン・アセットを返します。このメソッドでは、Berkeley DB SQLリッチ問合せが使用され、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
-
GetDecimals
- このメソッドは、指定されたトークンの小数点以下の桁数を返します。トークンに対して分割可能動作が指定されていない場合は、小数点以下の桁数のデフォルト値ゼロが返されます。
アカウント管理のメソッド
-
CreateAccount
- このメソッドは、指定されたユーザーおよび関連するトークン・アカウントのアカウントを、代替可能トークンまたは非代替トークンに対して作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。ユーザー・アカウントは、ユーザーが保持するNFTアカウントおよび代替可能トークン・アカウントを追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。このメソッドは、チェーンコードの
Token Admin
のみがコールできます。ユーザー・アカウントには、
orgId
パラメータおよびuserId
パラメータのSHA-256ハッシュによって形成される一意のIDがあります。ユーザーは、一意のアカウントIDを持つ複数の代替可能トークン・アカウントを持つことができます。代替可能トークン・アカウントIDは、
orgId
パラメータ、userId
パラメータ、チルダ記号(~
)で区切られた定数文字列ft
、およびチルダ記号(~
)で区切られた作成中の代替可能アカウントの索引を示すカウンタ番号のSHA-256ハッシュによって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
のSHA-256ハッシュによって形成されます。ユーザーが所有するすべての非代替トークン(ホールまたはフラクショナル)は、この単一の非代替トークン・アカウントにリンクされます。 -
CreateUserAccount
- このメソッドは、指定されたユーザーのアカウントを作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。ユーザー・アカウントは、ユーザーが保持するNFTアカウントおよび代替可能トークン・アカウントを追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。
アカウントIDは、
orgId
パラメータおよびuserId
パラメータのSHA-256ハッシュです。このメソッドは、チェーンコードのToken Admin
のみがコールできます。 -
CreateTokenAccount
- このメソッドは、ユーザー・アカウントに関連付ける代替可能または非代替トークン・アカウントを作成します。
ユーザーは、一意のアカウントIDを持つ複数の代替可能トークン・アカウントを持つことができます。代替可能トークン・アカウントIDは、
orgId
パラメータ、userId
パラメータ、チルダ記号(~
)で区切られた定数文字列ft
、およびチルダ記号(~
)で区切られた作成中の代替可能アカウントの索引を示すカウンタ番号のSHA-256ハッシュによって形成されます。ユーザーが所有できる非代替トークン・アカウントは1つのみです。非代替トークン・アカウントIDは一意であり、
orgId
パラメータ、userId
パラメータおよびチルダ記号(~
)で区切られた定数文字列nft
のSHA-256ハッシュによって形成されます。ユーザーが所有するすべての非代替トークン(ホールまたはフラクショナル)は、この単一の非代替トークン・アカウントにリンクされます。このメソッドは、チェーンコードの
Token Admin
のみがコールできます。 -
AssociateTokenToToken
- このメソッドは、ユーザーの代替可能トークン・アカウントを特定の代替可能トークンに関連付けます。
-
GetAccountHistory
- このメソッドは、指定されたトークン・アカウントの履歴を返します。
-
GetAccountWithStatus
- このメソッドは、アカウント・ステータスを含む、指定されたユーザーのトークン・アカウント詳細を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccount Owner
のみがコールできます。 -
GetAccount
- このメソッドは、指定されたユーザーのトークン・アカウント詳細を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウントのAccount Owner
のみがコールできます。 -
GetAllAccounts
- このメソッドは、すべてのユーザー・アカウントの詳細を返します。
-
GetAccountDetailsByUser
- このメソッドは、指定されたユーザーのアカウント・サマリーと、ユーザーに関連付けられた代替可能トークンおよび非代替トークンの詳細を返します。
-
GetUserByAccountId
- このメソッドは、指定されたアカウントIDのユーザーの詳細を返します。
ロール管理のメソッド
-
AddRoleMember
- このメソッドは、指定されたユーザーおよびトークンにロールを追加します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。
-
IsInRole
- このメソッドは、ユーザーに指定されたロールがあるかどうかを示すブール値を返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。
-
RemoveRoleMember
- このメソッドは、指定されたユーザーおよびトークンからロールを削除します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。
-
GetAccountsByRole
- このメソッドは、指定されたロールおよびトークンのすべてのアカウントIDのリストを返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。
-
GetUsersByRole
- このメソッドは、指定されたロールおよびトークンのすべてのユーザーのリストを返します。代替可能トークンはトークンIDで指定されます。非代替トークンは、トークン名で指定されます。
トランザクション履歴管理のメソッド
-
GetAccountTransactionHistory
- このメソッドは、アカウント・トランザクション履歴を返します。このメソッドは、チェーンコードの
Token Admin
またはアカウント所有者のみがコールできます。非代替トークンの場合、このメソッドはリモートのOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。 -
GetTransactionById
- このメソッドは、指定されたトランザクションIDのトランザクション詳細を返します。
-
DeleteHistoricalTransactions
- このメソッドは、指定したタイムスタンプより前のトランザクションを状態データベースから削除します。
トークン動作管理のメソッド - ミント可能動作
-
MintBatch
- このメソッドは、バッチ操作で複数のトークンを作成(ミント)します。このメソッドは、代替可能トークンまたはフラクショナル非代替トークンのみを作成します。
代替可能トークンの場合、ミンター・ロールが仕様ファイルに定義されていれば、ミンター・ロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。トークンの作成または更新時にトークンの
max_mint_quantity
プロパティが指定されていた場合、このプロパティを超えるミントはできません。非代替トークンの場合、ミンター・ロールが仕様ファイルに定義されていれば、ミンター・ロールを持つすべてのユーザーがこのメソッドをコールできます。そうでない場合は、どのユーザーもこのメソッドを使用してトークンをミントできます。また、コール元はトークンの作成者でもある必要があります。ミントできるフラクショナル非代替トークンの数量に上限はありません。
このメソッドを使用して、ホール非代替トークンをミントすることはできません。
トークン動作管理のメソッド - 転送可能動作
-
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(ホールまたはフラクショナル)の間の交換のみをサポートします。このメソッドは、アカウント所有者のみがコールできます。
トークン動作管理のメソッド - バーン可能動作