This commit is contained in:
Dobromir Popov 2024-11-12 13:25:49 +02:00
parent d9395a030c
commit 291a5fed2c

View File

@ -756,7 +756,7 @@ class SolanaAPI:
if self.pk is None:
self.pk = await get_pk()
for retry in range(3):
for retry in range(1):
try:
private_key = Keypair.from_bytes(base58.b58decode(self.pk))
async_client = AsyncClient(SOLANA_WS_URL)
@ -806,59 +806,59 @@ class SolanaAPI:
# )
# working - no priority fee
# signature = private_key.sign_message(message.to_bytes_versioned(raw_transaction.message))
# signed_txn = VersionedTransaction.populate(raw_transaction.message, [signature])
signature = private_key.sign_message(message.to_bytes_versioned(raw_transaction.message))
signed_txn = VersionedTransaction.populate(raw_transaction.message, [signature])
# # # # # # # # # # # # # # # # # #
# new - not working
# signature = private_key.sign_message(new_message.to_bytes_versioned())
# signed_txn = VersionedTransaction.populate(new_message, [signature])
from solders.compute_budget import set_compute_unit_price, ID as COMPUTE_BUDGET_ID
# from solders.compute_budget import set_compute_unit_price, ID as COMPUTE_BUDGET_ID
priority_fee_ix = set_compute_unit_price(priority_fee)
# priority_fee_ix = set_compute_unit_price(priority_fee)
# Get the current message
msg = raw_transaction.message
# # Get the current message
# msg = raw_transaction.message
new_account_keys = msg.account_keys
program_id_index = 0
if COMPUTE_BUDGET_ID not in msg.account_keys:
new_account_keys = msg.account_keys + [COMPUTE_BUDGET_ID]
program_id_index = len(msg.account_keys) # Index of the newly added program ID
else:
new_account_keys = msg.account_keys
program_id_index = msg.account_keys.index(COMPUTE_BUDGET_ID)
# new_account_keys = msg.account_keys
# program_id_index = 0
# if COMPUTE_BUDGET_ID not in msg.account_keys:
# new_account_keys = msg.account_keys + [COMPUTE_BUDGET_ID]
# program_id_index = len(msg.account_keys) # Index of the newly added program ID
# else:
# new_account_keys = msg.account_keys
# program_id_index = msg.account_keys.index(COMPUTE_BUDGET_ID)
# Compile the priority fee instruction
compiled_priority_fee_ix = CompiledInstruction(
program_id_index=program_id_index,
accounts=bytes([]),
data=priority_fee_ix.data
)
# # Compile the priority fee instruction
# compiled_priority_fee_ix = CompiledInstruction(
# program_id_index=program_id_index,
# accounts=bytes([]),
# data=priority_fee_ix.data
# )
# Add priority fee instruction at the beginning
new_instructions = [compiled_priority_fee_ix] + msg.instructions
# # Add priority fee instruction at the beginning
# new_instructions = [compiled_priority_fee_ix] + msg.instructions
# Create new message with updated instructions
new_message = Message.new_with_compiled_instructions(
num_required_signatures=msg.header.num_required_signatures,
num_readonly_signed_accounts=msg.header.num_readonly_signed_accounts,
num_readonly_unsigned_accounts=msg.header.num_readonly_unsigned_accounts,
account_keys=new_account_keys,
recent_blockhash=msg.recent_blockhash,
instructions=new_instructions
)
# # Create new message with updated instructions
# new_message = Message.new_with_compiled_instructions(
# num_required_signatures=msg.header.num_required_signatures,
# num_readonly_signed_accounts=msg.header.num_readonly_signed_accounts,
# num_readonly_unsigned_accounts=msg.header.num_readonly_unsigned_accounts,
# account_keys=new_account_keys,
# recent_blockhash=msg.recent_blockhash,
# instructions=new_instructions
# )
#signature = private_key.sign_message(new_message.to_bytes_versioned())
signature = private_key.sign_message(message.to_bytes_versioned(new_message))
signed_txn = VersionedTransaction.populate(new_message, [signature])
# signature = private_key.sign_message(message.to_bytes_versioned(new_message))
# signed_txn = VersionedTransaction.populate(new_message, [signature])
# # # # # # # # # # # # # # # # # #
opts = TxOpts(
skip_preflight=False,
preflight_commitment=Processed,
# max_retries=10,
# priority_fee =fee.value
)
# send the transaction
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts )
result = await async_client.send_raw_transaction(txn=bytes(signed_txn), opts=opts)
transaction_id = json.loads(result.to_json())['result']
notification = f"Follow Transaction Sent:\n<b>Transaction:</b> <a href='https://solscan.io/tx/{transaction_id}'>swapping {amount_to_swap:.2f} {token_name_in}</a>"