#solana #nft #metaplex
#solana #nft #метаплекс
Вопрос:
При использовании metaplex
auction-house
контракта некоторые пользователи не могут выполнить sell
команду. Подтверждено, что если то же NFT
самое отправляется на другой кошелек, с этим кошельком может sell
быть все в порядке.
Проблема, похоже, серьезная ATA
. Первоначально ATA
учетная запись, которая возвращалась через https://github.com/metaplex-foundation/metaplex/blob/b7760611d0838307757b831505eaaffee25b1b2a/js/packages/cli/src/auction-house-cli.ts#L260 не было owner
или token
внутри.
При отправке на другой кошелек все прошло нормально. https://explorer.solana.com/tx/GUybhU53qY56bu4j2raQyp7uecGLgaFge6GBvRNtX1u8gqDzocKk8MDg52upZV985UPW8FAregpwTv7JGyWdNwf
После ручной настройки ATA
все равно не помогло. https://explorer.solana.com/address/Cu6Dru1j6PZa3f9K2acuqsHcaVDRxniFVqPPk7WX7RaC
Похоже, из-за токена 0
.
Попытался найти правильное ATA
с помощью getTokenLargestAccounts
, но затем я получаю 0x12c
сообщение PublicKeyMismatch
.
Хотелось бы получить помощь в поиске стабильного способа завершения этого, это происходит со многими пользователями время от времени.
Ответ №1:
Код, который вы связали, getATAForMint
, фактически не создает ATA, поэтому owner
и token
не был заполнен.
Последующая транзакция, которую вы связали правильно, создает ATA, поэтому она выполняется успешно.
Итак, один из способов решить эту проблему:
- Прежде чем выполнять передачу своему пользователю, проверьте, существует ли учетная запись по адресу, возможно, вызвав
getAccountInfo
ATA: https://docs.solana.com/developing/clients/jsonrpc-api#getaccountinfo - проверка того, что
owner
поле является программой токена, заданнойTokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
. Более подробная информация о собственности на сайте: https://docs.solana.com/developing/programming-model/accounts#ownership-and-assignment-to-programs - если учетная запись существует, отлично, ничего не нужно делать. Если она не существует, вам нужно добавить инструкцию для создания связанной учетной записи токена, т.е. через какой-нибудь вызов, подобный этому: https://github.com/solana-labs/solana-program-library/blob/8eb2c3ce60bfe943e277eb172ba8e9ce9b6bdae6/token/js/client/token.js#L494
Комментарии:
1. Извините, я не следил. Я добавил проверку, что ATA == largestTokenAccount и существует ли ATA. Создаст ATA и передаст в NFT по мере необходимости.