TypeScript Métodos de bloqueo NFT ERC-1155

Blockchain App Builder genera automáticamente métodos que puede usar para bloquear tokens no fungibles que usan el estándar ERC-1155 extendido.

Un token bloqueado no se puede grabar ni transferir a otros usuarios. Se conservan todas las demás propiedades, como el estado, el propietario y el historial del token. Puede utilizar la funcionalidad de bloqueo NFT al transferir un token a otra red de cadena de bloques, como Ethereum o Polygon.

Para poder bloquear NFT, debe asignar el rol de gestor de almacén a un usuario. El gestor de almacén es un tipo especial de rol, un rol TokenSys. Los roles TokenSys son diferentes de los roles basados en activos, como quemador, moderador y notario, y de los roles administrativos, como Token Admin y Org Admin. Actualmente, Blockchain App Builder soporta el rol vault TokenSys. El único usuario que tiene el rol vault para un código de cadenas es el gestor de almacén del código de cadenas y puede gestionar los NFT bloqueados.

El flujo típico para utilizar la funcionalidad de bloqueo NFT sigue estos pasos.
  • Cree un token no fungible que tenga el comportamiento de bloqueo.
  • Utilice el método addTokenSysRole para asignar el rol vault a un usuario, el gestor de almacenes.
  • Llame al método lockNFT para bloquear un token no fungible, especificado por el ID de token.

TokenSys Métodos de gestión de roles

addTokenSysRole
Este método agrega un rol TokenSys a un usuario especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@Validator(yup.string(), yup.string(), yup.string())
public async addTokenSysRole(orgId: string, userId: string, role: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.addTokenSysRoleMember", "TOKEN");
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId);
  return await this.Ctx.ERC1155Token.addTokenSysRoleMember(role, userAccountId);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
  • role: string: nombre del rol TokenSys que se debe proporcionar al usuario.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que contiene detalles relevantes de la operación.
