Go Méthodes pour ERC-721 NFT Verrouillage

Blockchain App Builder génère automatiquement des méthodes que vous pouvez utiliser pour verrouiller les jetons non fongibles qui utilisent la norme ERC-721 étendue.

Un jeton verrouillé ne peut pas être gravé ou transféré à d'autres utilisateurs. Toutes les autres propriétés, telles que l'état, le propriétaire et l'historique du jeton, sont conservées. Vous pouvez utiliser la fonctionnalité de verrouillage NFT lors du transfert d'un jeton vers un autre réseau blockchain, tel qu'Ethereum ou Polygon.

Avant de verrouiller les fichiers NFT, vous devez affecter le rôle de gestionnaire de chambre forte à un utilisateur. Le gestionnaire de chambre forte est un type de rôle spécial, un rôle TokenSys. Les rôles TokenSys sont différents des rôles basés sur les ressources, tels que le brûleur, le minter et le notaire, et des rôles d'administration, tels que Token Admin et Org Admin. Actuellement, Blockchain App Builder prend en charge le rôle vault TokenSys. L'utilisateur unique qui a le rôle vault pour un code de chaîne est le gestionnaire de chambre forte du code de chaîne et peut gérer les transactions NFT verrouillées.

Le flux typique pour l'utilisation de la fonctionnalité de verrouillage NFT suit ces étapes.
  • Créez un jeton non fongible ayant le comportement verrouillable.
  • Utilisez la méthode AddTokenSysRole pour accorder le rôle vault à un utilisateur, le gestionnaire de chambres fortes.
  • Appelez la méthode LockNFT pour verrouiller un jeton non fongible, spécifié par l'ID jeton.

TokenSys Méthodes de gestion des rôles

AddTokenSysRole
Cette méthode ajoute un rôle TokenSys à un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
func (t *Controller) AddTokenSysRole(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.AddTokenSysRole", "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.AddTokenSysRoleMember(role, accountId)
}
Paramètres :
  • role: string - Nom du rôle TokenSys à donner à l'utilisateur.
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de succès, un message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
    "msg": "Successfully added role 'vault' to Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
IsInTokenSysRole
Cette méthode retourne une valeur booléenne pour indiquer si un utilisateur a un rôle TokenSys spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
func (t *Controller) IsInTokenSysRole(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.IsInTokenSysRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.ERC721Token.IsInTokenSysRoleMember(role, accountId)
}
Paramètres :
  • role: string - Nom du rôle TokenSys à vérifier.
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de succès, un message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
    "result": true,
    "msg": "Account Id oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1) has vault role"
}
RemoveTokenSysRole
Cette méthode supprime un rôle TokenSys d'un utilisateur spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
func (t *Controller) RemoveTokenSysRole(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.RemoveTokenSysRole", "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.RemoveTokenSysRoleMember(role, accountId)
}
Paramètres :
  • role: string - Nom du rôle TokenSys à supprimer.
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur.
Retourne :
  • En cas de succès, un message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
    "msg": "Successfully removed role 'vault' from Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
TransferTokenSysRole
Cette méthode transfère un rôle TokenSys d'un utilisateur à un autre utilisateur. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
func (t *Controller) TransferTokenSysRole(role string, fromOrgId string, fromUserId string, toOrgId string, toUserId string) (interface{}, error) {
    auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.TransferTokenSysRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller %s", err.Error())
    }
    fromAccountId, err := t.Ctx.ERC721Account.GenerateAccountId(fromOrgId, fromUserId)
    if err != nil {
        return nil, fmt.Errorf("error in TransferTokenSysRole. Error: %s", err)
    }
    toAccountId, err := t.Ctx.ERC721Account.GenerateAccountId(toOrgId, toUserId)
    if err != nil {
        return nil, fmt.Errorf("error in TransferTokenSysRole. Error: %s", err)
    }
    return t.Ctx.ERC721Token.TransferTokenSysRole(role, fromAccountId, toAccountId)
}
Paramètres :
  • role: string - Nom du rôle TokenSys à transférer.
  • fromOrgId: string - ID fournisseur de services d'adhésion de l'utilisateur à partir duquel transférer le rôle TokenSys.
  • fromUserId: string - Nom d'utilisateur ou ID courriel de l'utilisateur à partir duquel transférer le rôle TokenSys.
  • toOrgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur vers lequel transférer le rôle TokenSys.
  • toUserId: string - Nom d'utilisateur ou ID courriel de l'utilisateur vers lequel transférer le rôle TokenSys.
