< Todos os Posts

Um Mergulho Técnico no Mundo das NFTs

Ao final deste artigo você saberá como funciona uma NFT por meio da criação da sua própria NFT.

Popularidade das NFTs

Famosas no mundo virtual e ganhando popularidade no mundo real, as NFTs (Non-Fungible Tokens) têm atraído a atenção de muitas pessoas – recentemente a do Neymar, por exemplo. O fator principal que despertou a atenção do público popular é o preço pelos quais estes tokens tem sido vendidos. A NFT abaixo, por exemplo, foi vendida por 696.969 ETH, ou na época, $2,7 milhões de dólares! 

nfts

Elas já apareceram até nos telões da Time Square, a rua mais famosa da cidade de Nova Iorque. Confira aqui: https://www.youtube.com/watch?v=A_sSby_PRZI

Este artigo, entretanto, não terá foco na popularidade das NFTs, preços ou especulações sobre o mercado de NFTs. Focaremos na tecnologia por trás das NFTs e como você pode criar sua própria NFT e publicá-la para venda no marketplace OpenSea: o marketplace mais famoso de venda de NFTs no momento. Abaixo você pode ver a NFT sobre a qual estávamos falando no OpenSea.

NFT Neymar

Possibilidades com NFTs

Existem diversas possibilidades de uso das NFTs. Várias companhias têm entrado no mercado a fim de testá-las em diferentes cenários, como autenticação, apropriação de bens, identificação ou promover exclusividades para os proprietários delas.

Por exemplo, o jornal Washington Post publicou essa semana sobre um restaurante chiquíssimo a ser aberto no centro da cidade de Nova Iorque, cujo acesso será limitado àqueles que possuírem uma NFT de uma coleção específica lançada pelos donos do restaurante, enquanto há um projeto imobiliário representando os imóveis por meio de NFTs.

Portanto, falaremos sobre o aspecto técnico das NFTs e cabe a você pensar sobre como elas podem ser usadas para que você alcance os seus objetivos.



Como Funcionam as NFTs

A melhor maneira de se entender como funciona uma NFT é criando uma, não é verdade?! Você será guiado a fim de conseguir criar sua própria NFT e colocá-la à venda no OpenSea ao final deste artigo. Não se preocupe, não gastarmos dinheiro real ao seguir adiante.

No final do artigo, há um vídeo onde explico o passo a passo também. Recomendo assisti-lo antes de ler o artigo caso você não saiba o que é MetaMask e Rinkeby. 

As NFTs são tokens não-fungíveis, ou seja, cada uma é única. O legal delas é que, como tokens, podem ser armazenados no sistema descentralizado da blockchain e, dessa forma, podem ser transacionadas entre diferentes pessoas lá na blockchain em que está, havendo um registro público de todas as transações feitas, de todos os proprietários que foram os donos dela e o valor pelo qual foi transacionado. Não há burocracia, não há intervenção! O que você faria para comprar um quadro hoje? 

Como você saberia de forma confiável quem já foram os donos deste quadro? Como você saberia que este quadro foi criado realmente pelo autor da assinatura e não é apenas uma cópia falsa do quadro original? O registro que é armazenado na blockchain permite ao comprador conferir pelas mãos de quem passou sua NFT antes dele comprar, desde o criador. E caso este registro estivesse no Google Drive, por exemplo, caso quem mantivesse o arquivo apagasse sua conta, o registro seria perdido – a mesma coisa se alguém tacar fogo nos servidores do Google lá nos EUA. 

Tudo seria perdido! A blockchain é uma rede de vários computadores que compartilham estes registros. Dessa forma, caso algum se torne obsoleto, ainda há muitos outros ao redor do mundo mantendo os registros, transações, NFTs, etc.

Logo, duas perguntas vem à mente: 

  1. I) Como então salvar uma imagem de uma NFT na blockchain?
  2. II) Como tornar a NFT visível no OpenSea?

Como então salvar uma imagem de uma NFT na blockchain?

