【问题标题】:SolanaWeb 3.js package TypeError: s.TransactionInstruction is not a constructorSolanaWeb 3.js 包 TypeError: s.TransactionInstruction 不是构造函数
【发布时间】:2022-01-10 12:31:37
【问题描述】:

我正在开发一种借贷协议的前端,用户可以在其中列出要在 Solana 上借贷的 NFT。我在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,因为我正在使用 Dart-JS 互操作在 Flutter 中进行开发。所以我不得不使用 Browserify/Esmify 包来捆绑所有需要的包并将它们暴露给互操作。也许这与问题有关。

【问题讨论】:

  • 你找到解决办法了吗?
  • @ShivekKhurana 还没有,但如果我愿意,我会在这里发帖
  • 我已经找到了解决方案。在下面检查我的答案。

标签: javascript flutter-web solana dart-js-interop solana-web3js


【解决方案1】:

我在使用 ClojureScript 时遇到了这个错误,在摸索 3 天后,我找到了解决方案。

anchor-ts 客户端使用rollup 为浏览器捆绑 ts 代码。在捆绑的过程中,它通过一个名为rollup-plugin-terser的缩小/丑化插件传递代码。

精简程序以重用分配给@solana/web3.js 导入的变量的方式对代码进行调整。

ie:在最终输出中会发生类似的情况

var s = require("@solana/web3.js")

function x() {
  var s, a, b; // ----> redefined s
  ...
  s.TransactionInstruction() // ----> calls method on original s
}

我分叉了锚并摆脱了 terser 插件。这为我解决了错误。

【讨论】:

    【解决方案2】:

    我遵循了 fork 并删除 terser 插件的建议,它也对我有用!

    注意:rollup 是在 v0.19.0 中引入的,因此您可以尝试将 @project-serum/anchor 解析为 0.18.2 版本,它应该可以正常工作而无需任何进一步的更改。

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 2019-08-14
      • 2018-06-27
      • 2016-04-16
      • 2021-11-26
      • 2019-10-27
      • 2018-07-18
      相关资源
      最近更新 更多