pub struct ContentNode { /* private fields */ }Expand description
CHIE node instance.
§Examples
use chie_core::{ContentNode, NodeConfig, PinnedContent};
use std::path::PathBuf;
let config = NodeConfig {
storage_path: PathBuf::from("/tmp/chie-test"),
max_storage_bytes: 10 * 1024 * 1024,
max_bandwidth_bps: 100 * 1024 * 1024 / 8,
coordinator_url: "https://coordinator.chie.network".to_string(),
};
let mut node = ContentNode::new(config);
// Pin some content
let content = PinnedContent {
cid: "QmTest123".to_string(),
size_bytes: 1024,
encryption_key: [0u8; 32],
predicted_revenue_per_gb: 10.0,
};
node.pin_content(content);
assert_eq!(node.pinned_count(), 1);
assert!(node.has_content(&"QmTest123".to_string()));Implementations§
Source§impl ContentNode
impl ContentNode
Sourcepub fn new(config: NodeConfig) -> Self
pub fn new(config: NodeConfig) -> Self
Create a new content node.
Sourcepub async fn with_storage(config: NodeConfig) -> Result<Self, NodeError>
pub async fn with_storage(config: NodeConfig) -> Result<Self, NodeError>
Create a new content node with storage backend.
Sourcepub fn set_storage(&mut self, storage: Arc<RwLock<ChunkStorage>>)
pub fn set_storage(&mut self, storage: Arc<RwLock<ChunkStorage>>)
Set the storage backend.
Sourcepub fn storage(&self) -> Option<&Arc<RwLock<ChunkStorage>>>
pub fn storage(&self) -> Option<&Arc<RwLock<ChunkStorage>>>
Get a reference to the storage backend.
Sourcepub fn public_key(&self) -> [u8; 32]
pub fn public_key(&self) -> [u8; 32]
Get the node’s public key.
Sourcepub fn config(&self) -> &NodeConfig
pub fn config(&self) -> &NodeConfig
Get the node configuration.
Sourcepub fn pin_content(&mut self, content: PinnedContent)
pub fn pin_content(&mut self, content: PinnedContent)
Pin content for distribution.
Sourcepub fn unpin_content(&mut self, cid: &ContentCid) -> Option<PinnedContent>
pub fn unpin_content(&mut self, cid: &ContentCid) -> Option<PinnedContent>
Unpin content.
Sourcepub fn has_content(&self, cid: &ContentCid) -> bool
pub fn has_content(&self, cid: &ContentCid) -> bool
Check if content is pinned.
Sourcepub fn pinned_count(&self) -> usize
pub fn pinned_count(&self) -> usize
Get pinned content count.
Sourcepub async fn handle_chunk_request(
&self,
request: ChunkRequest,
) -> Result<ChunkResponse, NodeError>
pub async fn handle_chunk_request( &self, request: ChunkRequest, ) -> Result<ChunkResponse, NodeError>
Handle a chunk request and generate a response.
This method reads the requested chunk from storage, signs it, and returns a ChunkResponse. If storage is not configured, returns a placeholder response.
Sourcepub async fn handle_chunk_request_verified(
&self,
request: ChunkRequest,
) -> Result<ChunkResponse, NodeError>
pub async fn handle_chunk_request_verified( &self, request: ChunkRequest, ) -> Result<ChunkResponse, NodeError>
Handle a chunk request with verification.
Same as handle_chunk_request but also verifies the chunk hash matches storage metadata.
Sourcepub async fn submit_proof(&self, proof: BandwidthProof) -> Result<(), NodeError>
pub async fn submit_proof(&self, proof: BandwidthProof) -> Result<(), NodeError>
Submit a proof to the coordinator using pooled connection.
Sourcepub async fn submit_proofs_batch(
&self,
proofs: Vec<BandwidthProof>,
) -> Result<(), NodeError>
pub async fn submit_proofs_batch( &self, proofs: Vec<BandwidthProof>, ) -> Result<(), NodeError>
Submit multiple proofs in batch for improved efficiency.
Sourcepub fn add_earnings(&mut self, amount: Points)
pub fn add_earnings(&mut self, amount: Points)
Add earnings (called when proof is verified).
Sourcepub async fn storage_stats(&self) -> Option<StorageStats>
pub async fn storage_stats(&self) -> Option<StorageStats>
Get storage statistics if storage is configured.
Sourcepub async fn handle_chunk_requests_batch(
&self,
requests: Vec<ChunkRequest>,
) -> Result<Vec<ChunkResponse>, NodeError>
pub async fn handle_chunk_requests_batch( &self, requests: Vec<ChunkRequest>, ) -> Result<Vec<ChunkResponse>, NodeError>
Handle multiple chunk requests concurrently for improved throughput.
Auto Trait Implementations§
impl Freeze for ContentNode
impl !RefUnwindSafe for ContentNode
impl Send for ContentNode
impl Sync for ContentNode
impl Unpin for ContentNode
impl !UnwindSafe for ContentNode
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.