Arquivo de Especificação de Entrada para ERC-1155

O comando de inicialização do Blockchain App Builder lê o arquivo de especificação de entrada e gera o projeto com várias ferramentas para ajudar no processo de desenvolvimento de chaincode.

Você pode definir ativos padrão e ativos de token fungíveis e não fungíveis com base no padrão ERC-1155 no mesmo arquivo de especificação. Não é possível definir ativos de token com base em mais de um padrão no mesmo arquivo de especificação.

Para obter informações sobre como incluir ativos padrão no arquivo de especificação, consulte Arquivo de Especificação de Entrada.

Os seguintes arquivos de especificação de amostra para ativos de token ERC-1155 estão disponíveis no pacote Blockchain App Builder:
  • NFTArtCollectionMarketplacewithERC1155-TypeScript.yml
  • FractionalNFTinRealEstate-TypeScript.yml

Além das propriedades e seções padrão, os ativos de token suportam as seções behavior e anatomy no arquivo de especificação. Além disso, os ativos de token não fungíveis suportam a seção metadata. O exemplo a seguir mostra a estrutura de um arquivo de especificação para dois ativos de token ERC-1155, um token não fungível inteiro e um token fungível fracionário:

assets:
    - name: ArtCollection #Asset name
      type: token #Asset type
      standard: erc1155+   # Token standard
      
      anatomy:
          type: nonfungible # Token type
          unit: whole  #Token unit
      
      behavior:
        - indivisible                
        - mintable:                   
            max_mint_quantity: 20000
        - transferable                
        - burnable
        - lockable
        - roles:
            minter_role_name: minter
      
      properties:  # Custom asset attributes for non-fungible token 
          
          - name: price # Custom asset attribute to set the price of a non-fungible token in the marketplace
            type: number
          
          - name: on_sale_flag # Custom asset attribute maintains non-fungible token selling status in the marketplace
            type: boolean
      
      metadata: #  Use this section to maintain the metadata on the blockchain. Only the user creating the non-fungible token can assign metadata attribute values, which cannot be updated later.
          
          - name: painting_name
            type: string
          
          - name: description
            type: string
          
          - name: image
            type: string
          
          - name: painter_name
            type: string

    - name: Loyalty # Asset name
      type: token  # Asset type
      standard: erc1155+   # Token standard

      anatomy: 
          type: fungible # Token type
          unit: fractional # Token unit

      behavior: # Token behaviors
          - divisible: 
                decimal: 2  
          - mintable: 
                max_mint_quantity: 10000 
          - transferable
          - burnable 
          - roles: 
                minter_role_name: minter 

      properties:
          - name: currency_name # Custom attribute to represent the token in a specific currency.
            type: string

          - name: token_to_currency_ratio # Custom attribute to specify the token to currency ratio.
            type: number

O exemplo a seguir mostra a estrutura de um arquivo de especificação para um token não fungível fracionário:

- name: RealEstateProperty #Asset name
      type: token #Asset type
      standard: erc1155+ # Token standard
      
      anatomy:
          type: nonfungible # Token type
          unit: fractional #Token unit
      
      behavior:
        - divisible:
        - mintable:
        - transferable
        - roles:
            minter_role_name: minter
      
      properties: # Custom asset attributes for non-fungible token.
          
          - name: propertySellingPrice # Custom asset attribute to set the real estate property selling price
            type: number
 
          - name: propertyRentingPrice # Custom asset attribute maintains the renting amount for the real estate property
            type: number
            
      metadata: # To maintain the metadata on-chain, this tag will be used. Users won't be able to update the metadata attribute values.
          
          - name: propertyType
            type: string
 
          - name: propertyName
            type: string
 
          - name: propertyAddress
            type: string
          
          - name: propertyImage
            type: string

Tabela 7-7 Descrições e Exemplos de Parâmetros para um Arquivo de Especificação de Token ERC-1155

Entrada Descrição Exemplos
type:

