ERC-721 的鷹架式 Go NFT 專案

Blockchain App Builder 會從您的 NFT 規格檔取得輸入,並產生功能完整的鷹架式鏈碼專案。

專案會自動產生 NFT 生命週期類別和函數,包括 CRUD 和非 CRUD 方法。系統會自動支援引數驗證、封送處理 (Marshal) / 解除封送處理 (unmarshal) 以及透明保存功能。

如需鷹架式專案的資訊,以及與 NFT 無直接相關的方法,請參閱 Scaffolded Go Chaincode Project

Model

OchainModel 類別中擷取「通透保存功能 (Transparent Persistence Capability)」或簡化的 ORM。

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

控制器

只有一個主控制器。

type Controller struct {
    Ctx trxcontext.TrxContext
}

您可以建立不限數目的類別、函數或檔案,但只能呼叫在主控制器類別中定義的方法。其他方法則為隱藏。

您可以使用記號 SDK 方法,為商業應用程式撰寫自訂方法。

自動產生的 NFT 方法

Blockchain App Builder 會自動產生支援 NFT 和 NFT 生命週期的方法。您可以使用這些方法來初始化 NFT、管理角色和帳戶,以及完成其他 NFT 生命週期作業,而無需進行任何其他編碼。

Blockchain App Builder 會自動產生支援 NFT 和 NFT 生命週期的方法。您可以使用這些方法來初始化 NFT、管理角色和帳戶,以及完成其他 NFT 生命週期作業,而無需進行任何其他編碼。控制器方法必須是公用才能呼叫。公用方法名稱開頭為大寫字元。開頭為小寫字元的方法名稱是私密的。

存取控制管理的方法

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,否則會傳回 falseToken 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()
}
參數:
傳回值:
  • 成功時,包含 OrgIdUserId 物件的 JSON 管理員清單。
傳回值範例:
{
    "admins": [
        {
            "OrgId":"Org1MSP",
            "UserId":"admin"
        }
    ]
}

記號組態管理的方法

Init
建立鏈碼時會呼叫此方法。每個 Token Admin 都是由 adminList 參數中的 UserIdOrgId 資訊所識別。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 資料庫 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 資料庫 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 類別更新交換器案例,以傳回正確的權杖物件。區塊鏈 App 產生器中的 ochain sync 命令會在規格檔案中建立權杖化資產時,自動建立交換器案例。因為這個方法是私密方法,所以無法直接呼叫它,而且只能從其他方法呼叫。
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
這個方法會傳回經過 minted 記號減去燒錄記號數目的總數。鏈碼的 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 帳戶。

帳戶 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 資料庫 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。
傳回值:
  • 成功時,使用者詳細資訊 (OrgIdUserId) 的 JSON 物件。
