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.
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.
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
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á oupdate_authority
do NFT que está sendo criado. No nosso caso será owallet_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 campotrait_type
evalue
no formato a seguir.
{
trait_type: "Speed", //o primeiro atributo
value: "25", //seu valor
},
{
trait_type: "Accuracy", //o segundo atributo
value: "98",//seu valor
},
-
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 ofee_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
}
-
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
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,
})
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"
}
}
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;
}
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;
}
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
.
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
Website da Shyft
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
Oldest comments (0)