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).
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 typeIntenté 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.
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 .
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.