Skip to content

Commit add3f1f

Browse files
committed
rename to partial proofs
1 parent cbe39bb commit add3f1f

File tree

12 files changed

+117
-92
lines changed

12 files changed

+117
-92
lines changed

chia/_tests/farmer_harvester/test_farmer_harvester.py

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -334,11 +334,11 @@ async def test_v2_quality_chains_new_sp_hash(
334334
farmer = farmer_api.farmer
335335

336336
sp_hash = bytes32(b"1" * 32)
337-
v2_quality_chains = harvester_protocol.V2QualityChains(
337+
v2_quality_chains = harvester_protocol.PartialProofsData(
338338
challenge_hash=bytes32(b"2" * 32),
339339
sp_hash=sp_hash,
340340
plot_identifier="test_plot_id",
341-
quality_chains=[b"test_quality_chain_1"],
341+
partial_proofs=[b"test_quality_chain_1"],
342342
signage_point_index=uint8(0),
343343
plot_size=uint8(32),
344344
difficulty=uint64(1000),
@@ -348,7 +348,7 @@ async def test_v2_quality_chains_new_sp_hash(
348348
)
349349

350350
harvester_peer = await get_harvester_peer(farmer)
351-
await farmer_api.v2_quality_chains(v2_quality_chains, harvester_peer)
351+
await farmer_api.partial_proofs(v2_quality_chains, harvester_peer)
352352

353353
assert sp_hash in farmer.number_of_responses
354354
assert farmer.number_of_responses[sp_hash] == 0
@@ -364,11 +364,11 @@ async def test_v2_quality_chains_missing_sp_hash(
364364
farmer_api = farmer_service._api
365365

366366
sp_hash = bytes32(b"1" * 32)
367-
v2_quality_chains = harvester_protocol.V2QualityChains(
367+
v2_quality_chains = harvester_protocol.PartialProofsData(
368368
challenge_hash=bytes32(b"2" * 32),
369369
sp_hash=sp_hash,
370370
plot_identifier="test_plot_id",
371-
quality_chains=[b"test_quality_chain_1"],
371+
partial_proofs=[b"test_quality_chain_1"],
372372
signage_point_index=uint8(0),
373373
plot_size=uint8(32),
374374
difficulty=uint64(1000),
@@ -378,13 +378,13 @@ async def test_v2_quality_chains_missing_sp_hash(
378378
)
379379

380380
harvester_peer = await get_harvester_peer(farmer_api.farmer)
381-
await farmer_api.v2_quality_chains(v2_quality_chains, harvester_peer)
381+
await farmer_api.partial_proofs(v2_quality_chains, harvester_peer)
382382

383383
assert f"Received V2 quality collection for a signage point that we do not have {sp_hash}" in caplog.text
384384

385385

386386
@pytest.mark.anyio
387-
async def test_v2_quality_chains_with_existing_sp(
387+
async def test_v2_partial_proofs_with_existing_sp(
388388
farmer_one_harvester_solver: tuple[list[HarvesterService], FarmerService, SolverService, BlockTools],
389389
) -> None:
390390
_, farmer_service, _, _ = farmer_one_harvester_solver
@@ -407,11 +407,11 @@ async def test_v2_quality_chains_with_existing_sp(
407407

408408
farmer.sps[sp_hash] = [sp]
409409

410-
v2_quality_chains = harvester_protocol.V2QualityChains(
410+
partial_proofs = harvester_protocol.PartialProofsData(
411411
challenge_hash=challenge_hash,
412412
sp_hash=sp_hash,
413413
plot_identifier="test_plot_id",
414-
quality_chains=[b"test_quality_chain_1", b"test_quality_chain_2"],
414+
partial_proofs=[b"test_quality_chain_1", b"test_quality_chain_2"],
415415
signage_point_index=uint8(0),
416416
plot_size=uint8(32),
417417
difficulty=uint64(1000),
@@ -421,7 +421,7 @@ async def test_v2_quality_chains_with_existing_sp(
421421
)
422422

423423
harvester_peer = await get_harvester_peer(farmer)
424-
await farmer_api.v2_quality_chains(v2_quality_chains, harvester_peer)
424+
await farmer_api.partial_proofs(partial_proofs, harvester_peer)
425425

426426
# should store 2 pending requests (one per quality)
427427
assert len(farmer.pending_solver_requests) == 2
@@ -441,11 +441,11 @@ async def test_solution_response_handler(
441441
sp_hash = bytes32(b"1" * 32)
442442
challenge_hash = bytes32(b"2" * 32)
443443

444-
v2_quality_chains = harvester_protocol.V2QualityChains(
444+
v2_quality_chains = harvester_protocol.PartialProofsData(
445445
challenge_hash=challenge_hash,
446446
sp_hash=sp_hash,
447447
plot_identifier="test_plot_id",
448-
quality_chains=[b"test_quality_chain_for_quality"],
448+
partial_proofs=[b"test_quality_chain_for_quality"],
449449
signage_point_index=uint8(0),
450450
plot_size=uint8(32),
451451
difficulty=uint64(1000),
@@ -458,12 +458,12 @@ async def test_solution_response_handler(
458458

459459
# manually add pending request
460460
farmer.pending_solver_requests[quality] = {
461-
"quality_data": v2_quality_chains,
461+
"proof_data": v2_quality_chains,
462462
"peer": harvester_peer,
463463
}
464464

465465
# create solution response
466-
solution_response = solver_protocol.SolverResponse(quality_chain=quality, proof=b"test_proof_from_solver")
466+
solution_response = solver_protocol.SolverResponse(partial_proof=quality, proof=b"test_proof_from_solver")
467467
solver_peer = Mock()
468468
solver_peer.peer_node_id = "solver_peer"
469469

@@ -495,7 +495,7 @@ async def test_solution_response_unknown_quality(
495495
solver_peer = await get_solver_peer(farmer)
496496

497497
# create solution response with unknown quality
498-
solution_response = solver_protocol.SolverResponse(quality_chain=bytes(b"1" * 32), proof=b"test_proof")
498+
solution_response = solver_protocol.SolverResponse(partial_proof=bytes(b"1" * 32), proof=b"test_proof")
499499

500500
with unittest.mock.patch.object(farmer_api, "new_proof_of_space", new_callable=AsyncMock) as mock_new_proof:
501501
await farmer_api.solution_response(solution_response, solver_peer)
@@ -519,11 +519,11 @@ async def test_solution_response_empty_proof(
519519
sp_hash = bytes32(b"1" * 32)
520520
challenge_hash = bytes32(b"2" * 32)
521521

522-
v2_quality_chains = harvester_protocol.V2QualityChains(
522+
v2_quality_chains = harvester_protocol.PartialProofsData(
523523
challenge_hash=challenge_hash,
524524
sp_hash=sp_hash,
525525
plot_identifier="test_plot_id",
526-
quality_chains=[b"test_quality_chain_for_quality"],
526+
partial_proofs=[b"test_quality_chain_for_quality"],
527527
signage_point_index=uint8(0),
528528
plot_size=uint8(32),
529529
difficulty=uint64(1000),
@@ -537,15 +537,15 @@ async def test_solution_response_empty_proof(
537537

538538
# manually add pending request
539539
farmer.pending_solver_requests[quality] = {
540-
"quality_data": v2_quality_chains,
540+
"proof_data": v2_quality_chains,
541541
"peer": harvester_peer,
542542
}
543543

544544
# get real solver peer connection
545545
solver_peer = await get_solver_peer(farmer)
546546

547547
# create solution response with empty proof
548-
solution_response = solver_protocol.SolverResponse(quality_chain=quality, proof=b"")
548+
solution_response = solver_protocol.SolverResponse(partial_proof=quality, proof=b"")
549549

550550
with unittest.mock.patch.object(farmer_api, "new_proof_of_space", new_callable=AsyncMock) as mock_new_proof:
551551
await farmer_api.solution_response(solution_response, solver_peer)
@@ -582,11 +582,11 @@ async def test_v2_quality_chains_solver_exception(
582582

583583
farmer.sps[sp_hash] = [sp]
584584

585-
v2_quality_chains = harvester_protocol.V2QualityChains(
585+
v2_quality_chains = harvester_protocol.PartialProofsData(
586586
challenge_hash=challenge_hash,
587587
sp_hash=sp_hash,
588588
plot_identifier="test_plot_id",
589-
quality_chains=[b"test_quality_chain_1"],
589+
partial_proofs=[b"test_quality_chain_1"],
590590
signage_point_index=uint8(0),
591591
plot_size=uint8(32),
592592
difficulty=uint64(1000),
@@ -599,7 +599,7 @@ async def test_v2_quality_chains_solver_exception(
599599

600600
# Mock send_to_all to raise an exception
601601
with unittest.mock.patch.object(farmer.server, "send_to_all", side_effect=Exception("Solver connection failed")):
602-
await farmer_api.v2_quality_chains(v2_quality_chains, harvester_peer)
602+
await farmer_api.partial_proofs(v2_quality_chains, harvester_peer)
603603

604604
# verify pending request was cleaned up after exception
605605
quality = bytes32(b"3" * 32)

chia/_tests/solver/test_solver_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ async def test_solver_api_methods(blockchain_constants: ConsensusConstants, tmp_
2323
solver = solver_service._node
2424
solver_api = solver_service._api
2525
assert solver_api.ready() is True
26-
test_info = SolverInfo(plot_difficulty=uint64(1500), quality_chain=b"test_quality_chain_42")
26+
test_info = SolverInfo(plot_difficulty=uint64(1500), partial_proof=b"test_quality_chain_42")
2727
expected_proof = b"test_proof_data_12345"
2828
with patch.object(solver, "solve", return_value=expected_proof):
2929
api_result = await solver_api.solve(test_info)
@@ -49,7 +49,7 @@ async def test_solver_error_handling(
4949
pass # expected
5050
# test solver handles exception in solve method
5151
solver = solver_service._node
52-
test_info = SolverInfo(plot_difficulty=uint64(1000), quality_chain=b"test_quality_chain_zeros")
52+
test_info = SolverInfo(plot_difficulty=uint64(1000), partial_proof=b"test_quality_chain_zeros")
5353
with patch.object(solver, "solve", side_effect=RuntimeError("test error")):
5454
# solver api should handle exceptions gracefully
5555
result = await solver_service._api.solve(test_info)

chia/consensus/pos_quality.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
from chia_rs import PlotSize
4+
from chia_rs.sized_bytes import bytes32
45
from chia_rs.sized_ints import uint64
56

67
# The actual space in bytes of a plot, is _expected_plot_size(k) * UI_ACTUAL_SPACE_CONSTANT_FACTO
@@ -15,6 +16,10 @@
1516
}
1617

1718

19+
def quality_for_partial_proof(partial_proof: bytes, challenge: bytes32) -> bytes32:
20+
return bytes32([0] * 32)
21+
22+
1823
def _expected_plot_size(size: PlotSize) -> uint64:
1924
"""
2025
Given the plot size parameter k (which is between 32 and 59), computes the

chia/farmer/farmer_api.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@
1717
from chia.protocols import farmer_protocol, harvester_protocol
1818
from chia.protocols.farmer_protocol import DeclareProofOfSpace, SignedValues
1919
from chia.protocols.harvester_protocol import (
20+
PartialProofsData,
2021
PlotSyncDone,
2122
PlotSyncPathList,
2223
PlotSyncPlotList,
2324
PlotSyncStart,
2425
PoolDifficulty,
2526
SignatureRequestSourceData,
2627
SigningDataKind,
27-
V2QualityChains,
2828
)
2929
from chia.protocols.outbound_message import Message, NodeType, make_msg
3030
from chia.protocols.pool_protocol import (
@@ -481,52 +481,52 @@ async def new_proof_of_space(
481481
return
482482

483483
@metadata.request(peer_required=True)
484-
async def v2_quality_chains(self, quality_data: V2QualityChains, peer: WSChiaConnection) -> None:
484+
async def partial_proofs(self, partial_proof_data: PartialProofsData, peer: WSChiaConnection) -> None:
485485
"""
486-
This is a response from the harvester for V2 plots, containing only quality chains (partial proof bytes).
486+
This is a response from the harvester for V2 plots, containing only partial proof data.
487487
We send these to the solver service and wait for a response with the full proof.
488488
"""
489-
if quality_data.sp_hash not in self.farmer.number_of_responses:
490-
self.farmer.number_of_responses[quality_data.sp_hash] = 0
491-
self.farmer.cache_add_time[quality_data.sp_hash] = uint64(time.time())
489+
if partial_proof_data.sp_hash not in self.farmer.number_of_responses:
490+
self.farmer.number_of_responses[partial_proof_data.sp_hash] = 0
491+
self.farmer.cache_add_time[partial_proof_data.sp_hash] = uint64(time.time())
492492

493-
if quality_data.sp_hash not in self.farmer.sps:
493+
if partial_proof_data.sp_hash not in self.farmer.sps:
494494
self.farmer.log.warning(
495-
f"Received V2 quality collection for a signage point that we do not have {quality_data.sp_hash}"
495+
f"Received partial proofs for a signage point that we do not have {partial_proof_data.sp_hash}"
496496
)
497497
return None
498498

499-
self.farmer.cache_add_time[quality_data.sp_hash] = uint64(time.time())
499+
self.farmer.cache_add_time[partial_proof_data.sp_hash] = uint64(time.time())
500500

501501
self.farmer.log.info(
502-
f"Received V2 quality collection with {len(quality_data.quality_chains)} quality chains "
503-
f"for plot {quality_data.plot_identifier[:10]}... from {peer.peer_node_id}"
502+
f"Received V2 partial proof collection with {len(partial_proof_data.partial_proofs)} partail proofs "
503+
f"for plot {partial_proof_data.plot_identifier[:10]}... from {peer.peer_node_id}"
504504
)
505505

506506
# Process each quality chain through solver service to get full proofs
507-
for quality_chain in quality_data.quality_chains:
507+
for partial_proof in partial_proof_data.partial_proofs:
508508
solver_info = SolverInfo(
509-
plot_difficulty=quality_data.difficulty,
510-
quality_chain=quality_chain,
509+
plot_difficulty=partial_proof_data.difficulty,
510+
partial_proof=partial_proof,
511511
)
512512

513513
try:
514514
# store pending request data for matching with response
515-
self.farmer.pending_solver_requests[quality_chain] = {
516-
"quality_data": quality_data,
515+
self.farmer.pending_solver_requests[partial_proof] = {
516+
"proof_data": partial_proof_data,
517517
"peer": peer,
518518
}
519519

520520
# send solve request to all solver connections
521521
msg = make_msg(ProtocolMessageTypes.solve, solver_info)
522522
await self.farmer.server.send_to_all([msg], NodeType.SOLVER)
523-
self.farmer.log.debug(f"Sent solve request for quality {quality_chain.hex()[:10]}...")
523+
self.farmer.log.debug(f"Sent solve request for quality {partial_proof.hex()[:10]}...")
524524

525525
except Exception as e:
526-
self.farmer.log.error(f"Failed to call solver service for quality {quality_chain.hex()[:10]}...: {e}")
526+
self.farmer.log.error(f"Failed to call solver service for quality {partial_proof.hex()[:10]}...: {e}")
527527
# clean up pending request
528-
if quality_chain in self.farmer.pending_solver_requests:
529-
del self.farmer.pending_solver_requests[quality_chain]
528+
if partial_proof in self.farmer.pending_solver_requests:
529+
del self.farmer.pending_solver_requests[partial_proof]
530530

531531
@metadata.request()
532532
async def solution_response(self, response: SolverResponse, peer: WSChiaConnection) -> None:
@@ -538,36 +538,36 @@ async def solution_response(self, response: SolverResponse, peer: WSChiaConnecti
538538

539539
# find the matching pending request using quality_string
540540

541-
if response.quality_chain not in self.farmer.pending_solver_requests:
542-
self.farmer.log.warning(f"Received solver response for unknown quality {response.quality_chain.hex()}")
541+
if response.partial_proof not in self.farmer.pending_solver_requests:
542+
self.farmer.log.warning(f"Received solver response for unknown quality {response.partial_proof.hex()}")
543543
return
544544

545545
# get the original request data
546-
request_data = self.farmer.pending_solver_requests.pop(response.quality_chain)
547-
quality_data = request_data["quality_data"]
546+
request_data = self.farmer.pending_solver_requests.pop(response.partial_proof)
547+
proof_data = request_data["proof_data"]
548548
original_peer = request_data["peer"]
549-
quality = response.quality_chain
549+
quality = response.partial_proof
550550

551551
# create the proof of space with the solver's proof
552552
proof_bytes = response.proof
553553
if proof_bytes is None or len(proof_bytes) == 0:
554-
self.farmer.log.warning(f"Received empty proof from solver for quality {quality.hex()}...")
554+
self.farmer.log.warning(f"Received empty proof from solver for proof {quality.hex()}...")
555555
return
556556

557-
sp_challenge_hash = quality_data.challenge_hash
557+
sp_challenge_hash = proof_data.challenge_hash
558558
new_proof_of_space = harvester_protocol.NewProofOfSpace(
559-
quality_data.challenge_hash,
560-
quality_data.sp_hash,
561-
quality_data.plot_identifier,
559+
proof_data.challenge_hash,
560+
proof_data.sp_hash,
561+
proof_data.plot_identifier,
562562
ProofOfSpace(
563563
sp_challenge_hash,
564-
quality_data.pool_public_key,
565-
quality_data.pool_contract_puzzle_hash,
566-
quality_data.plot_public_key,
567-
quality_data.plot_size,
564+
proof_data.pool_public_key,
565+
proof_data.pool_contract_puzzle_hash,
566+
proof_data.plot_public_key,
567+
proof_data.plot_size,
568568
proof_bytes,
569569
),
570-
quality_data.signage_point_index,
570+
proof_data.signage_point_index,
571571
include_source_signature_data=False,
572572
farmer_reward_address_override=None,
573573
fee_info=None,

0 commit comments

Comments
 (0)