WEB3DEV

Cover image for Como Cunhar um NFT Sem Pagar Gás na Solana Usando APIs SHYFT
Panegali
Panegali

Posted on

Como Cunhar um NFT Sem Pagar Gás na Solana Usando APIs SHYFT

Este blog ilustra a cunhagem de NFTs sem pagar gás na Solana, onde o criador de NFT não precisa pagar as taxas de gás necessárias para a transação de criação.

Criar NFTs em qualquer blockchain como a Solana pode ser demorado e o criador precisa estar familiarizado com a pilha de tecnologia Web3 e todo o material de desenvolvimento. É aqui que as APIs SHYFT ajudam os criadores. A SHYFT fornece uma série de APIs e ferramentas para que os criadores criem, leiam, modifiquem e gravem NFTs sem problemas. Além disso, a SHYFT também possui APIs para quase todas as operações possíveis na blockchain Solana , sejam NFTs, Tokens, Carteiras e tudo mais.

Neste Blog, veremos como podemos criar NFTs usando uma transação sem pagar gás, onde o criador do NFT não terá que pagar nenhuma taxa de gás para receber os NFTs. Em vez disso, nós, os provedores de serviços de criação de NFT, pagaremos antecipadamente as taxas de gás em nome do receptor NFT. Observe também que os provedores de serviços mencionados aqui podem ser qualquer provedor de serviços que esteja usando APIs SHYFT como parte de seu sistema.

Leia a documentação SHYFT aqui.

Pré-requisitos

Autenticação: obtenha sua chave de API Shyft

x-api-key é um parâmetro de autenticação, que dá acesso às APIs SHYFT. Você pode obter sua própria chave de API no site da SHYFT. Basta se inscrever com seu e-mail aqui e você pode obtê-la gratuitamente.

Carteira Phantom

Precisaremos da extensão do navegador da carteira Phantom, você pode baixá-la no link abaixo.

Chrome/Brave.

Firefox.

Uma vez baixada, configure sua conta da carteira Phantom. Dicas estão disponíveis na tela, que irão guiá-lo através da configuração e introdução. Você também pode encontrar um guia detalhado relacionado a isso aqui.

Detalhes do NFT que está sendo criado

Primeiro, precisamos aceitar todos os detalhes sobre o NFT que está sendo criado. Vamos criar um formulário simples para aceitar todos os detalhes. Usamos o React para criar o formulário, mas você pode usar qualquer linguagem de sua escolha.

1

Formulário simples para aceitar os detalhes do NFT que está sendo criado

Criando o NFT de uma maneira sem pagar gás

Usaremos create a seguir para criar o ponto de extremidade de API, para então criar o NFT.

POST https://api.shyft.to/sol/v2/nft/create
Enter fullscreen mode Exit fullscreen mode

Esta API aceita o parâmetro x-api-key no cabeçalho, que é um parâmetro de autorização usado pela SHYFT para validar seus usuários. Você pode obter o seu x-api-key gratuitamente no site da SHYFT aqui. O Content-Type para esta chamada de API é multipart/form-data.

Uma das características mais marcantes dessa API é que ela nos permite separar o pagador da taxa de transação da carteira do criador de NFT. Isso significa que a carteira que está sendo usada para criar o NFT e a carteira que está pagando as taxas de gás para a transação podem ou não ser a mesma.

Leia a documentação da API SHYFT aqui.

