ERC-1155 NFTロックのTypeScriptメソッド

ブロックチェーン・アプリケーション・ビルダーは、拡張ERC-1155標準を使用する非真菌トークンをロックするために使用できるメソッドを自動的に生成します。

ロックされたトークンは、他のユーザーに書き込みまたは転送できません。トークンの状態、所有者、履歴など、その他すべてのプロパティが保持されます。トークンをEthereumやPolygonなどの別のブロックチェーン・ネットワークに転送する場合は、NFTロック機能を使用できます。

NFTをロックする前に、ボールト・マネージャ・ロールをユーザーに割り当てる必要があります。ボールト・マネージャは、特別なタイプのロールであるTokenSysロールです。TokenSysロールは、バーナー、ミンター、公証人などのアセットベースのロールと、Token AdminOrg Adminなどの管理ロールとは異なります。現在、ブロックチェーン・アプリケーション・ビルダーはvault TokenSysロールをサポートしています。チェーンコードのvaultロールを持つ単一ユーザーは、チェーンコードのボールト・マネージャであり、ロックされたNFTを管理できます。

NFTロック機能を使用する一般的なフローは、次のステップに従います。
  • ロック可能な動作を持つ、fungible以外のトークンを作成します。
  • addTokenSysRoleメソッドを使用して、ユーザーにvaultロール(ボールト・マネージャ)を付与します。
  • lockNFTメソッドをコールして、トークンIDで指定された非真菌トークンをロックします。

TokenSysロール管理メソッド

addTokenSysRole
このメソッドは、指定されたユーザーにTokenSysロールを追加します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
@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);
}
パラメータ:
  • orgId: string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • userId: string - ユーザーのユーザー名または電子メールID。
  • role: string - ユーザーに提供するTokenSysロールの名前。
戻り値:
  • 成功した場合、操作の関連詳細を含むメッセージ。
戻り値の例:
{
    "msg": "Successfully added role 'vault' to Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
isInTokenSysRole
このメソッドは、ユーザーに指定されたTokenSysロールがあるかどうかを示すブール値を返します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
@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);
}
パラメータ:
  • orgId: string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • userId: string - ユーザーのユーザー名または電子メールID。
  • role: string - チェックするTokenSysロールの名前。
戻り値:
  • 成功した場合、操作の関連詳細を含むメッセージ。
戻り値の例:
{
    "result": true,
    "msg": "Account Id oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1) has vault role"
}
removeTokenSysRole
このメソッドは、指定されたユーザーからTokenSysロールを削除します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
@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);
}
パラメータ:
  • orgId: string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • userId: string - ユーザーのユーザー名または電子メールID。
  • role: string - 削除するTokenSysロールの名前。
戻り値:
  • 成功した場合、操作の関連詳細を含むメッセージ。
戻り値の例:
{
    "msg": "Successfully removed role 'vault' from Account Id: oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba (Org-Id: Org1MSP, User-Id: user1)"
}
transferTokenSysRole
このメソッドは、TokenSysロールをユーザーから別のユーザーに転送します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
@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);
}
パラメータ:
  • fromOrgId: string - TokenSysロールの転送元となるユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • fromUserId: string - TokenSysロールの転送元のユーザーのユーザー名または電子メールID。
  • toOrgId: string - TokenSysロールの転送先ユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • toUserId: string - TokenSysロールの転送先ユーザーのユーザー名または電子メールID。
  • role: string - 転送するTokenSysロールの名前。
戻り値:
  • 成功した場合、操作の関連詳細を含むメッセージ。
戻り値の例:
{
    "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
このメソッドは、指定されたTokenSysロールのすべてのアカウントIDのリストを返します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
@Validator(yup.string())
public async getAccountsByTokenSysRole(role: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getAccountsByTokenSysRole", "TOKEN");
  return await this.Ctx.ERC1155Token.getAccountsByTokenSysRole(role);
}
パラメータ:
  • role: string - TokenSysロールの名前。
戻り値:
  • 成功した場合、操作の関連詳細を含むメッセージ。
戻り値の例:
{
    "accountIds": [
        "oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba"
    ]
}
getUsersByTokenSysRole
このメソッドは、指定されたTokenSysロールを持つすべてのユーザーのユーザー情報を返します。このメソッドは、チェーンコードのToken Adminによってのみコールできます。
@Validator(yup.string())
public async getUsersByTokenSysRole(role: string) {
  await this.Ctx.ERC1155Auth.checkAuthorization("ERC1155TOKEN.getUsersByTokenSysRole", "TOKEN");
  return await this.Ctx.ERC1155Token.getUsersByTokenSysRole(role);
}
パラメータ:
  • role: string - TokenSysロールの名前。
戻り値:
  • 成功した場合、操作の関連詳細を含むメッセージ。
戻り値の例:
{
   "users":[
      {
         "accountId":"oaccount~bf07f584a94be44781e49d9101bfaf58c6fbbe77a4dfebdb83c874c2caf03eba",
         "orgId":"Org1MSP",
         "userId":"user1"
      }
   ]
}

NFTロック方法

lockNFT
このメソッドは、指定された非fungibleトークンをロックします。トークンをロックするには、ボールト・マネージャとして機能するTokenSys vaultロールを持つユーザーが必要です。このメソッドは、トークンの所有者によってのみコールできます。
@Validator(yup.string())
public async lockNFT(orgId: string, userId: string, tokenId: string) {
  return await this.Ctx.ERC1155Token.lockNFT(orgId, userId, tokenId);
}
パラメータ:
  • orgId: string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • userId: string - ユーザーのユーザー名または電子メールID (オプション)。
  • tokenID: string - ロックするトークンのID。
戻り値:
  • 成功した場合、トークン・オブジェクトのJSON表現。
戻り値の例:
{
   "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
このメソッドは、指定されたトークンがロックされているかどうかを示すブール値を返します。このメソッドは、トークン所有者、ボールト・マネージャ(TokenSys vaultロールを持つユーザー)、またはチェーンコードのToken Adminによってのみコールできます。
@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};
}
パラメータ:
  • tokenID: string - トークンのID。
戻り値:
  • 成功した場合、操作の関連詳細を含むメッセージ。
戻り値の例:
{
   "isNFTLocked":true
}
getAllLockedNFTs
このメソッドは、ロックされているすべての非真菌トークンのリストを返します。このメソッドは、ボールト・マネージャ(TokenSys vaultロールを持つユーザー)またはチェーンコードのToken Adminによってのみコールできます。
@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();
}
パラメータ:
  • なし
戻り値:
  • 成功すると、ロックされた非固定トークンオブジェクトの配列。
戻り値の例:
[
   {
      "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
このメソッドは、指定された組織およびオプションで指定されたユーザーについて、ロックされているすべての非真菌トークンのリストを返します。このメソッドは、ボールト・マネージャ(TokenSys vaultロールを持つユーザー)またはチェーンコードのToken Adminによってのみコールできます。
@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);
}
パラメータ:
  • orgId: string - 現在の組織内のユーザーのメンバーシップ・サービス・プロバイダ(MSP) ID。
  • userId: string - ユーザーのユーザー名または電子メールID (オプション)。
戻り値:
  • 成功すると、ロックされた非固定トークンオブジェクトの配列。
戻り値の例:
[
   {
      "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
      }
   }
]