ERC-721用スキャフォールド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である必要があります。パブリック・メソッド名は大文字で始まります。小文字で始まるメソッド名は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)のSHA-256ハッシュ、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールID (UserId)、および定数文字列nftが続きます。このメソッドは、チェーンコードの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> - ミントするトークン・アセット。トークン・アセットのプロパティの詳細は、入力仕様ファイルを参照してください。
戻り値:
  • 成功すると、次のプロパティを含むJSONトークン・アセット・オブジェクト。
  • Behavior - すべてのトークン動作の説明。
  • CreatedBy - トークンをミントするためにトランザクションをコールしたユーザーのアカウントID。
  • CreationDate - トランザクションのタイムスタンプ。
  • IsBurned - tokenIdで識別される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メソッドは、Ctx構造体(レシーバ)を介してアクセスするerc721Authパッケージの一部です。アクセス制御マッピングについては、次のテキストに示すように、oChainUtil.goファイルを参照してください。アクセス制御は、oChainUtil.goファイルを編集して変更できます。独自のアクセス制御を使用するか、アクセス制御を無効にするには、自動的に生成されたコントローラメソッドおよびカスタムメソッドからアクセス制御コードを削除します。
  var t TokenAccess
      var r RoleAccess
      var a AccountAccess
      var as AccountStatusAccess
      var h HoldAccess
      var ad AdminAccess
      var trx TransactionAccess
      var tc TokenConversionAccess
      var auth AuthAccess
      var erc721ad ERC721AdminAccess
      var erc721t ERC721TokenAccess
      var erc721r ERC721RoleAccess
      var erc721a ERC721AccountAccess
      var erc721as ERC721AccountStatusAccess
      var erc721trx ERC721TransactionAccess
     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ファイルに記述されているレシーバとメソッドの間のマップ値。
  • ...args - args[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として追加されたユーザーの詳細をリストするメッセージが表示されます。エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

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として削除されたユーザーの詳細をリストするメッセージが表示されます。エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

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

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

t.Ctx.ERC721Admin.GetAllAdmins()

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

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)
パラメータ:
  • 必要な型のトークン構造体データへの参照
戻り値:
  • 成功すると、トークン詳細を含む約束メッセージ。エラーの場合、エラー・メッセージを含む拒否。
次に例を示します:

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を返します。アカウントIDは、メンバーシップ・サービス・プロバイダID (orgId)とユーザー名または電子メールID (userId)を連結し、SHA-256ハッシュを作成することで形成されます。
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)のSHA-256ハッシュ、インスタンス所有者またはインスタンスにログインしているユーザーのユーザー名または電子メールID (userId)、および定数文字列nftが続きます。

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の合計数。エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

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配列。エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

t.Ctx.ERC721Role.GetAccountsByRole(userRole)

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

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 - トランザクションの時間。
    • エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

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 - トランザクションの時間。
    • エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

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。
戻り値:
  • 成功すると、トランザクション資産のマップが配列されます。エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

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の配列と成功メッセージが表示されます。エラー時、エラーメッセージを含む非nilエラーオブジェクト。
次に例を示します:

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メソッドは、Ctx構造体のレシーバを介してアクセスするERC721Tokenパッケージの一部です。
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"}