Retourne :
  • En cas de succès, un message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
    "msg": "Successfully transfered role 'vault' from Account Id: ouaccount~f4e311528f03fffa7810753d643f66289ff6c9080fcf839902f28a1d3aff1789 (Org-Id: Org1MSP, User-Id: user1) to Account Id: ouaccount~ae5be2ae8f98d6d32f5d02b43877d987114e7937c7bacbc30390dcce09996a19 (Org-Id: Org1MSP, User-Id: user2)"
}
GetAccountsByTokenSysRole
Cette méthode retourne une liste de tous les ID compte pour un rôle TokenSys spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
func (t *Controller) GetAccountsByTokenSysRole(role string) (interface{}, error) {
    auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetAccountsByTokenSysRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.ERC721Token.GetAccountsByTokenSysRole(role)
}
Paramètres :
  • role: string - Nom du rôle TokenSys.
Retourne :
  • En cas de succès, un message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
    "accountIds": [
        "oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba"
    ]
}
GetUsersByTokenSysRole
Cette méthode retourne des informations sur l'utilisateur pour tous les utilisateurs ayant un rôle TokenSys spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code de chaîne.
func (t *Controller) GetUsersByTokenSysRole(role string) (interface{}, error) {
    auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetUsersByTokenSysRole", "TOKEN")
    if err != nil && !auth {
        return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
    }
    return t.Ctx.ERC721Token.GetUsersByTokenSysRole(role)
}
Paramètres :
  • role: string - Nom du rôle TokenSys.
Retourne :
  • En cas de succès, un message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
   "Users":[
      {
         "accountId":"oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba",
         "orgId":"Org1MSP",
         "userId":"user1"
      }
   ]
}

Méthodes de verrouillage NFT

LockNFT
Cette méthode verrouille un jeton non fongible spécifié. Pour verrouiller un jeton, un utilisateur doté du rôle TokenSys vault doit agir en tant que gestionnaire de chambres fortes. Cette méthode ne peut être appelée que par le propriétaire du jeton.
func (t *Controller) LockNFT(tokenId string) (interface{}, error) {
    return t.Ctx.ERC721Token.LockNFT(tokenId)
}
Paramètres :
  • tokenID: string - ID du jeton à verrouiller.
Retourne :
  • En cas de succès, une représentation JSON de l'objet de jeton.
Exemple de valeur renvoyée :
{
   "AssetType":"otoken",
   "Behavior":[
      "indivisible",
      "singleton",
      "mintable",
      "transferable",
      "lockable",
      "burnable",
      "roles"
   ],
   "CreatedBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
   "CreationDate":"2023-10-20T12:39:50Z",
   "IsBurned":false,
   "IsLocked":true,
   "Mintable":{
      "Max_mint_quantity":20000
   },
   "On_sale_flag":false,
   "Owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
   "Price":120,
   "Roles":{
      "minter_role_name":"minter"
   },
   "Symbol":"ART",
   "TokenDesc":"",
   "TokenId":"token1",
   "TokenMetadata":{
      "Description":"",
      "Image":"",
      "Painter_name":"",
      "Painting_name":""
   },
   "TokenName":"artcollection",
   "TokenStandard":"erc721+",
   "TokenType":"nonfungible",
   "TokenUnit":"whole",
   "TokenUri":"token1.example.com"
}
IsNFTLocked
Cette méthode retourne une valeur booléenne pour indiquer si un jeton spécifié est verrouillé. Cette méthode ne peut être appelée que par le responsable du jeton, le gestionnaire de chambres fortes (utilisateur doté du rôle TokenSys vault) ou une chaîne Token Admin du code de chaîne.
func (t *Controller) IsNFTLocked(tokenId string) (interface{}, error) {
    auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.IsNFTLocked", "TOKEN", map[string]string{"tokenId": tokenId})
    if err != nil && !auth {
        isCallerTokenSysRoleHolder, error := t.Ctx.ERC721Token.IsCallerTokenSysRoleHolder(constants.Vault)
        if error != nil {
            return nil, error
        }
        if !isCallerTokenSysRoleHolder {
            return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
        }
    }
    return t.Ctx.ERC721Token.IsNFTLocked(tokenId)
}
Paramètres :
  • tokenID: string - ID du jeton.
