Пакет 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, и он должен работать без каких-либо дополнительных изменений.

Другие вопросы по тегам