Skip to content
Closed
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
462 changes: 308 additions & 154 deletions Cargo.lock

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ members = [

[workspace.dependencies]
ab-chacha8 = "0.1.0"
ab-proof-of-space = { git = "https://github.com/nazar-pc/abundance", rev = "fc8da9992575a3b33ea9c5c764ea71f926f4592e", default-features = false }
actix-web = { version = "4.9.0", default-features = false }
aes = "0.9.0"
anyhow = "1.0.89"
Expand All @@ -51,7 +52,7 @@ blst = "0.3.13"
bytes = { version = "1.11.1", default-features = false }
bytesize = "2.3.1"
cc = "1.2.62"
chacha20 = { version = "0.10.0", default-features = false }
chacha20 = { version = "0.10.1", default-features = false }
clap = "4.6.1"
console = "0.15.11"
core_affinity = "0.8.1"
Expand Down Expand Up @@ -318,6 +319,7 @@ ziggy = { version = "1.7.0", default-features = false }
#
# This list is ordered alphabetically.
[profile.dev.package]
ab-proof-of-space = { opt-level = 3 }
bitvec = { opt-level = 3 }
blake2 = { opt-level = 3 }
blake3 = { opt-level = 3 }
Expand Down
4 changes: 2 additions & 2 deletions crates/subspace-farmer-components/benches/auditing.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ use subspace_farmer_components::sector::{
};
use subspace_kzg::Kzg;
use subspace_proof_of_space::Table;
use subspace_proof_of_space::chia::ChiaTable;
use subspace_proof_of_space::chia_v2::ChiaV2Table;

type PosTable = ChiaTable;
type PosTable = ChiaV2Table;

const MAX_PIECES_IN_SECTOR: u16 = 1000;

Expand Down
4 changes: 2 additions & 2 deletions crates/subspace-farmer-components/benches/plotting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ use subspace_farmer_components::plotting::{CpuRecordsEncoder, PlotSectorOptions,
use subspace_farmer_components::sector::sector_size;
use subspace_kzg::Kzg;
use subspace_proof_of_space::Table;
use subspace_proof_of_space::chia::ChiaTable;
use subspace_proof_of_space::chia_v2::ChiaV2Table;

type PosTable = ChiaTable;
type PosTable = ChiaV2Table;

const MAX_PIECES_IN_SECTOR: u16 = 1000;

Expand Down
4 changes: 2 additions & 2 deletions crates/subspace-farmer-components/benches/proving.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ use subspace_farmer_components::sector::{
SectorContentsMap, SectorMetadata, SectorMetadataChecksummed, sector_size,
};
use subspace_kzg::Kzg;
use subspace_proof_of_space::chia::ChiaTable;
use subspace_proof_of_space::chia_v2::ChiaV2Table;
use subspace_proof_of_space::{Table, TableGenerator};

type PosTable = ChiaTable;
type PosTable = ChiaV2Table;

const MAX_PIECES_IN_SECTOR: u16 = 1000;

Expand Down
4 changes: 2 additions & 2 deletions crates/subspace-farmer-components/benches/reading.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ use subspace_farmer_components::sector::{
use subspace_farmer_components::{FarmerProtocolInfo, ReadAt, ReadAtSync};
use subspace_kzg::Kzg;
use subspace_proof_of_space::Table;
use subspace_proof_of_space::chia::ChiaTable;
use subspace_proof_of_space::chia_v2::ChiaV2Table;

type PosTable = ChiaTable;
type PosTable = ChiaV2Table;

const MAX_PIECES_IN_SECTOR: u16 = 1000;

Expand Down
6 changes: 6 additions & 0 deletions crates/subspace-farmer-components/src/proving.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use std::io;
use subspace_core_primitives::pieces::{PieceOffset, Record};
use subspace_core_primitives::pos::PosSeed;
use subspace_core_primitives::sectors::{SBucket, SectorId};
use subspace_core_primitives::segments::HistorySize;
use subspace_core_primitives::solutions::{ChunkWitness, Solution, SolutionRange};
use subspace_core_primitives::{PublicKey, ScalarBytes};
use subspace_erasure_coding::ErasureCoding;
Expand Down Expand Up @@ -159,6 +160,11 @@ where
self.chunk_candidates.is_empty()
}

/// History size of the sector these candidates belong to.
pub fn history_size(&self) -> HistorySize {
self.sector_metadata.history_size
}

/// Turn solution candidates into actual solutions
pub fn into_solutions<RewardAddress, PosTable, TableGenerator>(
self,
Expand Down
101 changes: 101 additions & 0 deletions crates/subspace-farmer-components/tests/plot_read_roundtrip.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
//! Plot a sector with the abundance-backed table and read a piece back unchanged.

use futures::executor::block_on;
use rand::prelude::*;
use std::num::{NonZeroU64, NonZeroUsize};
use std::slice;
use subspace_archiving::archiver::Archiver;
use subspace_core_primitives::PublicKey;
use subspace_core_primitives::pieces::{PieceOffset, Record};
use subspace_core_primitives::segments::{HistorySize, RecordedHistorySegment};
use subspace_data_retrieval::piece_getter::PieceGetter;
use subspace_erasure_coding::ErasureCoding;
use subspace_farmer_components::plotting::{CpuRecordsEncoder, PlotSectorOptions, plot_sector};
use subspace_farmer_components::reading::{ReadSectorRecordChunksMode, read_piece};
use subspace_farmer_components::{FarmerProtocolInfo, ReadAt};
use subspace_kzg::Kzg;
use subspace_proof_of_space::Table;
use subspace_proof_of_space::chia_v2::ChiaV2Table;

#[test]
fn abundance_plot_read_roundtrip() {
let pieces_in_sector = 10;
let sector_index = 0;
let public_key = PublicKey::default();

let mut input = RecordedHistorySegment::new_boxed();
StdRng::seed_from_u64(42).fill(AsMut::<[u8]>::as_mut(input.as_mut()));
let kzg = Kzg::new();
let erasure_coding = ErasureCoding::new(
NonZeroUsize::new(Record::NUM_S_BUCKETS.next_power_of_two().ilog2() as usize)
.expect("Not zero; qed"),
)
.unwrap();
let mut archiver = Archiver::new(kzg.clone(), erasure_coding.clone());
let archived_history_segment = archiver
.add_block(
AsRef::<[u8]>::as_ref(input.as_ref()).to_vec(),
Default::default(),
true,
)
.archived_segments
.into_iter()
.next()
.unwrap();

let farmer_protocol_info = FarmerProtocolInfo {
history_size: HistorySize::from(NonZeroU64::new(1).unwrap()),
max_pieces_in_sector: pieces_in_sector,
recent_segments: HistorySize::from(NonZeroU64::new(5).unwrap()),
recent_history_fraction: (
HistorySize::from(NonZeroU64::new(1).unwrap()),
HistorySize::from(NonZeroU64::new(10).unwrap()),
),
min_sector_lifetime: HistorySize::from(NonZeroU64::new(4).unwrap()),
};

let mut table_generator = ChiaV2Table::generator();
let mut sector = Vec::new();
let plotted_sector = block_on(plot_sector(PlotSectorOptions {
public_key: &public_key,
sector_index,
piece_getter: &archived_history_segment,
farmer_protocol_info,
kzg: &kzg,
erasure_coding: &erasure_coding,
pieces_in_sector,
sector_output: &mut sector,
downloading_semaphore: None,
encoding_semaphore: None,
records_encoder: &mut CpuRecordsEncoder::<ChiaV2Table>::new(
slice::from_mut(&mut table_generator),
&erasure_coding,
&Default::default(),
),
abort_early: &Default::default(),
}))
.unwrap();

let piece_offset = PieceOffset::ZERO;
let piece_index = plotted_sector.piece_indexes[usize::from(piece_offset)];
let expected = block_on(archived_history_segment.get_piece(piece_index))
.unwrap()
.unwrap();

let read = block_on(read_piece::<ChiaV2Table, _, _>(
piece_offset,
&plotted_sector.sector_id,
&plotted_sector.sector_metadata,
&ReadAt::from_sync(sector.as_slice()),
&erasure_coding,
ReadSectorRecordChunksMode::ConcurrentChunks,
&mut table_generator,
))
.unwrap();

assert_eq!(
read.record(),
expected.record(),
"record read back from an abundance-plotted sector must match the original"
);
}
Loading
Loading