TypeScript Méthodes de verrouillage NFT ERC-721

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

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 de chaîne de blocs, tel qu'Ethereum ou Polygon.

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

Le flux standard d'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 attribuer le rôle vault à un utilisateur, le gestionnaire de coffre.
  • Appelez la méthode lockNFT pour verrouiller un jeton non fongible, spécifié par l'ID de 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 chaîne.
@Validator(yup.string(), yup.string(), yup.string())
public async addTokenSysRole(role: string, orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.addTokenSysRoleMember", "TOKEN");
    await this.Ctx.ERC721Auth.checkAuthorization('ERC721TOKEN.addRoleMember', 'TOKEN');
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    return await this.Ctx.ERC721Token.addTokenSysRoleMember(role, accountId);
}
Paramètres :
  • role: string : nom du rôle TokenSys à attribuer à l'utilisateur.
  • orgId: string : ID du fournisseur de services d'adhésion de l'utilisateur dans l'organisation en cours.
  • userId: string : nom d'utilisateur ou ID courriel de l'utilisateur.
Renvoie :
  • En cas de succès, 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 renvoie une valeur booléenne pour indiquer si un utilisateur dispose d'un rôle TokenSys spécifié. Cette méthode ne peut être appelée que par un élément Token Admin du code chaîne.
@GetMethod()
@Validator(yup.string(), yup.string(), yup.string())
public async isInTokenSysRole(orgId: string, userId: string, role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.isInTokenSysRole", "TOKEN", {orgId: orgId, userId: userId });
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    return await this.Ctx.ERC721Token.isInTokenSysRole(role, accountId);
}
Paramètres :
  • role: string : nom du rôle TokenSys à vérifier.
  • orgId: string : ID du fournisseur de services d'adhésion de l'utilisateur dans l'organisation en cours.
  • userId: string : nom d'utilisateur ou ID courriel de l'utilisateur.
Renvoie :
  • En cas de succès, 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 enlève 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 chaîne.
@Validator(yup.string(), yup.string(), yup.string())
public async removeTokenSysRole(role: string, orgId: string, userId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.removeTokenSysRoleMember", "TOKEN");
    const accountId = await this.Ctx.ERC721Account.generateAccountId(orgId, userId);
    return await this.Ctx.ERC721Token.removeTokenSysRoleMember(role, accountId);
}
Paramètres :
  • role: string : nom du rôle TokenSys à enlever.
  • orgId: string : ID du fournisseur de services d'adhésion de l'utilisateur dans l'organisation en cours.
  • userId: string : nom d'utilisateur ou ID courriel de l'utilisateur.
Renvoie :
  • En cas de succès, 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. Cette méthode ne peut être appelée que par un élément Token Admin du code chaîne.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async transferTokenSysRole(role: string, fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.transferTokenSysRole", "TOKEN");
    const fromAccountId = await this.Ctx.ERC721Account.generateAccountId(fromOrgId, fromUserId);
    const toAccountId = await this.Ctx.ERC721Account.generateAccountId(toOrgId, toUserId);
    return await this.Ctx.ERC721Token.transferTokenSysRole(role, fromAccountId, toAccountId);
}
Paramètres :
  • role: string : nom du rôle TokenSys à transférer.
  • fromOrgId: string : ID de fournisseur de services d'adhésion de l'utilisateur à partir duquel transférer le rôle TokenSys.
  • fromUserId: string : nom utilisateur ou ID de courriel de l'utilisateur à partir duquel transférer le rôle TokenSys.
  • toOrgId: string : ID de fournisseur de services d'adhésion de l'utilisateur vers lequel transférer le rôle TokenSys.
  • toUserId: string : nom utilisateur ou ID de courriel de l'utilisateur vers lequel transférer le rôle TokenSys.
Renvoie :
  • En cas de succès, 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 renvoie la liste de tous les ID de 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 chaîne.
@GetMethod()
@Validator(yup.string())
public async getAccountsByTokenSysRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.getAccountsByTokenSysRole", "TOKEN");
    return await this.Ctx.ERC721Token.getAccountsByTokenSysRole(role);
}
Paramètres :
  • role: string : nom du rôle TokenSys.
Renvoie :
  • En cas de succès, message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
    "accountIds": [
        "oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba"
    ]
}
getUsersByTokenSysRole
Cette méthode renvoie des informations utilisateur pour tous les utilisateurs dotés du rôle TokenSys indiqué. Cette méthode ne peut être appelée que par un élément Token Admin du code chaîne.
@GetMethod()
@Validator(yup.string())
public async getUsersByTokenSysRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.getUsersByTokenSysRole", "TOKEN");
    return await this.Ctx.ERC721Token.getUsersByTokenSysRole(role);
}
Paramètres :
  • role: string : nom du rôle TokenSys.
Renvoie :
  • En cas de succès, 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 coffre. Cette méthode ne peut être appelée que par le propriétaire du jeton.
@Validator(yup.string())
public async lockNFT(tokenId: string) {
    return await this.Ctx.ERC721Token.lockNFT(tokenId);
}
Paramètres :
  • tokenID: string : ID du jeton à verrouiller.
Renvoie :
  • En cas de succès, représentation JSON de l'objet de jeton.
