Ошибка отправки транзакции Solana: -32002 или ошибка инструкции обработкиC#

Место общения программистов C#
Ответить
Anonymous
 Ошибка отправки транзакции Solana: -32002 или ошибка инструкции обработки

Сообщение Anonymous »

Я пытаюсь отправить транзакции Solana, но получаю следующую ошибку. Не удалось отправить транзакцию покупки: Причина: Ошибка моделирования транзакции: Ошибка обработки. Инструкция 0: Ошибка пользовательской программы: 0xbc4. Результат: Ошибка: -32002 Результат: Причина: Моделирование транзакции. Ошибка: ошибка обработки. Инструкция 0: ошибка пользовательской программы: 0xbc4. Я нашел код ошибки -32002 на сайте Соланы, и он гласит: «Это ошибка предполетной проверки». Это означает, что отправляемая вами транзакция содержит ошибки, вам нужно будет дважды проверить параметры, подпись и т. д. .
Теперь мне удалось отправить транзакцию ATA без проблем, но затем, когда я пошел отправлять фактическую транзакцию, произошел сбой. Транзакция ATA использовала одни и те же связанныеTokenAddress, _wallet.Account, mintKey и _wallet.Account.PublicKey, поэтому я знаю, что они верны. Я также сначала проверил свой баланс, и у меня его больше, чем рассчитанное maxSolLamports, даже с учетом комиссий. Кто-нибудь знает возможную причину этой ошибки?

Код: Выделить всё

private const ulong BUY_DISCRIMINATOR = 16927863322537952870;

double tokenPrice = token.VirtualSolReserves / token.VirtualTokenReserves;
double tokensToBuy = solToSpend / tokenPrice;
ulong tokenAmountLamports = (ulong)(tokensToBuy * TradeTokenData.TokenLamports);
ulong maxSolLamports = (ulong)(solToSpend * TradeTokenData.SolLamports * slippage);

byte[] buyData = new byte[24];
Buffer.BlockCopy(BitConverter.GetBytes(BUY_DISCRIMINATOR), 0, buyData, 0, 8);
Buffer.BlockCopy(BitConverter.GetBytes(tokenAmountLamports), 0, buyData, 8, 8);
Buffer.BlockCopy(BitConverter.GetBytes(maxSolLamports), 0, buyData, 16, 8);

Form1.DebugMessages.Add($"Buying Rn TokenPrice:{tokenPrice} TokensToBuy:{tokensToBuy} LamportAmount:{tokenAmountLamports} MaxSolLamparts:{maxSolLamports} " +
$"VirtualSol:{token.VirtualSolReserves} VirtualTokens:{token.VirtualTokenReserves}");

TransactionInstruction buyInstruction = new TransactionInstruction
{
ProgramId = PUMP_PROGRAM_KEY.KeyBytes,
Keys = new List
{
AccountMeta.ReadOnly(PUMP_GLOBAL_KEY, false),
AccountMeta.Writable(PUMP_FEE_KEY, false),
AccountMeta.ReadOnly(mintKey, false),
AccountMeta.Writable(new PublicKey(token.BondingCurve), false),
AccountMeta.Writable(new PublicKey(token.AssociatedBondingCurve), false),
AccountMeta.Writable(associatedTokenAddress, false),
AccountMeta.Writable(_wallet.Account.PublicKey, true),
AccountMeta.ReadOnly(SYSTEM_PROGRAM_KEY, false),
AccountMeta.ReadOnly(SYSTEM_TOKEN_PROGRAM_KEY, false),
AccountMeta.ReadOnly(SYSTEM_RENT_KEY, false),
AccountMeta.ReadOnly(PUMP_EVENT_AUTHORITY_KEY, false),
AccountMeta.ReadOnly(PUMP_PROGRAM_KEY, false),
},
Data = buyData
};

Transaction transaction = new Transaction();
transaction.Add(buyInstruction);
transaction.FeePayer = _wallet.Account.PublicKey;
transaction.RecentBlockHash = recentBlockhash;

transaction.Sign(_wallet.Account);

var sendResponse = await rpcClient.SendTransactionAsync(transaction.Serialize(), skipPreflight: false); //, Commitment.Processed
if (!sendResponse.WasSuccessful)
{
Form1.DebugMessages.Add($"Failed to send buy transaction: Reason{sendResponse.Reason} Result:{sendResponse.Result} Error:{sendResponse.ServerErrorCode} Result:{sendResponse.Result} Reason:{sendResponse.Reason}");
throw new Exception($"Failed to send buy transaction: Reason{sendResponse.Reason}");
}
Также, когда при отправке транзакций следует использовать «Обработано», а не «Завершено», каковы плюсы и минусы каждого из них при отправке транзакций?

Подробнее здесь: https://stackoverflow.com/questions/792 ... tion-error
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»