WEB3DEV

Cover image for Como Transferir um NFT do Metaplex na Solana Usando Qualquer Linguagem de Programação
Paulo Gio
Paulo Gio

Posted on • Atualizado em

Como Transferir um NFT do Metaplex na Solana Usando Qualquer Linguagem de Programação

Você pode ver este artigo em nosso blog.

Precisa transferir um NFT de forma programática? A API de Blockchain possui um ponto de extremidade de API "Transferir SOL, um token ou um NFT para outro endereço". Isso permitirá que você transfira um ativo na blockchain Solana de forma confiável e fácil em qualquer linguagem de programação.

Passo 1: Obtenha um par de chave de API gratuito

Primeiro, obtenha um par de chaves de API gratuito aqui.

Passo 2: Escreva o pedido de transferência de NFT

Se você for usar o Python, sugiro fortemente que pule para o passo 3. O objetivo do passo 2 é mostrar a pessoas que usam outras linguagens como escrever os pedidos de API brutos.

Vamos implementar o pedido de transferência usando a biblioteca requests do Python.

Para demonstrar o ponto de extremidade de transferência, criamos uma carteira, criamos um NFT e, em seguida, transferimos esse NFT.

import requests
Enter fullscreen mode Exit fullscreen mode

Preencha com seu par de chaves de API.

MY_API_KEY_ID = "ID DA SUA CHAVE DE API"
MY_API_SECRET_KEY = "SUA CHAVE SECRETA DE API"
HEADERS = {
   'APIKeyID': MY_API_KEY_ID,
   'APISecretKey': MY_API_SECRET_KEY
}
Enter fullscreen mode Exit fullscreen mode

Primeiro, vamos definir alguns dos pontos de extremidade de API que usaremos.

SECRET_PHRASE_ENDPOINT = "https://api.theblockchainapi.com/v1/solana/wallet/secret_recovery_phrase"
PUBLIC_KEY_ENDPOINT = "https://api.theblockchainapi.com/v1/solana/wallet/public_key"
BALANCE_ENDPOINT = "https://api.theblockchainapi.com/v1/solana/wallet/balance"
AIRDROP_ENDPOINT = "https://api.theblockchainapi.com/v1/solana/wallet/airdrop"
CREATE_NFT_ENDPOINT = "https://api.theblockchainapi.com/v1/solana/nft"
TRANSFER_ENDPOINT = "https://api.theblockchainapi.com/v1/solana/wallet/transfer"
Enter fullscreen mode Exit fullscreen mode

Vamos criar uma carteira de teste em vez de usar sua carteira real. Para isso, primeiro criamos uma chave secreta.

response = requests.post(
   SECRET_PHRASE_ENDPOINT,
   headers=HEADERS
)
secret_recovery_phrase = response.json()['secret_recovery_phrase']
print(secret_recovery_phrase)
Enter fullscreen mode Exit fullscreen mode

A saída deve ser parecida com isso:

home man chat enroll nice limit refuse base foam reduce gossip chief
Enter fullscreen mode Exit fullscreen mode

Agora, vamos gerar uma chave pública a partir dessa frase. Observe que uma chave pública é composta por uma frase secreta (gerada acima), um caminho de derivação e uma senha. Usaremos o caminho de derivação e a senha padrão da API. Portanto, não forneceremos os valores para esses em nossa requisição. Você pode ler mais sobre caminhos de derivação em Solana aqui.

response = requests.post(
   PUBLIC_KEY_ENDPOINT,
   params={
       'secret_recovery_phrase': secret_recovery_phrase
   },
   headers=HEADERS
)
public_key = response.json()['public_key']
print(public_key)
Enter fullscreen mode Exit fullscreen mode

A saída:

CtE7ofpQqEvf5WZX2R3P2V2pSJ6r1fjpsgb3Aq1KNUUV
Enter fullscreen mode Exit fullscreen mode

Agora, vamos obter um airdrop de 0,015 SOL. Isso é o suficiente para cunhar um NFT e, em seguida, transferi-lo.

response = requests.post(
   AIRDROP_ENDPOINT,
   params={
       'recipient_address': public_key
   },
   headers=HEADERS
)transaction_signature = response.json()['transaction_signature']
print(transaction_signature)
Enter fullscreen mode Exit fullscreen mode

A saída será algo como isso, representando uma assinatura de transação para a transação do airdrop na devnet.

zHgk845Bq1GAZDVoUbvWPfQtNe98anH2Ayk72wj2UAy1XmJbtWQHCsFzqHfMWWAWLNHjFLppxe8gooRYWUm4hjE
Enter fullscreen mode Exit fullscreen mode

Vamos escrever uma função create_nft() para criar um NFT para que possamos transferi-lo. Isso levará cerca de 60 segundos para cunhar.

