Skip to content

Commit

Permalink
Simplify stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
DaSichuan committed Mar 21, 2022
1 parent d346d0b commit 0f557dd
Show file tree
Hide file tree
Showing 21 changed files with 358 additions and 74 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.

3 changes: 3 additions & 0 deletions token-lending/program/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ 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"

[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
115 changes: 83 additions & 32 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,92 @@ impl fmt::Display for LogEventType {
}
}

pub fn emit_log_event(e: &dyn LogEvent) {
msg!("Solend Log Event");
msg!(&e.to_string());
fn pubkey_serialize<S>(x: &Pubkey, s: S) -> Result<S::Ok, S::Error>
where
S: serde::ser::Serializer,
{
s.serialize_str(&x.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,
#[serde(serialize_with = "pubkey_serialize")]
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,
#[serde(serialize_with = "pubkey_serialize")]
pub oracle_pubkey: Pubkey,
pub error_message: String,
}

#[derive(Serialize)]
pub struct SwitchboardV1OraclePriceUpdate {
pub event_type: LogEventType,
#[serde(serialize_with = "pubkey_serialize")]
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,
#[serde(serialize_with = "pubkey_serialize")]
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 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,
}

// ObligationStateUpdate intentionally does not contain the obligation ID
// to save on compute since it is contained in the transaction itself.
#[derive(Serialize)]
pub struct ObligationStateUpdate {
pub event_type: LogEventType,
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_index: u8,
pub deposited_amount: u64,
}

#[derive(Serialize)]
pub struct BorrowLog {
pub reserve_id_index: u8,
pub borrowed_amount_wads: Decimal,
pub cumulative_borrow_rate_wads: 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 0f557dd

Please sign in to comment.