Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 2 additions & 33 deletions entity/src/audit_result_latest.rs
Original file line number Diff line number Diff line change
@@ -1,40 +1,9 @@
//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.2

use chrono::{DateTime, Utc};
use sea_orm::{
entity::prelude::*,
strum::{EnumMessage, EnumString},
};
use serde::Deserialize;
use sea_orm::entity::prelude::*;

use crate::content_audit::AuditResult;

// Not using the constants in ethportal-api because seaorm does not support DeriveActiveEnum from a
// variable
#[derive(
Debug,
Clone,
Copy,
Eq,
PartialEq,
EnumIter,
DeriveActiveEnum,
Deserialize,
EnumMessage,
EnumString,
)]
#[sea_orm(rs_type = "u8", db_type = "Integer")]
#[strum(serialize_all = "snake_case")]
pub enum ContentType {
#[strum(message = "Block headers by hash")]
BlockHeadersByHash = 0,
#[strum(message = "Block bodies")]
BlockBodies = 1,
#[strum(message = "Block receipts")]
BlockReceipts = 2,
#[strum(message = "Block headers by number")]
BlockHeadersByNumber = 3,
}
use crate::{content::ContentType, content_audit::AuditResult};

#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "audit_result_latest")]
Expand Down
5 changes: 0 additions & 5 deletions entity/src/audit_stats.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ pub struct Model {
pub success_rate_history_four_fours_bodies: f32,
pub success_rate_history_four_fours_receipts: f32,
pub success_rate_state_all: f32,
pub success_rate_state_latest: f32,
pub success_rate_state_state_roots: f32,
pub success_rate_beacon_all: f32,
pub success_rate_beacon_latest: f32,
Expand Down Expand Up @@ -71,7 +70,6 @@ pub async fn create(
success_rate_history_four_fours_bodies: f32,
success_rate_history_four_fours_receipts: f32,
success_rate_state_all: f32,
success_rate_state_latest: f32,
success_rate_state_state_roots: f32,
success_rate_beacon_all: f32,
success_rate_beacon_latest: f32,
Expand Down Expand Up @@ -109,7 +107,6 @@ pub async fn create(
success_rate_history_four_fours_bodies: Set(success_rate_history_four_fours_bodies),
success_rate_history_four_fours_receipts: Set(success_rate_history_four_fours_receipts),
success_rate_state_all: Set(success_rate_state_all),
success_rate_state_latest: Set(success_rate_state_latest),
success_rate_state_state_roots: Set(success_rate_state_state_roots),
success_rate_beacon_all: Set(success_rate_beacon_all),
success_rate_beacon_latest: Set(success_rate_beacon_latest),
Expand Down Expand Up @@ -150,7 +147,6 @@ pub struct StateStats {
id: i32,
timestamp: DateTime<Utc>,
success_rate_state_all: f32,
success_rate_state_latest: f32,
success_rate_state_state_roots: f32,
}

Expand Down Expand Up @@ -228,7 +224,6 @@ pub async fn get_weekly_state_stats(
Column::Id,
Column::Timestamp,
Column::SuccessRateStateAll,
Column::SuccessRateStateLatest,
Column::SuccessRateStateStateRoots,
])
.filter(Column::Timestamp.gt(beginning))
Expand Down
96 changes: 76 additions & 20 deletions entity/src/content.rs
Original file line number Diff line number Diff line change
@@ -1,48 +1,104 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.10.7
use crate::utils;
use alloy_primitives::B256;
use anyhow::Result;
use chrono::{DateTime, Utc};
use ethportal_api::utils::bytes::{hex_encode, hex_encode_compact};
use ethportal_api::OverlayContentKey;
use sea_orm::{entity::prelude::*, ActiveValue::NotSet, Set};
use sea_orm::{
entity::prelude::*,
strum::{EnumMessage, EnumProperty, EnumString},
ActiveValue::NotSet,
Iterable, Set,
};
use serde::Deserialize;

use crate::utils;

/// Portal network sub-protocol. History, state, transactions etc.
#[derive(Debug, Clone, Copy, Eq, PartialEq, EnumIter, DeriveActiveEnum, Deserialize)]
#[derive(
Debug,
Clone,
Copy,
Eq,
PartialEq,
EnumIter,
EnumString,
EnumMessage,
DeriveActiveEnum,
Deserialize,
)]
#[sea_orm(rs_type = "i32", db_type = "Integer")]
#[strum(ascii_case_insensitive)]
#[serde(rename_all = "snake_case")]
pub enum SubProtocol {
#[strum(message = "History")]
History = 0,
#[strum(message = "State")]
State = 1,
#[strum(message = "Beacon")]
Beacon = 2,
}

impl SubProtocol {
pub fn as_text(&self) -> String {
match self {
SubProtocol::History => "History".to_string(),
SubProtocol::State => "State".to_string(),
SubProtocol::Beacon => "Beacon".to_string(),
}
}
}

#[derive(Debug, PartialEq)]
pub struct InvalidSubProtocolError;

impl TryFrom<&String> for SubProtocol {
impl TryFrom<u8> for SubProtocol {
type Error = InvalidSubProtocolError;

fn try_from(value: &String) -> Result<Self, Self::Error> {
match value.to_lowercase().as_str() {
"history" => Ok(SubProtocol::History),
"state" => Ok(SubProtocol::State),
"beacon" => Ok(SubProtocol::Beacon),
fn try_from(value: u8) -> std::result::Result<Self, InvalidSubProtocolError> {
match value {
0 => Ok(SubProtocol::History),
1 => Ok(SubProtocol::State),
2 => Ok(SubProtocol::Beacon),
_ => Err(InvalidSubProtocolError),
}
}
}

// Not using the constants in ethportal-api because seaorm does not support DeriveActiveEnum from a variable
// Newer versions of strum support int type properties
#[derive(
Debug,
Clone,
Eq,
Hash,
PartialEq,
EnumIter,
DeriveActiveEnum,
EnumMessage,
EnumString,
EnumProperty,
Copy,
Deserialize,
)]
#[sea_orm(rs_type = "i32", db_type = "Integer")]
#[strum(serialize_all = "snake_case")]
#[serde(rename_all = "snake_case")]
pub enum ContentType {
#[strum(message = "Headers by hash", props(subprotocol = "0"))]
BlockHeadersByHash = 0,
#[strum(message = "Bodies", props(subprotocol = "0"))]
BlockBodies = 1,
#[strum(message = "Receipts", props(subprotocol = "0"))]
BlockReceipts = 2,
#[strum(message = "Headers by number", props(subprotocol = "0"))]
BlockHeadersByNumber = 3,
#[strum[message = "Block Roots", props(subprotocol="2")]]
BlockRoots = 16, // 0x10
#[strum[message = "Account Trie Nodes", props(subprotocol="1")]]
AccountTrieNodes = 32, // 0x20
}

impl ContentType {
pub fn vec_subprotocol(subprotocol: SubProtocol) -> Vec<ContentType> {
ContentType::iter()
.filter(|content_type| {
content_type.get_str("subprotocol").unwrap_or("-1")
== (subprotocol as usize).to_string()
})
.collect()
}
}

#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "content")]
pub struct Model {
Expand Down
Loading