Retourne :
  • En cas de succès, un message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
   "isNFTLocked":true
}
GetAllLockedNFTs
Cette méthode retourne une liste de tous les jetons non fongibles verrouillés. Cette méthode ne peut être appelée que par le gestionnaire de chambres fortes (utilisateur doté du rôle TokenSys vault) ou par un code de chaîne Token Admin.
func (t *Controller) GetAllLockedNFTs() (interface{}, error) {
    auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetAllLockedNFTs", "TOKEN")
    if err != nil && !auth {
        isCallerTokenSysRoleHolder, error := t.Ctx.ERC721Token.IsCallerTokenSysRoleHolder(constants.Vault)
        if error != nil {
            return nil, error
        }
        if !isCallerTokenSysRoleHolder {
            return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
        }
    }
    return t.Ctx.ERC721Token.GetAllLockedNFTs()
}
Paramètres :
  • Aucune
Retourne :
  • En cas de succès, un tableau des objets de jeton verrouillés non fongibles.
Exemple de valeur renvoyée :
[
   {
      "key":"token1",
      "valueJson":{
         "AssetType":"otoken",
         "Behavior":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "lockable",
            "burnable",
            "roles"
         ],
         "CreatedBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "CreationDate":"2023-10-20T12:39:50Z",
         "IsBurned":false,
         "IsLocked":true,
         "Mintable":{
            "Max_mint_quantity":20000
         },
         "On_sale_flag":false,
         "Owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "Price":120,
         "Roles":{
            "minter_role_name":"minter"
         },
         "Symbol":"ART",
         "TokenDesc":"",
         "TokenId":"token1",
         "TokenMetadata":{
            "Description":"",
            "Image":"",
            "Painter_name":"",
            "Painting_name":""
         },
         "TokenName":"artcollection",
         "TokenStandard":"erc721+",
         "TokenType":"nonfungible",
         "TokenUnit":"whole",
         "TokenUri":"token1.example.com"
      }
   }
]
GetAllLockedNFTsByOrg
Cette méthode retourne une liste de tous les jetons non fongibles verrouillés pour une organisation spécifiée et facultativement un utilisateur spécifié. Cette méthode ne peut être appelée que par le gestionnaire de chambres fortes (utilisateur doté du rôle TokenSys vault) ou par un code de chaîne Token Admin.
func (t *Controller) GetLockedNFTsByOrg(orgId string, userId ...string) (interface{}, error) {
    auth, err := t.Ctx.ERC721Auth.CheckAuthorization("ERC721TOKEN.GetLockedNFTsByOrg", "TOKEN")
    if err != nil && !auth {
        isCallerTokenSysRoleHolder, error := t.Ctx.ERC721Token.IsCallerTokenSysRoleHolder(constants.Vault)
        if error != nil {
            return nil, error
        }
        if !isCallerTokenSysRoleHolder {
            return nil, fmt.Errorf("error in authorizing the caller  %s", err.Error())
        }
    }
    return t.Ctx.ERC721Token.GetLockedNFTsByOrg(orgId, userId...)
}
Paramètres :
  • orgId: string - ID fournisseur de services d'adhésion (MSP) de l'utilisateur dans l'organisation courante.
  • userId: string - Nom d'utilisateur ou ID courriel de l'utilisateur (facultatif).
Retourne :
  • En cas de succès, un tableau des objets de jeton verrouillés non fongibles.
Exemple de valeur renvoyée :
[
   {
      "key":"token1",
      "valueJson":{
         "AssetType":"otoken",
         "Behavior":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "lockable",
            "burnable",
            "roles"
         ],
         "CreatedBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "CreationDate":"2023-10-20T12:39:50Z",
         "IsBurned":false,
         "IsLocked":true,
         "Mintable":{
            "Max_mint_quantity":20000
         },
         "On_sale_flag":false,
         "Owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "Price":120,
         "Roles":{
            "minter_role_name":"minter"
         },
         "Symbol":"ART",
         "TokenDesc":"",
         "TokenId":"token1",
         "TokenMetadata":{
            "Description":"",
            "Image":"",
            "Painter_name":"",
            "Painting_name":""
         },
         "TokenName":"artcollection",
         "TokenStandard":"erc721+",
         "TokenType":"nonfungible",
         "TokenUnit":"whole",
         "TokenUri":"token1.example.com"
      }
   }
]