Você deve especificar type: token na seção assets.

assets:
    - name: ArtCollection #Asset name
      type: token #Asset type
standard: A propriedade standard é obrigatória para tokens ERC-1155. Ele representa o padrão de token a ser seguido durante a geração do chaincode.
standard: erc1155+ # Token standard
anatomy:
A seção anatomy tem dois parâmetros obrigatórios:
  • type: nonfungible ou type: fungible

    Um token não fungível é exclusivo.

  • unit: whole ou unit: fractional

    Um token inteiro não pode ser subdividido em unidades fracionárias menores. Um token fracionário pode ser subdividido em unidades menores, ou compartilhamentos, com base em um número especificado de casas decimais.

anatomy:
          type: nonfungible # Token type
          unit: whole #Token unit
behavior: Esta seção descreve os recursos e as restrições do token. Os comportamentos mintable e transferable são obrigatórios para todos os tokens. O comportamento indivisible é obrigatório para tokens não fungíveis inteiros.
  • indivisible: Esse comportamento suporta uma restrição para que tokens inteiros não possam ser subdivididos em frações.
  • divisible: Este comportamento descreve como os tokens podem ser subdivididos. O parâmetro decimal especifica o número de casas decimais que podem ser usadas. A menor fração possível com o número de casas decimais é a menor unidade do token que pode ser pertencente. Se o parâmetro decimal não for especificado, o padrão será zero casas decimais.
  • mintable: Esse comportamento obrigatório suporta a criação de novas instâncias de token. O parâmetro max_mint_quantity opcional especifica o número total de tokens que podem ser cunhados. Se você não especificar o parâmetro max_mint_quantity, qualquer número de tokens poderá ser cunhado.
  • transferable: Esse comportamento obrigatório suporta a transferência de propriedade de tokens.
  • burnable: Esse comportamento suporta a desativação ou gravação de tokens. A queima não exclui um token, mas o coloca em um estado permanente em que não pode ser usado. A queima não é reversível.
  • lockable: Esse comportamento é opcional e só é suportado por tokens não fungíveis. Esse comportamento permite que o proprietário do token bloqueie um token não fungível. Um token bloqueado não pode ser transferido ou gravado por nenhum outro usuário.
  • roles: Esse comportamento restringe comportamentos de token a usuários com atribuições específicas. No momento, duas atribuições estão disponíveis: minter_role_name e burner_role_name. Se você não especificar funções, qualquer usuário poderá agir como um mineiro ou queimador. Por exemplo, se a função de gravador não for especificada, qualquer usuário da conta terá implicitamente a função de gravador. Se a função de gravador for especificada, durante o processo de configuração do token, o usuário Token Admin deverá atribuir a função de gravador a outros usuários explicitamente.
behavior:
        - indivisible
        - mintable:
            max_mint_quantity: 20000
        - transferable
        - burnable
        - lockable
        - roles:
            minter_role_name: minter
metadata:

A propriedade metadata é opcional e só é suportada por tokens não fungíveis. Essa propriedade especifica informações de metadados, que são armazenadas no blockchain, para um token não fungível. Os valores de atributo de metadados só podem ser designados pelo proprietário do token que cria o token e não podem ser atualizados após o token ser cunhado.

No exemplo, name é o nome do atributo de metadados e type é o tipo de valor que o atributo tem.

metadata:
                                
                                - name: painting_name
                                type: string
                                
                                - name: description
                                type: string
                                
                                - name: image
                                type: string
                                
                                - name: painter_name
                                type: string

Limitações

O Blockchain App Builder fornece suporte parcial para o padrão ERC-1155. Atualmente, os seguintes eventos e métodos ERC-1155 não são suportados.

Eventos:
  • TransferSingle
  • TransferBatch
  • ApprovalForAll
  • URI
Métodos:
  • safeTransferFrom
  • balanceOf
  • setApprovalForAll
  • isApprovedForAll