This is my code, how can I solve the swap problem?
import requests
import base64
from base58 import b58decode
from solana.rpc.api import Client
from solana.transaction import Transaction
from solders.keypair import Keypair
import json
# Solana Configuration
solana_client = Client("/?api-key=API") # You may use a different endpoint if needed
private_key_base58 = "KEY" # Private Key
private_key_bytes = b58decode(private_key_base58) # Base58
# Jupiter API Configuration
JUPITER_API_URL = ";
SWAP_API_URL = ";
# Slippage
slippage = 0.1 # 10%
# Private Key 64 bytes
if len(private_key_bytes) == 64:
payer = Keypair.from_bytes(private_key_bytes)
print(f"Public Key: {payer.pubkey()}")
else:
print("Error: Private key length is invalid. It should be 64 bytes.")
amount_to_swap = 0.01 # SOL
# ========== FUNCTIONALITY ==========
# Contract Address
def extract_contract_address(message):
pattern = r'\b[1-9A-HJ-NP-Za-km-z]{32,44}\b'
match = re.search(pattern, message)
if match:
return match.group(0)
return None
# quote from Jupiter API
def get_quote(input_mint, output_mint, amount, slippage):
params = {
'inputMint': input_mint,
'outputMint': output_mint,
'amount': str(int(amount * 10**9)), # Convert to lamports
'slippageBps': str(int(slippage * 10000)) # slippage in bps
}
response = requests.get(JUPITER_API_URL, params=params)
if response.status_code == 200:
data = response.json()
print("Quote Data:", json.dumps(data, indent=2)) # ดูข้อมูลตอบกลับทั้งหมด
if 'swapTransaction' in data:
print("Swap Transaction:", data['swapTransaction'])
else:
print("No swapTransaction found in response.")
return data
else:
print(f"Error fetching quote: {response.status_code}")
return None
# swap to Jupiter API
def swap_sol_to_token(input_amount, input_token_mint, output_token_mint):
print(f"Swapping {input_amount} SOL for Token at Contract Address: {output_token_mint}...")
try:
# Quote from Jupiter API
quote_data = get_quote(input_token_mint, output_token_mint, input_amount, slippage)
if not quote_data:
print("Error: No valid data received from the quote API.")
return
# Check swapTransaction
if 'swapTransaction' not in quote_data or not quote_data['swapTransaction']:
print("Error: No swapTransaction found in response.")
print("Quote Response Data:", json.dumps(quote_data, indent=2))
return
swap_transaction = quote_data['swapTransaction']
print(f"Swap transaction data: {swap_transaction}")
# Step 1: swap to Jupiter API
swap_payload = {
'quoteResponse': quote_data,
'userPublicKey': str(payer.pubkey())
}
swap_response = requests.post(SWAP_API_URL, json=swap_payload)
swap_response_data = swap_response.json()
if swap_response.status_code == 200 and swap_response_data.get('swapTransaction'):
swap_transaction = swap_response_data['swapTransaction']
print(f"Swap Transaction: {swap_transaction}")
# Step 2: Sendtx to Solana Blockchain
raw_transaction = base64.b64decode(swap_transaction)
transaction = Transaction.deserialize(raw_transaction)
transaction.sign([payer])
# blockhash
bh_info = solana_client.get_latest_blockhash()
transaction.recent_blockhash = bh_info['result']['value']['blockhash']
# send
result = solana_client.send_raw_transaction(transaction.serialize())
print(f"Transaction sent: /{result}")
else:
print(f"Error: {swap_response_data}")
except Exception as e:
print(f"Error during swap: {e}")
# Call Swap
swap_sol_to_token(amount_to_swap, "So11111111111111111111111111111111111111112", "3Buxeks8WjH9ermFa7a6AUrJcXX6EZ4Bb6xDUNzipump")
I running this code and got a problem. I don't know how to fix it.
No swapTransaction found in response.
Error: No swapTransaction found in response.
Quote Response Data: {
"inputMint": "So11111111111111111111111111111111111111112",
"inAmount": "10000000",
"outputMint": "3Buxeks8WjH9ermFa7a6AUrJcXX6EZ4Bb6xDUNzipump",
"outAmount": "44969051989",
"otherAmountThreshold": "40472146791",
"swapMode": "ExactIn",
"slippageBps": 1000,
"platformFee": null,
"priceImpactPct": "0",
"routePlan": [
{
"swapInfo": {
"ammKey": "Dgt4UcEBzuR5f7VE2NrCyyQthEuWNzxsqf7pszSod1Sc",
"label": "Raydium",
"inputMint": "So11111111111111111111111111111111111111112",
"outputMint": "3Buxeks8WjH9ermFa7a6AUrJcXX6EZ4Bb6xDUNzipump",
"inAmount": "10000000",
"outAmount": "44969051989",
"feeAmount": "25000",
"feeMint": "So11111111111111111111111111111111111111112"
},
"percent": 100
}
],
"scoreReport": null,
"contextSlot": 304109036,
"timeTaken": 0.000388887
}
Ignore it:
It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.
This is my code, how can I solve the swap problem?
import requests
import base64
from base58 import b58decode
from solana.rpc.api import Client
from solana.transaction import Transaction
from solders.keypair import Keypair
import json
# Solana Configuration
solana_client = Client("https://mainnet.helius-rpc/?api-key=API") # You may use a different endpoint if needed
private_key_base58 = "KEY" # Private Key
private_key_bytes = b58decode(private_key_base58) # Base58
# Jupiter API Configuration
JUPITER_API_URL = "https://quote-api.jup.ag/v6/quote"
SWAP_API_URL = "https://quote-api.jup.ag/v6/swap"
# Slippage
slippage = 0.1 # 10%
# Private Key 64 bytes
if len(private_key_bytes) == 64:
payer = Keypair.from_bytes(private_key_bytes)
print(f"Public Key: {payer.pubkey()}")
else:
print("Error: Private key length is invalid. It should be 64 bytes.")
amount_to_swap = 0.01 # SOL
# ========== FUNCTIONALITY ==========
# Contract Address
def extract_contract_address(message):
pattern = r'\b[1-9A-HJ-NP-Za-km-z]{32,44}\b'
match = re.search(pattern, message)
if match:
return match.group(0)
return None
# quote from Jupiter API
def get_quote(input_mint, output_mint, amount, slippage):
params = {
'inputMint': input_mint,
'outputMint': output_mint,
'amount': str(int(amount * 10**9)), # Convert to lamports
'slippageBps': str(int(slippage * 10000)) # slippage in bps
}
response = requests.get(JUPITER_API_URL, params=params)
if response.status_code == 200:
data = response.json()
print("Quote Data:", json.dumps(data, indent=2)) # ดูข้อมูลตอบกลับทั้งหมด
if 'swapTransaction' in data:
print("Swap Transaction:", data['swapTransaction'])
else:
print("No swapTransaction found in response.")
return data
else:
print(f"Error fetching quote: {response.status_code}")
return None
# swap to Jupiter API
def swap_sol_to_token(input_amount, input_token_mint, output_token_mint):
print(f"Swapping {input_amount} SOL for Token at Contract Address: {output_token_mint}...")
try:
# Quote from Jupiter API
quote_data = get_quote(input_token_mint, output_token_mint, input_amount, slippage)
if not quote_data:
print("Error: No valid data received from the quote API.")
return
# Check swapTransaction
if 'swapTransaction' not in quote_data or not quote_data['swapTransaction']:
print("Error: No swapTransaction found in response.")
print("Quote Response Data:", json.dumps(quote_data, indent=2))
return
swap_transaction = quote_data['swapTransaction']
print(f"Swap transaction data: {swap_transaction}")
# Step 1: swap to Jupiter API
swap_payload = {
'quoteResponse': quote_data,
'userPublicKey': str(payer.pubkey())
}
swap_response = requests.post(SWAP_API_URL, json=swap_payload)
swap_response_data = swap_response.json()
if swap_response.status_code == 200 and swap_response_data.get('swapTransaction'):
swap_transaction = swap_response_data['swapTransaction']
print(f"Swap Transaction: {swap_transaction}")
# Step 2: Sendtx to Solana Blockchain
raw_transaction = base64.b64decode(swap_transaction)
transaction = Transaction.deserialize(raw_transaction)
transaction.sign([payer])
# blockhash
bh_info = solana_client.get_latest_blockhash()
transaction.recent_blockhash = bh_info['result']['value']['blockhash']
# send
result = solana_client.send_raw_transaction(transaction.serialize())
print(f"Transaction sent: https://explorer.solana/tx/{result}")
else:
print(f"Error: {swap_response_data}")
except Exception as e:
print(f"Error during swap: {e}")
# Call Swap
swap_sol_to_token(amount_to_swap, "So11111111111111111111111111111111111111112", "3Buxeks8WjH9ermFa7a6AUrJcXX6EZ4Bb6xDUNzipump")
I running this code and got a problem. I don't know how to fix it.
No swapTransaction found in response.
Error: No swapTransaction found in response.
Quote Response Data: {
"inputMint": "So11111111111111111111111111111111111111112",
"inAmount": "10000000",
"outputMint": "3Buxeks8WjH9ermFa7a6AUrJcXX6EZ4Bb6xDUNzipump",
"outAmount": "44969051989",
"otherAmountThreshold": "40472146791",
"swapMode": "ExactIn",
"slippageBps": 1000,
"platformFee": null,
"priceImpactPct": "0",
"routePlan": [
{
"swapInfo": {
"ammKey": "Dgt4UcEBzuR5f7VE2NrCyyQthEuWNzxsqf7pszSod1Sc",
"label": "Raydium",
"inputMint": "So11111111111111111111111111111111111111112",
"outputMint": "3Buxeks8WjH9ermFa7a6AUrJcXX6EZ4Bb6xDUNzipump",
"inAmount": "10000000",
"outAmount": "44969051989",
"feeAmount": "25000",
"feeMint": "So11111111111111111111111111111111111111112"
},
"percent": 100
}
],
"scoreReport": null,
"contextSlot": 304109036,
"timeTaken": 0.000388887
}
Ignore it:
It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.It looks like your post is mostly code; please add some more details.
Share Improve this question asked Nov 28, 2024 at 10:08 Narakorn BoonrasriNarakorn Boonrasri 11 Answer
Reset to default 1You are trying to get swapTransaction
prop from quote response. Quote response does not contain prepared transaction. You need pass entire quote response object to /swap
endpoint and then you will get swapTransaction
. Official Jupiter documentation is here.