Пакет SolanaWeb 3.js TypeError: s.TransactionInstruction не является конструктором
Я разрабатываю внешний интерфейс для кредитного протокола, в котором пользователи перечисляют NFT для кредитования на Solana. я получаю сообщение об ошибке
createListing
:
await program.instruction.createListing(
listingBump,
params, {
accounts: {
owner: wallet.publicKey,
listing: listingPubkey,
nftAccount: shipAccount,
nftMint: shipMint.publicKey,
collateralMint: collateralMint.publicKey,
feeDestination: feeDestination,
feeMint: atlasMint.publicKey,
tokenProgram: TOKEN_PROGRAM_ID,
systemProgram: SystemProgram.programId,
},
signers: [wallet]
});
Это ошибка:
Error while creating the listing TypeError: s.TransactionInstruction is not a constructor at Object.r [as createListing] (main-packed.js:1175) at Object.createListing (solana.js:915)
и вот провоцирующая его строчка (на упаковке):
var Y = Object.freeze({
__proto__: null,
invoke: async function (t, e, n, i) {
t = Q(t), i || (i = w());
const s = new s.Transaction();
return s.add(new s.TransactionInstruction({
programId: t,
keys: null != e ? e : [],
data: n
})), await i.send(s);
},
getMultipleAccounts: H
});
Я не уверен, что провоцирует ошибку. Кроме того, следует отметить, что я использую простой JS, потому что я разрабатываю Flutter, используя взаимодействие Dart-JS. Поэтому я вынужден использовать пакет Browserify/Esmify для объединения всех необходимых пакетов и предоставления их для взаимодействия. Возможно, это связано с проблемой.
2 ответа
Я получил эту ошибку с ClojureScript и, почесав голову в течение 3 дней, нашел решение.
The
anchor-ts
клиент использует
rollup
чтобы связать код ts для браузера. В процессе сборки он пропускает код через плагин минификации/угификации, который называется
rollup-plugin-terser
.
Краткий изменяет код таким образом, что переменная, назначенная для импорта
@solana/web3.js
используется повторно.
то есть: что-то подобное происходит в конечном выводе
var s = require("@solana/web3.js")
function x() {
var s, a, b; // ----> redefined s
...
s.TransactionInstruction() // ----> calls method on original s
}
Я разветвил якорь и избавился от краткого плагина. Это исправило ошибку для меня.
Я последовал предложению разветвить его и удалить
terser
плагин, и он также работал для меня!
Примечание: накопительный пакет был представлен в версии 0.19.0, поэтому вы можете попробовать преобразовать @project-serum/anchor в версию 0.18.2, и он должен работать без каких-либо дополнительных изменений.