傳回值範例:
{
    "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 - 要新增至指定使用者的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_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 - 要從指定使用者移除的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_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 陣列 (orgIduserId)。
傳回值範例:
{
    "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
此方法會傳回指定使用者的帳戶交易歷史記錄,依 PageSizeBookmarkStartTimeEndTime 篩選。連線至遠端 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 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
傳回值:
  • 成功時,物件清單。
傳回值範例:
[
     {
        "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 特性,則交易的呼叫者必須具有較小的角色。否則,任何呼叫者都可以提示 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 特性,則被指派燒錄者角色的使用者同時也是記號的 minter (建立者) 可以燒錄記號。
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 AdminAccount Owner 呼叫。您可以使用此功能來確保作業只由預期的使用者執行。任何未經授權的存取都會導致錯誤。若要使用存取控制功能,請從 ../lib/auth 模組匯入 Authorization 類別。
import { ERC721Authorization } from '../lib/erc721-auth';
CheckAuthorization
您可以使用此方法將存取控制檢查新增至作業。大多數自動產生的方法都包含存取控制。某些記號方法只能由記號的 ERC721AdminAccount Owner 執行,或由具有多個帳戶的使用者的 MultipleAccountOwner 執行。CheckAuthorization 方法是 erc721Auth 套裝軟體的一部分,您可以透過 Ctx 結構 (接收者) 存取該套裝軟體。存取控制對應會在 oChainUtil.go 檔案中描述,如下列文字所示。您可以編輯 oChainUtil.go 檔案來修改存取控制。若要使用您自己的存取控制或停用存取控制,請從自動產生的控制器方法與自訂方法移除存取控制程式碼。
  var t TokenAccess
      var r RoleAccess
      var a AccountAccess
      var as AccountStatusAccess
      var h HoldAccess
      var ad AdminAccess
      var trx TransactionAccess
      var tc TokenConversionAccess
      var auth AuthAccess
      var erc721ad ERC721AdminAccess
      var erc721t ERC721TokenAccess
      var erc721r ERC721RoleAccess
      var erc721a ERC721AccountAccess
      var erc721as ERC721AccountStatusAccess
      var erc721trx ERC721TransactionAccess
     auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"}

      trx.DeleteHistoricalTransactions = []string{"Admin"}
      ad.AddAdmin = []string{"Admin"}
      ad.RemoveAdmin = []string{"Admin"}
      ad.GetAllAdmins = []string{"Admin", "OrgAdmin"}
      ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"}
      ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"}
      ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"}
      t.Save = []string{"Admin"}
      t.GetAllTokens = []string{"Admin", "OrgAdmin"}
      t.Update = []string{"Admin"}
      t.GetTokenDecimals = []string{"Admin", "OrgAdmin"}
      t.GetTokensByName = []string{"Admin", "OrgAdmin"}
      t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"}
      t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"}
      t.GetNetTokens = []string{"Admin", "OrgAdmin"}
      t.Get = []string{"Admin", "OrgAdmin"}
      t.GetTokenHistory = []string{"Admin", "OrgAdmin"}
      a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"}
      a.GetAllAccounts = []string{"Admin"}
      a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"}
      a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.History = []string{"Admin", "AccountOwner"}
      a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"}
      a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"}
      a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"}

      as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"}
      as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"}
      r.GetAccountsByRole = []string{"Admin"}
      r.GetUsersByRole = []string{"Admin"}
      r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"}
      r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"}

      tc.InitializeExchangePoolUser = []string{"Admin"}
      tc.AddConversionRate = []string{"Admin"}
      tc.UpdateConversionRate = []string{"Admin"}
      tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"}
      tc.TokenConversion = []string{"Admin", "AnyAccountOwner"}
      tc.GetExchangePoolUser = []string{"Admin"}
      erc721ad.AddAdmin = []string{"Admin"}
      erc721ad.GetAllAdmins = []string{"Admin"}
      erc721ad.IsTokenAdmin = []string{"Admin"}
      erc721ad.RemoveAdmin = []string{"Admin"}
      erc721trx.DeleteHistoricalTransactions = []string{"Admin"}
      erc721t.Save = []string{"Admin"}
      erc721t.GetAllTokens = []string{"Admin"}
      erc721t.Update = []string{"Admin"}
      erc721t.GetTokensByName = []string{"Admin"}
      erc721t.AddRoleMember = []string{"Admin"}
      erc721t.RemoveRoleMember = []string{"Admin"}
      erc721t.IsInRole = []string{"Admin", "AccountOwner"}
      erc721t.Get = []string{"Admin", "TokenOwner"}
      erc721t.GetAllTokensByUser = []string{"Admin", "AccountOwner"}
      erc721t.TotalSupply = []string{"Admin"}
      erc721t.TotalNetSupply = []string{"Admin"}
      erc721t.History = []string{"Admin"}

      erc721a.CreateAccount = []string{"Admin"}
      erc721a.CreateUserAccount = []string{"Admin"}
      erc721a.CreateTokenAccount = []string{"Admin"}
      erc721a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"}
      erc721a.GetAllAccounts = []string{"Admin"}
      erc721a.History = []string{"Admin", "AccountOwner"}
      erc721a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"}
      erc721a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"}
      erc721a.GetAccountByUser = []string{"Admin", "MultipleAccountOwner"}
      erc721a.BalanceOf = []string{"Admin", "MultipleAccountOwner"}
      erc721as.Get = []string{"Admin", "AccountOwner"}
      erc721as.ActivateAccount = []string{"Admin"}
      erc721as.SuspendAccount = []string{"Admin"}
      erc721as.DeleteAccount = []string{"Admin"}

      erc721r.GetAccountsByRole = []string{"Admin"}
      erc721r.GetUsersByRole = []string{"Admin"}

      var accessMap TokenAccessControl
      accessMap.Token = t
      accessMap.Account = a
      accessMap.AccountStatus = as
      accessMap.Hold = h
      accessMap.Role = r
      accessMap.Admin = ad
      accessMap.Auth = auth
      accessMap.TokenConversion = tc
      accessMap.ERC721ADMIN = erc721ad
      accessMap.ERC721TOKEN = erc721t
      accessMap.ERC721ACCOUNT = erc721a
      accessMap.ERC721AccountStatus = erc721as
      accessMap.ERC721ROLE = erc721r
      accessMap.ERC721TRANSACTION = erc721trx
Ctx.ERC721Auth.CheckAuthorization(funcName string, args []string) (bool, error)
參數:
  • funcName: string - 接收者與方法之間的對應值,如 oChainUtil.go 檔案中所述。
  • ...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 的使用者詳細資訊的訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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

{"msg":"Successfuly removed Admin (OrgId Org1MSP UserId user1)"}
GetAllAdmins
此方法會傳回所有 Token Admin 使用者的清單。
Ctx.ERC721Admin.GetAllAdmins() (Admin[], error) 
參數:
傳回值:
  • 成功時,所有 Token Admin 使用者的清單。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

t.Ctx.ERC721Admin.GetAllAdmins()

{
    "admins": [
        {
            "OrgId":"Org1MSP",
            "UserId":"admin"
        }
    ]
}
GetAllAdminUsers
此方法會傳回所有 Token Admin 使用者的清單。
Ctx.ERC721Admin.GetAllAdminUsers() (interface{}, error) 
參數:
傳回值:
  • 成功時,會以 map[string]interface{} 格式列出所有 Token Admin 使用者。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

t.Ctx.ERC721Admin.GetAllAdminUsers()

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

記號組態管理的方法

CreateToken
此方法會建立記號,並將其特性儲存在狀態資料庫中。只有具備較小角色的使用者才能呼叫此方法。
Ctx.ERC721Token.CreateToken(args ...interface{})
參數:
  • 變數引數,其中 args[0] 包含必要類型之記號 struct 的參照。
傳回值:
  • 成功時,含有記號詳細資訊的 interface[]。發生錯誤時,含有錯誤訊息的非空值物件。
範例:

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 的對應。發生錯誤時,含有錯誤訊息的非空值物件。
範例:

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 的對應。發生錯誤時,含有錯誤訊息的非空值物件。
傳回值範例:

t.Ctx.ERC721Token.TokenURI(tokenId)

{"TokenUri": "https://bafybeid6pmpp62bongoip5iy2skosvyxh3gr7r2e35x3ctvawjco6ddmsq\\ .ipfs.infura-ipfs.io/?filename=MonaLisa.jpeg"}
Symbol
這個方法會傳回記號類別的符號。
Ctx.ERC721Token.Symbol() (interface{}, error)
參數:
傳回值:
  • 成功時,字串資料類型中的符號對應。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

t.Ctx.ERC721Token.Symbol()

{"Symbol": "PNT"}
Name
此方法會傳回記號類別的名稱。
Ctx.ERC721Token.Name() (interface{}, error)
參數:
傳回值:
  • 成功時,字串資料類型中的記號名稱對應。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

t.Ctx.ERC721Token.Name()

{"TokenName": "paintingnft"}
OwnerOf
此方法會傳回指定記號之擁有者的帳戶 ID。
Ctx.ERC721Token.OwnerOf(tokenId string) (interface{}, error)
參數:
  • tokenId: string - 記號的 ID。
傳回值:
  • 成功時,字串資料類型中擁有者的帳戶 ID 對應。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

t.Ctx.ERC721Token.OwnerOf(tokenId)

{"Owner": "oaccount~ec32cff8635a056f3dda3da70b1d6090d61f66c6a170c4a95fd008181f729dba"}
TotalSupply
此方法會傳回 Minted NFT 的總數。
Ctx.ERC721Token.TotalSupply() (map[string]interface{}, error)
參數:
  • tokenId: string - 記號的 ID。
傳回值:
  • 成功時,數字資料類型中記號的供應總計對應。發生錯誤時,拒絕並顯示錯誤訊息。
範例:

t.Ctx.ERC721Token.TotalSupply();

{"TotalSupply": 3}
GetAllTokens
此方法會傳回儲存在狀態資料庫中的所有記號資產。此方法使用 Berkeley 資料庫 SQL 豐富查詢,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
Ctx.ERC721Token.GetAllTokens()  (interface{}, error)
參數:
傳回值:
  • 成功時,會對應所有權杖資產。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

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 資料庫 SQL 豐富查詢,且只能在連線至遠端 Oracle Blockchain Platform 網路時呼叫。
Ctx.ERC721Token.GetAllTokensByUser(accountId string) (interface{}, error)
參數:
  • accountId: string - 帳戶的 ID。
傳回值:
  • 成功時,指定帳戶的權杖資產對應。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

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]。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

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 (orgId) 和使用者名稱或電子郵件 ID (userId) 來形成,然後建立 SHA-256 雜湊。
Ctx.ERC721Account.GenerateAccountId(orgId string, userId string) (string, error)
參數:
  • orgId: string - 目前組織中使用者的成員服務提供者 (MSP) ID。
  • userId: string - 使用者的使用者名稱或電子郵件 ID。
傳回值:
  • 成功時,產生的帳戶 ID。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

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

oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507
CreateAccount
此方法會為指定的使用者建立帳戶。必須為任何時候會有權杖的任何使用者建立帳戶。帳戶會追蹤使用者擁有的 NFT 數目。使用者必須在網路中擁有帳戶,才能完成權杖相關作業。每位使用者只能建立一個 NFT 帳戶。

帳戶 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
傳回值:
  • 成功時,新客戶物件。發生錯誤時,包含錯誤訊息的非空值物件
範例:

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

{
    "AssetType": "oaccount",
    "AccountId": "oaccount~a0a60d54ba9e2ff349737d292ea10ebd9cc8f1991c11443c19d20aea299a9507",
    "UserId": "admin",
    "BapAccountVersion" : 0,
    "OrgId": "Org1MSP",
    "TokenType": "nonfungible",
    "NoOfNfts": 0
}
GetAllAccounts
此方法會傳回所有帳戶的清單。此方法使用 Berkeley 資料庫 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 索引鍵下方。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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。
  • 發生錯誤時,包含錯誤訊息的非空值物件。
範例:

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 - 使用者帳戶的目前狀態。
  • 發生錯誤時,包含錯誤訊息的非空值物件。
範例:
{
  "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 總數。
  • 發生錯誤時,包含錯誤訊息的非空值物件。
範例:
{
    "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 總數。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

t.Ctx.ERC721Account.BalanceOf(accountId)

{"TotalNfts": 0}

角色管理方法

AddRoleMember
這個方法會將角色新增至指定的使用者。
Ctx.ERC721Token.AddRoleMember(role string, accountId string) (interface{}, error)
參數:
  • role: string - 要新增至指定使用者的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。
  • accountId: number - 要操作的帳戶 ID。
傳回值:
  • 成功時,會有一個含有成功訊息的對應。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

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

{"msg": "Successfully added role minter to oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (orgId : Org1MSP, userId : admin)"}
RemoveRoleMember
此方法會從指定的使用者和記號移除角色。帳戶 ID 是透過建立串連成員服務提供者 ID (orgId) 的 SHA-256 雜湊和使用者名稱或電子郵件 ID (userId) 來形成。
Ctx.Token.RemoveRoleMember(role string, accountId string) (interface{}, error)
參數:
  • role: string - 要從指定使用者移除的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。
  • accountId: number - 要操作的帳戶 ID。
傳回值:
  • 成功時,會有一個含有成功訊息的對應。發生錯誤時,包含錯誤訊息的非空值物件。
範例:

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

{"msg": "successfully removed memberId oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d (orgId : Org1MSP, userId : admin) from role minter"}
IsInRole
此方法會傳回布林值,指示使用者和記號是否具有指定的角色。帳戶 ID 是透過建立串連成員服務提供者 ID (orgId) 的 SHA-256 雜湊和使用者名稱或電子郵件 ID (userId) 來形成。
Ctx.ERC721Token.IsInRole(role string, accountId string) (bool, error)
參數:
  • role: string - 檢查指定使用者的角色名稱。mintableburnable 行為對應至規格檔案的 minter_role_nameburner_role_name 特性。
  • accountId: number - 要操作的帳戶 ID。
傳回值:
  • 成功時,如果指定的帳戶 ID 有角色,布林值即為 true,否則為 false。發生錯誤時,包含錯誤訊息的非空值物件
範例:

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

{"result": false}
GetAccountsByRole
此方法會傳回指定角色的所有帳戶 ID 清單。
Ctx.ERC721Role.GetAccountsByRole(roleName string) (interface{}, error)
參數:
  • roleName: string - 要搜尋的角色名稱。
傳回值:
  • 成功時,帳戶 ID 的 JSON 陣列。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

t.Ctx.ERC721Role.GetAccountsByRole(userRole)

{
    "accounts": [
        "oaccount~42e89f4c72dfde9502814876423c6da630d466e87436dd1aae201d347ad1288d"
    ]
}
GetUsersByRole
此方法會傳回指定角色的所有使用者清單。
Ctx.ERC721Role.GetUsersByRole(roleName string) (interface{}, error)
參數:
  • roleName: string - 要搜尋的角色名稱。
傳回值:
  • 成功時,使用者物件的 JSON 陣列。每個物件都包含使用者 ID 與組織 ID。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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 - 異動的時間。
    • 發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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
此方法會傳回指定使用者的帳戶交易歷史記錄,依 PageSizeBookmarkstartTimeendTime 篩選。連線至遠端 Oracle Blockchain Platform 網路時才能呼叫此方法。
Ctx.ERC721Account.GetAccountTransactionHistoryWithFilters(accountId string, filters ...erc721Account.AccountHistoryFilters)
參數:
  • accountId: string - 帳戶的 ID。
  • filters: string - 選擇性參數。如果空白,則會傳回所有記錄。PageSize 特性決定要傳回的記錄數目。如果 PageSize 為 0,則預設頁面大小為 20。Bookmark 特性決定要傳回之記錄的開始索引。如需詳細資訊,請參閱 Hyperledger Fabric 文件。必須以 RFC-3339 格式指定 StartTimeEndTime 特性。
傳回值:
  • 成功時,JSON 格式的一系列帳戶交易物件:
    • TransactionId - 交易的 ID。
    • TransactedAccount - 進行交易的帳戶。
    • TransactionType - 交易的類型。
    • Timestamp - 異動的時間。
    • 發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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。
傳回值:
  • 成功時,交易資產的對應陣列。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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 陣列與成功訊息。發生錯誤時,包含錯誤訊息的非零錯誤物件。
範例:

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。
傳回值:
  • 成功時,數字資料類型中變數替代字的最大可修改數量。發生錯誤時,含有錯誤訊息的非空值物件。
範例:

t.Ctx.ERC721Token.GetMaxMintQuantity(tokenId);

20000
GetTotalMintedTokens
此方法會傳回系統中指定記號可用的記號總數。可用記號的淨數量是經過改寫的記號總數減去已燒錄的記號數目。
Ctx.ERC721Token.GetTotalMintedTokens() (map[string]interface{}, error)
參數:
傳回值:
  • 成功時,會對應提示的記號總計、數字資料類型以及成功訊息。發生錯誤時,含有錯誤訊息的非空值物件。
範例:

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 - 儲存在交易中的選擇性其他資訊。
傳回值:
  • 成功時,含有包含帳戶明細之成功訊息的承諾。發生錯誤時,含有錯誤訊息的非空值物件。
範例:

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~。發生錯誤時,含有錯誤訊息的非空值物件。
\ 範例:

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 特性,則被指派燒錄者角色的使用者同時也是記號的 minter (建立者) 可以燒錄記號。burn 方法是 ERC721Token 套裝軟體的一部分,您可以透過 Ctx 結構的接收者存取此套裝軟體。
Ctx.Token.Burn(tokenAsset interface{}) (interface{}, error)
參數:
  • tokenAsset - 要操作的記號資產參照。
傳回值:
  • 成功時,含有包含帳戶明細之成功訊息的承諾。發生錯誤時,含有錯誤訊息的非空值物件。
範例:

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

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