es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Solana Anchor: ¿cómo puede un programa verificar la asignación de tokens aprobados proporcionada por un usuario?

Estoy tratando de trasladar la función de asignación de Ethereum al programa de Solana,

token.allowance(msg.sender, address(this))

parece que no existe esa función de asignación en Solana SPL ni en Anchor SPL… ¿es correcto?

Solana SPL: https://spl.solana.com/token#authority-delegation…
Cita “Delegación de autoridad: Los propietarios de cuentas pueden delegar la autoridad sobre parte o la totalidad de su saldo de tokens utilizando la instrucción Approve. Las autoridades delegadas pueden transferir o quemar hasta la cantidad que se les ha delegado. La delegación de autoridad puede revocarla el propietario de la cuenta mediante la instrucción Revoke.”
…esto no explica claramente cómo usar dicha función.

https://github.com/solana-labs/solana-program-library/blob/master/token/program/src/instruction.rs#L919…
la función approve está en Rust, pero es difícil de utilizar.

Anchor SPL
https://docs.rs/anchor-spl/0.18.2/anchor_spl/token/struct.Approve.html
Veo que Anchor facilita la llamada a la función approve de Solana, pero no encuentro la función de asignación.

https://docs.rs/anchor-spl/0.19.0/anchor_spl/token/index.html
Esto se utiliza para comprobar la cantidad de tokens en una determinada cuenta, no la asignación.

Parece que en Solana no necesitamos comprobar la asignación dada por un usuario a otra dirección… porque encontré esto en el ejemplo de prueba de los cheques de caja de Ancho:

// Transfer funds to the check.
let cpi_accounts = Transfer {
from: ctx.accounts.from.to_account_info().clone(),
to: ctx.accounts.vault.to_account_info().clone(),
authority: ctx.accounts.owner.clone(),
};
let cpi_program = ctx.accounts.token_program.clone();
let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
token::transfer(cpi_ctx, amount)?;

Ese ejemplo anterior no comprueba la asignación dada por el usuario en el programa.
– ¿Significa eso que cualquier programa de Solana puede transferir tokens de cualquier usuario sin su consentimiento?
– ¿Por qué existe la función approve si no podemos comprobar la asignación?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Rust, Anchor y Solana, me gustaría proporcionar las siguientes respuestas a las preguntas mencionadas en la consigna:

    • Parece que no existe un equivalente directo de la función de asignación de Ethereum en Solana o Anchor SPL. Sin embargo, SPL de Solana permite la delegación de autoridad a través de la instrucción Approve, lo cual permite a los propietarios de cuentas delegar autoridad sobre algunos o todos sus saldos de tokens a otros que luego pueden transferir o quemar hasta la cantidad que se ha delegado. Si bien esta característica no proporciona un equivalente directo a la función de asignación de Ethereum, se puede utilizar de manera similar para delegar autoridad para fines específicos.

    • En cuanto a la pregunta de si algún programa de Solana puede transferir tokens de cualquier usuario sin su consentimiento, la respuesta es no. Aunque puede que no exista una función de asignación, Solana sí proporciona la capacidad de delegar autoridad y las transacciones requieren una firma digital del propietario de la cuenta que tiene esa autoridad.

    • Por último, la función approve existe para permitir al propietario de la cuenta delegar autoridad para transacciones específicas relacionadas con tokens. Aunque comprobar la asignación de tokens de una cuenta no es una parte directa de la función, puede ayudar a habilitar la delegación de autoridad al permitir al propietario de la cuenta especificar y otorgar niveles de aprobación particulares para que un remitente de tokens realice ciertas transacciones en su nombre.

Comments are closed.