Ejemplo de Valor de Devolución:
{
    "msg": "Successfully added role 'vault' to Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
isInTokenSysRole
Este método devuelve un valor booleano para indicar si un usuario tiene un rol TokenSys especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@Validator(yup.string(), yup.string(), yup.string())
public async isInTokenSysRole(orgId: string, userId: string, role: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.isInTokenSysRole", "TOKEN", {orgId: orgId, userId: userId });
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId);
  return await this.Ctx.ERC1155Token.isInTokenSysRole(role, userAccountId);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
  • role: string: nombre del rol TokenSys que se va a comprobar.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que contiene detalles relevantes de la operación.
Ejemplo de Valor de Devolución:
{
    "result": true,
    "msg": "Account Id oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1) has vault role"
}
removeTokenSysRole
Este método elimina un rol TokenSys de un usuario especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@Validator(yup.string(), yup.string(), yup.string())
public async removeTokenSysRole(orgId: string, userId: string, role: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.removeTokenSysRoleMember", "TOKEN");
  const userAccountId = this.Ctx.ERC1155Account.generateAccountId(orgId, userId);
  return await this.Ctx.ERC1155Token.removeTokenSysRoleMember(role, userAccountId);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario.
  • role: string: nombre del rol TokenSys que se va a eliminar.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que contiene detalles relevantes de la operación.
Ejemplo de Valor de Devolución:
{
    "msg": "Successfully removed role 'vault' from Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
transferTokenSysRole
Este método transfiere un rol TokenSys de un usuario a otro usuario. Este método solo puede ser llamado por Token Admin del código de cadenas.
@Validator(yup.string(), yup.string(), yup.string(), yup.string(), yup.string())
public async transferTokenSysRole(fromOrgId: string, fromUserId: string, toOrgId: string, toUserId: string, role: string) {
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.transferTokenSysRole", "TOKEN");
    const fromUserAccountId = await this.Ctx.ERC1155Account.generateAccountId(fromOrgId, fromUserId);
    const toUserAccountId = await this.Ctx.ERC1155Account.generateAccountId(toOrgId, toUserId);
    return await this.Ctx.ERC1155Token.transferTokenSysRole(role, fromUserAccountId, toUserAccountId);
}
Parámetros:
  • fromOrgId: string: ID del proveedor de servicios de miembros (MSP) del usuario desde el que se transferirá el rol TokenSys.
  • fromUserId: string: nombre de usuario o ID de correo electrónico del usuario desde el que se transferirá el rol TokenSys.
  • toOrgId: string: ID del proveedor de servicios de miembros (MSP) del usuario al que se va a transferir el rol TokenSys.
  • toUserId: string: nombre de usuario o ID de correo electrónico del usuario al que se va a transferir el rol TokenSys.
  • role: string: nombre del rol TokenSys que se va a transferir.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que contiene detalles relevantes de la operación.
Ejemplo de Valor de Devolución:
{
    "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
Este método devuelve una lista de todos los ID de cuenta para un rol TokenSys especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@Validator(yup.string())
public async getAccountsByTokenSysRole(role: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getAccountsByTokenSysRole", "TOKEN");
  return await this.Ctx.ERC1155Token.getAccountsByTokenSysRole(role);
}
Parámetros:
  • role: string: nombre del rol TokenSys.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que contiene detalles relevantes de la operación.
Ejemplo de Valor de Devolución:
{
    "accountIds": [
        "oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba"
    ]
}
getUsersByTokenSysRole
Este método devuelve información de usuario para todos los usuarios con un rol TokenSys especificado. Este método solo puede ser llamado por Token Admin del código de cadenas.
@Validator(yup.string())
public async getUsersByTokenSysRole(role: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getUsersByTokenSysRole", "TOKEN");
  return await this.Ctx.ERC1155Token.getUsersByTokenSysRole(role);
}
Parámetros:
  • role: string: nombre del rol TokenSys.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que contiene detalles relevantes de la operación.
Ejemplo de Valor de Devolución:
{
   "users":[
      {
         "accountId":"oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba",
         "orgId":"Org1MSP",
         "userId":"user1"
      }
   ]
}

Métodos de bloqueo de NFT

lockNFT
Este método bloquea un token no fungible especificado. Para bloquear un token, debe haber un usuario con el rol TokenSys vault, que actúe como gestor de almacén. Este método solo puede ser llamado por el propietario del token.
@Validator(yup.string())
public async lockNFT(orgId: string, userId: string, tokenId: string) {
  return await this.Ctx.ERC1155Token.lockNFT(orgId, userId, tokenId);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario (opcional).
  • tokenID: string: ID del token que se va a bloquear.
Devuelve:
  • Si se realiza correctamente, una representación JSON del objeto de token.
Ejemplo de Valor de Devolución:
{
   "assetType":"otoken",
   "tokenId":"token1",
   "tokenName":"artcollection",
   "tokenStandard":"erc1155+",
   "tokenType":"nonfungible",
   "tokenUnit":"whole",
   "behaviors":[
      "indivisible",
      "mintable",
      "transferable",
      "burnable",
      "lockable",
      "roles"
   ],
   "roles":{
      "minter_role_name":"minter"
   },
   "mintable":{
      "max_mint_quantity":20000
   },
   "quantity":1,
   "createdBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
   "creationDate":"2023-10-20T09:16:29.000Z",
   "owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
   "isBurned":false,
   "isLocked":true,
   "tokenUri":"token1.example.com",
   "price":120,
   "on_sale_flag":false
}
isNFTLocked
Este método devuelve un valor booleano para indicar si un token especificado está bloqueado. Este método solo lo puede llamar el propietario del token, el gestor de almacenes (el usuario con el rol TokenSys vault) o un Token Admin del código de cadenas.
@GetMethod()
@Validator(yup.string())
public async isNFTLocked(tokenId: string) {
  try {
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.isNFTLocked", "TOKEN", { tokenId });
  } catch(err) {
    const isCallerTokenSysRoleHolder = await this.Ctx.ERC1155Token.isCallerTokenSysRoleHolder(TOKEN_SYS_ROLE_TYPE.VAULT);
    if(!isCallerTokenSysRoleHolder)
      throw err;
  }
  const isNFTLocked = await this.Ctx.ERC1155Token.isNFTLocked(tokenId);
  return {isNFTLocked};
}
Parámetros:
  • tokenID: string: ID del token.
Devuelve:
  • Cuando se realiza correctamente, un mensaje que contiene detalles relevantes de la operación.
Ejemplo de Valor de Devolución:
{
   "isNFTLocked":true
}
getAllLockedNFTs
Este método devuelve una lista de todos los tokens no fungibles bloqueados. Este método solo lo puede llamar el gestor de almacenes (el usuario con el rol TokenSys vault) o un Token Admin del código de cadenas.
@GetMethod()
@Validator()
public async getAllLockedNFTs() {
  try {
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getAllLockedNFTs", "TOKEN");
  } catch(err) {
    const isCallerTokenSysRoleHolder = await this.Ctx.ERC1155Token.isCallerTokenSysRoleHolder(TOKEN_SYS_ROLE_TYPE.VAULT);
    if(!isCallerTokenSysRoleHolder)
      throw err;
  }
  return this.Ctx.ERC1155Token.getAllLockedNFTs();
}
Parámetros:
  • ninguno
Devuelve:
  • Si se realiza correctamente, una matriz de los objetos de token no fungibles bloqueados.
Ejemplo de Valor de Devolución:
[
   {
      "key":"token1",
      "valueJson":{
         "assetType":"otoken",
         "tokenId":"token1",
         "tokenName":"artcollection",
         "tokenStandard":"erc1155+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "mintable",
            "transferable",
            "burnable",
            "lockable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "quantity":1,
         "createdBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "creationDate":"2023-10-20T09:16:29.000Z",
         "owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "isBurned":false,
         "isLocked":true,
         "tokenUri":"token1.example.com",
         "price":120,
         "on_sale_flag":false
      }
   }
]
getAllLockedNFTsByOrg
Este método devuelve una lista de todos los tokens no fungibles bloqueados para una organización especificada y, opcionalmente, un usuario especificado. Este método solo lo puede llamar el gestor de almacenes (el usuario con el rol TokenSys vault) o un Token Admin del código de cadenas.
@GetMethod()
@Validator(yup.string(), yup.string())
public async getLockedNFTsByOrg(orgId: string, userId?: string) {
  try {
    await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getLockedNFTsByOrg", "TOKEN");
  } catch(err) {
    const isCallerTokenSysRoleHolder = await this.Ctx.ERC1155Token.isCallerTokenSysRoleHolder(TOKEN_SYS_ROLE_TYPE.VAULT);
    if(!isCallerTokenSysRoleHolder)
      throw err;
  }
  return await this.Ctx.ERC1155Token.getLockedNFTsByOrg(orgId, userId);
}
Parámetros:
  • orgId: string: ID del proveedor de servicios de afiliación (MSP) del usuario en la organización actual.
  • userId: string: nombre de usuario o ID de correo electrónico del usuario (opcional).
Devuelve:
  • Si se realiza correctamente, una matriz de los objetos de token no fungibles bloqueados.
Ejemplo de Valor de Devolución:
[
   {
      "key":"token1",
      "valueJson":{
         "assetType":"otoken",
         "tokenId":"token1",
         "tokenName":"artcollection",
         "tokenStandard":"erc1155+",
         "tokenType":"nonfungible",
         "tokenUnit":"whole",
         "behaviors":[
            "indivisible",
            "mintable",
            "transferable",
            "burnable",
            "lockable",
            "roles"
         ],
         "roles":{
            "minter_role_name":"minter"
         },
         "mintable":{
            "max_mint_quantity":20000
         },
         "quantity":1,
         "createdBy":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "creationDate":"2023-10-20T09:16:29.000Z",
         "owner":"oaccount~208e3345ac84b4849f0d2648b2f2f018019886a1230f99304ebff1b6a7733463",
         "isBurned":false,
         "isLocked":true,
         "tokenUri":"token1.example.com",
         "price":120,
         "on_sale_flag":false
      }
   }
]