Отправка транзакций solana с помощью python

#python #solana

Вопрос:

Я хочу купить монеты Solana и nft с помощью python, и я не уверен, как именно работают транзакции через блокчейн. Допустим, я хочу совершить эту транзакцию: https://solscan.io/tx/5fzuhifWuBFRPtRGHRRsWsJVHuoxcgEN4USzNBu3ZS8VxwL6Fdw8BFaqU4iAEGibQpEAJyG19QhB335K1HiRtQWX и это мой код:

 import solana.system_program as sp
from solana.publickey import PublicKey
from solana.account import Account
from solana.rpc.api import Client
from solana.transaction import Transaction, TransactionInstruction, AccountMeta

# keypair = your key pair
cli = Client('https://solana-api.projectserum.com')
account = Account(keypair[:32])
new_account = Account()
print(new_account.public_key())
print(new_account.keypair())
transaction = Transaction()
transaction.add(sp.create_account(sp.CreateAccountParams(
        from_pubkey=account.public_key(),
        new_account_pubkey=new_account.public_key(),
        lamports=cli.get_minimum_balance_for_rent_exemption(88).get('result'),
        space=88,
        program_id=PublicKey('CJsLwbP1iu5DuUikHEJnLfANgKy6stB2uFgvBBHoyxwz'),
    )))
send_tx = cli.send_transaction(transaction, new_account)
print(send_tx)
 

Я знаю, что сейчас в моем тестовом кошельке недостаточно соланы, но это больше касается общего способа отправки транзакций и взаимодействия с идентификаторами программ. Есть некоторые данные, приведенные в sollet.io транзакция, но я не уверен, нужно ли мне отправлять и это тоже? И если мне придется, где именно и как я могу это включить? Меняются ли данные для каждой транзакции?
Я получаю сообщение об ошибке:

{'code': -32602, 'message': 'invalid transaction: index out of bounds'}

Комментарии:

1. Что такое program_id в этом? Я пытался сделать то же самое. Не удалось найти идентификатор программы

2. Проверьте ссылку в моем вопросе и ответ Джона Чинкве. Это открытый ключ программы.

3. Эй, я пытаюсь понять, куда вы положили сумму, которую пытаетесь отправить в этой транзакции, это 88?

Ответ №1:

Здесь вы на правильном пути. Если вы хотите имитировать транзакцию, аналогичную той, на которую ссылается Solscan, вам нужно будет создать правильную инструкцию, включая закодированные данные и учетные записи, на которые ссылаются. Это будет немного сложно без доступных привязок Python, но, исходя из примера, это, вероятно, будет выглядеть немного похоже:

 transaction = Transaction()
transaction.add(TransactionInstruction(
    [AccountMeta(PublicKey("3LdbrFBY7sZ71MtuZhrMzK4YLgxNcTrQ5wLNZHs7r85T"), False, False), AccountMeta(PublicKey("FABkSFDkF3Wz3CpC5JTmw44jeKvXKQvXgXFCyxhAE46X"), False, False), ...],
    PublicKey("CJsLwbP1iu5DuUikHEJnLfANgKy6stB2uFgvBBHoyxwz"),
    bytearray.fromhex('050000000000000000')
))
 

Важные вещи, которые следует отметить:

  • первое поле-это список AccountMeta s, такой же, как в той транзакции, которую вы связали
  • второе поле-это открытый ключ программы
  • последнее поле-это «данные инструкции».

Вам также придется предоставить действительного подписавшего / плательщика для транзакции, но после этого она должна быть завершена!

Комментарии:

1. Классно! Большое вам спасибо за ваш ответ. У вас есть идеи, где или как я могу узнать о том, как работает солана? Я должен сказать, что я был довольно ошеломлен, когда пытался кодировать транзакции и т. Д. И я не уверен, как я могу предоставить подписавшего/плательщика.

2. Конечно! Сначала я бы рекомендовал вам присоединиться к Раздору Соланы и взглянуть на канал #dev-ресурсы. Это даст вам учебные пособия и документы для просмотра. discord.gg/TPQ2yXpu

3. Есть идеи, где я могу найти дополнительную информацию о том, что положить в the last field is the "instruction data" ? Большое спасибо!!

4. Кто — то недавно опубликовал руководство, которое отлично объясняет это, взгляните на dev.to/cogoo/…