Skip to content

Commit 3c2b626

Browse files
committed
Simplify stuff
1 parent 7b4be89 commit 3c2b626

17 files changed

+215
-70
lines changed

Cargo.lock

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

token-lending/program/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ spl-token = { version = "3.2.0", features=["no-entrypoint"] }
2121
switchboard-program = "0.2.0"
2222
thiserror = "1.0"
2323
uint = "=0.9.0"
24+
serde = "1.0"
25+
serde_derive = "1.0"
26+
serde_json = "1.0"
27+
arrform = "0.1.1"
2428

2529
[dev-dependencies]
2630
assert_matches = "1.5.0"

token-lending/program/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ pub mod state;
1414
// Export current sdk types for downstream users building with a different sdk version
1515
pub use solana_program;
1616

17+
#[macro_use]
18+
extern crate serde_derive;
19+
1720
solana_program::declare_id!("So1endDq2YkqhipRh3WViPa8hdiSpxWy6z3Z6tMCpAo");
1821

1922
/// Canonical null pubkey. Prints out as "nu11111111111111111111111111111111111111111"

token-lending/program/src/logs.rs

Lines changed: 76 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
#![allow(missing_docs)]
22
use crate::math::Decimal;
3-
use solana_program::{msg, pubkey::Pubkey};
3+
use solana_program::pubkey::Pubkey;
44
use std::fmt;
55

6-
#[derive(Debug)]
7-
enum LogEventType {
8-
PythOraclePriceUpdateType,
9-
SwitchboardV1OraclePriceUpdateType,
6+
extern crate serde;
7+
extern crate serde_json;
8+
9+
#[derive(Debug, Serialize)]
10+
pub enum LogEventType {
11+
ObligationStateUpdate,
12+
ProgramVersion,
13+
PythError,
14+
PythOraclePriceUpdate,
15+
ReserveStateUpdate,
16+
SwitchboardError,
17+
SwitchboardV1OraclePriceUpdate,
1018
}
1119

1220
impl fmt::Display for LogEventType {
@@ -15,49 +23,83 @@ impl fmt::Display for LogEventType {
1523
}
1624
}
1725

18-
pub fn emit_log_event(e: &dyn LogEvent) {
19-
msg!("Solend Log Event");
20-
msg!(&e.to_string());
21-
}
22-
23-
pub trait LogEvent {
24-
fn to_string(&self) -> String;
26+
#[macro_export]
27+
macro_rules! emit_log_event {
28+
($e:expr) => {
29+
msg!("solend-event-log:");
30+
msg!(&serde_json::to_string($e).unwrap());
31+
};
2532
}
2633

34+
#[derive(Serialize)]
2735
pub struct PythOraclePriceUpdate {
36+
pub event_type: LogEventType,
2837
pub oracle_pubkey: Pubkey,
2938
pub price: Decimal,
30-
pub conf: u64,
39+
pub confidence: u64,
3140
pub published_slot: u64,
3241
}
3342

34-
impl LogEvent for PythOraclePriceUpdate {
35-
fn to_string(&self) -> String {
36-
return format!(
37-
"{},{},{},{},{}",
38-
LogEventType::PythOraclePriceUpdateType.to_string(),
39-
self.oracle_pubkey.to_string(),
40-
self.price.to_string(),
41-
self.conf.to_string(),
42-
self.published_slot,
43-
);
44-
}
43+
#[derive(Serialize)]
44+
pub struct PythError {
45+
pub event_type: LogEventType,
46+
pub oracle_pubkey: Pubkey,
47+
pub error_message: String,
4548
}
4649

50+
#[derive(Serialize)]
4751
pub struct SwitchboardV1OraclePriceUpdate {
52+
pub event_type: LogEventType,
4853
pub oracle_pubkey: Pubkey,
4954
pub price: Decimal,
5055
pub published_slot: u64,
5156
}
5257

53-
impl LogEvent for SwitchboardV1OraclePriceUpdate {
54-
fn to_string(&self) -> String {
55-
return format!(
56-
"{},{},{},{}",
57-
LogEventType::SwitchboardV1OraclePriceUpdateType.to_string(),
58-
self.oracle_pubkey.to_string(),
59-
self.price.to_string(),
60-
self.published_slot,
61-
);
62-
}
58+
#[derive(Serialize)]
59+
pub struct SwitchboardError {
60+
pub event_type: LogEventType,
61+
pub oracle_pubkey: Pubkey,
62+
pub error_message: String,
63+
}
64+
65+
#[derive(Serialize)]
66+
pub struct ProgramVersion {
67+
pub event_type: LogEventType,
68+
pub version: u8,
69+
}
70+
71+
#[derive(Serialize)]
72+
pub struct ReserveStateUpdate {
73+
pub event_type: LogEventType,
74+
pub reserve_id: Pubkey,
75+
pub available_amount: u64,
76+
pub borrowed_amount_wads: Decimal,
77+
pub cumulative_borrow_rate_wads: Decimal,
78+
pub collateral_mint_total_supply: u64,
79+
pub collateral_exchange_rate: String,
80+
}
81+
82+
#[derive(Serialize)]
83+
pub struct ObligationStateUpdate {
84+
pub event_type: LogEventType,
85+
pub obligation_id: Pubkey,
86+
pub allowed_borrow_value: Decimal,
87+
pub unhealthy_borrow_value: Decimal,
88+
pub deposits: Vec<DepositLog>,
89+
pub borrows: Vec<BorrowLog>,
90+
}
91+
92+
#[derive(Serialize)]
93+
pub struct DepositLog {
94+
pub reserve_id: Pubkey,
95+
pub deposited_amount: u64,
96+
pub market_value: Decimal,
97+
}
98+
99+
#[derive(Serialize)]
100+
pub struct BorrowLog {
101+
pub reserve_id: Pubkey,
102+
pub cumulative_borrow_rate_wads: Decimal,
103+
pub borrowed_amount_wads: Decimal,
104+
pub market_value: Decimal,
63105
}

token-lending/program/src/math/decimal.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ use uint::construct_uint;
2222

2323
// U192 with 192 bits consisting of 3 x 64-bit words
2424
construct_uint! {
25+
#[derive(Serialize)]
2526
pub struct U192(3);
2627
}
2728

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

3233
impl Decimal {

0 commit comments

Comments
 (0)