def create_nft():
   response = requests.post(
       CREATE_NFT_ENDPOINT,
       params={
           'secret_recovery_phrase': secret_recovery_phrase,
           'network': 'devnet',
           'nft_name': "The Blockchain API",
           'nft_symbol': "BLOCKX",
           'nft_url':
"https://pbs.twimg.com/profile_images/1441903262509142018/_8mjWhho_400x400.jpg"
       },
       headers=HEADERS
   )
   print(response.json())    mint_address = response.json()['mint']
   print(f"NFT address: {mint_address}")
   return mint_address
Enter fullscreen mode Exit fullscreen mode

Agora chame a função.

mint_address = create_nft()
Enter fullscreen mode Exit fullscreen mode

A saída:

NFT address: {
   'update_authority': 'CtE7ofpQqEvf5WZX2R3P2V2pSJ6r1fjpsgb3Aq1KNUUV',
   'mint': 'DnUVmi4ydP9XEnZhdkrWc25dFixSiCxWmBTjyRz3GpKL',
   'data': {
       'name': 'The Blockchain API',
       'symbol': 'BLOCKX',
       'uri':
   'https://blockx-api-storage.s3.amazonaws.com/83055279955/data',    
       'seller_fee_basis_points': 0.0,
       'creators': [
           'CtE7ofpQqEvf5WZX2R3P2V2pSJ6r1fjpsgb3Aq1KNUUV'
       ],
       'verified': [1.0],
       'share': [100.0]
    },
    'primary_sale_happened': False,
    'is_mutable': True,
    'explorer_url':
'https://explorer.solana.com/address/DnUVmi4ydP9XEnZhdkrWc25dFixSiCxWmBTjyRz3GpKL?cluster=devnet',
    'mint_secret_recovery_phrase':
        'supreme define elbow focus review gate hood enact ripple bind banner fence'
}
NFT address: DnUVmi4ydP9XEnZhdkrWc25dFixSiCxWmBTjyRz3GpKL
Enter fullscreen mode Exit fullscreen mode

Agora podemos transferir o NFT. Use seu próprio endereço de chave pública ou o fornecido.

# Transfira para esse endereço
transfer_to = "31LKs39pjT5oj6fWjC3F76dHWf9489asCthmgj8wu7pj"
Enter fullscreen mode Exit fullscreen mode

Usando isso, podemos chamar o ponto de extremidade de transferência.

response = requests.post(
   TRANSFER_ENDPOINT,
   params={
       'secret_recovery_phrase': secret_recovery_phrase,
       'recipient_address': transfer_to,
       'token_address': mint_address
},
   headers=HEADERS
)transaction_signature = response.json()['transaction_signature']
print(transaction_signature)
Enter fullscreen mode Exit fullscreen mode

Saída:

61Wpy1aJLEeYh3ZPAiqmkMMdhRA3UKvs3WAhPyFhgCENRuHwMcAQT4cT5e2R3rcFFeRS8LZt1WHw6c9HoSU3nMXg
Enter fullscreen mode Exit fullscreen mode

Para confirmar que a transação foi realizada, vamos verificar na Solana através do explorer: https://explorer.solana.com/tx/61Wpy1aJLEeYh3ZPAiqmkMMdhRA3UKvs3WAhPyFhgCENRuHwMcAQT4cT5e2R3rcFFeRS8LZt1WHw6c9HoSU3nMXg?cluster=devnet

Se você rolar para baixo até “Saldos de Token”, poderá ver a “Mudança” na quantidade de tokens (-1 de um endereço, +1 para outro). O endereço do token deve corresponder ao mint_address (endereço de cunhagem) fornecido.

A coluna de endereço (coluna da esquerda) representa o endereço do token associado, que pertence aos endereços de chave pública que você forneceu (um para sua carteira, um para a carteira receptora). Você pode aprender mais sobre contas de token associadas aqui.

https://miro.medium.com/max/1100/1*ISAfPGvsNrJzO83e4i42lQ.webp

Se você tiver dúvidas, solicitações de recursos ou problemas, não hesite em entrar em contato por e-mail (info [[@]] theblockchainapi.com) ou outro método.

[Opcional] Etapa 3: use o wrapper Python da API Blockchain para transferir um NFT

Em vez disso, você pode usar o wrapper Python da API Blockchain para transferir um NFT. Isso pode facilitar o desenvolvimento em vez de ter que reescrever as funções que já agrupamos usando a biblioteca de solicitações. Para começar, instale nosso pacote PyPi.

pip install theblockchainapi
Enter fullscreen mode Exit fullscreen mode

Importe os pacotes necessários.

from theblockchainapi import TheBlockchainAPIResource, SolanaNetwork
Enter fullscreen mode Exit fullscreen mode

Inicialize o recurso com seu par de chaves de API.

MY_API_KEY_ID = "ID DA SUA CHAVE DE API"
MY_API_SECRET_KEY = "SUA CHAVE SECRETA DE API"
BLOCKCHAIN_API_RESOURCE = TheBlockchainAPIResource(
   api_key_id=MY_API_KEY_ID,
   api_secret_key=MY_API_SECRET_KEY
)
Enter fullscreen mode Exit fullscreen mode

Gere uma chave secreta e uma chave pública para fins de teste.

