ERC-721用スキャフォールドGo NFTプロジェクト

ブロックチェーン・アプリケーション・ビルダーは、NFT仕様ファイルから入力を受け取り、完全に機能するスキャフォールド済チェーンコード・プロジェクトを生成します。

プロジェクトは、CRUDおよび非CRUDメソッドを含むNFTライフサイクル・クラスおよび関数を自動的に生成します。引数の検証、マーシャリング/アンマーシャリングおよび透過的な永続性機能はすべて自動的にサポートされます。

スキャフォールドされたプロジェクトおよびNFTに直接関連しないメソッドの詳細は、「スキャフォールドされた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"`
	Symbol        string `json:"Symbol" final:"ART"`
	TokenStandard string `json:"TokenStandard" final:"erc721+"`
	TokenType     string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
	TokenUnit     string `json:"TokenUnit" final:"whole" validate:"regexp=^whole$"`

	Behavior []string `json:"Behavior" final:"[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`

	Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`

	Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`

	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" 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"`
}

コントローラ

メインコントローラは1つのみです。

type Controller struct {
    Ctx trxcontext.TrxContext
}

クラス、関数またはファイルはいくつでも作成できますが、メイン・コントローラ・クラス内で定義されているメソッドのみが呼出し可能です。その他の方法は非表示です。

トークンSDKメソッドを使用して、ビジネス・アプリケーションのカスタム・メソッドを記述できます。

自動生成されたNFT方法

ブロックチェーン・アプリケーション・ビルダーは、NFTおよびNFTライフ・サイクルをサポートするメソッドを自動的に生成します。これらの方法を使用して、NFTの初期化、ロールとアカウントの管理、およびその他のNFTライフサイクル・タスクの追加コーディングなしで完了できます。

ブロックチェーン・アプリケーション・ビルダーは、NFTおよびNFTライフ・サイクルをサポートするメソッドを自動的に生成します。これらの方法を使用して、NFTの初期化、ロールとアカウントの管理、およびその他のNFTライフサイクル・タスクの追加コーディングなしで完了できます。コントローラメソッドを起動可能にするには、publicである必要があります。publicメソッド名は大文字で始まります。小文字で始まるメソッド名はprivateです。

アクセス制御管理のメソッド

AddTokenAdmin
このメソッドは、ユーザーをチェーンコードのToken Adminとして追加します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) AddTokenAdmin(orgId string, userId string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ADMIN.AddAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Admin.AddAdmin(orgId, userId)
}
パラメータ:
  • orgId string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、チェーンコードのToken Adminとして追加されたユーザーの詳細を含むメッセージが表示されます。
戻り値の例:
{"msg":"Successfully added Admin (OrgId: Org1MSP, UserId: user1)"}
RemoveTokenAdmin
このメソッドは、チェーンコードのToken Adminとしてユーザーを削除します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。このメソッドを使用して、Token Adminとして自分自身を削除することはできません。
func (t *Controller) RemoveTokenAdmin(orgId string, userId string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ADMIN.RemoveAdmin", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Admin.RemoveAdmin(orgId, userId)
}
パラメータ:
  • orgId string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、チェーンコードのToken Adminとして削除されたユーザーの詳細を含むメッセージが表示されます。
戻り値の例:
{"msg":"Successfully removed Admin (OrgId Org1MSP UserId user1)"}
IsTokenAdmin
このメソッドは、ファンクションのコール元がToken Adminの場合はブール値trueを戻し、それ以外の場合はfalseを戻します。Token Adminは、ブロックチェーン・ネットワーク内の他のユーザーに対してこの関数をコールできます。他のユーザーは、自分のアカウントでのみこのメソッドをコールできます。
func (t *Controller) IsTokenAdmin(orgId string, userId string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ADMIN.IsTokenAdmin", "TOKEN", map[string]string{"orgId": orgId, "userId": userId})
      if err != nil || !auth {
            return false, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Auth.IsUserTokenAdmin(orgId, userId)
}
パラメータ:
  • orgId string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 呼出し側がToken Adminの場合はtrueを返し、そうでない場合はfalseを返します。
戻り値の例:
{"result":true}
GetAllTokenAdmins
このメソッドは、チェーンコードのToken Adminであるすべてのユーザーのリストを返します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) GetAllTokenAdmins() (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ADMIN.GetAllAdmins", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Admin.GetAllAdminUsers()
}
パラメータ:
  • なし
戻り値:
  • 成功すると、OrgIdおよびUserIdオブジェクトを含む管理者のJSONリスト。
戻り値の例:
{
    "admins": [
        {
            "OrgId":"Org1MSP",
            "UserId":"admin"
        }
    ]
}

トークン構成管理のメソッド

Init
このメソッドは、チェーンコードがインスタンス化されるときにコールされます。すべてのToken Adminは、adminListパラメータのUserIdおよびOrgId情報によって識別されます。UserIdは、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールIDです。OrgIdは、現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) IDです。チェーンコードを初めてデプロイする場合、adminListパラメータは必須です。チェーンコードをアップグレードする場合は、空のリスト([])を渡します。adminListパラメータ内のその他の情報は、アップグレード時に無視されます。
func (t *Controller) Init(adminList []erc721Admin.ERC721TokenAdminAsset) (interface{}, error) {
      list, err := t.Ctx.ERC721Admin.InitAdmin(adminList)
      if err != nil {
            return nil, fmt.Errorf("initialising admin list failed %s", err.Error())
      }
      <Token Name> := <Token Class>{}
      _, err = t.Ctx.ERC721Token.SaveClassInfo(&<Token Name>)
      if err != nil {
            return nil, err
      }
      _, err = t.Ctx.ERC721Token.SaveDeleteTransactionInfo()
      if err != nil {
            fmt.Println("error: ", err)
      }
      return list, nil
}
パラメータ:
  • adminList array– トークン管理者のリストを指定する{OrgId, UserId}情報の配列。adminList配列は必須パラメータです。
GetAllTokens
このメソッドは、状態データベースに保存されているすべてのトークン・アセットを返します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
func (t *Controller) GetAllTokens() (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetAllTokens", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Token.GetAllTokens()
}
パラメータ:
  • なし
戻り値:
  • JSON形式のすべてのトークン・アセットのリスト。
戻り値の例:
[
    {
        "key": "monalisa",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:01:42Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 0,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "token Description",
            "TokenId": "monalisa",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
    },
    {
        "key": "monalisa2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:04:44Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 100,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "",
            "TokenId": "monalisa1",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
        }
    }
]
GetAllTokensByUser
このメソッドは、指定されたユーザーが所有するすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。このメソッドは、チェーンコードのToken Adminまたはアカウント所有者によってのみコールできます。
func (t *Controller) GetAllTokensByUser(orgId string, userId string) (interface{}, error) {
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetAllTokensByUser", "TOKEN", map[string]string{"accountId": accountId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
    return t.Ctx.ERC721Token.GetAllTokensByUser(accountId)
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • JSON形式のトークン・アセットのリスト。
戻り値の例:
[
    {
        "key": "monalisa",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:01:42Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 0,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "token Description",
            "TokenId": "monalisa",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
    },
    {
        "key": "monalisa2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:04:44Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 100,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "",
            "TokenId": "monalisa1",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
        }
    }
]
GetTokenById
このメソッドは、トークンが状態データベースに存在する場合、トークン・オブジェクトを返します。このメソッドは、チェーンコードまたはトークン所有者のToken Adminによってのみコールできます。
func (t *Controller) GetTokenById(tokenId string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.Get", "TOKEN", map[string]string{"tokenId": tokenId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      tokenAsset, err := t.getTokenObject(tokenId)
      if err != nil {
            return nil, err
      }
      return tokenAsset.Interface(), nil
}
パラメータ:
  • tokenId: string– 取得するトークンのID。
戻り値:
  • JSON形式のトークン・アセット。
戻り値の例:
{
    "AssetType": "otoken",
    "Behavior": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "CreationDate": "2022-04-06T00:35:42Z",
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "NftBasePrice": 200,
    "Owner": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter"
    },
    "Symbol": "PNT",
    "TokenDesc": "Token Description",
    "TokenId": "monalisa",
    "TokenMetadata": {
        "Description": "Mona Lisa Painting",
        "Image": "monalisa.jpeg",
        "PainterName": "Leonardo_da_Vinci",
        "PaintingName": "Mona_Lisa"
    },
    "TokenName": "paintingnft",
    "TokenStandard": "erc721+",
    "TokenType": "nonfungible",
    "TokenUnit": "whole",
    "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "TransferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "TransferredDate": "2022-04-06T00:51:56Z"
}
GetTokenHistory
このメソッドは、指定されたトークンIDの履歴を返します。このメソッドは、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。誰でもこのメソッドを呼び出すことができます。
func (t *Controller) GetTokenHistory(tokenId string) (interface{}, error) {
      /*
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetTokenHistory", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      */
      return t.Ctx.ERC721Token.History(tokenId)
}
パラメータ:
  • tokenId: string– トークンのID。
戻り値の例:
[
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T19:22:52z",
        "TxId": "6b7989be322956164a8d1cd7bf2a7187d59eba73ce756e6bf946ab48b349bbc0",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "CreationDate": "2022-04-06T19:22:23z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 100,
            "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "token Description",
            "TokenId": "monalisa",
            "TokenMetadata": {
               "Description": "Mona Lisa Painting",
               "Image": "monalisa.jpeg",
               "PainterName": "Leonardo_da_Vinci",
               "PaintingName": "Mona_Lisa"
            },
           "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg""
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T19:22:23z",
        "TxId": "e61bcb3cb61c8920f7e6d8f0d19726c7c88d876e0ad6cfb052cfb92d49985c3f",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "CreationDate": "2022-04-06T19:22:23z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 100,
            "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "",
            ""TokenId": "monalisa",
            "TokenMetadata": {
                "Description": "Mona Lisa Painting",
                "Image": "monalisa.jpeg",
                "PainterName": "Leonardo_da_Vinci",
                "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"
        }
    }
]
getTokenObject
これは、指定したトークンIDのトークンのインスタンスを返すユーティリティ・メソッドです。このメソッドは、自動生成された多くのメソッドでトークン・オブジェクトをフェッチするために使用されます。このメソッドは、カスタム・メソッドから必要に応じてコールできます。トークン化されたアセットまたはクラスを作成する場合は、スイッチ・ケースを対応するTokenクラスで更新して、正しいトークン・オブジェクトを返します。ブロックチェーン・アプリケーション・ビルダーのochain syncコマンドは、トークン化されたアセットが仕様ファイルに作成されると、スイッチ・ケースを自動的に作成します。このメソッドはprivateであるため、直接起動できず、他のメソッドからのみコールできます。
func (t *Controller) getTokenObject(tokenId string) (reflect.Value, error) {
      if tokenId == "" {
            return reflect.Value{}, fmt.Errorf("error in retrieving token, token_id cannot be empty")
      }
      tokenAsset, err := t.Ctx.ERC721Token.Get(tokenId)
      if err != nil {
            return reflect.Value{}, fmt.Errorf("no token exists with id %s %s", tokenId, err.Error())
      }
      tokenName := tokenAsset.(map[string]interface{})["TokenName"].(string)
      switch tokenName {
      case "<Token Name>":
            var asset <Token Class>
            _, err := t.Ctx.ERC721Token.Get(tokenId, &asset)
            if err != nil {
                  return reflect.Value{}, err
            }
            return reflect.ValueOf(&asset), nil
      default:
            return reflect.Value{}, fmt.Errorf("no token exists with token name %s", tokenName)
      }
}
パラメータ:
  • tokenId: string– トークンのID。
OwnerOf
このメソッドは、指定されたトークンIDの所有者のアカウントIDを返します。誰でもこのメソッドを呼び出すことができます。
func (t *Controller) Ownerof(tokenId string) (interface{}, error) {
      return t.Ctx.ERC721Token.OwnerOf(tokenId)
}
パラメータ:
  • tokenId: string– トークンのID。
戻り値:
  • 所有者のアカウントIDのJSONオブジェクト。
戻り値の例:
{"Owner": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba"}
Name
このメソッドは、トークン・クラスの名前を返します。誰でもこのメソッドを呼び出すことができます。
func (t *Controller) Name() (interface{}, error) {
      return t.Ctx.ERC721Token.Name()
}
パラメータ:
  • なし
戻り値:
  • トークン名のJSONオブジェクト。
戻り値の例:
{"TokenName": "paintingnft"}
Symbol
このメソッドは、トークン・クラスのシンボルを返します。誰でもこのメソッドを呼び出すことができます。
func (t *Controller) Symbol() (interface{}, error) {
      return t.Ctx.ERC721Token.Symbol()
}
パラメータ:
  • なし
戻り値:
  • トークン記号のJSONオブジェクト。
戻り値の例:
{"Symbol": "PNT"}
TokenURI
このメソッドは、指定されたトークンのURIを返します。誰でもこのメソッドを呼び出すことができます。
func (t *Controller) TokenURI(tokenId string) (interface{}, error) {
      return t.Ctx.ERC721Token.TokenURI(tokenId)
}
パラメータ:
  • tokenId: string– トークンのID。
戻り値:
  • 成功すると、トークンURIのJSONオブジェクト。
戻り値の例:
{"TokenURI": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
TotalSupply
このメソッドは、ミント・トークンの合計数を返します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) TotalSupply() (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.TotalSupply", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Token.TotalSupply()
}
パラメータ:
  • なし
戻り値:
  • 成功すると、トークン数のJSONオブジェクト。
戻り値の例:
{"TotalSupply": 3}
TotalNetSupply
このメソッドは、ミント・トークンの合計数から焼却済トークンの数を引いた数を返します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) TotalNetSupply() (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.TotalNetSupply", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Token.GetTotalMintedTokens()
}
パラメータ:
  • なし
戻り値:
  • 成功すると、トークン数のJSONオブジェクト。
戻り値の例:
{"TotalNetSupply": 2}

アカウント管理のメソッド

CreateAccount
このメソッドは、指定されたユーザーおよびトークンのアカウントを作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。アカウントは、ユーザーが持つNFTの数を追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。ユーザーごとに作成できるNFTアカウントは1つのみです。

アカウントIDは、oaccount~という接頭辞が付いた英数字のセットであり、その後に、現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダID (OrgId)、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールID (UserId)、および定数文字列nftというSHA-256ハッシュが続きます。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。

func (t *Controller) CreateAccount(orgId string, userId string, tokenType string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.CreateAccount", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Account.CreateAccount(orgId, userId, tokenType)
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
  • tokenType: string– サポートされているトークン・タイプはnonfungibleのみです。
戻り値:
  • 成功すると、作成されたアカウントのJSONオブジェクト。
戻り値の例:
{
    "AssetType": "oaccount",
    "BapAccountVersion" : 0,
    "AccountId": "oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507",
    "UserId": "admin",
    "OrgId": "Org1MSP",
    "TokenType": "nonfungible",
    "NoOfNfts": 0
}
BalanceOf
このメソッドは、指定されたユーザーが保持するNFTの合計数を返します。このメソッドは、チェーンコードのToken Adminまたはアカウント所有者によってのみコールできます。
func (t *Controller) BalanceOf(orgId string, userId string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.BalanceOf", "TOKEN", map[string]string{"orgId": orgId, "userId": userId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil{
            return nil,err
      }
      return t.Ctx.ERC721Account.BalanceOf(accountId)
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 現在のNFT数のJSONオブジェクト。
戻り値の例:
{"totalNfts": 0}
GetAllAccounts
このメソッドは、すべてのアカウントのリストを返します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
func (t *Controller) GetAllAccounts() (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.GetAllAccounts", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Account.GetAllAccounts()
}
パラメータ:
  • なし
戻り値:
  • 成功すると、すべてのアカウントのJSON配列。
戻り値の例:
[
    {
        "key": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
        "valueJson": {
            "AccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "AssetType": "oaccount",
            "BapAccountVersion" : 0,
            "NoOfNfts": 5,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user1"
        }
    },
    {
        "key": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
        "valueJson": {
            "AccountId": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
            "AssetType": "oaccount",
            "BapAccountVersion" : 0,
            "NoOfNfts": 0,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user_minter"
        }
    },
    {
        "key": "oaccount~5541fb520058d83664b844e7a55fe98d574ddeda765d0e795d4779e9ccc271ce",
        "valueJson": {
            "AccountId": "oaccount~5541fb520058d83664b844e7a55fe98d574ddeda765d0e795d4779e9ccc271ce",
            "AssetType": "oaccount",
            "BapAccountVersion" : 0,
            "NoOfNfts": 0,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user_burner"
        }
    }
]
GetAccountByUser
このメソッドは、指定されたユーザーのアカウント詳細を返します。このメソッドは、チェーンコードのToken AdminまたはアカウントのAccount Ownerによってのみコールできます。
func (t *Controller) GetAccountByUser(orgId string, userId string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.GetAccountByUser", "TOKEN", map[string]string{"orgId": orgId, "userId": userId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Account.GetAccountWithStatusByUser(orgId, userId)
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、次のプロパティを含むJSONアカウント・オブジェクト:
  • AccountId– ユーザー・アカウントのID。
  • UserId– ユーザーのユーザー名または電子メールID。
  • OrgId– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • TokenType– アカウントが保持するトークンのタイプ。
  • NoOfNfts– アカウントが保持するNFTの合計数。
  • BapAccountVersion– 内部使用のためのアカウント・オブジェクト・パラメータ。
  • Status– ユーザー・アカウントの現在のステータス。
戻り値の例:
{
  "AccountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "AssetType": "oaccount",
  "BapAccountVersion": 0,
  "NoOfNfts": 0,
  "OrgId": "appdev",
  "Status": "active",
  "TokenType": "nonfungible",
  "UserId": "idcqa"
}
GetUserByAccountId
このメソッドは、指定されたアカウントのユーザー詳細を返します。このメソッドは、どのユーザーでもコールできます。
func (t *Controller) GetUserByAccountId(accountId string) (interface{}, error) {
      return t.Ctx.ERC721Account.GetUserByAccountById(accountId)
}
パラメータ:
  • accountId: string– アカウントのID。
戻り値:
  • 成功すると、ユーザー詳細のJSONオブジェクト(OrgIdおよびUserId)。
戻り値の例:
{
    "OrgId": "Org1MSP",
    "UserId": "admin"
}
GetAccountHistory
このメソッドは、指定されたユーザーのアカウント履歴を返します。このメソッドは、チェーンコードのToken Adminまたはアカウント所有者によってのみコールできます。
func (t *Controller) GetAccountHistory(orgId string, userId string) (interface{}, error) {
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.History", "TOKEN", map[string]string{"accountId": accountId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Account.History(accountId)
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、オブジェクトのリスト。
戻り値の例:
[
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T08:16:53Z",
        "TxId": "750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7",
        "Value": {
            "AccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "AssetType": "oaccount",
            "BapAccountVersion" : 1,
            "NoOfNfts": 1,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user1"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T08:15:19Z",
        "TxId": "49eb84c42d452e5ba0028d8ebb4190454cf9013a11c0bad3e96594af452d4982",
        "Value": {
            "AccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "AssetType": "oaccount",
            "BapAccountVersion" : 0,
            "NoOfNfts": 0,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user1"
        }
    }
]

ロール管理方法

AddRole
このメソッドは、指定されたユーザーにロールを追加します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) AddRole(role string, orgId string, userId string) (interface{}, error) {
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.AddRoleMember", "TOKEN", map[string]string{"accountId": accountId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Token.AddRoleMember(role, accountId)
}
パラメータ:
  • userRole: string– 指定したユーザーを追加するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_role_nameプロパティに対応します。
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、ユーザーの詳細を含むメッセージ。
戻り値の例:
{"msg": "Successfully added role minter to oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (orgId : Org1MSP, userId : admin)"}
RemoveRole
このメソッドは、指定されたユーザーからロールを削除します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) RemoveRole(userRole string, orgId string, userId string) (interface{}, error) {
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.RemoveRoleMember", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Token.RemoveRoleMember(userRole, accountId)
}
パラメータ:
  • userRole: string– 指定したユーザーから削除するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_role_nameプロパティに対応します。
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、ユーザーの詳細を含むメッセージ。
戻り値の例:
{"msg": "successfully removed memberId oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (orgId : Org1MSP, userId : admin) from role minter"}
GetAccountsByRole
このメソッドは、指定されたロールのすべてのアカウントIDのリストを返します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) GetAccountsByRole(userRole string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ROLE.GetAccountsByRole", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Role.GetAccountsByRole(userRole)
}
パラメータ:
  • userRole: string– 検索するロールの名前。
戻り値:
  • 成功すると、アカウントIDのJSON配列。
戻り値の例:
{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
GetUsersByRole
このメソッドは、指定されたロールのすべてのユーザーのリストを返します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) GetUsersByRole(userRole string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ROLE.GetUsersByRole", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Role.GetUsersByRole(userRole)
}
パラメータ:
  • userRole: string– 検索するロールの名前。
戻り値:
  • 成功すると、ユーザー・オブジェクトのJSON配列(orgIdおよびuserId)。
戻り値の例:
{
    "Users": [
        {
            "OrgId": "Org1MSP",
            "UserId": "admin"
        }
    ]
}
IsInRole
このメソッドは、ユーザーに指定されたロールがあるかどうかを示すブール値を返します。このメソッドは、チェーンコードのToken AdminまたはアカウントのAccount Ownerによってのみコールできます。
func (t *Controller) IsInRole(orgId string, userId string, role string) (interface{}, error) {
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.IsInRole", "TOKEN", map[string]string{"accountId": accountId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      result, err := t.Ctx.ERC721Token.IsInRole(role, accountId)
      if err != nil {
            return nil, fmt.Errorf("error in IsInRole %s", err.Error())
      }
      response := make(map[string]interface{})
      response["result"] = result
      return response, nil
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
  • userRole: string– 検索するロールの名前。
戻り値:
  • 成功した場合、ブール結果のJSON文字列。
戻り値の例:
{"result":"true"}

トランザクション履歴管理のメソッド

GetAccountTransactionHistory
このメソッドは、指定されたユーザーのアカウント・トランザクション履歴を返します。このメソッドは、チェーンコードのToken Adminまたはアカウントの所有者がコールできます。
func (t *Controller) GetAccountTransactionHistory(orgId string, userId string) (interface{}, error) {
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.GetAccountTransactionHistory", "TOKEN", map[string]string{"accountId": accountId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      transactionArray, err := t.Ctx.ERC721Account.GetAccountTransactionHistory(accountId)
      return transactionArray, err
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、オブジェクトのリスト。
戻り値の例:
[
     {
        "Timestamp": "2022-04-06T08:31:39Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
        "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
        "TransactionType": "DEBIT"
    }
    {
        "Timestamp": "2022-04-06T08:16:53Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
        "TransactionId": "otransaction~750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7",
        "TransactionType": "MINT"
    }
]
GetAccountTransactionHistoryWithFilters
このメソッドは、PageSizeBookmarkStartTimeおよびEndTimeでフィルタされた、指定されたユーザーのアカウント・トランザクション履歴を返します。このメソッドは、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。このメソッドは、チェーンコードのToken Adminまたはアカウント所有者によってのみコールできます。
func (t *Controller) GetAccountTransactionHistoryWithFilters(orgId string, userId string, filters ...erc721Account.AccountHistoryFilters) (interface{}, error) {
      accountId, err := t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)
      if err != nil {
            return nil, err
      }
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.GetAccountTransactionHistoryWithFilters", "TOKEN", map[string]string{"accountId": accountId})
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }

      transactionArray, err := t.Ctx.ERC721Account.GetAccountTransactionHistoryWithFilters(accountId, filters...)
      return transactionArray, err
}
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
  • filters: string– オプション・パラメータ。空の場合は、すべてのレコードが返されます。PageSizeプロパティは、戻すレコード数を決定します。PageSizeが0の場合、デフォルトのページ・サイズは20です。Bookmarkプロパティは、返されるレコードの開始索引を決定します。詳細は、Hyperledger Fabricのドキュメントを参照してください。StartTimeおよびEndTimeプロパティは、RFC-3339形式で指定する必要があります。
戻り値:
  • 成功すると、オブジェクトのリスト。
戻り値の例:
[
     {
        "Timestamp": "2022-04-06T08:31:39Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
        "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
        "TransactionType": "DEBIT"
    }
    {
        "Timestamp": "2022-04-06T08:16:53Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
        "TransactionId": "otransaction~750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7",
        "TransactionType": "MINT"
    }
]
GetTransactionById
このメソッドは、指定されたトランザクションIDのトランザクション履歴を返します。このメソッドは、チェーンコードのToken Adminまたはアカウント所有者によってのみコールできます。
func (t *Controller) GetTransactionById(transactionId string) (interface{}, error) {
      return t.Ctx.ERC721Transaction.GetTransactionById(transactionId)
}
パラメータ:
  • transactionId: string– トランザクション・アセットのID。
戻り値:
  • 成功すると、オブジェクトのリスト。
戻り値の例:
{
    "History": [
        {
            "IsDelete": "false",
            "Timestamp": "2022-04-06T08:31:39Z",
            "TxId": "5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
            "Value": {
                "AssetType": "otransaction",
                "Data": "",
                "FromAccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
                "Timestamp": "2022-04-06T08:31:39Z",
                "ToAccountId": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
                "TokenId": "monalisa",
                "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
                "TransactionType": "TRANSFER",
                "TriggeredByAccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1"
            }
        }
    ],
    "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7"
}
DeleteHistoricalTransactions
このメソッドは、状態データベースの指定されたタイムスタンプより古いトランザクションを削除します。このメソッドをコールできるのは、チェーンコードのToken Adminのみです。
func (t *Controller) DeleteHistoricalTransactions(timestamp string) (interface{}, error) {
      auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TRANSACTION.DeleteHistoricalTransactions", "TOKEN")
      if err != nil && !auth {
            return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
      }
      return t.Ctx.ERC721Transaction.DeleteHistoricalTransactions(timestamp)
}
パラメータ:
  • timestamp: Date– タイムスタンプ。タイムスタンプより前のすべてのトランザクションが削除されます。
戻り値:
  • 成功すると、オブジェクトのリスト。
戻り値の例:
{
    "Transactions": [
        "otransaction~750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7"
    ],
    "msg": "Successfuly deleted transaction older than date:2022-04-06T08:17:53Z"
}

トークン動作管理のメソッド- 最小化可能な動作

Create<Token Name>Token
このメソッドはNFTを作成します(分)。アセットおよび関連するプロパティは、状態データベースに保存されます。このトランザクションのコール元にはトークン・アカウントが必要です。このトランザクションのコール元がNFTの所有者になります。トークン指定ファイルにbehaviorsrolesセクションとrolesminter_role_nameプロパティが含まれている場合、トランザクションのコール元にはminterロールが必要です。それ以外の場合、呼び出し元はいずれもNFTをミントできます。
func (t *Controller) Create<Token Name>Token(tokenAsset <Token Class>) (interface{}, error) {
      return t.Ctx.ERC721Token.CreateToken(&tokenAsset)
}
パラメータ:
  • tokenAsset: <Token Class>–mintのトークン・アセット。トークン・アセットのプロパティの詳細は、入力仕様ファイルを参照してください。
戻り値:
  • 成功すると、次のプロパティを含むJSONトークン・アセット・オブジェクト:
  • Behavior– すべてのトークン動作の説明。
  • CreatedBy– トランザクションをコールしてトークンをミントしたユーザーのアカウントID。
  • CreationDate– トランザクションのタイムスタンプ。
  • IsBurnedtokenIdで識別されたNFTがバーンされたかどうかを示すブール値。
  • Mintable– 最小化可能な動作のプロパティの説明。max_mint_quantityプロパティは、作成可能なこのトークン・クラスのNFTの最大数を指定します。
  • Owner– トークンの現在の所有者のアカウントID。ミント処理中に、このメソッドのコール元がトークンの所有者になります。
  • Symbol– トークンの記号。
  • TokenDesc– トークンの説明。
  • TokenMetadata– トークンを説明するJSON情報。
  • TokenName– トークン名。
  • TokenStandard– トークンの標準。
  • TokenType– このアカウントが保持するトークンのタイプ。
  • TokenUnit– トークンの単位。
  • TokenUri– トークンのURI。
戻り値の例:
{
    "AssetType": "otoken",
    "Behavior": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",        
    "CreationDate": "2022-04-06T08:16:53Z",
    "IsBurned": false,
     "Mintable": {
        "Max_mint_quantity": 20000
    },
    "NftBasePrice": 100,
    "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter"
    },
    "Symbol": "PNT",
    "TokenDesc": "token Description",
    "TokenId": "monalisa",
    "TokenMetadata": {
        "Description": "Mona Lisa Painting",
        "Image": "monalisa.jpeg",
        "PainterName": "Leonardo_da_Vinci",
        "PaintingName": "Mona_Lisa"
    },
    "TokenName": "paintingnft",
    "TokenStandard": "erc721+",
    "TokenType": "nonfungible",
    "TokenUnit": "whole",
    "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"
}
Update<Token Name>Token
このメソッドは、トークン・プロパティを更新します。このメソッドは、トークンの所有者または作成者であるユーザーのみがコールできます。トークン・アセットの作成後、トークン所有者のみがトークン・カスタム・プロパティを更新できます。ユーザーがトークンの所有者と作成者の両方である場合、TokenDescプロパティを更新することもできます。トークン・メタデータを更新できません。特定のプロパティのみを更新する場合でも、すべてのトークン・プロパティをこのメソッドに渡す必要があります。
func (t *Controller) Update<Token Name>Token(tokenAsset <Token Class>) (interface{}, error) {
      return t.Ctx.ERC721Token.UpdateToken(&tokenAsset)
}
パラメータ:
  • tokenAsset: <Token Class>– 更新するトークン・アセット。トークン・アセットのプロパティの詳細は、入力仕様ファイルを参照してください。
戻り値:
  • 成功すると、更新されたJSONトークン・アセット・オブジェクト
戻り値の例:
{
    "AssetType": "otoken",
    "Behavior": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",      
    "CreationDate": "2022-04-06T08:16:53Z",
    "IsBurned": false,    
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "NftBasePrice": 200,
    "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter"
    },
    "Symbol": "PNT",
    "TokenDesc": "Token Description",
    "TokenId": "monalisa",
    "TokenMetadata": {
        "Description": "Mona Lisa Painting",
        "Image": "monalisa.jpeg",
        "PainterName": "Leonardo_da_Vinci",
        "PaintingName": "Mona_Lisa"
    },
    "TokenName": "paintingnft",
    "TokenStandard": "erc721+",
    "TokenType": "nonfungible",
    "TokenUnit": "whole",
    "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
}

トークン動作管理のメソッド- 転送可能な動作

SafeTransferFrom
このメソッドは、指定されたNFTの所有権をコール元から別のアカウントに転送します。このメソッドには、次の検証が含まれます。
  • トークンが存在し、書き込まれません。
  • 送信者アカウントと受信者アカウントが存在し、同じアカウントではありません。
  • 送信者アカウントがトークンを所有します。
  • 関数の呼び出し元は送信者です。
func (t *Controller) SafeTransferFrom(fromOrgId string, fromUserId string, toOrgId string, toUserId string, tokenId string, data ...string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(tokenId)
      if err != nil {
            return nil, err
      }
      fromAccountId, err := t.Ctx.ERC721Account.GenerateAccountId(fromOrgId, fromUserId)
      if err != nil {
            return nil, err
      }
      toAccountId, err := t.Ctx.ERC721Account.GenerateAccountId(toOrgId, toUserId)
      if err != nil {
            return nil, err
      }
      return t.Ctx.ERC721Token.SafeTransferFrom(fromAccountId, toAccountId, tokenAssetValue.Interface(), data...)
}
パラメータ:
  • fromOrgId: string– 現在の組織内の送信者のメンバーシップ・サービス・プロバイダ(MSP)ID。
  • fromUserId: string– 送信者のユーザー名または電子メールID。
  • toOrgId: string– 現在の組織内の受信者のメンバーシップ・サービス・プロバイダ(MSP)ID。
  • toUserId: string– 受信者のユーザー名または電子メールID。
  • tokenId: string– 転送するトークンのID。
  • data: string– トランザクション・レコードに格納するオプションの追加情報。
戻り値:
  • 成功すると、送信者および受信者アカウントの詳細を含むメッセージ。
戻り値の例:
{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}
TransferFrom
このメソッドは、指定されたNFTの所有権を送信者アカウントから受け側アカウントに転送します。呼出し側は、正しいパラメータを渡す必要があります。このメソッドは、トークン所有者のみでなく、任意のユーザーがコールできます。このメソッドには、次の検証が含まれます。
  • トークンが存在し、書き込まれません。
  • 送信者アカウントと受信者アカウントが存在し、同じアカウントではありません。
  • 送信者アカウントがトークンを所有します。
func (t *Controller) TransferFrom(fromOrgId string, fromUserId string, toOrgId string, toUserId string, tokenId string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(tokenId)
      if err != nil {
            return nil, err
      }
      fromAccountId, err := t.Ctx.ERC721Account.GenerateAccountId(fromOrgId, fromUserId)
      if err != nil {
            return nil, err
      }
      toAccountId, err := t.Ctx.ERC721Account.GenerateAccountId(toOrgId, toUserId)
      if err != nil {
            return nil, err
      }
      return t.Ctx.ERC721Token.TransferFrom(fromAccountId, toAccountId, tokenAssetValue.Interface())
}
パラメータ:
  • fromOrgId: string– 現在の組織内の送信者のメンバーシップ・サービス・プロバイダ(MSP)ID。
  • fromUserId: string– 送信者のユーザー名または電子メールID。
  • toOrgId: string– 現在の組織内の受信者のメンバーシップ・サービス・プロバイダ(MSP)ID。
  • toUserId: string– 受信者のユーザー名または電子メールID。
  • tokenId: string– 転送するトークンのID。
戻り値:
  • 成功すると、送信者および受信者アカウントの詳細を含むメッセージ。
戻り値の例:
{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1)"}

トークン動作管理のメソッド- 書き込み可能な動作

Burn
このメソッドは、コール元のアカウントから指定されたNFTを非アクティブ化またはバーンします。このメソッドのコール元にはアカウントが必要です。トークン仕様ファイルにburnable動作が含まれていないかぎり、トークンを書き込むことはできません。仕様ファイルのrolesセクションにburner_role_nameプロパティが指定されていない場合、トークンの所有者はトークンを書き込みます。rolesセクションにburner_role_nameプロパティが指定されている場合、トークンの最小(作成者)でもあるバーナー・ロールを割り当てられたユーザーはトークンを書き込みます。
func (t *Controller) Burn(tokenId string) (interface{}, error) {
      tokenAssetValue, err := t.getTokenObject(tokenId)
      if err != nil {
            return nil, err
      }
      return t.Ctx.ERC721Token.Burn(tokenAssetValue.Interface())
}
パラメータ:
  • tokenId: string– 書き込むトークンのID。
戻り値:
  • 成功すると、アカウント詳細を含むメッセージが表示されます。
戻り値の例:
{"msg": "Successfully burned NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin"}
BurnNFT
このメソッドは、コール元のアカウントから指定されたNFTを非アクティブ化またはバーンし、トークン・オブジェクトおよびトークン履歴を返します。このメソッドのコール元にはアカウントが必要です。トークン仕様ファイルにburnable動作が含まれていないかぎり、トークンを書き込むことはできません。仕様ファイルのrolesセクションにburner_role_nameプロパティが指定されていない場合、トークンの所有者はトークンを書き込みます。rolesセクションにburner_role_nameプロパティが指定されている場合、トークンの最小(作成者)または所有者でもあるバーナー・ロールを割り当てられたユーザーはトークンを書き込みます。
func (t *Controller) BurnNFT(tokenId string) (interface{}, error) {
      tokenAsset, err := t.Ctx.ERC721Token.Get(tokenId)
      if err != nil {
            return nil, err
      }
      tokenHistory, err := t.Ctx.ERC721Token.History(tokenId)
      if err != nil {
            return nil, err
      }
      token := tokenAsset.(map[string]interface{})
      if token[constants.IsBurned] == true {
            return nil, fmt.Errorf("token with tokenId %s is already burned", tokenId)
      }
      token[constants.TokenId], err = strconv.Atoi(token[constants.TokenId].(string))
      if err != nil {
            return nil, fmt.Errorf("tokenId is expected to be integer but found %s", tokenId)
      }
      tokenHistoryBytes, err := json.Marshal(tokenHistory)
      if err != nil {
            return nil, err
      }
      var tokenHistoryAsRawJson json.RawMessage
      err = json.Unmarshal(tokenHistoryBytes, &tokenHistoryAsRawJson)
      if err != nil {
            return nil, err
      }
      token[constants.TokenHistory] = string(tokenHistoryAsRawJson)
      token[constants.IsBurned] = true
      _, err = t.Burn(tokenId)
      if err != nil {
            return nil, err
      }
      return token, nil
}
パラメータ:
  • tokenId: string– 書き込むトークンのID。
戻り値:
  • 成功すると、トークン履歴情報を含むトークン・オブジェクト。
戻り値の例:
{
    "AssetType": "otoken",
    "Behavior": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "CreationDate": "2023-08-22T13:19:33+05:30",
    "IsBurned": true,
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "On_sale_flag": false,
    "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "Price": 120,
    "Roles": {
        "minter_role_name": "minter"
    },
    "Symbol": "ART",
    "TokenDesc": "",
    "TokenHistory": "[{\"IsDelete\":\"false\",\"Timestamp\":\"2023-08-22T13:19:33+05:30\",\"TxId\":\"0219099bcaaecd5f76f7f08d719384fd5ed34103a55bd8d3754eca0bfc691594\",\"Value\":{\"AssetType\":\"otoken\",\"Behavior\":[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"],\"CreatedBy\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"CreationDate\":\"2023-08-22T13:19:33+05:30\",\"IsBurned\":false,\"Mintable\":{\"Max_mint_quantity\":20000},\"On_sale_flag\":false,\"Owner\":\"oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d\",\"Price\":120,\"Roles\":{\"minter_role_name\":\"minter\"},\"Symbol\":\"ART\",\"TokenDesc\":\"\",\"TokenId\":\"1\",\"TokenMetadata\":{\"Description\":\"\",\"Image\":\"\",\"Painter_name\":\"\",\"Painting_name\":\"\"},\"TokenName\":\"artcollection\",\"TokenStandard\":\"erc721+\",\"TokenType\":\"nonfungible\",\"TokenUnit\":\"whole\",\"TokenUri\":\"example.com\"}}]",
    "TokenId": 1,
    "TokenMetadata": {
        "Description": "",
        "Image": "",
        "Painter_name": "",
        "Painting_name": ""
    },
    "TokenName": "artcollection",
    "TokenStandard": "erc721+",
    "TokenType": "nonfungible",
    "TokenUnit": "whole",
    "TokenUri": "example.com"
}

カスタム・メソッド

トークンSDKメソッドを使用して、ビジネス・アプリケーションのカスタム・メソッドを記述できます。

次の例は、カスタム・メソッドでトークンSDKメソッドを使用する方法を示しています。Sellメソッドがコールされると、指定された価格で販売するためのトークンがポストされます。

func (t *Controller) Sell(tokenId string, sellingPrice int) (interface{}, error) {
	var tokenAsset ArtCollection
	_, err := t.Ctx.ERC721Token.Get(tokenId, &tokenAsset)
    if err != nil {
       return nil, err
	}

 /**  * price is a custom asset
      attribute to set the price of a non-fungible token in the
      marketplace  */
	tokenAsset.Price = sellingPrice
 /**  * on_sale_flag is a
      custom asset attribute that maintains non-fungible token selling status in the
      marketplace  */
	tokenAsset.On_sale_flag = true

	_, err = t.Ctx.ERC721Token.UpdateToken(tokenAsset)
    if err != nil {
		return nil, err
	}
	
	msg := fmt.Sprintf("Token ID : %s has been posted for selling in the marketplace", tokenId)
	return msg, nil
}

NFT SDKメソッド

アクセス制御管理のメソッド

NFT SDKは、アクセス制御機能を提供します。一部のメソッドは、トークンのToken AdminまたはAccount Ownerによってのみコールできます。この機能を使用すると、目的のユーザーのみが操作を実行するようにできます。認可されていないアクセスではエラーが発生します。アクセス制御関数を使用するには、../lib/authモジュールからAuthorizationクラスをインポートします。
import { ERC721Authorization } from '../lib/erc721-auth';
CheckAuthorization
このメソッドは、操作にアクセス制御チェックを追加するために使用します。自動生成されるほとんどの方法には、アクセス制御があります。特定のトークン・メソッドは、トークンのERC721AdminまたはAccount Owner、または複数のアカウントを持つユーザーのMultipleAccountOwnerによってのみ実行できます。CheckAuthorizationメソッドは、erc721Authパッケージの一部であり、Ctx構造体(レシーバ)を介してアクセスします。アクセス制御マッピングは、次のテキストに示すように、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
     auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"}

      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"}

      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
Ctx.ERC721Auth.CheckAuthorization(funcName string, args []string) (bool, error)
パラメータ:
  • funcName: string– 受信者とメソッドの間のマップ値(oChainUtil.goファイルを参照)。
  • ...argsargs[0]が定数'TOKEN'を取得し、args[1]accountIdパラメータを使用してAccountOwnerのアクセス制御チェックを追加する可変引数。MultipleAccountOwnerのアクセス制御チェックを追加するには、args[1]orgIdパラメータを取り、args[2]userIdパラメータを取ります。TokenOwnerのアクセス制御チェックを追加するには、args[1]tokenIdパラメータを使用します。
戻り値:
  • ブール・レスポンス、および必要に応じてエラー。
次に例を示します:
t.Ctx.ERC721Auth.CheckAuthorization(<parameters>)

Adminアクセス

t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetAllTokens", "TOKEN")

AccountOwnerアクセス

t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.History", "TOKEN", accountId)

MultipleAccountOwnerアクセス

t.Ctx.ERC721Auth.CheckAuthorization("ERC721ACCOUNT.BalanceOf", "TOKEN", orgId, userId)

TokenOwnerアクセス

t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.Get", "TOKEN", tokenId)
IsUserTokenAdmin
このメソッドは、ファンクションのコール元がToken Adminの場合、ブール値trueのマップを返します。そうでない場合は、このメソッドはfalseを返します。
Ctx.ERC721Auth.IsUserTokenAdmin(orgId string, userId string)  (interface{}, error)
パラメータ:
  • orgId– 現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId– ユーザーのユーザー名または電子メールID。
戻り値:
  • ブール応答。
次に例を示します:

t.Ctx.ERC721Auth.IsUserTokenAdmin(orgId, userId)

{"result":true}
AddAdmin
このメソッドは、トークン・チェーンコードのToken Adminとしてユーザーを追加します。
Ctx.ERC721Admin.AddAdmin(orgId string, userId string) (interface{}, error)
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、トークン・チェーンコードのToken Adminとして追加されたユーザーの詳細をリストするメッセージが表示されます。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Admin.AddAdmin(orgId, userId)

{"msg":"Successfully added Admin (OrgId: Org1MSP, UserId: user1)"}
RemoveAdmin
このメソッドは、トークン・チェーンコードのToken Adminとしてユーザーを削除します。
Ctx.ERC721Admin.RemoveAdmin(orgId string, userId string) (interface{}, error)
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、トークン・チェーンコードのToken Adminとして削除されたユーザーの詳細をリストするメッセージが表示されます。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Admin.RemoveAdmin(orgId, userId)

{"msg":"Successfuly removed Admin (OrgId Org1MSP UserId user1)"}
GetAllAdmins
このメソッドは、すべてのToken Adminユーザーのリストを返します。
Ctx.ERC721Admin.GetAllAdmins() (Admin[], error) 
パラメータ:
  • なし
戻り値:
  • 成功すると、すべてのToken Adminユーザーのリストが表示されます。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Admin.GetAllAdmins()

{
    "admins": [
        {
            "OrgId":"Org1MSP",
            "UserId":"admin"
        }
    ]
}
GetAllAdminUsers
このメソッドは、すべてのToken Adminユーザーのリストを返します。
Ctx.ERC721Admin.GetAllAdminUsers() (interface{}, error) 
パラメータ:
  • なし
戻り値:
  • 成功すると、map[string]interface{}形式のすべてのToken Adminユーザーのリストが表示されます。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Admin.GetAllAdminUsers()

{
    "admins": [
        {
            "OrgId":"Org1MSP",
            "UserId":"admin"
        }
    ]
}

トークン構成管理のメソッド

CreateToken
このメソッドはトークンを作成し、そのプロパティを状態データベースに保存します。このメソッドは、minterロールを持つユーザーのみがコールできます。
Ctx.ERC721Token.CreateToken(args ...interface{})
パラメータ:
  • args[0]に必要な型のトークンstructへの参照を含む変数引数。
戻り値:
  • 成功すると、トークン詳細を含むinterface[]。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.CreateToken(&tokenAsset)

{
    "AssetType": "otoken",
    "Behavior": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",        
    "CreationDate": "2022-04-06T08:16:53Z",
    "IsBurned": false,
     "Mintable": {
        "Max_mint_quantity": 20000
    },
    "NftBasePrice": 100,
    "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter"
    },
    "Symbol": "PNT",
    "TokenDesc": "token Description",
    "TokenId": "monalisa",
    "TokenMetadata": {
        "Description": "Mona Lisa Painting",
        "Image": "monalisa.jpeg",
        "PainterName": "Leonardo_da_Vinci",
        "PaintingName": "Mona_Lisa"
    },
    "TokenName": "paintingnft",
    "TokenStandard": "erc721+",
    "TokenType": "nonfungible",
    "TokenUnit": "whole",
    "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"
}
GetTokenUri
このメソッドは、指定されたトークンのトークンURIを返します。
Ctx.ERC721Token.GetTokenURI(tokenId string) (interface{}, error)
パラメータ:
  • tokenId: string– トークンのID。
戻り値:
  • 成功すると、文字列データ型の新しいトークンURIのマップが返されます。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.GetTokenURI(tokenId)

{"TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
TokenUri
このメソッドは、指定されたトークンのトークンURIを返します。
Ctx.ERC721Token.TokenURI(tokenId string) (interface{}, error)
パラメータ:
  • tokenId: string– トークンのID。
戻り値:
  • 成功すると、文字列データ型の新しいトークンURIのマップが返されます。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
戻り値の例:

t.Ctx.ERC721Token.TokenURI(tokenId)

{"TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
Symbol
このメソッドは、トークン・クラスのシンボルを返します。
Ctx.ERC721Token.Symbol() (interface{}, error)
パラメータ:
  • なし
戻り値:
  • 成功すると、文字列データ型のシンボルのマップ。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.Symbol()

{"Symbol": "PNT"}
Name
このメソッドは、トークン・クラスの名前を返します。
Ctx.ERC721Token.Name() (interface{}, error)
パラメータ:
  • なし
戻り値:
  • 成功すると、文字列データ型のトークン名のマップ。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.Name()

{"TokenName": "paintingnft"}
OwnerOf
このメソッドは、指定されたトークンの所有者のアカウントIDを返します。
Ctx.ERC721Token.OwnerOf(tokenId string) (interface{}, error)
パラメータ:
  • tokenId: string– トークンのID。
戻り値:
  • 成功すると、文字列データ型の所有者のアカウントIDのマップ。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.OwnerOf(tokenId)

{"Owner": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba"}
TotalSupply
このメソッドは、ミントNFTの合計数を返します。
Ctx.ERC721Token.TotalSupply() (map[string]interface{}, error)
パラメータ:
  • tokenId: string– トークンのID。
戻り値:
  • 成功すると、数値データ型のトークンの合計供給のマップ。エラー時には、エラーメッセージ付きの拒否。
次に例を示します:

t.Ctx.ERC721Token.TotalSupply();

{"TotalSupply": 3}
GetAllTokens
このメソッドは、状態データベースに保存されているすべてのトークン・アセットを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
Ctx.ERC721Token.GetAllTokens()  (interface{}, error)
パラメータ:
  • なし
戻り値:
  • 成功すると、すべてのトークン・アセットのマップが表示されます。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.GetAllTokens()

[
    {
        "key": "monalisa",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintab
 
le",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:01:42Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 0,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "token Description",
            "TokenId": "monalisa",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
    },
    {
        "key": "monalisa2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:04:44Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 100,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "",
            "TokenId": "monalisa1",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
        }
    }
]
GetAllTokensByUser
このメソッドは、指定されたアカウントIDが所有するすべてのトークンを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
Ctx.ERC721Token.GetAllTokensByUser(accountId string) (interface{}, error)
パラメータ:
  • accountId: string– アカウントのID。
戻り値:
  • 成功すると、指定されたアカウントのトークン・アセットのマップ。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.GetAllTokensByUser(accountId)

[
    {
        "key": "monalisa",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:01:42Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 0,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "token Description",
            "TokenId": "monalisa",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
    },
    {
        "key": "monalisa2",
        "valueJson": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "CreationDate": "2022-04-10T11:04:44Z",
            "IsBurned": false,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 100,
            "Owner": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "",
            "TokenId": "monalisa1",
            "TokenMetadata": {
                 "Description": "Mona Lisa Painting",
                 "Image": "monalisa.jpeg",
                 "PainterName": "Leonardo_da_Vinci",
                 "PaintingName": "Mona_Lisa"
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
        }
        }
    }
]
Get
このメソッドは、指定されたトークン・オブジェクトが状態データベースに存在する場合、それを返します。
Ctx.Get(Id string, result ...interface{}) (interface{}, error)
パラメータ:
  • tokenId: string– トークンのID。
  • result– 変数引数。最初の引数result[0]は、正しい型の空のTokenオブジェクトへの参照で、メソッドの正常なコール後にトークン・データが含まれます。
戻り値:
  • 成功すると、トークン・アセット・データを含むマップ。また、result[0]が渡された場合、データはresult[0]に割り当てられます。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.Get(tokenId, &asset)

{
    "AssetType": "otoken",
    "Behavior": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "CreationDate": "2022-04-06T00:35:42z",
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "NftBasePrice": 200,
    "Owner": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba",
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter"
    },
    "Symbol": "PNT",
    "TokenDesc": "Token Description",
    "TokenId": "monalisa",
    "TokenMetadata": {
        "Description": "Mona Lisa Painting",
        "Image": "monalisa.jpeg",
        "PainterName": "Leonardo_da_Vinci",
        "PaintingName": "Mona_Lisa"
    },
    "TokenName": "paintingnft",
    "TokenStandard": "erc721+",
    "TokenType": "nonfungible",
    "TokenUnit": "whole",
    "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
    "TransferredBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "TransferredDate": "2022-04-06T00:51:56z"
}
UpdateToken
このメソッドは、トークン・プロパティを更新します。このメソッドは、トークンの所有者または作成者のみがコールできます。トークン・アセットの作成後、トークン所有者のみがトークン・カスタム・プロパティを更新できます。ユーザーがトークンの所有者と作成者の両方である場合、TokenDescプロパティを更新することもできます。トークン・メタデータを更新できません。特定のプロパティのみを更新する場合でも、すべてのトークン・プロパティをこのメソッドに渡す必要があります。
Ctx.ERC721Token.UpdateToken(asset interface{}) (interface{}, error)
パラメータ:
  • 必要な型のトークン構造体データへの参照
戻り値:
  • 成功すると、トークン詳細を含むPromiseメッセージ。エラー時には、エラーメッセージ付きの拒否。
次に例を示します:

t.Ctx.ERC721Token.UpdateToken(&asset)

{
    "AssetType": "otoken",
    "Behavior": [
        "indivisible",
        "singleton",
        "mintable",
        "transferable",
        "burnable",
        "roles"
    ],
    "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",     
    "CreationDate": "2022-04-06T08:16:53Z",
    "IsBurned": false,   
    "Mintable": {
        "Max_mint_quantity": 20000
    },
    "NftBasePrice": 200,
    "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "Roles": {
        "burner_role_name": "burner",
        "minter_role_name": "minter"
    },
    "Symbol": "PNT",
    "TokenDesc": "Token Description",
    "TokenId": "monalisa",
    "TokenMetadata": {
        "Description": "Mona Lisa Painting",
        "Image": "monalisa.jpeg",
        "PainterName": "Leonardo_da_Vinci",
        "PaintingName": "Mona_Lisa"
    },
    "TokenName": "paintingnft",
    "TokenStandard": "erc721+",
    "TokenType": "nonfungible",
    "TokenUnit": "whole",
    "TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg",
}
History
このメソッドは、指定されたトークンの履歴を返します。
Ctx.ERC721Token.History(tokenId: string)  (interface{}, error)
パラメータ:
  • tokenId: string– トークンのID。
戻り値:
  • 成功すると、マップの配列。エラー時には、エラーメッセージ付きの拒否。
次に例を示します:

t.Ctx.ERC721Token.History(tokenId)

[
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T11:34:06z",
        "TxId": "3184eac8738c73ef45501fe23c9e14517892e04e4eb03ec9be834b89c29ea17b",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "BurnedBy": null,
            "BurnedDate": null,
            "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "CreationDate": "2022-04-06T11:33:40+05:30",
            "IsBurned": null,
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 0,
            "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "",
            "TokenId": "t1",
            "TokenMetadata": {
                "Description": "",
                "Image": "",
                "PainterName": "",
                "PaintingName": ""
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": "",
            "TransferredBy": null,
            "TransferredDate": null
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T11:33:40z",
        "TxId": "d37dba907a849c308b2a38d47cf8a68cdcb4e3d93fa74050774379fccfcd43be",
        "Value": {
            "AssetType": "otoken",
            "Behavior": [
                "indivisible",
                "singleton",
                "mintable",
                "transferable",
                "burnable",
                "roles"
            ],
            "CreatedBy": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "CreationDate": "2022-04-06T11:33:40+05:30",
            "Mintable": {
                "Max_mint_quantity": 20000
            },
            "NftBasePrice": 0,
            "Owner": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
            "Roles": {
                "burner_role_name": "burner",
                "minter_role_name": "minter"
            },
            "Symbol": "PNT",
            "TokenDesc": "",
            "TokenId": "t1",
            "TokenMetadata": {
                "Description": "",
                "Image": "",
                "PainterName": "",
                "PaintingName": ""
            },
            "TokenName": "paintingnft",
            "TokenStandard": "erc721+",
            "TokenType": "nonfungible",
            "TokenUnit": "whole",
            "TokenUri": ""
        }
    }
]
GetNewCtx
このメソッドは、新しいTrxContextオブジェクトを戻します。trxcontext構造体は、すべてのSDKライブラリへの参照を保持します。このオブジェクトのみを使用して、sdkメソッドにアクセスします。trxcontextオブジェクトは、同時トランザクションの実行時に、SDKライブラリ内のトランザクション・スタブの相互排他性を維持します。
GetNewCtx(stub shim.ChaincodeStubInterface) TrxContext
パラメータ:
  • stub– トランザクション・スタブ。
戻り値:
  • trxcontext構造体。
次に例を示します:

trxcontext.GetNewCtx(stub)

trxcontext object.

アカウント管理のメソッド

GenerateAccountId
このメソッドは、メンバーシップ・サービス・プロバイダID (orgId)とユーザー名または電子メールID (userId)を連結してSHA-256ハッシュを作成することによって形成されるアカウントIDを返します。
Ctx.ERC721Account.GenerateAccountId(orgId string, userId string) (string, error)
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、生成されたアカウントID。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Account.GenerateAccountId(orgId, userId)

oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507
CreateAccount
このメソッドは、指定されたユーザーのアカウントを作成します。任意の時点でトークンを持つすべてのユーザーに対してアカウントを作成する必要があります。アカウントは、ユーザーが持つNFTの数を追跡します。ユーザーは、トークン関連の操作を完了するためにネットワーク内にアカウントを持っている必要があります。ユーザーごとに作成できるNFTアカウントは1つのみです。

アカウントIDは、oaccount~という接頭辞が付いた英数字のセットであり、その後に、現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダID (org_id)、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールID (userId)、および定数文字列nftというSHA-256ハッシュが続きます。

Ctx.ERC721Account.CreateAccount(orgId string, userId string, tokenType string) (ERC721Account, error)
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
  • tokenType: string– サポートされているトークン・タイプはnonfungibleのみです。
戻り値:
  • 成功すると、新しいアカウント・オブジェクト。エラー時、エラー・メッセージを含むnil以外のオブジェクト
次に例を示します:

t.Ctx.ERC721Account.CreateAccount(orgId, userId, tokenType)

{
    "AssetType": "oaccount",
    "AccountId": "oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507",
    "UserId": "admin",
    "BapAccountVersion" : 0,
    "OrgId": "Org1MSP",
    "TokenType": "nonfungible",
    "NoOfNfts": 0
}
GetAllAccounts
このメソッドは、すべてのアカウントのリストを返します。この方法では、Berkeley DB SQLリッチ問合せが使用され、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
Ctx.ERC721Account.GetAllAccounts() (interface{}, error)
パラメータ:
  • なし
戻り値:
  • すべてのアカウントのJSON配列。
次に例を示します:

t.Ctx.ERC721Account.GetAllAccounts()

[
    {
        "key": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
        "valueJson": {
            "AccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "BapAccountVersion" : 0,
            "AssetType": "oaccount",
            "NoOfNfts": 5,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user1"
        }
    },
    {
        "key": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
        "valueJson": {
            "AccountId": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
            "AssetType": "oaccount",
            "BapAccountVersion" : 0,
            "NoOfNfts": 0,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user_minter"
        }
    },
    {
        "key": "oaccount~5541fb520058d83664b844e7a55fe98d574ddeda765d0e795d4779e9ccc271ce",
        "valueJson": {
            "AccountId": "oaccount~5541fb520058d83664b844e7a55fe98d574ddeda765d0e795d4779e9ccc271ce",
            "AssetType": "oaccount",
            "BapAccountVersion" : 0,
            "NoOfNfts": 0,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user_burner"
        }
    }
]
History
このメソッドは、指定されたアカウントのアカウント履歴詳細の配列を返します。
Ctx.ERC721Account.History(accountId string) (interface{}, error)
パラメータ:
  • accountId: string– アカウントのID。
戻り値:
  • 成功すると、指定したアカウントのアカウント履歴の詳細を含むmap[string]interface{}配列。アカウント・データは、マップのvalueキーの下に表示されます。エラー時、エラー・メッセージを含むnil以外のエラー・オブジェクト。
次に例を示します:

t.Ctx.ERC721Account.History(accountId)

[
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T08:16:53Z",
        "TxId": "750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7",
        "Value": {
            "AccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "AssetType": "oaccount",
            "BapAccountVersion" : 1,
            "NoOfNfts": 1,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user1"
        }
    },
    {
        "IsDelete": "false",
        "Timestamp": "2022-04-06T08:15:19Z",
        "TxId": "49eb84c42d452e5ba0028d8ebb4190454cf9013a11c0bad3e96594af452d4982",
        "Value": {
            "AccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
            "AssetType": "oaccount",
            "NoOfNfts": 0,
            "BapAccountVersion" : 0,
            "OrgId": "apPart",
            "TokenType": "nonfungible",
            "UserId": "user1"
        }
    }
]
GetUserByAccountId
このメソッドは、指定されたアカウントのユーザー詳細を返します。
Ctx.ERC721Account.GetUserByAccountId(accountId string) (interface{}, error)
パラメータ:
  • accountId: string– アカウントのID。
戻り値:
  • 成功すると、次のプロパティにユーザーの詳細を含むJSONオブジェクト:
    • OrgId– 現在のネットワーク組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
    • UserId– ユーザーのユーザー名または電子メールID。
  • エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Account.GetUserByAccountById(accountId)

{
    "OrgId": "Org1MSP",
    "UserId": "admin"
}
GetAccountWithStatusByUser
このメソッドは、アカウント・ステータスを含む、指定されたユーザーのアカウント詳細を返します。このメソッドは、チェーンコードのToken AdminまたはアカウントのAccount Ownerによってのみコールできます。
Ctx.ERC721Account.GetAccountWithStatusByUser(orgId, userId) (interface{}, error)
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、次のプロパティを含むJSONアカウント・オブジェクト:
  • AccountId– ユーザー・アカウントのID。
  • UserId– ユーザーのユーザー名または電子メールID。
  • OrgId– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • TokenType– アカウントが保持するトークンのタイプ。
  • NoOfNfts– アカウントが保持するNFTの合計数。
  • BapAccountVersion– 内部使用のためのアカウント・オブジェクト・パラメータ。
  • Status– ユーザー・アカウントの現在のステータス。
  • エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:
{
  "AccountId": "oaccount~cc301bee057f14236a97d434909ec1084970921b008f6baab09c2a0f5f419a9a",
  "AssetType": "oaccount",
  "BapAccountVersion": 0,
  "NoOfNfts": 0,
  "OrgId": "appdev",
  "Status": "active",
  "TokenType": "nonfungible",
  "UserId": "idcqa"
}
GetAccountByUser
このメソッドは、指定されたユーザーのアカウント詳細を返します。このメソッドは、チェーンコードのToken AdminまたはアカウントのAccount Ownerによってのみコールできます。
Ctx.ERC721Account.GetAccountByUser(orgId, userId) (ERC721Account, error)
パラメータ:
  • orgId: string– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • userId: string– ユーザーのユーザー名または電子メールID。
戻り値:
  • 成功すると、次のプロパティを含むJSONアカウント・オブジェクト:
  • AccountId– ユーザー・アカウントのID。
  • UserId– ユーザーのユーザー名または電子メールID。
  • OrgId– 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP)ID。
  • TokenType– アカウントが保持するトークンのタイプ。
  • NoOfNfts– アカウントが保持するNFTの合計数。
  • エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:
{
    "AssetType": "oaccount",
    "AccountId": "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d",
    "BapAccountVersion" : 0,
    "UserId": "admin",
    "OrgId": "Org1MSP",
    "TokenType": "nonfungible",
    "NoOfNfts": 0
}
BalanceOf
このメソッドは、指定されたユーザーが保持するNFTの合計数を返します。
Ctx.ERC721Account.BalanceOf(accountId string) (interface{}, error)
パラメータ:
  • accountId: string– ユーザーのアカウントID。
戻り値:
  • 成功すると、メッセージを含むインタフェースとNFTの合計数。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Account.BalanceOf(accountId)

{"TotalNfts": 0}

ロール管理方法

AddRoleMember
このメソッドは、指定されたユーザーにロールを追加します。
Ctx.ERC721Token.AddRoleMember(role string, accountId string) (interface{}, error)
パラメータ:
  • role: string– 指定したユーザーを追加するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_role_nameプロパティに対応します。
  • accountId: number– 操作するアカウントID。
戻り値:
  • 成功時に、成功メッセージを含むマップ。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.AddRoleMember(userRole, accountId)

{"msg": "Successfully added role minter to oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (orgId : Org1MSP, userId : admin)"}
RemoveRoleMember
このメソッドは、指定されたユーザーおよびトークンからロールを削除します。アカウントIDは、連結メンバーシップ・サービス・プロバイダID (orgId)とユーザー名または電子メールID (userId)のSHA-256ハッシュを作成することによって形成されます。
Ctx.Token.RemoveRoleMember(role string, accountId string) (interface{}, error)
パラメータ:
  • role: string– 指定したユーザーから削除するロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_role_nameプロパティに対応します。
  • accountId: number– 操作するアカウントID。
戻り値:
  • 成功時に、成功メッセージを含むマップ。エラー時には、エラー・メッセージを含むnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.RemoveRoleMember(userRole, accountId)

{"msg": "successfully removed memberId oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (orgId : Org1MSP, userId : admin) from role minter"}
IsInRole
このメソッドは、ユーザーとトークンに指定したロールがあるかどうかを示すブール値を返します。アカウントIDは、連結メンバーシップ・サービス・プロバイダID (orgId)とユーザー名または電子メールID (userId)のSHA-256ハッシュを作成することによって形成されます。
Ctx.ERC721Token.IsInRole(role string, accountId string) (bool, error)
パラメータ:
  • role: string– 指定したユーザーをチェックするロールの名前。mintableおよびburnableの動作は、仕様ファイルのminter_role_nameおよびburner_role_nameプロパティに対応します。
  • accountId: number– 操作するアカウントID。
戻り値:
  • 成功した場合、指定したアカウントIDにロールが存在する場合はtrue、それ以外の場合はfalseのブール値。エラー時、エラー・メッセージを含むnil以外のオブジェクト
次に例を示します:

t.Ctx.ERC721Token.IsInRole(userRole, accountId)

{"result": false}
GetAccountsByRole
このメソッドは、指定されたロールのすべてのアカウントIDのリストを返します。
Ctx.ERC721Role.GetAccountsByRole(roleName string) (interface{}, error)
パラメータ:
  • roleName: string– 検索するロールの名前。
戻り値:
  • 成功すると、アカウントIDのJSON配列。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Role.GetAccountsByRole(userRole)

{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
GetUsersByRole
このメソッドは、指定されたロールのすべてのユーザーのリストを返します。
Ctx.ERC721Role.GetUsersByRole(roleName string) (interface{}, error)
パラメータ:
  • roleName: string– 検索するロールの名前。
戻り値:
  • 成功すると、ユーザー・オブジェクトのJSON配列。各オブジェクトには、ユーザーIDと組織IDが含まれます。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Role.GetUsersByRole(userRole)

{
    "Users": [
        {
            "OrgId": "Org1MSP",
            "UserId": "admin"
        }
    ]
}

トランザクション履歴管理のメソッド

GetAccountTransactionHistory
このメソッドは、指定された勘定科目のトランザクション履歴詳細の配列を返します。
Ctx.ERC721Account.GetAccountTransactionHistory(accountId string) (interface{}, error)
パラメータ:
  • accountId: string– アカウントのID。
戻り値:
  • 成功すると、JSON形式の勘定科目トランザクション・オブジェクトの配列は次のようになります。
    • TransactionId– トランザクションのID。
    • TransactedAccount– トランザクションが発生したアカウント。
    • TransactionType– トランザクションのタイプ。
    • Timestamp - トランザクションの時間。
    • エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Account.GetAccountTransactionHistory(accountId)

[
     {
        "Timestamp": "2022-04-06T08:31:39Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
        "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
        "TransactionType": "DEBIT"
    }
    {
        "Timestamp": "2022-04-06T08:16:53Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
        "TransactionId": "otransaction~750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7",
        "TransactionType": "MINT"
    }
]
GetAccountTransactionHistoryWithFilters
このメソッドは、PageSizeBookmarkstartTimeおよびendTimeでフィルタされた、指定されたユーザーのアカウント・トランザクション履歴を返します。このメソッドは、リモートOracle Blockchain Platformネットワークに接続されている場合にのみコールできます。
Ctx.ERC721Account.GetAccountTransactionHistoryWithFilters(accountId string, filters ...erc721Account.AccountHistoryFilters)
パラメータ:
  • accountId: string– アカウントのID。
  • filters: string– オプション・パラメータ。空の場合は、すべてのレコードが返されます。PageSizeプロパティは、戻すレコード数を決定します。PageSizeが0の場合、デフォルトのページ・サイズは20です。Bookmarkプロパティは、返されるレコードの開始索引を決定します。詳細は、Hyperledger Fabricのドキュメントを参照してください。StartTimeおよびEndTimeプロパティは、RFC-3339形式で指定する必要があります。
戻り値:
  • 成功すると、JSON形式の勘定科目トランザクション・オブジェクトの配列は次のようになります。
    • TransactionId– トランザクションのID。
    • TransactedAccount– トランザクションが発生したアカウント。
    • TransactionType– トランザクションのタイプ。
    • Timestamp - トランザクションの時間。
    • エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Account.GetAccountTransactionHistoryWithFilters(accountId, filters...)

[
     {
        "Timestamp": "2022-04-06T08:31:39Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
        "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
        "TransactionType": "DEBIT"
    }
    {
        "Timestamp": "2022-04-06T08:16:53Z",
        "TokenId": "monalisa",
        "TransactedAccount": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
        "TransactionId": "otransaction~750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7",
        "TransactionType": "MINT"
    }
]
GetTransactionById
このメソッドは、Transactionアセットの履歴を返します。
Ctx.ERC721Transaction.GetTransactionById(trxId string) (interface{}, error)
パラメータ:
  • trxId: string– トランザクション・アセットのID。
戻り値:
  • 成功すると、トランザクション資産のマップの配列。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Transaction.GetTransactionById(transactionId)

{
    "History": [
        {
            "IsDelete": "false",
            "Timestamp": "2022-04-06T08:31:39Z",
            "TxId": "5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
            "Value": {
                "AssetType": "otransaction",
                "Data": "",
                "FromAccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1",
                "Timestamp": "2022-04-06T08:31:39Z",
                "ToAccountId": "oaccount~0829f0996744ca9dc8b4e9165a7a8f5db3fdffdc46c96b94f5d625041502cec4",
                "TokenId": "monalisa",
                "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7",
                "TransactionType": "TRANSFER",
                "TriggeredByAccountId": "oaccount~543c2258e351c3e7a40ea59b81e62154d38fbfc9d1b5b79f30ac5e08e7d0dfd1"
            }
        }
    ],
    "TransactionId": "otransaction~5a353e02e657c2c8fddce41dd4e7260025fe7beef634ca3351fc366a440e8ac7"
}
DeleteHistoricalTransactions
このメソッドは、指定した日付より古いトランザクションを状態データベースから削除します。
func (t *Controller) DeleteHistoricalTransactions(referenceTime string) (interface{}, error)
パラメータ:
  • referenceTime: string– 指定した時間より古いトランザクションが削除されます。
戻り値:
  • 成功すると、削除されたトランザクションIDの配列と成功メッセージ。エラー時、エラーメッセージを含む9以外のエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Transaction.DeleteHistoricalTransactions(timestamp)

{
    "Transactions": [
        "otransaction~750f68538451847f57948f7d5261dcb81570cd9e429f928a4cb7bfa76392ecf7"
    ],
    "msg": "Successfuly deleted transaction older than date:2022-04-06T08:17:53Z"
}

トークン動作管理- 最小限の動作

GetMaxMintQuantity
このメソッドは、トークンの最小値の最大量を返します。max_mint_quantity動作が仕様ファイルで構成されていない場合、デフォルト値は0で、トークンの無限数をミントできます。
Ctx.ERC721Token.GetMaxMintQuantity(id string) (float64, error)
パラメータ:
  • id– 操作するトークンのID。
戻り値:
  • 成功した場合、トークンの最大最小化可能量(数値データ型)。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.GetMaxMintQuantity(tokenId);

20000
GetTotalMintedTokens
このメソッドは、指定されたトークンに対してシステムで使用可能なトークンの合計正味数を返します。使用可能なトークンの正味数は、ミント・トークンの合計数から、書き込まれたトークンの数を引いた値です。
Ctx.ERC721Token.GetTotalMintedTokens() (map[string]interface{}, error)
パラメータ:
  • なし
戻り値:
  • 成功すると、合計ミント・トークン、数値データ型および成功メッセージのマップ。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.GetTotalMintedTokens()

{"TotalNetSupply": 5}

トークン動作管理- 転送可能な動作

SafeTransferFrom
このメソッドは、指定されたNFTの所有権をコール元から別のアカウントに転送します。このメソッドには、次の検証が含まれます。
  • トークンが存在し、書き込まれません。
  • 送信者アカウントと受信者アカウントが存在し、同じアカウントではありません。
  • 送信者アカウントがトークンを所有します。
  • 関数の呼び出し元は送信者です。
Ctx.ERC721Token.SafeTransferFrom(fromAccountId string, toAccountId string, tokenAsset interface{}, data ...string) (interface{}, error)
パラメータ:
  • fromAccountId: string– 現在の組織の送信者のアカウントID。
  • toAccountId: string– 現在の組織の受信者のアカウントID。
  • tokenAsset– 操作するトークン・アセットへの参照。
  • data: string– トランザクションに格納するオプションの追加情報。
戻り値:
  • 成功時に、アカウント詳細を含む成功メッセージを含む約束。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.SafeTransferFrom(fromAccountId, toAccountId, tokenAssetValue.Interface(), data...)

{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1"}
TransferFrom
このメソッドは、指定されたNFTの所有権を送信者アカウントから受け側アカウントに転送します。呼出し側は、正しいパラメータを渡す必要があります。このメソッドは、トークン所有者のみでなく、任意のユーザーがコールできます。このメソッドには、次の検証が含まれます。
  • トークンが存在し、書き込まれません。
  • 送信者アカウントと受信者アカウントが存在し、同じアカウントではありません。
  • 送信者アカウントがトークンを所有します。
Ctx.ERC721Token.TransferFrom(fromAccountId string, toAccountId string, tokenAsset interface{}) (interface{}, error)
パラメータ:
  • fromAccountId: string– 現在の組織の送信者のアカウントID。
  • toAccountId: string– 現在の組織の受信者のアカウントID。
  • tokenAsset– 操作するトークン・アセットへの参照。
戻り値:
  • 成功時に、アカウント詳細を含む成功メッセージを含む約束。アカウントIDの接頭辞はoaccount~です。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
\例:

t.Ctx.ERC721Token.TransferFrom(fromAccountId, toAccountId, tokenAssetValue.Interface())

{"msg": "Successfully transferred NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin) to Account-Id: oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba (Org-Id: Org1MSP, User-Id: user1"}

トークン動作管理- 書き込み可能な動作

Burn
このメソッドは、コール元のアカウントから指定されたNFTを非アクティブ化またはバーンします。このメソッドのコール元にはアカウントが必要です。トークン仕様ファイルにburnable動作が含まれていないかぎり、トークンを書き込むことはできません。仕様ファイルのrolesセクションにburner_role_nameプロパティが指定されていない場合、トークンの所有者はトークンを書き込みます。rolesセクションにburner_role_nameプロパティが指定されている場合、トークンの最小(作成者)でもあるバーナー・ロールを割り当てられたユーザーはトークンを書き込みます。burnメソッドは、ERC721Tokenパッケージの一部であり、Ctx構造体の受信側からアクセスします。
Ctx.Token.Burn(tokenAsset interface{}) (interface{}, error)
パラメータ:
  • tokenAsset– 操作するトークン・アセットへの参照。
戻り値:
  • 成功時に、アカウント詳細を含む成功メッセージを含む約束。エラー時には、エラーメッセージ付きのnil以外のオブジェクト。
次に例を示します:

t.Ctx.ERC721Token.Burn(tokenAssetValue.Interface())

{"msg": "Successfully burned NFT token: 'monalisa' from Account-Id: oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (Org-Id: Org1MSP, User-Id: admin"}