Agora que vem a bomba! A imagem da NFT não está na blockchain – apenas uma referência à imagem! Sim, a maioria dessas NFTs no OpenSea não estão dentro da blockchain. O que está realmente lá é um link da imagem. Dessa forma, ao monitorar as transações feitas com o link, sabemos quem é o dono do link, portanto, o dono da imagem. O legal é que não precisa ser uma imagem. Você pode salvar lá dentro da blockchain o link para qualquer coisa: um vídeo, uma música, um artigo, um gif, etc. Qualquer coisa!

Por que a Imagem não é Salva, mas Sim o Link Dela?

Quando se salva algo na blockchain, ocorre uma transação registrada de quem está salvando algo lá e do que está sendo salvo. Todos os nós (computadores espalhados que armazenam o registro) da rede aumentam então o tamanho do registro da blockchain, que contém todos os registros de todas as transações desde sua criação. Imagina agora que eu quero colocar na blockchain um documentário de 10 horas e meia na blockchain.

Todos os computadores que são nós terão que salvar aquele vídeo nos seus registros! É justo então cobrarem uma taxa proporcional ao tamanho de dados que quero colocar na rede. Então, quanto maior o vídeo, a imagem, o documento, etc, maior o custo. Quanto menor o tamanho em KBs dos dados armazenados lá, menor a taxa. Tá aí a explicação do porquê apenas se salvar algo que faça referência à NFT – um link, por exemplo. Basta alguém clicar no link e poderá ver a imagem.

Vamos aprender então como se gera um link de uma imagem de forma segura.

Como Gerar o Link de uma Imagem de Forma Segura?

Você poderia salvar sua imagem no Google Drive, obter um link e colocá-lo na Blockchain. Mas e se sua conta for apagada, banida, ou você esquecer a senha e perdê-la – ou se, como disse antes, os servidores do Google pegassem fogo ou, até mesmo, alguém hackeasse sua conta e a roubasse? Enfim, existem diversas razões para procurar um meio mais seguro de obter um link para algum arquivo digital – como fotos, vídeos, artigos, músicas, etc.

O meio mais famoso e usado atualmente – inclusive usado pelo criador da NFT de 2,7 milhões de dólares – é o IPFS. O IPFS (Sistema Interplanetário de Arquivos) tem algumas propriedades interessantes – e não, sua imagem não ficará em outro planeta! O IPFS é um sistema descentralizado para armazenar arquivos. Você coloca seu arquivo lá e eles te dão um link de referência ao arquivo. Por enquanto, o IPFS é o serviço mais usado que é externo à blockchain para se salvar arquivos que vão para a blockchain

image3
(Processo De Criação de Uma NFT)

Enfim, vamos colocar a mão na massa e obter um link usando o IPFS:

  1. Instale o IPFS e o IPFS Companion na página oficial deles: https://ipfs.io/#install
  2. Selecione a imagem da sua NFT ao clicar em “Ficheiros”, “Import” e “File”
  3. Basta “fazer o pin” da imagem
image8

Estou usando a imagem abaixo como minha NFT. Você pode usar qualquer imagem do seu computador ao seguir o tutorial e deixar para caprichar mais no Photoshop quando for publicar uma de verdade.

image15

Agora obtemos o link da imagem ao selecioná-la, clicar nos três pontos ao lado dela, e clicar em “Inspec”. Lá é mostrado o CID (Identificação de Conteúdo) da sua imagem no sistema da IPFS:



Como criar um NFT

Metadata

Uma das possibilidades que as NFTs possuem é de receber dados sobre si mesmas. Por exemplo, a NFT que vimos no início do artigo tem as seguintes propriedades:

image10

Assim, esta NFT tem os olhos com a propriedade “Heart”, que significa ter um óculos com formato de coração. Ali também é informado que apenas 4% das NFTs da mesma coleção tem os óculos maneiros que essa tem. As propriedades lembram os atributos das cartinhas de Naruto e Pokémon, nas quais são mostrados os atributos “carga” e “relâmpago”, por exemplo.

