#![deny(rustdoc::all)]
#![allow(rustdoc::missing_doc_code_examples)]
#![deny(clippy::unwrap_used)]
mod macros;
use anchor_lang::prelude::*;
use vipers::Validate;
mod instructions;
mod state;
pub use instructions::*;
pub use state::*;
declare_id!("AnatoLyYrd5iaAe36Lvq2oS4nuVDnRAb3KBVCARt4XiZ");
#[program]
pub mod venko {
use super::*;
#[access_control(ctx.accounts.validate())]
pub fn create_stream(
ctx: Context<CreateStream>,
stream_bump: u8,
crate_bump: u8,
start_ts: i64,
cliff_ts: i64,
end_ts: i64,
revoker: Pubkey,
) -> ProgramResult {
instructions::create_stream::handler(
ctx,
stream_bump,
crate_bump,
start_ts,
cliff_ts,
end_ts,
revoker,
)
}
#[access_control(ctx.accounts.validate())]
pub fn redeem(ctx: Context<Redeem>, amount: u64) -> ProgramResult {
instructions::redeem::handler(ctx, amount)
}
#[access_control(ctx.accounts.validate())]
pub fn revoke(ctx: Context<Revoke>) -> ProgramResult {
instructions::revoke::handler(ctx)
}
}
#[error]
pub enum ErrorCode {
#[msg("Stream must end after its start time.")]
InvalidSchedule,
#[msg("Insufficient withdrawal balance.")]
InsufficientWithdrawalBalance,
#[msg("Insufficient stream token balance.")]
InsufficientStreamTokens,
#[msg("Stream is irrevocable.")]
Irrevocable,
#[msg("Must be revoker to perform this operation.")]
NotRevoker,
}