DAO Treasury

A Treasury for DAOs. It can receive and send sui::coin::Coin.

Structs

DaoTreasury

struct DaoTreasury<phantom DaoWitness: drop> has key, store {
    id: UID,
    coins: Bag,
    dao: ID,
}
  • coins - Stores the treasury coins

  • dao- The sui::object::ID of the DAO.

DaoTreasury

struct FlashLoan<phantom DaoWitness, phantom CoinType> {
    amount: u64,
    fee: u64,
    type: TypeName
}
  • amounts: The amount being borrowed

  • fee- The fee amount to be repaid.

  • type: The std::type_name::TypeName of the CoinType to repay the loan.

Interface

dao

Returns the sui::object::ID of the Dao that owns the treasury.

public fun dao<DaoWitness: drop>(treasury: &DaoTreasury<DaoWitness>): ID 
  • @param treasury: A DaoTreasury.

  • @return ID

balance

Returns the amount of Coin in the treasury.

public fun balance<DaoWitness: drop, CoinType>(treasury: &DaoTreasury<DaoWitness>): u64
  • @param treasury: A DaoTreasury.

  • @return u64

Adds token to the treasury.

public fun donate<DaoWitness: drop, CoinType>(treasury: &mut DaoTreasury<DaoWitness>, token: Coin<CoinType>, ctx: &mut TxContext)
  • @param treasury A DaoTreasury.

  • @param token It will be donated to the treasury.

transfer

Withdraws a coin from the treasury.

public fun transfer<DaoWitness: drop, CoinType, TransferCoin>(
    treasury: &mut DaoTreasury<DaoWitness>,
    _: &DaoAdmin<DaoWitness>,
    value: u64,
    ctx: &mut TxContext
): Coin<CoinType>
  • @param treasury: A DaoTreasury.

  • @param _ : Immutable reference to the DaoAdmin.

  • @param value : The amount to withdraw.

  • @return Coin

transfer_linear_vesting_wallet

Withdraws a LinearWallet from the treasury.

public fun transfer_linear_vesting_wallet<DaoWitness: drop, CoinType, TransferCoin>(
    treasury: &mut DaoTreasury<DaoWitness>,
    _: &DaoAdmin<DaoWitness>,
    c: &Clock,
    value: u64,
    start: u64,
    duration: u64,
    ctx: &mut TxContext    
): LinearWallet<CoinType>
  • @param treasury: A DaoTreasury.

  • @param _ : Immutable reference to the DaoAdmin.

  • @param c: The sui::clock::Clock

  • @param value : The amount to withdraw.

  • @param start : The amount to withdraw.

  • @param duration : The duration of the vesting schedule.

  • @return LinearWallet.

flash_loan

Requests a Flash Loan from the treasury.

public fun flash_loan<DaoWitness: drop, CoinType>(
    treasury: &mut DaoTreasury<DaoWitness>, 
    value: u64, 
    ctx: &mut TxContext
): (Coin<CoinType>, FlashLoan<DaoWitness, CoinType>)
  • @param treasury: A DaoTreasury.

  • @param value : The amount of the loan.

  • @return Coin<CoinType>. The coin that is being borrowed.

  • @return FlashLoan<DaoWitness, CoinType>. Hot potato to ensure that the coin is returned within the same transaction block.

fee

Returns the service fee amount that must be paid.

public fun fee<DaoWitness: drop, CoinType>(flash_loan: &FlashLoan<DaoWitness, CoinType>): u64
  • @param flash_loan: A FlashLoan hot potato.

  • @return u64.

amount

Returns the amount of the loan without the fees.

public fun amount<DaoWitness: drop, CoinType>(flash_loan: &FlashLoan<DaoWitness, CoinType>): u64
  • @param flash_loan: A FlashLoan hot potato.

  • @return u64.

repay_flash_loan

Repays the flash_loan to the treasury.

public fun repay_flash_loan<DaoWitness: drop, CoinType>(
    treasury: &mut DaoTreasury<DaoWitness>, 
    flash_loan: FlashLoan<DaoWitness, CoinType>,
    token: Coin<CoinType>
)
  • @param treasury: A DaoTreasury.

  • @param flash_loan: A FlashLoan hot potato.

  • @param token: The borrowed coin + fee.

Aborts

  • token.value is smaller than the initial loan amount + fee amount.

Last updated