Tempo e Clock
O sysvar Clock fornece slot, epoch e unix_timestamp para regras baseadas em tempo: expirações, cliffs de vesting e rate limits. Slots são discretos; timestamps são aproximações de relógio de parede.
Receita
let clock = Clock::get()?;
if clock.unix_timestamp > deadline { return Err(ProgramError::InvalidAccountData); }Quando usar isso:
- Expiração de escrow.
- Desbloqueio de vesting.
- Cooldown entre ações.
Exemplo de Trabalho
pub fn assert_not_expired(deadline: i64) -> Result<(), ProgramError> {
let now = Clock::get()?.unix_timestamp;
if now > deadline { return Err(ProgramError::InvalidAccountData); }
Ok(())
}O que isso demonstra:
- Syscall Clock::get().
- Compara unix_timestamp.
- Expirado retorna erro.
Mergulho Profundo
Slot vs Tempo
| Campo | Uso |
|---|---|
| slot | Relativo ao cronograma do líder |
| unix_timestamp | Expiração humana |
| epoch | Períodos de staking |
Manipulação
Validadores têm deriva de timestamp limitada - projete períodos de carência.
Notas de Rust
// Store i64 deadline at init from client or admin.Armadilhas
- Confiar apenas em arg de timestamp do cliente - Forjado se não vier do Clock.. Correção: Sempre Clock::get().
- Slot assume tempo preciso - Duração de slot varia levemente.. Correção: Use unix para relógio de parede.
- Sem expiração em escrow - Travado para sempre.. Correção: Prazo obrigatório ou cancelamento.
- Overflow de timestamp - Limites i64.. Correção: Verifique sanidade dos prazos.
- Prazo no passado no init - Imediatamente expirado.. Correção: Valide na criação.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Cron off-chain | Não vinculante | Clock on-chain |
| Somente baseado em slot | Previsível | Confusão do usuário |
| Tempo de oráculo | Exagero | DeFi específico |
FAQs
ID do sysvar Clock?
Constante conhecida - Sysvar::get.
Conta Clock falsa?
Não aceite conta passada - use get.
i64 negativo?
Antes de 1970 raro - rejeite.
Lock de duração?
armazene start + duration.
Vesting linear?
Calcule unlocked = f(now).
Anchor Sysvar<Clock>?
Wrapper.
Testar tempo?
LiteSVM warp clock.
Deriva na mainnet?
Pequena - não explorável em grande escala.
Slot hash?
Sysvar diferente.
Rate limit?
last_action_ts na conta.
Bots crank?
Qualquer um pode chamar ix expire.
Agave 4.1.1?
Layout do Clock estável.
Relacionados
- Máquinas de Estado On-Chain - Timeouts
- Cofre e Escrow - Expiração de escrow
- Noções Básicas de Programas - Contexto do runtime
Versões da stack: Esta página foi 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 e LiteSVM 0.6.x.