Skip to content
Merged
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
8 changes: 4 additions & 4 deletions crates/pallet-subspace/src/mock.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ use subspace_archiving::archiver::{ArchivedSegment, Archiver};
use subspace_core_primitives::crypto::kzg::{embedded_kzg_settings, Kzg, Witness};
use subspace_core_primitives::crypto::{blake2b_256_254_hash_to_scalar, kzg, ScalarLegacy};
use subspace_core_primitives::{
ArchivedBlockProgress, Blake2b256Hash, LastArchivedBlock, Piece, Randomness, RecordsRoot,
ArchivedBlockProgress, Blake2b256Hash, LastArchivedBlock, PieceArray, Randomness, RecordsRoot,
RootBlock, SegmentIndex, Solution, SolutionRange, PIECE_SIZE, RECORDED_HISTORY_SEGMENT_SIZE,
};
use subspace_solving::{create_chunk_signature, derive_global_challenge, REWARD_SIGNING_CONTEXT};
Expand Down Expand Up @@ -362,7 +362,7 @@ pub fn create_signed_vote(
parent_hash: <Block as BlockT>::Hash,
slot: Slot,
global_randomnesses: &Randomness,
piece: Piece,
piece: &PieceArray,
reward_address: <Test as frame_system::Config>::AccountId,
) -> SignedVote<u64, <Block as BlockT>::Hash, <Test as frame_system::Config>::AccountId> {
let reward_signing_context = schnorrkel::signing_context(REWARD_SIGNING_CONTEXT);
Expand All @@ -382,8 +382,8 @@ pub fn create_signed_vote(
sector_index: 0,
total_pieces: NonZeroU64::new(1).unwrap(),
piece_offset: 0,
piece_record_hash: blake2b_256_254_hash_to_scalar(&piece.record()),
piece_witness: Witness::try_from_bytes(&piece.witness()).unwrap(),
piece_record_hash: blake2b_256_254_hash_to_scalar(piece.record().as_ref()),
piece_witness: Witness::try_from_bytes(piece.witness()).unwrap(),
chunk_offset: 0,
chunk,
chunk_signature: create_chunk_signature(keypair, &chunk.to_bytes()),
Expand Down
45 changes: 22 additions & 23 deletions crates/pallet-subspace/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ use sp_runtime::transaction_validity::{
use sp_runtime::DispatchError;
use std::assert_matches::assert_matches;
use std::collections::BTreeMap;
use subspace_core_primitives::Piece;
use subspace_runtime_primitives::{FindBlockRewardAddress, FindVotingRewardAddresses};
use subspace_solving::REWARD_SIGNING_CONTEXT;
use subspace_verification::Error as VerificationError;
Expand Down Expand Up @@ -628,7 +627,7 @@ fn vote_block_listed() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

BlockList::<Test>::insert(
FarmerPublicKey::unchecked_from(keypair.public.to_bytes()),
Expand Down Expand Up @@ -658,7 +657,7 @@ fn vote_after_genesis() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

// Can't submit vote right after genesis block
let signed_vote = create_signed_vote(
Expand All @@ -683,7 +682,7 @@ fn vote_too_low_height() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 1, 1);

Expand All @@ -696,7 +695,7 @@ fn vote_too_low_height() {
<Test as frame_system::Config>::Hash::default(),
Subspace::current_slot() + 1,
&Subspace::global_randomnesses().current,
piece.clone(),
piece,
1,
);

Expand All @@ -713,7 +712,7 @@ fn vote_past_future_height() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 4, 1);

Expand All @@ -725,7 +724,7 @@ fn vote_past_future_height() {
<Test as frame_system::Config>::Hash::default(),
Subspace::current_slot() + 1,
&Subspace::global_randomnesses().current,
piece.clone(),
piece,
1,
);

Expand Down Expand Up @@ -760,7 +759,7 @@ fn vote_wrong_parent() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand All @@ -787,7 +786,7 @@ fn vote_past_future_slot() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

RecordsRoot::<Test>::insert(
archived_segment.root_block.segment_index(),
Expand All @@ -809,7 +808,7 @@ fn vote_past_future_slot() {
frame_system::Pallet::<Test>::block_hash(2),
2.into(),
&Subspace::global_randomnesses().current,
piece.clone(),
piece,
1,
);

Expand Down Expand Up @@ -845,7 +844,7 @@ fn vote_past_future_slot() {
// in that context it is valid
{
let keypair = Keypair::generate();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

let signed_vote = create_signed_vote(
&keypair,
Expand Down Expand Up @@ -885,7 +884,7 @@ fn vote_same_slot() {
// Same time slot in the vote as in the block is fine if height is the same (pre-dispatch)
{
let keypair = Keypair::generate();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];
let signed_vote = create_signed_vote(
&keypair,
3,
Expand All @@ -903,7 +902,7 @@ fn vote_same_slot() {
// (pre-dispatch)
{
let keypair = Keypair::generate();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];
let signed_vote = create_signed_vote(
&keypair,
2,
Expand All @@ -927,7 +926,7 @@ fn vote_bad_reward_signature() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand Down Expand Up @@ -956,7 +955,7 @@ fn vote_unknown_records_root() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand All @@ -983,7 +982,7 @@ fn vote_outside_of_solution_range() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand Down Expand Up @@ -1017,7 +1016,7 @@ fn vote_invalid_solution_signature() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand Down Expand Up @@ -1070,7 +1069,7 @@ fn vote_correct_signature() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand Down Expand Up @@ -1104,7 +1103,7 @@ fn vote_randomness_update() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

RecordsRoot::<Test>::insert(
archived_segment.root_block.segment_index(),
Expand Down Expand Up @@ -1141,7 +1140,7 @@ fn vote_equivocation_current_block_plus_vote() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand Down Expand Up @@ -1192,7 +1191,7 @@ fn vote_equivocation_parent_block_plus_vote() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand Down Expand Up @@ -1252,7 +1251,7 @@ fn vote_equivocation_parent_block_plus_vote() {
fn vote_equivocation_current_voters_duplicate() {
new_test_ext().execute_with(|| {
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&Keypair::generate(), 2, 1);

Expand Down Expand Up @@ -1332,7 +1331,7 @@ fn vote_equivocation_parent_voters_duplicate() {
new_test_ext().execute_with(|| {
let keypair = Keypair::generate();
let archived_segment = create_archived_segment();
let piece = Piece::from(archived_segment.pieces.as_pieces().next().unwrap());
let piece = &archived_segment.pieces[0];

progress_to_block(&keypair, 2, 1);

Expand Down
2 changes: 1 addition & 1 deletion crates/sc-consensus-subspace/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ async fn run_one_test(mutator: impl Fn(&mut TestHeader, Stage) + Send + Sync + '
.await
.unwrap()
.iter()
.flat_map(|flat_pieces| flat_pieces.as_pieces())
.flat_map(|flat_pieces| flat_pieces.iter())
.enumerate()
.choose(&mut thread_rng())
.map(|(piece_index, piece)| (piece_index as u64, Piece::from(piece)))
Expand Down
4 changes: 2 additions & 2 deletions crates/sp-lightclient/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ impl Farmer {
let kzg = Kzg::new(kzg::embedded_kzg_settings());
let archived_segment = archived_segment(kzg.clone());
let root_block = archived_segment.root_block;
let total_pieces = NonZeroU64::new(archived_segment.pieces.count() as u64).unwrap();
let total_pieces = NonZeroU64::new(archived_segment.pieces.len() as u64).unwrap();
let mut sector = vec![0u8; PLOT_SECTOR_SIZE as usize];
let mut sector_metadata = vec![0u8; SectorMetadata::encoded_size()];
let sector_index = 0;
Expand Down Expand Up @@ -150,7 +150,7 @@ impl PieceGetter for TestPieceGetter {
Ok(self
.archived_segment
.pieces
.as_pieces()
.iter()
.nth(piece_index as usize)
.map(Piece::from))
}
Expand Down
18 changes: 9 additions & 9 deletions crates/subspace-archiving/src/archiver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ use subspace_core_primitives::objects::{
BlockObject, BlockObjectMapping, PieceObject, PieceObjectMapping,
};
use subspace_core_primitives::{
ArchivedBlockProgress, Blake2b256Hash, BlockNumber, FlatPieces, LastArchivedBlock, PieceRef,
ArchivedBlockProgress, Blake2b256Hash, BlockNumber, FlatPieces, LastArchivedBlock, PieceArray,
RecordsRoot, RootBlock, RECORDED_HISTORY_SEGMENT_SIZE, RECORD_SIZE,
};

Expand Down Expand Up @@ -749,20 +749,20 @@ impl Archiver {
// Combine data and parity records back into flat vector of pieces along with corresponding
// witnesses (Merkle proofs) created above.
pieces
.as_pieces_mut()
.iter_mut()
.enumerate()
.zip(
record_shards
.as_bytes()
.as_ref()
.chunks_exact(RECORD_SIZE as usize),
)
.for_each(|((position, mut piece), shard_chunk)| {
let (mut record, mut witness) = piece.split_mut();
.for_each(|((position, piece), shard_chunk)| {
let (record, witness) = piece.split_mut();

record.as_mut().copy_from_slice(shard_chunk);
record.copy_from_slice(shard_chunk);
// TODO: Consider batch witness creation for improved performance
witness.as_mut().copy_from_slice(
witness.copy_from_slice(
&self
.kzg
.create_witness(&polynomial, position as u32)
Expand Down Expand Up @@ -799,18 +799,18 @@ impl Archiver {
pub fn is_piece_valid(
kzg: &Kzg,
num_pieces_in_segment: usize,
piece: PieceRef<'_>,
piece: &PieceArray,
commitment: RecordsRoot,
position: u32,
) -> bool {
let (record, witness) = piece.split();
let witness = match Witness::try_from_bytes(&witness) {
let witness = match Witness::try_from_bytes(witness) {
Ok(witness) => witness,
_ => {
return false;
}
};
let leaf_hash = blake2b_256_254_hash_to_scalar(&record);
let leaf_hash = blake2b_256_254_hash_to_scalar(record.as_ref());

kzg.verify(
&commitment,
Expand Down
38 changes: 14 additions & 24 deletions crates/subspace-archiving/src/piece_reconstructor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ impl PiecesReconstructor {
//TODO: reuse already present commitments from segment_pieces, so we don't re-derive what
// we already have
reconstructed_record_shards
.as_pieces_mut()
.iter_mut()
.zip(record_commitments.iter_mut())
.zip(shards)
.for_each(|((mut piece, polynomial_data), record)| {
.for_each(|((piece, polynomial_data), record)| {
let record =
record.expect("Reconstruction just happened and all records are present; qed");
let record = record.flatten();
Expand All @@ -133,20 +133,17 @@ impl PiecesReconstructor {
) -> Result<FlatPieces, ReconstructorError> {
let (mut pieces, polynomial) = self.reconstruct_shards(segment_pieces)?;

pieces
.as_pieces_mut()
.enumerate()
.for_each(|(position, mut piece)| {
piece.witness_mut().as_mut().copy_from_slice(
&self
.kzg
.create_witness(&polynomial, position as u32)
// TODO: Update this proof here and in other places, we don't use Merkle
// trees anymore
.expect("We use the same indexes as during Merkle tree creation; qed")
.to_bytes(),
);
});
pieces.iter_mut().enumerate().for_each(|(position, piece)| {
piece.witness_mut().as_mut().copy_from_slice(
&self
.kzg
.create_witness(&polynomial, position as u32)
// TODO: Update this proof here and in other places, we don't use Merkle
// trees anymore
.expect("We use the same indexes as during Merkle tree creation; qed")
.to_bytes(),
);
});

Ok(pieces)
}
Expand All @@ -164,14 +161,7 @@ impl PiecesReconstructor {
return Err(ReconstructorError::IncorrectPiecePosition);
}

let mut piece = Piece::from(
reconstructed_records
.as_pieces()
.nth(piece_position)
.expect(
"Piece exists at the position within segment after successful reconstruction; qed",
),
);
let mut piece = Piece::from(reconstructed_records[piece_position]);

piece.witness_mut().as_mut().copy_from_slice(
&self
Expand Down
2 changes: 1 addition & 1 deletion crates/subspace-archiving/src/reconstructor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ impl Reconstructor {
.take(self.reed_solomon.data_shard_count())
.all(|maybe_piece| {
if let Some(piece) = maybe_piece {
segment_data.extend_from_slice(&piece.record());
segment_data.extend_from_slice(piece.record().as_ref());
true
} else {
false
Expand Down
Loading