Parâmetros usados ​​nesta chamada de API:

  • network: Seleciona a instância de rede da Blockchain Solana.
  • creator_wallet: Seleciona a carteira que terá o update_authoritydo NFT que está sendo criado. No nosso caso será o wallet_address do usuário que está criando o NFT.
  • name: nome do NFT que está sendo criado.
  • symbol: símbolo do NFT que está sendo criado.
  • description: uma pequena descrição sobre o NFT
  • attributes: aceita os metadados do NFT em um formato especificado. Cada atributo tem um campo trait_type e value no formato a seguir.
{
trait_type: "Speed", //o primeiro atributo
value: "25", //seu valor
},
{
trait_type: "Accuracy", //o segundo atributo
value: "98",//seu valor
},
Enter fullscreen mode Exit fullscreen mode
  • max_supply: Número de edição de NFTs que podem ser cunhados para este NFT em particular. No nosso caso, será 0, pois queremos criar NFTs únicos.
  • image: Seleciona a imagem NFT.
  • service_charge: Especifica o destinatário, o token e o valor que será deduzido como taxa de serviço. Este é um parâmetro opcional e pode ser usado para pagar uma pequena taxa de serviço ao provedor de serviços. Por favor, observe que o fee_payer especificado pagará a taxa de serviço e as taxas de gás também.
{
"receiver": ENDEREÇO_DA_CARTEIRA_DO_RECEPTOR_DA_TAXA_DE_SERVIÇO,
"token": ENDEREÇO_DO_TOKEN_DO_VALOR, //SOL se deixado em branco
"amount": 0.5 //valor da taxa de serviço
}
Enter fullscreen mode Exit fullscreen mode
  • fee_payer: Especifica o endereço da carteira do qual o service_charge (taxa de serviço) será deduzido. No nosso caso, este será o endereço da carteira do provedor de serviços

2

Aceitando detalhes via formulário

Você também pode experimentar nossas APIs usando a interface do usuário do swagger aqui.

Utilizamos o FormData para aceitar todas essas informações e, para a chamada de API, usamos o pacote axios.

const fee_Payer = "Feepayer_Public_Key"; //endereço da carteira do feepayer

const formData = new FormData();
   formData.append("network",network);
   formData.append("creator_wallet",creator);
   formData.append("name",name);
   formData.append("symbol",symbol);
   formData.append("description",desc);
   formData.append("attributes",JSON.stringify(attr));
   formData.append("external_url",extUrl);
   formData.append("max_supply",maxSupply);
   formData.append("royalty",royalty);
   formData.append("fee_payer",fee_Payer);
   formData.append(
       "service_charge",
       JSON.stringify(
         {
           "receiver": fee_Payer,
           "amount": Number(serviceCharge),
         },
       )
    );
   formData.append("image",image);
axios({
     // Ponto de extremidade para obter os NFTs
     url: `https://api.shyft.to/sol/v2/nft/create`,
     method: "POST",
     headers: {
       "Content-Type": "multipart/form-data",
       "x-api-key": "Your X_API_KEY", // Sua chave api do website da SHYFT
     },
     data: formData,
})
Enter fullscreen mode Exit fullscreen mode

Depois que essa solicitação for executada com êxito, a resposta deverá ser semelhante a esta.

{
  "success": true,
  "message": "NFT create request generated successfully",
  "result": {
    "encoded_transaction": "AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADd/kZ7nuc7bHY1UZVoVPsZ2Slp+9Sz9dwdHYG7/EP0XTgUn5L1oPWrbCiWyhASqoz4vROwbl2Neo1exHuYvnYIAgAID0mioYxx/asdasdsSls7U3Uq1cPiWEWioadmJJkpfEpJj1IRPDYHVKLFdzmKAhEV5ABsw3PbAIcv3yNkm3z5V2dA0oNsKtkdrxCZh81eIaZc6sHtpoVRDXqCwk2sxG3tUhDS4Opo80GCvyIr4gr+MfwhU03cnO9eEM/I2BvSTn8atGSgv4jEnlxkrsXIO3WpLa65+YPE+hVbcdZfoTSlkuSZace5SwBw7BnI9z9u9hPXYCyNkAAWPPPEqUQJe24xjrsbmyqqUL4gQg6etSyylLP4PMcsG5bcYK4xg9sKxkzNEVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYyp9RxUce7b6XJTmDH3BTasbGTY2hJe2h0xJ16/4PFYyXJY9OJInxuz0QKRSODYMLWhOZ2v8QhASOe9jb6fhZzgOeiS4FIAsM7m2Xp1OR42r2qbdt9WblPm7k6dy0XkQLcGWx49F8RTidUn9rBMPNWLhscxqg/bVJttG8A/gpRgan1RcZLFxRIYzJTD1K8X9Y2u4Im6H9ROPb2YoAAAAABt324ddloZPZy+FGzut5rBy0he1fWzeROoz1hX7/AKkOmNc6v7OEyaYVVIa6Sv4A/AgVM+wz147I5bRZEbS74yKOCI5qZRvBPiwWe60BzPA23jIRrCRiPj2oAj/VJbo9BQcCAAE0AAAAAGBNFgAAAAAAUgAAAAAAAAAG3fbh12Whk9nL4UbO63msHLSF7V9bN5E6jPWFfv8AqQ0CAQxDAABJoqGMcf65O3NEpbO1N1KtXD4lhFoqGnZiSZKXxKSY9QFJoqGMcf65O3NEpbO1N1KtXD4lhFoqGnZiSZKXxKSY9QkHAAMIAQcNDAANAwEDAAkHAQAAAAAAAAALDgYFAgEEAAAADggKDQcMCQsCAAAAAAAAAA==",
    "mint": "5FjMDMkhcjYggt5LyWDUf5FFpKBuSgmEaaoHKuwoegju"
  }
}
Enter fullscreen mode Exit fullscreen mode