# Crie uma carteira
secret_key = BLOCKCHAIN_API_RESOURCE.generate_secret_key()
public_key = BLOCKCHAIN_API_RESOURCE.derive_public_key(
   secret_recovery_phrase=secret_key
)
print(f"Chave pública: {public_key}")
print(f"Chave secreta: {secret_key}")
Enter fullscreen mode Exit fullscreen mode

A saída deve ser parecer com isso:

Chave pública: FsHEuc8XKWzuPMyDxfJRYAEsfmGKYmVuXK3A3J56pn2P
Chave secreta: common electric hover affair abstract raccoon surprise brick advice various wall second
Enter fullscreen mode Exit fullscreen mode

Obtenha um airdrop de SOL na devnet para que possamos pagar pela cunhagem de um novo NFT.

BLOCKCHAIN_API_RESOURCE.get_airdrop(public_key)
Enter fullscreen mode Exit fullscreen mode

Agora, vamos criar um NFT.

def create_nft():
   response = BLOCKCHAIN_API_RESOURCE.create_nft(
       secret_recovery_phrase=secret_key,
       nft_name="The Blockchain API",
       nft_symbol="BLOCKX",
       nft_url=
"https://pbs.twimg.com/profile_images/1441903262509142018/_8mjWhho_400x400.jpg"
   )    print(response)    mint_address = response['mint']
   print(f"Mint address: {mint_address}")
   return mint_address
Enter fullscreen mode Exit fullscreen mode

Agora chame a função. Isso levará cerca de 60 segundos para cunhar.

mint_address = create_nft()
Enter fullscreen mode Exit fullscreen mode

A saída:

{
   'update_authority':
       'FsHEuc8XKWzuPMyDxfJRYAEsfmGKYmVuXK3A3J56pn2P',
   'mint': '5K6Pr1cv48mxgDczwJBVSpMxybLsJrme1dtcdmkuK1VG',
   'data': {
       'name': 'The Blockchain API',
       'symbol': 'BLOCKX',
       'uri':
   'https://blockx-api-storage.s3.amazonaws.com/68293087502/data',
       'seller_fee_basis_points': 0.0,
       'creators': [
           'FsHEuc8XKWzuPMyDxfJRYAEsfmGKYmVuXK3A3J56pn2P'
       ],   
       'verified': [1.0],
       'share': [100.0]
   },
   'primary_sale_happened': False,
   'is_mutable': True,
   'explorer_url':
'https://explorer.solana.com/address/5K6Pr1cv48mxgDczwJBVSpMxybLsJrme1dtcdmkuK1VG?cluster=devnet',
   'mint_secret_recovery_phrase': 'total later clock crane laptop pet chat humble runway rain music balcony'
}
Mint address: 5K6Pr1cv48mxgDczwJBVSpMxybLsJrme1dtcdmkuK1VG
Enter fullscreen mode Exit fullscreen mode

Vamos agora transferir o NFT. Use seu próprio endereço de chave pública ou o fornecido.

# Transfira para este endereço
transfer_to = "31LKs39pjT5oj6fWjC3F76dHWf9489asCthmgj8wu7pj"
Enter fullscreen mode Exit fullscreen mode

Preencha a função de transferência e imprima a assinatura.

# Chame o ponto de extremidade de transferência
transaction_signature = BLOCKCHAIN_API_RESOURCE.transfer(
   secret_recovery_phrase=secret_key,
   recipient_address=transfer_to,
   token_address=mint_address,
   network=SolanaNetwork.DEVNET
)
print(transaction_signature)
Enter fullscreen mode Exit fullscreen mode

A saída deve ser:

7yNN4oC8aM8gpLQGo2PWTF4gSuDoB988EeBTAYotm5Df5XZEA45m4MUw1AA7zG6La53d2GrVDnVuLNfuvH7xRsV
Enter fullscreen mode Exit fullscreen mode

Você pode ver esta transação na blockchain Solana aqui: https://explorer.solana.com/tx/7yNN4oC8aM8gpLQGo2PWTF4gSuDoB988EeBTAYotm5Df5XZEA45m4MUw1AA7zG6La53d2GrVDnVuLNfuvH7xRsV?cluster=devnet

Se você rolar para baixo até “Saldos de Token”, poderá ver a “Mudança” na quantidade de token (-1 de um endereço, +1 para outro). O endereço do token deve corresponder ao mint_address fornecido.

A coluna de endereço (coluna da esquerda) representa o endereço do token associado, que pertence aos endereços de chave pública que você forneceu (um para sua carteira, um para a carteira receptora). Você pode aprender mais sobre contas de token associadas aqui.

https://miro.medium.com/max/1100/1*87spng1_GwRzRzDZBZzMdA.webp

Se você tiver dúvidas, solicitações de recursos ou problemas, não hesite em entrar em contato por e-mail (info [[@]] theblockchainapi.com) ou outro método.

Artigo publicado por Josh Wolff. Traduzido por Paulinho Giovannini.

Oldest comments (0)