use anchor_lang::prelude::*;
use anchor_lang::solana_program::entrypoint::ProgramResult;
use anchor_spl::{
associated_token::AssociatedToken,
token::{Mint, Token, TokenAccount},
};
use borsh::{BorshDeserialize, BorshSerialize};
declare_id!("6h7XgGRiHae5C6p3cWo44Ga7jwxRN4KS8TtLabVVVGYS");
#[program]
pub mod streamflow_sdk {
use super::*;
#[allow(unused_variables)]
pub fn create(
ctx: Context<Create>,
start_time: u64,
net_amount_deposited: u64,
period: u64,
amount_per_period: u64,
cliff: u64,
cliff_amount: u64,
cancelable_by_sender: bool,
cancelable_by_recipient: bool,
automatic_withdrawal: bool,
transferable_by_sender: bool,
transferable_by_recipient: bool,
can_topup: bool,
stream_name: [u8; 64],
withdraw_frequency: u64,
) -> ProgramResult {
Ok(())
}
#[allow(unused_variables)]
pub fn create_unchecked(
ctx: Context<CreateUnchecked>,
start_time: u64,
net_amount_deposited: u64,
period: u64,
amount_per_period: u64,
cliff: u64,
cliff_amount: u64,
cancelable_by_sender: bool,
cancelable_by_recipient: bool,
automatic_withdrawal: bool,
transferable_by_sender: bool,
transferable_by_recipient: bool,
can_topup: bool,
stream_name: [u8; 64],
withdraw_frequency: u64,
recipient: Pubkey,
partner: Pubkey
) -> ProgramResult { Ok(()) }
#[allow(unused_variables)]
pub fn withdraw(ctx: Context<Withdraw>, amount: u64) -> ProgramResult {
Ok(())
}
#[allow(unused_variables)]
pub fn cancel(ctx: Context<Cancel>) -> ProgramResult {
Ok(())
}
#[allow(unused_variables)]
pub fn transfer_recipient(ctx: Context<Transfer>) -> ProgramResult {
Ok(())
}
#[allow(unused_variables)]
pub fn topup(ctx: Context<Topup>, amount: u64) -> ProgramResult {
Ok(())
}
}
#[derive(Accounts)]
pub struct Create<'info> {
#[account(mut)]
pub sender: Signer<'info>,
#[account(mut)]
pub sender_tokens: AccountInfo<'info>,
#[account(mut)]
pub recipient: AccountInfo<'info>,
#[account(mut, signer)]
pub metadata: AccountInfo<'info>,
#[account(mut)]
pub escrow_tokens: AccountInfo<'info>,
#[account(mut)]
pub recipient_tokens: AccountInfo<'info>,
#[account(mut)]
pub streamflow_treasury: AccountInfo<'info>,
#[account(mut)]
pub streamflow_treasury_tokens: AccountInfo<'info>,
#[account(mut)]
pub withdrawor: AccountInfo<'info>,
#[account(mut)]
pub partner: AccountInfo<'info>,
#[account(mut)]
pub partner_tokens: AccountInfo<'info>,
pub mint: Account<'info, Mint>,
pub fee_oracle: AccountInfo<'info>,
pub rent: Sysvar<'info, Rent>,
pub streamflow_program: AccountInfo<'info>,
pub token_program: Program<'info, Token>,
pub associated_token_program: Program<'info, AssociatedToken>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct CreateUnchecked<'info> {
#[account(mut)]
pub sender: Signer<'info>,
#[account(mut)]
pub sender_tokens: AccountInfo<'info>,
#[account(mut)]
pub metadata: AccountInfo<'info>,
#[account(mut)]
pub escrow_tokens: AccountInfo<'info>,
#[account(mut)]
pub withdrawor: AccountInfo<'info>,
pub mint: Account<'info, Mint>,
pub fee_oracle: AccountInfo<'info>,
pub rent: Sysvar<'info, Rent>,
pub streamflow_program: AccountInfo<'info>,
pub token_program: Program<'info, Token>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct Withdraw<'info> {
#[account()]
pub authority: Signer<'info>,
#[account(mut)]
pub recipient: AccountInfo<'info>,
#[account(mut)]
pub recipient_tokens: Account<'info, TokenAccount>,
#[account(mut)]
pub metadata: AccountInfo<'info>,
#[account(mut)]
pub escrow_tokens: Account<'info, TokenAccount>,
#[account(mut)]
pub streamflow_treasury: AccountInfo<'info>,
#[account(mut)]
pub streamflow_treasury_tokens: AccountInfo<'info>,
#[account(mut)]
pub partner: AccountInfo<'info>,
#[account(mut)]
pub partner_tokens: AccountInfo<'info>,
pub mint: Account<'info, Mint>,
pub token_program: Program<'info, Token>,
}
#[derive(Accounts)]
pub struct Cancel<'info> {
#[account()]
pub authority: Signer<'info>,
#[account(mut)]
pub sender: AccountInfo<'info>,
#[account(mut)]
pub sender_tokens: Account<'info, TokenAccount>,
#[account(mut)]
pub recipient: AccountInfo<'info>,
#[account(mut)]
pub recipient_tokens: Account<'info, TokenAccount>,
#[account(mut)]
pub metadata: AccountInfo<'info>,
#[account(mut)]
pub escrow_tokens: Account<'info, TokenAccount>,
#[account(mut)]
pub streamflow_treasury: AccountInfo<'info>,
#[account(mut)]
pub streamflow_treasury_tokens: AccountInfo<'info>,
#[account(mut)]
pub partner: AccountInfo<'info>,
#[account(mut)]
pub partner_tokens: AccountInfo<'info>,
pub mint: Account<'info, Mint>,
pub token_program: Program<'info, Token>,
}
#[derive(Accounts)]
pub struct Transfer<'info> {
#[account(mut)]
pub authority: Signer<'info>,
#[account(mut)]
pub new_recipient: AccountInfo<'info>,
#[account(mut)]
pub new_recipient_tokens: AccountInfo<'info>,
#[account(mut)]
pub metadata: AccountInfo<'info>,
pub mint: Account<'info, Mint>,
pub rent: Sysvar<'info, Rent>,
pub token_program: Program<'info, Token>,
pub associated_token_program: Program<'info, AssociatedToken>,
pub system_program: Program<'info, System>,
}
#[derive(Accounts)]
pub struct Topup<'info> {
#[account(mut)]
pub sender: Signer<'info>,
#[account(mut)]
pub sender_tokens: AccountInfo<'info>,
#[account(mut)]
pub metadata: AccountInfo<'info>,
#[account(mut)]
pub escrow_tokens: Account<'info, TokenAccount>,
#[account(mut)]
pub streamflow_treasury: AccountInfo<'info>,
#[account(mut)]
pub streamflow_treasury_tokens: AccountInfo<'info>,
#[account(mut)]
pub withdrawor: AccountInfo<'info>,
#[account(mut)]
pub partner: AccountInfo<'info>,
#[account(mut)]
pub partner_tokens: AccountInfo<'info>,
pub mint: Account<'info, Mint>,
pub token_program: Program<'info, Token>,
pub system_program: Program<'info, System>,
}
#[derive(BorshDeserialize, BorshSerialize, Clone, Debug)]
#[repr(C)]
pub struct CreateParams {
pub start_time: u64,
pub net_amount_deposited: u64,
pub period: u64,
pub amount_per_period: u64,
pub cliff: u64,
pub cliff_amount: u64,
pub cancelable_by_sender: bool,
pub cancelable_by_recipient: bool,
pub automatic_withdrawal: bool,
pub transferable_by_sender: bool,
pub transferable_by_recipient: bool,
pub can_topup: bool,
pub stream_name: [u8; 64],
pub withdraw_frequency: u64,
}
#[derive(BorshDeserialize, BorshSerialize, Clone, Debug)]
#[repr(C)]
pub struct CreateParamsUnchecked {
pub start_time: u64,
pub net_amount_deposited: u64,
pub period: u64,
pub amount_per_period: u64,
pub cliff: u64,
pub cliff_amount: u64,
pub cancelable_by_sender: bool,
pub cancelable_by_recipient: bool,
pub automatic_withdrawal: bool,
pub transferable_by_sender: bool,
pub transferable_by_recipient: bool,
pub can_topup: bool,
pub stream_name: [u8; 64],
pub withdraw_frequency: u64,
pub recipient: Pubkey,
pub partner: Pubkey,
}