Agora, encoded_transaction recebido na resposta, precisa **ser assinada por duas carteiras, uma a NFT creator_wallet e a carteira fee_payer.

Confira nosso guia de desenvolvimento sobre como assinar transações na Solana aqui.

Primeiro, vamos ver como podemos assinar a transação do back-end usando a carteira fee_payer (do provedor de serviços). Usamos a seguinte função, encoded_transaction, para assinar parcialmente pela carteira fee_payer.

export async function partialSignWithKey(network, encodedTransaction, privateKey)
{
 const connection = new Connection(clusterApiUrl(network),'confirmed');
 const feePayer = Keypair.fromSecretKey(decode(privateKey));
 const wallet = new NodeWallet(feePayer);
 const recoveredTransaction = Transaction.from(Buffer.from(encodedTransaction, 'base64'));
 recoveredTransaction.partialSign(feePayer); //assinatura parcial da transação com chave privada do fee_payer
 return recoveredTransaction;
}
Enter fullscreen mode Exit fullscreen mode

Aqui privateKey indica a chave privada do usuário que está assinando a transação parcialmente (no nosso caso, que é o fee_payer). Em seguida, tentamos assinar o recoveredTransaction recebido desta função com o creator_wallet.

export async function partialSignWithWallet(connection, encodedTransaction, wallet)
{
//temos que passar a Transação recuperada recebida na etapa anterior no parâmetro encodedTransaction
const signedTx = await wallet.signTransaction(encodedTransaction);
//assinatura da transação com o creator_wallet
const confirmTransaction = await connection.sendRawTransaction(signedTx.serialize());
return confirmTransaction;
}
Enter fullscreen mode Exit fullscreen mode

Uma vez assinado com sucesso por ambas as carteiras, as taxas de gás serão deduzidas da carteira fee_payer e o NFT será criado no formato creator_wallet.

Observe que, às vezes, as cobranças da transação são exibidas durante a assinatura da transação da carteira, mas as cobranças são deduzidas apenas da carteira fee_payer.

3

NFT recém-criado no Solana Explorer

Você pode encontrar todas as funções relacionadas à assinatura de uma transação aqui, ou você também pode conferir nosso blog sobre como assinar transações.

Então, é isto sobre este blog, no qual vemos como podemos criar NFTs usando uma carteira e usar outra carteira como um fee_payer. Os NFTs criados são todos sem taxa de gás, no sentido de que o criador do NFT não precisa pagar as taxas de gás para a transação de criação.

Se você gostou de construir junto com este blog, sinta-se à vontade para conferir nossos outros blogs em Criando seu próprio mercado NFT ou Obtendo coleções de NFT na Solana.

Esperamos que você se divirta criando dApps com APIs SHYFT.

Feliz Hacking!

Fontes

Documentação da API SHYFT

Website da Shyft

Obter chave de API

Github

Junte-se ao nosso Discord

Experimente nossas APIs na interface do usuário do Swagger


Artigo escrito por Team Shyft e traduzido por Marcelo Panegali

Latest comments (0)