TypeScript Methoden für ERC-721 NFT Locking

Blockchain App Builder generiert automatisch Methoden, mit denen Sie nicht fungible Token sperren können, die den erweiterten ERC-721-Standard verwenden.

Ein gesperrtes Token kann nicht gebrannt oder an andere Benutzer übertragen werden. Alle anderen Eigenschaften, wie Status, Eigentümer und Historie des Tokens, werden beibehalten. Sie können die NFT-Sperrfunktionalität verwenden, wenn Sie ein Token in ein anderes Blockchain-Netzwerk wie Ethereum oder Polygon übertragen.

Bevor Sie NFTs sperren können, müssen Sie einem Benutzer die Vault-Managerrolle zuweisen. Der Vault-Manager ist ein spezieller Rollentyp, eine TokenSys-Rolle. TokenSys-Rollen unterscheiden sich von Asset-basierten Rollen wie Burner, Minter und Notar sowie von administrativen Rollen wie Token Admin und Org Admin. Derzeit unterstützt Blockchain App Builder die Rolle vault TokenSys. Der einzelne Benutzer mit der Rolle vault für einen Chaincode ist der Vault-Manager des Chaincodes und kann gesperrte NFTs verwalten.

Der typische Ablauf für die Verwendung der NFT-Sperrfunktion führt diese Schritte aus.
  • Erstellen Sie ein nicht fungibles Token mit dem sperrbaren Verhalten.
  • Verwenden Sie die Methode addTokenSysRole, um einem Benutzer, dem Vault-Manager, die Rolle vault zu erteilen.
  • Rufen Sie die Methode lockNFT auf, um ein nicht fungibles Token zu sperren, das durch die Token-ID angegeben wird.

TokenSys Rollenverwaltungsmethoden

addTokenSysRole
Diese Methode fügt einem angegebenen Benutzer eine TokenSys-Rolle hinzu. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@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);
}
Parameter:
  • role: string: Der Name der Rolle TokenSys, die dem Benutzer zugewiesen werden soll.
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Meldung, die relevante Details des Vorgangs enthält.
Beispiel für den Rückgabewert:
{
    "msg": "Successfully added role 'vault' to Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
isInTokenSysRole
Diese Methode gibt einen booleschen Wert zurück, der angibt, ob ein Benutzer eine angegebene TokenSys-Rolle hat. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@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);
}
Parameter:
  • role: string: Der Name der zu prüfenden TokenSys-Rolle.
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Meldung, die relevante Details des Vorgangs enthält.
Beispiel für den Rückgabewert:
{
    "result": true,
    "msg": "Account Id oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1) has vault role"
}
removeTokenSysRole
Diese Methode entfernt eine TokenSys-Rolle von einem angegebenen Benutzer. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@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);
}
Parameter:
  • role: string: Der Name der zu entfernenden TokenSys-Rolle.
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers.
Rückgabewert:
  • Bei Erfolg eine Meldung, die relevante Details des Vorgangs enthält.
Beispiel für den Rückgabewert:
{
    "msg": "Successfully removed role 'vault' from Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
transferTokenSysRole
Diese Methode überträgt eine TokenSys-Rolle von einem Benutzer an einen anderen Benutzer. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@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);
}
Parameter:
  • role: string: Der Name der zu übertragenden TokenSys-Rolle.
  • fromOrgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers, von dem die Rolle TokenSys übertragen wird.
  • fromUserId: string: Der Benutzername oder die E-Mail-ID des Benutzers, von dem die Rolle TokenSys übertragen wird.
  • toOrgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers, an den die Rolle TokenSys übertragen wird.
  • toUserId: string: Der Benutzername oder die E-Mail-ID des Benutzers, an den die Rolle TokenSys übertragen wird.
Rückgabewert:
  • Bei Erfolg eine Meldung, die relevante Details des Vorgangs enthält.