Exemple de valeur renvoyée :
{
   "assetType":"otoken",
   "tokenId":"token1",
   "tokenName":"artcollection",
   "symbol":"ART",
   "tokenStandard":"erc721+",
   "tokenType":"nonfungible",
   "tokenUnit":"whole",
   "behaviors":[
      "indivisible",
      "singleton",
      "mintable",
      "transferable",
      "lockable",
      "burnable",
      "roles"
   ],
   "roles":{
      "minter_role_name":"minter"
   },
   "mintable":{
      "max_mint_quantity":20000
   },
   "createdBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
   "creationDate":"2023-10-20T10:26:29.000Z",
   "owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
   "isBurned":false,
   "isLocked":true,
   "tokenUri":"token1.example.com",
   "price":120,
   "on_sale_flag":false
}
isNFTLocked
Cette méthode renvoie une valeur booléenne pour indiquer si un jeton spécifié est verrouillé. Cette méthode ne peut être appelée que par le propriétaire du jeton, le gestionnaire de coffre (l'utilisateur doté du rôle TokenSys vault) ou une valeur Token Admin du code chaîne.
@GetMethod()
@Validator(yup.string())
public async isNFTLocked(tokenId: string) {
  try {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.isNFTLocked", "TOKEN", { tokenId });
  } catch(err) {
    const isCallerTokenSysRoleHolder = await this.Ctx.ERC721Token.isCallerTokenSysRoleHolder(TOKEN_SYS_ROLE_TYPE.VAULT);
    if(!isCallerTokenSysRoleHolder)
      throw err;
  }
  const isLocked = await this.Ctx.ERC721Token.isNFTLocked(tokenId);
  return {isLocked: isLocked}
}
Paramètres :
  • tokenID: string : ID du jeton.
Renvoie :
  • En cas de succès, message contenant les détails pertinents de l'opération.
Exemple de valeur renvoyée :
{
   "isNFTLocked":true
}
getAllLockedNFTs
Cette méthode renvoie la liste de tous les jetons non fongibles verrouillés. Cette méthode ne peut être appelée que par le gestionnaire de coffre (l'utilisateur doté du rôle TokenSys vault) ou par un élément Token Admin du code chaîne.
@GetMethod()
@Validator()
public async getAllLockedNFTs() {
  try {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.getAllLockedNFTs", "TOKEN");
  } catch(err) {
    const isCallerTokenSysRoleHolder = await this.Ctx.ERC721Token.isCallerTokenSysRoleHolder(TOKEN_SYS_ROLE_TYPE.VAULT);
    if(!isCallerTokenSysRoleHolder)
      throw err;
  }
 return this.Ctx.ERC721Token.getAllLockedNFTs();
}
Paramètres :
  • aucun
Renvoie :
  • En cas de succès, tableau des objets de jeton non fongibles verrouillés.
Exemple de valeur renvoyée :
[
   {
      "key":"token1",
      "valueJson":{
         "assetType":"otoken",
         "tokenId":"token1",
         "tokenName":"artcollection",
         "symbol":"ART",
         "tokenStandard":"erc721+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "lockable",
            "burnable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "createdBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "creationDate":"2023-10-20T10:26:29.000Z",
         "owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "isBurned":false,
         "isLocked":true,
         "tokenUri":"token1.example.com",
         "price":120,
         "on_sale_flag":false
      }
   }
]
getAllLockedNFTsByOrg
Cette méthode renvoie la liste de tous les jetons non fongibles verrouillés pour une organisation spécifiée et éventuellement un utilisateur spécifié. Cette méthode ne peut être appelée que par le gestionnaire de coffre (l'utilisateur doté du rôle TokenSys vault) ou par un élément Token Admin du code chaîne.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getLockedNFTsByOrg(orgId: string, userId?: string) {
  try {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.getLockedNFTsByOrg", "TOKEN");
  } catch(err) {
    const isCallerTokenSysRoleHolder = await this.Ctx.ERC721Token.isCallerTokenSysRoleHolder(TOKEN_SYS_ROLE_TYPE.VAULT);
    if(!isCallerTokenSysRoleHolder)
      throw err;
  }
  return await this.Ctx.ERC721Token.getLockedNFTsByOrg(orgId, userId);
}
Paramètres :
  • orgId: string : ID du fournisseur de services d'adhésion de l'utilisateur dans l'organisation en cours.
  • userId: string : nom utilisateur ou ID courriel de l'utilisateur (facultatif).
Renvoie :
  • En cas de succès, tableau des objets de jeton non fongibles verrouillés.
Exemple de valeur renvoyée :
[
   {
      "key":"token1",
      "valueJson":{
         "assetType":"otoken",
         "tokenId":"token1",
         "tokenName":"artcollection",
         "symbol":"ART",
         "tokenStandard":"erc721+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "singleton",
            "mintable",
            "transferable",
            "lockable",
            "burnable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "createdBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "creationDate":"2023-10-20T10:26:29.000Z",
         "owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "isBurned":false,
         "isLocked":true,
         "tokenUri":"token1.examplecom",
         "price":120,
         "on_sale_flag":false
      }
   }
]