Capital de una cuenta. Lo que puede retirar, siempre.
fn saldo(env: soroban_sdk::Env, usuario: soroban_sdk::Address) -> i128
fn config(env: soroban_sdk::Env) -> Config
Todo lo que muestra la pantalla, en una llamada.
fn estado(env: soroban_sdk::Env) -> Vista
Retira capital. Sin penalidad y en cualquier momento: el producto se apoya en que nadie pierde nada, y una salida trabada rompería eso.
No depende de que haya o no un sorteo pendiente. El peso ya devengado en la ronda se conserva: la plata estuvo generando mientras estuvo adentro.
fn retirar(env: soroban_sdk::Env, usuario: soroban_sdk::Address, monto: i128)
La cuenta entera: capital, racha, referidos. None si nunca depositó.
fn cuenta_de(env: soroban_sdk::Env, usuario: soroban_sdk::Address) -> Option
Deposita capital y entra al sorteo. El capital se puede retirar entero cuando se quiera: lo que se sortea es el rendimiento, nunca el capital.
fn depositar(env: soroban_sdk::Env, usuario: soroban_sdk::Address, monto: i128)
Marca la racha de hoy. Una vez por día UTC; exige capital adentro.
Cada día seguido suma más peso a la ronda en curso:
depósito × periodo × día / RACHA_DIVISOR. Siete días seguidos suman
un período entero de peso, o sea duplican las chances. Saltear un día
vuelve al día 1. El peso entra en la misma unidad que todo lo demás
(depósito × tiempo), así que la escala del árbol no cambia.
fn ahorrar_hoy(env: soroban_sdk::Env, usuario: soroban_sdk::Address) -> u32
Chances de una cuenta sobre el total, en puntos básicos, para la ronda en curso.
Es lo que muestra la UI como "tu probabilidad". El peso es depósito × tiempo: depositar justo antes del cierre casi no suma.
Trunca hacia abajo, así que las chances de todos suman hasta
participantes - 1 puntos menos de 10.000. Nunca más: nadie ve una
probabilidad mayor a la que tiene.
fn chances_bps(env: soroban_sdk::Env, usuario: soroban_sdk::Address) -> i128
Cierra la ronda vencida y congela el sorteo. Cualquiera puede llamarla.
Fija la ronda de drand que va a decidir, ≥ MARGEN_SEGUNDOS en el
futuro: al cerrar, esa firma todavía no existe para nadie. La ronda
siguiente arranca acá mismo: lo que se deposite desde ahora cuenta para
ella y no toca las chances de la que cerró.
fn cerrar_ronda(env: soroban_sdk::Env) -> u64
Constructor: corre en la misma transacción que el deploy, así que nadie puede adelantarse a inicializar con otra configuración.
No hay admin ni keeper. Después de esto el contrato no tiene llaves.
fn __constructor(
env: soroban_sdk::Env,
token: soroban_sdk::Address,
fuente: soroban_sdk::Address,
periodo: u64,
tope: i128,
drand_pk: soroban_sdk::BytesN<192>,
drand_genesis: u64,
drand_periodo: u64,
)
Trae la firma de drand de la ronda fijada al cerrar, verifica, elige ganador y le paga el rendimiento. Cualquiera puede llamarla.
El capital de todos queda intacto. La ronda siguiente ya está corriendo desde el cierre; esto solo paga.
fn ejecutar_sorteo(
env: soroban_sdk::Env,
firma: soroban_sdk::BytesN<96>,
) -> soroban_sdk::Address
Primer depósito declarando quién invitó. El referente pasa a pesar como
si tuviera REF_BPS del capital del referido, mientras esté adentro.
fn depositar_con_referente(
env: soroban_sdk::Env,
usuario: soroban_sdk::Address,
monto: i128,
referente: soroban_sdk::Address,
)