Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

136
Views
¿Cómo crea una función para transferir Solana en Rust y luego la llama en su script de prueba?

Contexto

Estoy creando una dApp donde los usuarios pueden publicar GIF en la cadena Solana y quiero agregar un botón que le permita a un usuario que tiene su billetera conectada transferir exactamente 0.01 SOL a otro usuario que haya publicado un GIF que le guste. Estoy tratando de escribir la función send_sol en mi programa Rust, pero sigo recibiendo errores cuando ejecuto la anchor test la que no he podido encontrar una solución (soy nuevo en Rust).

Rust función send_sol

Leí que así es como debería escribirse esta función, así es como la escribí:

 pub fn send_sol(ctx: Context<SendSol>, amount: u64) -> ProgramResult { let ix = anchor_lang::solana_program::system_instruction::transfer( &ctx.accounts.from.key(), &ctx.accounts.to.key(), amount, ); anchor_lang::solana_program::program::invoke( &ix, &[ ctx.accounts.from.to_account_info(), ctx.accounts.to.to_account_info(), ], ) }

Sin embargo, cuando ejecuté anchor test , recibí este error:

 error[E0412]: cannot find type `ProgramResult` in this scope

Así que reescribí ProgramResult a Result <()> , pero luego recibí este error:

 error[E0308]: mismatched types ----------- expected `std::result::Result<(), anchor_lang::error::Error>` because of return type

Intenté agregar todo lo que el error decía que faltaba, pero siempre recibía un nuevo error. Este es el problema principal, pero también estoy confundido sobre cómo probar esta función si consigo que funcione.

función de prueba

Esta es mi prueba actual donde baseAccount = anchor.web3.Keypair.generate(); y el parámetro to es la clave pública de mi billetera secundaria:

 const lamportsToSend = LAMPORTS_PER_SOL / 100; await program.rpc.sendSol(lamportsToSend, { accounts: { from: baseAccount, to: "GiDPb7nxAUCy3nQoFYhHX17PSw74wbqdCNoof5PZJC2w", systemProgram: SystemProgram.programId, }, });

Sin embargo, no estoy seguro de si estoy pasando los parámetros correctamente o si debería usar baseAccount en el parámetro from .

Conclusión

Esta es mi primera pregunta de desbordamiento de pila, así que lo siento por esta estructura de pregunta enrevesada. Principalmente quiero saber cómo necesito estructurar mi función send_sol para dejar de recibir los errores de parámetro, pero cualquier ayuda con mi script de prueba también sería muy apreciada.

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!