Estoy desarrollando el front-end para un protocolo de préstamo donde los usuarios enumeran NFT para prestar en Solana. Recibo un error en 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] }); Este es el error: 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) y esto es la línea que lo provoca (en el paquete):
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 });No estoy seguro de qué está provocando el error. Además, se debe tener en cuenta que estoy usando JS simple porque estoy desarrollando en Flutter usando la interoperabilidad Dart-JS. Por lo tanto, me veo obligado a usar el paquete Browserify/Esmify para agrupar todos los paquetes necesarios y exponerlos a la interoperabilidad. Tal vez esto esté relacionado con el problema.
Recibí este error con ClojureScript y después de rascarme la cabeza durante 3 días encontré una solución.
El cliente anchor-ts utiliza el paquete rollup para agrupar el código TS para el navegador. En el proceso de empaquetado, pasa el código a través de un complemento de minificación/auglificación llamado rollup-plugin-terser .
El terser transforma el código de manera que se reutiliza la variable asignada a la importación de @solana/web3.js .
es decir: algo como esto sucede en la salida final
var s = require("@solana/web3.js") function x() { var s, a, b; // ----> redefined s ... s.TransactionInstruction() // ----> calls method on original s }Bifurqué el ancla y me deshice del complemento terser. Eso solucionó el error para mí.
¡Seguí la sugerencia de bifurcarlo y eliminar el complemento terser y también funcionó para mí!
Nota: el resumen se introdujo en v0.19.0 , por lo que puede intentar resolver @project-serum/anchor a la versión 0.18.2 y debería funcionar sin necesidad de realizar más cambios.