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

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

Você pode definir ativos padrão e ativos de token baseados no padrão ERC-721 no mesmo arquivo de especificação. As seguintes restrições se aplicam a um arquivo de especificação que inclui uma definição de ativo de token ERC-721:
  • Não é possível definir ativos de token com base em mais de um padrão no mesmo arquivo de especificação.
  • Não é possível definir vários ativos de token não fungíveis em um único arquivo de especificação.

Os valores de atributo personalizados para ativos de token não fungíveis podem ser atualizados pelo proprietário do token.

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

O seguinte arquivo de especificação de amostra para um ativo de token ERC-721 está disponível no pacote Blockchain App Builder:
  • NFTArtCollectionMarketPlace with ERC-721-Typescript.yml

Além das propriedades e seções padrão, os ativos de token não fungíveis suportam as seções behavior, anatomy e metadata no arquivo de especificação. Os ativos de token não fungíveis também suportam as propriedades standard e symbol. O exemplo a seguir mostra a estrutura de um arquivo de especificação para um ativo de token ERC-721:

assets:
    - name: ArtCollection #Asset name
      type: token #Asset type
      symbol: ART # Token symbol
      standard: erc721+ # Token standard
      
      anatomy:
          type: nonfungible # Token type
          unit: whole #Token unit
      
      behavior:
        - indivisible
        - singleton
        - mintable:
            max_mint_quantity: 20000
        - transferable
        - burnable
        - lockable
        - roles:
            minter_role_name: minter
      
      properties: # Custom asset attributes for non-fungible tokens
          
          - 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

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

Entrada Descrição Exemplos
type:

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

assets:
    - name: ArtCollection #Asset name
      type: token #Asset type
symbol: A propriedade symbol representa o símbolo que identifica o contrato de token, por exemplo, ART. Normalmente, o símbolo tem de 3 a 4 caracteres.
symbol: ART # Token symbol
standard: A propriedade standard é obrigatória para tokens não fungíveis. Representa o padrão de token a ser seguido durante a geração de chaincode. No Blockchain App Builder, os tokens não fungíveis seguem uma versão parcial do padrão ERC-721. Para obter mais informações, consulte Limitações.
standard: erc721+ # Token standard
anatomy:
A seção anatomy tem dois parâmetros obrigatórios para tokens não fungíveis:
  • type: nonfungible

    Um token não fungível é exclusivo.

  • unit: whole

    Um token inteiro não pode ser subdividido em unidades fracionárias menores.

anatomy:
          type: nonfungible # Token type
          unit: whole #Token unit
behavior: Esta seção descreve os recursos e restrições do token. Os comportamentos mintable, transferable, singleton e indivisible são obrigatórios para tokens não fungíveis.
  • singleton: Esse comportamento obrigatório suporta uma restrição para que possa haver apenas um token inteiro na classe, que não pode ser dividido.
  • indivisible: Esse comportamento obrigatório suporta uma restrição para que tokens inteiros não possam ser subdivididos em frações.
  • 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 opcional suporta a desativação ou a gravação de tokens. A gravação 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 opcional 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á atuar como um mineiro ou gravador. Por exemplo, se a função do queimador não for especificada, qualquer usuário da conta terá implicitamente a função do queimador. Se a atribuição do gravador for especificada, durante o processo de configuração do token, o usuário Token Admin deverá designar a atribuição do gravador a outros usuários explicitamente.
behavior:
        - indivisible
        - singleton
        - 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 do atributo de metadados só podem ser designados pelo proprietário do token que cunhou 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-721. Atualmente, os seguintes eventos e métodos ERC-721 não são suportados.

Eventos:
  • event Transfer
  • event Approval
  • event ApprovalForAll
Métodos:
  • approve
  • getApproved
  • setApprovalForAll
  • isApprovedForAll