Estaba escribiendo una prueba en TypeScript para sumar dos números. Estoy recibiendo el siguiente error:
Adds two numbers: TypeError: Cannot read properties of undefined (reading 'rpc') at Context.<anonymous> (tests/calculator.ts:33:19) at Generator.next (<anonymous>) at /mnt/e/solana/calculator/tests/calculator.ts:7:71 at new Promise (<anonymous>) at __awaiter (tests/calculator.ts:3:12) at Context.<anonymous> (tests/calculator.ts:35:16) at processImmediate (node:internal/timers:473:21)El siguiente es el código:
const Anchor = require('@project-serum/anchor'); describe('calculator',() => { const provider = Anchor.Provider.local(); Anchor.setProvider(provider); const calculator = Anchor.web3.Keypair.generate(); const program = Anchor.workspace.calculator; var _calculator; it('Creates a calculator', async() => { await program.rpc.create("Welcome to My calculator",{ accounts: { calculator: calculator.publicKey, user: provider.wallet.publicKey, SystemProgram: SystemProgram.programId, }, signers: [calculator] }); const account = await program.account.calculator.fetch(calculator.publicKey); assert.ok(account.greeting === "Welcome to My calculator"); _calculator = calculator; });Esto está funcionando en la cadena de bloques Solana usando ancla-cli. ¿Alguien puede ayudar?
El program no está definido. Eso significa que esta línea de código tiene un problema.
const program = Anchor.workspace.calculator;Anchor escribe en mayúscula el nombre del contrato. por lo que debería ser "Calculadora"
const program = Anchor.workspace.Calculator;importe AnchorProvider desde @project-serum/anchor y asígnele un proveedor en su lugar, como:
const provider = AnchorProvider.local()Creo que esto debería resolver el problema. Si tiene un error con systemProgram, importe web3 desde ancla de manera similar.