Portanto, uma NFT não é definida por uma mídia por si só, mas sim mídia e atributos relacionados – sejam eles quais forem – definem a NFT. A mídia e seus atributos são expressos em um arquivo do formato JSON. A este arquivo, é dado o nome de “metadata”. Assim, cada NFT tem uma metadata.

Agora você está pronto para receber mais uma notícia. Não é link da imagem que é armazenado na blockchain para uma NFT padrão, mas sim o link para o arquivo metadata da NFT, que contém os atributos da NFT assim como o link da imagem da NFT. Dessa forma, o link do metadata é registrado na blockchain, cujo arquivo contém o link para a mídia da NFT, cujo link aponta para a imagem salva no IPFS. Agora, basta criarmos um arquivo JSON no IPFS e obter o link deste arquivo.

Para criar um arquivo JSON, é muito simples, pois vamos usar o modelo salvo no OpenSea:

				
					{
  "description": "Friendly OpenSea Creature that enjoys long swims in the ocean.", 
  "external_url": "https://openseacreatures.io/3", 
  "image": "https://storage.googleapis.com/opensea-prod.appspot.com/puffs/3.png", 
  "name": "Dave Starbelly",
  "attributes": [ ... ], 
}


				
			

“Description” é o campo para a descrição da NFT, o “external_url” é o campo do seu site, o “image” é o campo no qual colocaremos o CID de nossa imagem, o “name” é o nome e os “attributes” são os atributos são opcionais e não os usaremos neste exemplo. No entanto, você pode se basear em atributos de outras NFTs que acha interessante. Abaixo veja como ver o metadata de qualquer NFT no OpenSea, inclusive a imagem por si só:

Editando aquele modelo acima do metadata, ele ficou assim para mim:

				
					{
  "description": "Criatura do cabelo mais irado do Brasil.", 
  "external_url": "https://opensea.io/collection/goblockchain", 
  "image": "ipfs://QmQLe4is3nh4BryUu3VUEKckydGrEB9CKXc2kQkGPi6YVr", 
  "name": "Caio Sa Go", 
}


				
			

Perceba que no campo “imagem”, o padrão a ser utilizado para nós que estamos usando o IPFS é o “imagem” : “ipfs://CID”, onde o CID é o CID da sua imagem que pode ser obtido, como explicado nos gifs anteriores, ao selecionar a imagem, clicar nos três pontos e “Inspec” e depois basta copiar o CID e colar ali em frente ao “image”:”ipfs://.

Depois, basta copiar as informações metadata para o bloco de notas, salvar com um nome qualquer e com a extensão de arquivo .json:

image13

Fazendo o mesmo processo que fizemos com a imagem ao colocá-la no IPFS, obtemos o seguinte CID para nosso arquivo metada.json:

NFT

Pronto! Aqui está o CID de nosso arquivo: QmeyHuWLQUSgoNGv9JWzK28bhpfFs9uwxFDNER6de6j774

Precisamos colocá-lo no padrão que é reconhecido pela API do OpenSea ao adicionar o ipfs:// na frente, de forma que o link final ficará da seguinte maneira:

ipfs://QmeyHuWLQUSgoNGv9JWzK28bhpfFs9uwxFDNER6de6j774

Este é o famoso tokenURI sobre o qual falaremos mais adiante. Ufa! Até agora conseguimos obter o link de referência para o arquivo metadata.json que contém o link para a imagem da NFT que estamos criando. Ainda nem entramos no mundo da blockchain e dos smart contracts.

O bom é que daqui em diante não há nenhuma burocracia. É simples e fácil. Vamos usar a Rinkeby e o Remix no próximo passo e caso você não tenha nem ideia do que eles são, sugiro ir direto ao vídeo no final do artigo.

Registrando NFT na blockchain