Beispiel für den Rückgabewert:
{
    "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
Diese Methode gibt eine Liste aller Account-IDs für eine angegebene TokenSys-Rolle zurück. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@GetMethod()
@Validator(yup.string())
public async getAccountsByTokenSysRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.getAccountsByTokenSysRole", "TOKEN");
    return await this.Ctx.ERC721Token.getAccountsByTokenSysRole(role);
}
Parameter:
  • role: string: Der Name der TokenSys-Rolle.
Rückgabewert:
  • Bei Erfolg eine Meldung, die relevante Details des Vorgangs enthält.
Beispiel für den Rückgabewert:
{
    "accountIds": [
        "oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba"
    ]
}
getUsersByTokenSysRole
Diese Methode gibt Benutzerinformationen für alle Benutzer mit einer angegebenen TokenSys-Rolle zurück. Diese Methode kann nur von einem Token Admin des Chaincodes aufgerufen werden.
@GetMethod()
@Validator(yup.string())
public async getUsersByTokenSysRole(role: string) {
    await this.Ctx.ERC721Auth.checkAuthorization("ERC721TOKEN.getUsersByTokenSysRole", "TOKEN");
    return await this.Ctx.ERC721Token.getUsersByTokenSysRole(role);
}
Parameter:
  • role: string: Der Name der TokenSys-Rolle.
Rückgabewert:
  • Bei Erfolg eine Meldung, die relevante Details des Vorgangs enthält.
Beispiel für den Rückgabewert:
 "users":[
      {
         "accountId":"oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba",
         "orgId":"Org1MSP",
         "userId":"user1"
      }
   ]
}

NFT-Sperrmethoden

lockNFT
Diese Methode sperrt ein angegebenes nicht fungibles Token. Um ein Token zu sperren, muss ein Benutzer mit der Rolle TokenSys vault vorhanden sein, der als Vault-Manager fungiert. Diese Methode kann nur vom Eigentümer des Tokens aufgerufen werden.
@Validator(yup.string())
public async lockNFT(tokenId: string) {
    return await this.Ctx.ERC721Token.lockNFT(tokenId);
}
Parameter:
  • tokenID: string: Die ID des zu sperrenden Tokens.
Rückgabewert:
  • Bei Erfolg eine JSON-Darstellung des Tokenobjekts.
Beispiel für den Rückgabewert:
{
   "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
Diese Methode gibt einen booleschen Wert zurück, der angibt, ob ein angegebenes Token gesperrt ist. Diese Methode kann nur vom Tokeneigentümer, vom Vault-Manager (dem Benutzer mit der Rolle TokenSys vault) oder von einem Token Admin des Chaincodes aufgerufen werden.
@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}
}
Parameter:
  • tokenID: string: Die ID des Tokens.
Rückgabewert:
  • Bei Erfolg eine Meldung, die relevante Details des Vorgangs enthält.
Beispiel für den Rückgabewert:
{
   "isNFTLocked":true
}
getAllLockedNFTs
Diese Methode gibt eine Liste aller gesperrten nicht fungiblen Token zurück. Diese Methode kann nur vom Vault-Manager (dem Benutzer mit der Rolle TokenSys vault) oder einem Token Admin des Chaincodes aufgerufen werden.
@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();
}
Parameter:
  • Kein Wert
Rückgabewert:
  • Bei Erfolg ein Array der gesperrten nicht fungiblen Tokenobjekte.
Beispiel für den Rückgabewert:
[
   {
      "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
Diese Methode gibt eine Liste aller gesperrten nicht fungiblen Token für eine angegebene Organisation und optional einen angegebenen Benutzer zurück. Diese Methode kann nur vom Vault-Manager (dem Benutzer mit der Rolle TokenSys vault) oder einem Token Admin des Chaincodes aufgerufen werden.
@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);
}
Parameter:
  • orgId: string: Die Mitgliedschaftsserviceprovider-(MSP-)ID des Benutzers in der aktuellen Organisation.
  • userId: string: Der Benutzername oder die E-Mail-ID des Benutzers (optional).
Rückgabewert:
  • Bei Erfolg ein Array der gesperrten nicht fungiblen Tokenobjekte.
Beispiel für den Rückgabewert:
[
   {
      "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
      }
   }
]