Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

133
Vistas
¿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
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda