Skip to content

Commit 7741337

Browse files
committed
prover protocol and v2Prover
1 parent 9f8ba79 commit 7741337

File tree

9 files changed

+241
-42
lines changed

9 files changed

+241
-42
lines changed

chia/_tests/plot_sync/test_plot_sync.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class ExpectedResult:
6565
def add_valid(self, list_plots: list[MockPlotInfo]) -> None:
6666
def create_mock_plot(info: MockPlotInfo) -> Plot:
6767
return Plot(
68-
info.prover.get_filename(),
68+
str(info.prover.get_filename()),
6969
uint8(0),
7070
bytes32.zeros,
7171
None,
@@ -77,7 +77,7 @@ def create_mock_plot(info: MockPlotInfo) -> Plot:
7777
)
7878

7979
self.valid_count += len(list_plots)
80-
self.valid_delta.additions.update({x.prover.get_filename(): create_mock_plot(x) for x in list_plots})
80+
self.valid_delta.additions.update({str(x.prover.get_filename()): create_mock_plot(x) for x in list_plots})
8181

8282
def remove_valid(self, list_paths: list[Path]) -> None:
8383
self.valid_count -= len(list_paths)
@@ -193,7 +193,7 @@ async def plot_sync_callback(self, peer_id: bytes32, delta: Optional[Delta]) ->
193193
assert path in delta.valid.additions
194194
plot = harvester.plot_manager.plots.get(Path(path), None)
195195
assert plot is not None
196-
assert plot.prover.get_filename() == delta.valid.additions[path].filename
196+
assert plot.prover.get_filename_str() == delta.valid.additions[path].filename
197197
assert plot.prover.get_size() == delta.valid.additions[path].size
198198
assert plot.prover.get_id() == delta.valid.additions[path].plot_id
199199
assert plot.prover.get_compression_level() == delta.valid.additions[path].compression_level
@@ -254,7 +254,7 @@ async def run_sync_test(self) -> None:
254254
assert expected.duplicates_delta.empty()
255255
for path, plot_info in plot_manager.plots.items():
256256
assert str(path) in receiver.plots()
257-
assert plot_info.prover.get_filename() == receiver.plots()[str(path)].filename
257+
assert plot_info.prover.get_filename_str() == receiver.plots()[str(path)].filename
258258
assert plot_info.prover.get_size() == receiver.plots()[str(path)].size
259259
assert plot_info.prover.get_id() == receiver.plots()[str(path)].plot_id
260260
assert plot_info.prover.get_compression_level() == receiver.plots()[str(path)].compression_level

