Patrones de Tarifas y Tesorería
Los patrones de tarifas recaudan puntos básicos sobre las acciones, se enrutan a PDAs o ATAs de la tesorería y documentan el redondeo. Utilice matemáticas verificadas y limite los bps de tarifas configurables en la configuración administrativa.
Receta
let fee = amount.checked_mul(config.fee_bps)?.checked_div(10_000)?;
let net = amount.checked_sub(fee)?;Cuándo usar esto:
- Tarifa de protocolo DEX.
- Tarifa de mercado NFT.
- Tarifa de retiro para cubrir el alquiler.
Ejemplo de Trabajo
pub fn split_fee(amount: u64, bps: u16) -> Result<(u64, u64), ProgramError> {
if bps as u64 > 10_000 { return Err(ProgramError::InvalidArgument); }
let fee = amount.checked_mul(bps as u64)?.checked_div(10_000)?;
let net = amount.checked_sub(fee)?;
Ok((net, fee))
}Lo que esto demuestra:
- Limita los bps al 100%.
- Devuelve la parte neta y la tarifa.
- Todas las operaciones verificadas.
Análisis Profundo
Redondeo
El redondeo de tarifas hacia abajo favorece al protocolo o al usuario; documente la elección.
Tesorería
ATA de PDA dedicada por cada mint.
Notas de Rust
// u128 intermedio para multiplicaciones grandes si es necesario.Trampas
- Matemáticas de tarifas sin verificar - Envuelve el drenaje... Solución: solo
checked_*. - Bps ilimitados en la configuración - Robo del 100%... Solución: Validar el máximo al establecer la configuración.
- Tarifa sobre parcial fallido - Cobrar antes del éxito... Solución: Tomar la tarifa después del éxito o sobre la entrada.
- Mint de ATA de tesorería incorrecto - Tarifas perdidas... Solución: Verificar el mint.
- Ocultación administrativa secreta - Pérdida de confianza... Solución: Bps transparentes en la cadena.
Alternativas
| Alternativa | Usar cuando | No usar cuando |
|---|---|---|
| Tarifa fuera de la cadena | No se puede hacer cumplir | Solo en la cadena |
| Referencia de Jupiter | Tarifas de socios | Tarifa de su programa por separado |
| Donación opcional | Elección de UX | Ingresos |
Preguntas Frecuentes
¿Puntos básicos?
1 bp = 0.01%.
¿Tarifa sobre SOL?
Misma matemática para Lamports.
¿Tarifa de transferencia Token-2022?
Capa adicional.
¿Retiro de tesorería?
Ix de administrador.
¿Tarifa inmutable?
Fija en el programa.
¿Tarifa dinámica?
Cuenta de configuración.
¿Redondear hacia abajo?
Común, favorece al usuario.
¿Múltiples destinatarios?
Vector de tarifa dividida - limitar longitud.
¿Eventos?
Emitir tarifa tomada.
¿Auditoría?
Acceso a matemáticas + tesorería.
¿Simulación?
Afirmar montos de tarifas.
¿Anchor?
Misma matemática en el manejador.
Relacionado
- Aritmética Segura - Matemáticas
- Bóveda y Depósito en Garantía - Custodia
- Tarifas y Tesorería en DeFi - Contexto
Versiones de la pila: Esta página fue escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 y LiteSVM 0.6.x.