Skip to content

Commit

Permalink
Simplify stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
DaSichuan committed Mar 8, 2022
1 parent 7b4be89 commit 3c2b626
Show file tree
Hide file tree
Showing 17 changed files with 215 additions and 70 deletions.
9 changes: 9 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions token-lending/program/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ spl-token = { version = "3.2.0", features=["no-entrypoint"] }
switchboard-program = "0.2.0"
thiserror = "1.0"
uint = "=0.9.0"
serde = "1.0"
serde_derive = "1.0"
serde_json = "1.0"
arrform = "0.1.1"

[dev-dependencies]
assert_matches = "1.5.0"
Expand Down
3 changes: 3 additions & 0 deletions token-lending/program/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ pub mod state;
// Export current sdk types for downstream users building with a different sdk version
pub use solana_program;

#[macro_use]
extern crate serde_derive;

solana_program::declare_id!("So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo");

/// Canonical null pubkey. Prints out as "nu11111111111111111111111111111111111111111"
Expand Down
110 changes: 76 additions & 34 deletions token-lending/program/src/logs.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
#![allow(missing_docs)]
use crate::math::Decimal;
use solana_program::{msg, pubkey::Pubkey};
use solana_program::pubkey::Pubkey;
use std::fmt;

#[derive(Debug)]
enum LogEventType {
PythOraclePriceUpdateType,
SwitchboardV1OraclePriceUpdateType,
extern crate serde;
extern crate serde_json;

#[derive(Debug, Serialize)]
pub enum LogEventType {
ObligationStateUpdate,
ProgramVersion,
PythError,
PythOraclePriceUpdate,
ReserveStateUpdate,
SwitchboardError,
SwitchboardV1OraclePriceUpdate,
}

impl fmt::Display for LogEventType {
Expand All @@ -15,49 +23,83 @@ impl fmt::Display for LogEventType {
}
}

pub fn emit_log_event(e: &dyn LogEvent) {
msg!("Solend Log Event");
msg!(&e.to_string());
}

pub trait LogEvent {
fn to_string(&self) -> String;
#[macro_export]
macro_rules! emit_log_event {
($e:expr) => {
msg!("solend-event-log:");
msg!(&serde_json::to_string($e).unwrap());
};
}

#[derive(Serialize)]
pub struct PythOraclePriceUpdate {
pub event_type: LogEventType,
pub oracle_pubkey: Pubkey,
pub price: Decimal,
pub conf: u64,
pub confidence: u64,
pub published_slot: u64,
}

impl LogEvent for PythOraclePriceUpdate {
fn to_string(&self) -> String {
return format!(
"{},{},{},{},{}",
LogEventType::PythOraclePriceUpdateType.to_string(),
self.oracle_pubkey.to_string(),
self.price.to_string(),
self.conf.to_string(),
self.published_slot,
);
}
#[derive(Serialize)]
pub struct PythError {
pub event_type: LogEventType,
pub oracle_pubkey: Pubkey,
pub error_message: String,
}

#[derive(Serialize)]
pub struct SwitchboardV1OraclePriceUpdate {
pub event_type: LogEventType,
pub oracle_pubkey: Pubkey,
pub price: Decimal,
pub published_slot: u64,
}

impl LogEvent for SwitchboardV1OraclePriceUpdate {
fn to_string(&self) -> String {
return format!(
"{},{},{},{}",
LogEventType::SwitchboardV1OraclePriceUpdateType.to_string(),
self.oracle_pubkey.to_string(),
self.price.to_string(),
self.published_slot,
);
}
#[derive(Serialize)]
pub struct SwitchboardError {
pub event_type: LogEventType,
pub oracle_pubkey: Pubkey,
pub error_message: String,
}

#[derive(Serialize)]
pub struct ProgramVersion {
pub event_type: LogEventType,
pub version: u8,
}

#[derive(Serialize)]
pub struct ReserveStateUpdate {
pub event_type: LogEventType,
pub reserve_id: Pubkey,
pub available_amount: u64,
pub borrowed_amount_wads: Decimal,
pub cumulative_borrow_rate_wads: Decimal,
pub collateral_mint_total_supply: u64,
pub collateral_exchange_rate: String,
}

#[derive(Serialize)]
pub struct ObligationStateUpdate {
pub event_type: LogEventType,
pub obligation_id: Pubkey,
pub allowed_borrow_value: Decimal,
pub unhealthy_borrow_value: Decimal,
pub deposits: Vec<DepositLog>,
pub borrows: Vec<BorrowLog>,
}

#[derive(Serialize)]
pub struct DepositLog {
pub reserve_id: Pubkey,
pub deposited_amount: u64,
pub market_value: Decimal,
}

#[derive(Serialize)]
pub struct BorrowLog {
pub reserve_id: Pubkey,
pub cumulative_borrow_rate_wads: Decimal,
pub borrowed_amount_wads: Decimal,
pub market_value: Decimal,
}
3 changes: 2 additions & 1 deletion token-lending/program/src/math/decimal.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ use uint::construct_uint;

// U192 with 192 bits consisting of 3 x 64-bit words
construct_uint! {
#[derive(Serialize)]
pub struct U192(3);
}

/// Large decimal values, precise to 18 digits
#[derive(Clone, Copy, Debug, Default, PartialEq, PartialOrd, Eq, Ord)]
#[derive(Clone, Copy, Debug, Default, PartialEq, PartialOrd, Eq, Ord, Serialize)]
pub struct Decimal(pub U192);

impl Decimal {
Expand Down
Loading

0 comments on commit 3c2b626

Please sign in to comment.