chia/_tests/plot_sync/test_sync_simulated.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from chia.plot_sync.sender import Sender
2626
from chia.plot_sync.util import Constants
2727
from chia.plotting.manager import PlotManager
28+
from chia.plotting.prover import V1Prover
2829
from chia.plotting.util import PlotInfo
2930
from chia.protocols.harvester_protocol import PlotSyncError, PlotSyncResponse
3031
from chia.protocols.outbound_message import make_msg
@@ -79,7 +80,7 @@ async def run(
7980
removed_paths: list[Path] = [p.prover.get_filename() for p in removed] if removed is not None else []
8081
invalid_dict: dict[Path, int] = {p.prover.get_filename(): 0 for p in self.invalid}
8182
keys_missing_set: set[Path] = {p.prover.get_filename() for p in self.keys_missing}
82-
duplicates_set: set[str] = {p.prover.get_filename() for p in self.duplicates}
83+
duplicates_set: set[str] = {p.prover.get_filename_str() for p in self.duplicates}
8384

8485
# Inject invalid plots into `PlotManager` of the harvester so that the callback calls below can use them
8586
# to sync them to the farmer.
@@ -131,30 +132,30 @@ def validate_plot_sync(self) -> None:
131132
assert len(self.invalid) == len(self.plot_sync_receiver.invalid())
132133
assert len(self.keys_missing) == len(self.plot_sync_receiver.keys_missing())
133134
for _, plot_info in self.plots.items():
134-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.invalid()
135-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.keys_missing()
136-
assert plot_info.prover.get_filename() in self.plot_sync_receiver.plots()
137-
synced_plot = self.plot_sync_receiver.plots()[plot_info.prover.get_filename()]
138-
assert plot_info.prover.get_filename() == synced_plot.filename
135+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.invalid()
136+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.keys_missing()
137+
assert plot_info.prover.get_filename_str() in self.plot_sync_receiver.plots()
138+
synced_plot = self.plot_sync_receiver.plots()[plot_info.prover.get_filename_str()]
139+
assert plot_info.prover.get_filename_str() == synced_plot.filename
139140
assert plot_info.pool_public_key == synced_plot.pool_public_key
140141
assert plot_info.pool_contract_puzzle_hash == synced_plot.pool_contract_puzzle_hash
141142
assert plot_info.plot_public_key == synced_plot.plot_public_key
142143
assert plot_info.file_size == synced_plot.file_size
143144
assert uint64(int(plot_info.time_modified)) == synced_plot.time_modified
144145
for plot_info in self.invalid:
145-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.plots()
146-
assert plot_info.prover.get_filename() in self.plot_sync_receiver.invalid()
147-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.keys_missing()
148-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.duplicates()
146+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.plots()
147+
assert plot_info.prover.get_filename_str() in self.plot_sync_receiver.invalid()
148+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.keys_missing()
149+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.duplicates()
149150
for plot_info in self.keys_missing:
150-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.plots()
151-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.invalid()
152-
assert plot_info.prover.get_filename() in self.plot_sync_receiver.keys_missing()
153-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.duplicates()
151+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.plots()
152+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.invalid()
153+
assert plot_info.prover.get_filename_str() in self.plot_sync_receiver.keys_missing()
154+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.duplicates()
154155
for plot_info in self.duplicates:
155-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.invalid()
156-
assert plot_info.prover.get_filename() not in self.plot_sync_receiver.keys_missing()
157-
assert plot_info.prover.get_filename() in self.plot_sync_receiver.duplicates()
156+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.invalid()
157+
assert plot_info.prover.get_filename_str() not in self.plot_sync_receiver.keys_missing()
158+
assert plot_info.prover.get_filename_str() in self.plot_sync_receiver.duplicates()
158159

159160

160161
@dataclass
@@ -284,7 +285,7 @@ def get_compression_level(self) -> uint8:
284285

285286
return [
286287
PlotInfo(
287-
prover=DiskProver(f"{x}", bytes32.random(seeded_random), 25 + x % 26),
288+
prover=V1Prover(DiskProver(f"{x}", bytes32.random(seeded_random), 25 + x % 26)),
288289
pool_public_key=None,
289290
pool_contract_puzzle_hash=None,
290291
plot_public_key=G1Element(),

chia/_tests/plotting/test_plot_manager.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@
4242
class MockDiskProver:
4343
filename: str
4444

45-
def get_filename(self) -> str:
46-
return self.filename
45+
def get_filename(self) -> Path:
46+
return Path(self.filename)
4747

4848

4949
@dataclass
@@ -614,7 +614,7 @@ def assert_cache(expected: list[MockPlotInfo]) -> None:
614614
# Write the modified cache entries to the file
615615
cache_path.write_bytes(bytes(VersionedBlob(uint16(CURRENT_VERSION), bytes(cache_data))))
616616
# And now test that plots in invalid_entries are not longer loaded
617-
assert_cache([plot_info for plot_info in plot_infos if plot_info.prover.get_filename() not in invalid_entries])
617+
assert_cache([plot_info for plot_info in plot_infos if str(plot_info.prover.get_filename()) not in invalid_entries])
618618

619619

620620
@pytest.mark.anyio

chia/plot_sync/sender.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def _convert_plot_info_list(plot_infos: list[PlotInfo]) -> list[Plot]:
3939
for plot_info in plot_infos:
4040
converted.append(
4141
Plot(
42-
filename=plot_info.prover.get_filename(),
42+
filename=plot_info.prover.get_filename_str(),
4343
size=plot_info.prover.get_size(),
4444
plot_id=plot_info.prover.get_id(),
4545
pool_public_key=plot_info.pool_public_key,

chia/plotting/cache.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@
77
from dataclasses import dataclass, field
88
from math import ceil
99
from pathlib import Path
10-
from typing import Optional
10+
from typing import TYPE_CHECKING, Optional
11+
12+
if TYPE_CHECKING:
13+
from chia.plotting.prover import ProverProtocol
1114

1215
from chia_rs import G1Element
1316
from chia_rs.sized_bytes import bytes32
1417
from chia_rs.sized_ints import uint16, uint64
15-
from chiapos import DiskProver
1618

19+
from chia.plotting.prover import get_prover_from_bytes
1720
from chia.plotting.util import parse_plot_info
1821
from chia.types.blockchain_format.proof_of_space import generate_plot_public_key
1922
from chia.util.streamable import Streamable, VersionedBlob, streamable
@@ -43,15 +46,16 @@ class CacheDataV1(Streamable):
4346

4447
@dataclass
4548
class CacheEntry:
46-
prover: DiskProver
49+
prover: ProverProtocol
4750
farmer_public_key: G1Element
4851
pool_public_key: Optional[G1Element]
4952
pool_contract_puzzle_hash: Optional[bytes32]
5053
plot_public_key: G1Element
5154
last_use: float
5255

5356
@classmethod
54-
def from_disk_prover(cls, prover: DiskProver) -> CacheEntry:
57+
def from_prover(cls, prover: ProverProtocol) -> CacheEntry:
58+
"""Create CacheEntry from any prover implementation"""
5559
(
5660
pool_public_key_or_puzzle_hash,
5761
farmer_public_key,
@@ -149,8 +153,9 @@ def load(self) -> None:
149153
39: 44367,
150154
}
151155
for path, cache_entry in cache_data.entries:
156+
prover: ProverProtocol = get_prover_from_bytes(path, cache_entry.prover_data)
152157
new_entry = CacheEntry(
153-
DiskProver.from_bytes(cache_entry.prover_data),
158+
prover,
154159
cache_entry.farmer_public_key,
155160
cache_entry.pool_public_key,
156161
cache_entry.pool_contract_puzzle_hash,

chia/plotting/check_plots.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from typing import Optional
1010

1111
from chia_rs import G1Element
12-
from chia_rs.sized_ints import uint32
12+
from chia_rs.sized_ints import uint8, uint32
1313
from chiapos import Verifier
1414

1515
from chia.plotting.manager import PlotManager
@@ -133,7 +133,7 @@ def check_plots(
133133
log.info("")
134134
log.info("")
135135
log.info(f"Starting to test each plot with {num} challenges each\n")
136-
total_good_plots: Counter[str] = Counter()
136+
total_good_plots: Counter[uint8] = Counter()
137137
total_size = 0
138138
bad_plots_list: list[Path] = []
139139

chia/plotting/manager.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@
99
from typing import Any, Callable, Optional
1010

1111
from chia_rs import G1Element
12-
from chiapos import DiskProver, decompressor_context_queue
12+
from chiapos import decompressor_context_queue
1313

1414
from chia.consensus.pos_quality import UI_ACTUAL_SPACE_CONSTANT_FACTOR, _expected_plot_size
1515
from chia.plotting.cache import Cache, CacheEntry
16+
from chia.plotting.prover import get_prover_from_file
1617
from chia.plotting.util import (
1718
HarvestingMode,
1819
PlotInfo,
@@ -323,7 +324,7 @@ def process_file(file_path: Path) -> Optional[PlotInfo]:
323324
cache_entry = self.cache.get(file_path)
324325
cache_hit = cache_entry is not None
325326
if not cache_hit:
326-
prover = DiskProver(str(file_path))
327+
prover = get_prover_from_file(str(file_path))
327328

328329
log.debug(f"process_file {file_path!s}")
329330

@@ -343,7 +344,7 @@ def process_file(file_path: Path) -> Optional[PlotInfo]:
343344
)
344345
return None
345346

346-
cache_entry = CacheEntry.from_disk_prover(prover)
347+
cache_entry = CacheEntry.from_prover(prover)
347348
self.cache.update(file_path, cache_entry)
348349

349350
assert cache_entry is not None

0 commit comments

Comments
 (0)