Lembrando os passos no início do artigo, temos duas coisas a serem feitas:

  1. I) Como salvar uma imagem de uma NFT na blockchain?
  2. II) Como tornar a NFT visível no OpenSea?

Relembrando o processo de criação da NFT abaixo, já chegamos no estágio de termos o tokenURI. Agora, basta fazer o envio de um smart contract que herda as funcionalidades do smart contract ERC721, que é o contrato padrão – assim como o ERC1155 – para criar NFTs. 

image3

O contrato ERC721 possui duas funções que usaremos a fim de criar nossa NFT única e definir quem é dono dela:

				
					_mint(address dono, uint256 Id)
_setTokenURI(uint256 Id, string tokenURI)

				
			

A função _mint recebe o argumento dono do tipo address, e o ID que é um número do tipo uint256, ambos na linguagem Solidity. Caso você queira dar a NFT a alguém, basta colocar o endereço dela ali no primeiro argumento, senão coloque o seu endereço mesmo a fim de recebê-la. 

Algo importante de se notar é que a função _mint() aceitará o endereço, mas não executará caso o ID passado seja o mesmo que o ID de outra NFT cujo dono também é aquele mesmo endereço. Basicamente, o que torna uma NFT única é que um mesmo dono só pode ter NFTs com IDs diferentes. Depois, a função _setTokenURI recebe o ID escolhido para representar a NFT e que foi passado como argumento na função _mint(). 

O segundo argumento é o tokenURI, do tipo string que é o link que se refere ao nosso arquivo metada.json. Resumindo: a função _mint() mapeia um endereço a um ID e a função _setTokenURl() mapeia o ID a uma referência da NFT.

Para seguir adiante, usaremos a rede da Rinkeby. Para isso, você precisará ter uma carteira – MetaMask, por exemplo – conectada à rede da Rinkeby, com algum saldo de ETH faucets nela. Para obter o suficiente de faucets, recomendo estes dois websites: 

https://faucets.chain.link/rinkeby ou https://rinkeby-faucet.com/

Quando estiver pronto, basta criar um novo arquvio no Remix, com a extensão .sol, embaixo da pasta de contratos, colar lá o código do seguinte contrato abaixo, e depois compilar.

				
					// SPDX-License-Identifier: GPL-3.0
 
pragma solidity ^0.5.0;
 
import "https://github.com/athiwatp/openzeppelin-solidity/blob/master/contracts/token/ERC721/ERC721Full.sol";
 
contract gocriarNFT is ERC721Full {
 
    constructor() ERC721Full("CaioSaGo", "CSG") public {
    }
 
    uint index;
 
    function incrementar() public returns (uint resultado) {
        resultado = index;
        index += 1;
     }
 
    function criarNFT(address dono, string memory tokenURI) public returns (uint256) {
 
        uint256 novo_Id = incrementar();
        _mint(dono, novo_Id);
        _setTokenURI(novo_Id, tokenURI);
 
        return novo_Id;
    }
}

				
			

Este contrato é um contrato simples disponível no site da OpenZeppelin. Inclusive, são eles que deixam disponível este contrato como modelo inicial de criação de NFTs. O nosso contrato herda todas as funcionalidades do contrato ERC721Full  – salvo no github da OpenZeppelin – como demonstrado na linha abaixo pela palavra-chave is:

				
					contract gocriarNFT is ERC721Full 
				
			

