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
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
}
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"
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)
A saída deve ser parecida com isso:
home man chat enroll nice limit refuse base foam reduce gossip chief
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)
A saída:
CtE7ofpQqEvf5WZX2R3P2V2pSJ6r1fjpsgb3Aq1KNUUV
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)
A saída será algo como isso, representando uma assinatura de transação para a transação do airdrop na devnet.
zHgk845Bq1GAZDVoUbvWPfQtNe98anH2Ayk72wj2UAy1XmJbtWQHCsFzqHfMWWAWLNHjFLppxe8gooRYWUm4hjE
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
Agora chame a função.
mint_address = create_nft()
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
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"
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)
Saída:
61Wpy1aJLEeYh3ZPAiqmkMMdhRA3UKvs3WAhPyFhgCENRuHwMcAQT4cT5e2R3rcFFeRS8LZt1WHw6c9HoSU3nMXg
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.
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
Importe os pacotes necessários.
from theblockchainapi import TheBlockchainAPIResource, SolanaNetwork
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
)
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}")
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
Obtenha um airdrop de SOL na devnet para que possamos pagar pela cunhagem de um novo NFT.
BLOCKCHAIN_API_RESOURCE.get_airdrop(public_key)
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
Agora chame a função. Isso levará cerca de 60 segundos para cunhar.
mint_address = create_nft()
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
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"
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)
A saída deve ser:
7yNN4oC8aM8gpLQGo2PWTF4gSuDoB988EeBTAYotm5Df5XZEA45m4MUw1AA7zG6La53d2GrVDnVuLNfuvH7xRsV
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.
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.
Top comments (0)