É importante notar que ao fazer o registro deste contrato na blockchain, passamos dois argumentos que representam o nome e o símbolo do contrato ERC721. Eles foram expressos na seguinte linha do código do smart contract usando mais acima:

				
					constructor() ERC721Full("CaioSaGo", "CSG") public {
				
			

Você deve editar estas linhas de acordo com sua preferência. O símbolo não está restrito a três letras.

Depois de compilado, enviamos o contrato para a rede da Rinkeby usando a conexão com nossa MetaMask:

image13

Pronto! O contrato que nos permite então criar nossa NFT está na blockchain, basta agora usarmos as funções dele que criam nossa NFT.

Como dito, precisaremos do tokenURI, e depois do endereço do dono da NFT – que será eu mesmo. Passaremos estes dois argumentos para a função criarNFT() e estes serão usados pelas funções internas a esta função: a _mint() e a _setTokenURI(). A função criarNFT retornará para nós o ID da NFT, já que assim dizemos no resto do código do contrato. Este ID é apenas um número que identifica a NFT que criamos. Ao criar a primeira NFT, o ID será 0, ao criar a segunda, o ID será 1 e assim por diante. Você pode escolher qualquer ID, mas começamos pelo 0 por questões de organização.  

Ao copiar o hash da transação que acabamos de fazer no explorador da Rinkeby, é possível ver como a transação está realmente registrada e com o nosso token criado, com seu respectivo nome, símbolo e ID:

nft

É possível ver o seu token NFT na sua conta da MetaMask no MetaMask mobile. Basta clicar me NFTs ou colecionáveis.

Como tornar a NFT visível no OpenSea?

Agora que já temos nossa NFT na blockchain, faremos uma conta no OpenSea – e como estamos usando a testnet Rinkeby, temos que ter uma conta no https://testnets.opensea.io/. Para criar uma conta no OpenSea, basta conectar sua carteira de preferência e depois ir no seu perfil visualizar sua NFT!

image4
image2

Ótimo! Sua NFT já está na sua carteira e acessível à ao marketplace da OpenSea!

Agora você já pode colocar o seu token NFT para ser vendido. Você define o preço e pode estipular uma data. Serão cobradas duas taxas: uma da OpenSea por você estar usando o serviço e marketplace deles e outra por usar a função _approve() do smart contract ERC721Full, que aprova a venda do seu token por algum outro endereço, no caso, o do OpenSea.

Pinata

Se o seu nó do IPFS cair, ou você desligar o computador, o OpenSea não será capaz de trazer o arquivo do IPFS para o site deles. É aí que entra o Pinata. É gratuito! Basta copiar o CID da imagem da NFT e do arquivo metadata.json e usar o Pindata para fazer um pin nestes dois arquivos. Dessa forma, eles estarão disponíveis mesmo que você desligue o computador. É bem rápido para se criar uma conta.

É isso! Apenas espere receber ofertas de compras no seu token. Espero que tenham aprendido um pouco mais sobre como funciona para fazer a venda de uma NFT e como é algo que é muito simples e que as possibilidades de uso são imensas. Você pode enviar uma camiseta, por exemplo, para queme compra sua NFT, ou você pode reservar um lugar especial no seu restaurante em Nova Iorque para aqueles que tiverem uma NFT criada por você! Vamos ver o que o ano de 2022 nos trará sobre o uso delas.

Quer aprender mais? Veja o vídeo abaixo no qual sigo todos os passos aqui explicados para um público iniciante no assunto de blockchain. Considere também ler os outros artigos no blog e ficar atento para os cursos que lançaremos este, onde faremos a criação de uma NFT usando a rede Polygon, por exemplo.

Sites recomendados:

Aviso Legal: Esta postagem é apenas para fins educacionais. Não constitui um conselho de investimento ou uma recomendação ou solicitação para comprar ou vender qualquer investimento e não deve ser usado na avaliação do mérito da tomada de qualquer decisão de investimento. Não deve ser invocado para aconselhamento contábil, jurídico ou tributário ou recomendações de investimento.

Postagens recentes

blog
Caio Sá

Fidelidade 3.0

Fidelidade 3.0 Programas de fidelidade a marcas tem existido há bastante tempo. Fidelidade importa muito as marcas, pois os benefícios de reter clientes existentes compensa

Read More »
blog
Talita Paes

Celebridades que utilizam NFTs

Celebridades que utilizam NFTs Por que celebridades como Neymar e Justin Bieber estão de olho nas NFTs Os NFTs caíram no gosto de celebridades, nomes

Read More »
EnglishPortuguêsEspañol