[CHIA-3923] Chia rs new pos (#20567)

* update chia_rs dependency with the new ProofOfSpace type. use k-22 for v2 plots in simulator

* use new test cache

* review comments

* update test plots and chains to use k-20 for v2 plots, and only alternate between strength 2 and 3 (not 4)
This commit is contained in:
Arvid Norberg
2026-03-02 10:47:29 -06:00
committed by GitHub
parent 73dbe1e5e6
commit d5d886b49f
34 changed files with 396 additions and 222 deletions
+1 -1
View File
@@ -59,7 +59,7 @@ jobs:
python-version: ["3.12"]
env:
CHIA_ROOT: ${{ github.workspace }}/.chia/mainnet
BLOCKS_AND_PLOTS_VERSION: 0.45.3
BLOCKS_AND_PLOTS_VERSION: 0.45.6
steps:
- name: Clean workspace
+1 -1
View File
@@ -130,7 +130,7 @@ jobs:
CHIA_ROOT: ${{ github.workspace }}/.chia/mainnet
CHIA_SIMULATOR_ROOT: ${{ github.workspace }}/.chia/simulator
JOB_FILE_NAME: tests_${{ matrix.os.file_name }}_python-${{ matrix.python.file_name }}_${{ matrix.configuration.module_import_path }}${{ matrix.configuration.file_name_index }}
BLOCKS_AND_PLOTS_VERSION: 0.45.3
BLOCKS_AND_PLOTS_VERSION: 0.45.6
steps:
- name: Checkout code
+6 -2
View File
@@ -20,7 +20,7 @@ from chia_rs import (
TransactionsInfo,
)
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
from benchmarks.utils import setup_db
from chia._tests.util.benchmarks import (
@@ -109,7 +109,11 @@ async def run_add_block_benchmark(version: int) -> None:
rand_g1() if has_pool_pk else None,
rand_hash() if not has_pool_pk else None,
rand_g1(), # plot_public_key
uint8(32),
uint8(0), # v1
uint16(0), # plot_index
uint8(0), # group_id
uint8(0), # strength
uint8(32), # size
random.randbytes(8 * 32),
)
+27 -8
View File
@@ -1217,7 +1217,10 @@ class TestBlockHeaderValidation:
)
await _validate_and_add_block(empty_blockchain, block_bad, expected_error=Err.INVALID_POSPACE)
block_bad = recursive_replace(blocks[-1], "reward_chain_block.proof_of_space.version_and_size", 62)
if blocks[-1].reward_chain_block.proof_of_space.version == 0:
block_bad = recursive_replace(blocks[-1], "reward_chain_block.proof_of_space.size", 62)
else:
block_bad = recursive_replace(blocks[-1], "reward_chain_block.proof_of_space.strength", 1)
await _validate_and_add_block(empty_blockchain, block_bad, expected_error=Err.INVALID_POSPACE)
block_bad = recursive_replace(
@@ -1226,16 +1229,24 @@ class TestBlockHeaderValidation:
AugSchemeMPL.key_gen(std_hash(b"1231n")).get_g1(),
)
await _validate_and_add_block(empty_blockchain, block_bad, expected_error=Err.INVALID_POSPACE)
block_bad = recursive_replace(
blocks[-1],
"reward_chain_block.proof_of_space.version_and_size",
32,
)
if blocks[-1].reward_chain_block.proof_of_space.version == 0:
block_bad = recursive_replace(
blocks[-1],
"reward_chain_block.proof_of_space.size",
32,
)
else:
block_bad = recursive_replace(
blocks[-1],
"reward_chain_block.proof_of_space.strength",
67,
)
await _validate_and_add_block(empty_blockchain, block_bad, expected_error=Err.INVALID_POSPACE)
block_bad = recursive_replace(
blocks[-1],
"reward_chain_block.proof_of_space.proof",
bytes([1] * int((blocks[-1].reward_chain_block.proof_of_space.version_and_size & 0x7F) * 64 / 8)),
bytes([1] * len(blocks[-1].reward_chain_block.proof_of_space.proof)),
)
await _validate_and_add_block(empty_blockchain, block_bad, expected_error=Err.INVALID_POSPACE)
@@ -1451,6 +1462,12 @@ class TestBlockHeaderValidation:
await _validate_and_add_block(empty_blockchain, block_bad, expected_error=Err.INVALID_PREFARM)
@pytest.mark.anyio
# TODO: todo_v2_plots fix this test and remove limit_consensus_modes
@pytest.mark.limit_consensus_modes(
allowed=[ConsensusMode.PLAIN, ConsensusMode.HARD_FORK_2_0, ConsensusMode.HARD_FORK_3_0],
reason="It seams ConsensusMode.HARD_FORK_3_0_AFTER_PHASE_OUT fails to "
"find any proofs with pool keys in a timely manner",
)
async def test_pool_target_signature(self, empty_blockchain: Blockchain, bt: BlockTools) -> None:
# 20b
blocks_initial = bt.get_consecutive_blocks(2)
@@ -3416,6 +3433,8 @@ class TestReorgs:
) -> None:
if light_blocks:
reorg_blocks = test_long_reorg_blocks_light[:1650]
elif consensus_mode >= ConsensusMode.HARD_FORK_3_0:
reorg_blocks = test_long_reorg_blocks[:1350]
else:
reorg_blocks = test_long_reorg_blocks[:1200]
@@ -4360,7 +4379,7 @@ async def test_get_header_blocks_in_range_tx_filter_non_tx_block(empty_blockchai
transactions filter, on a non transaction block.
"""
b = empty_blockchain
blocks = bt.get_consecutive_blocks(2)
blocks = bt.get_consecutive_blocks(10)
for block in blocks:
await _validate_and_add_block(b, block)
non_tx_block = next(block for block in blocks if not block.is_transaction_block())
@@ -93,9 +93,9 @@ class TestPotIterations:
PlotParam.make_v1(34): 100,
PlotParam.make_v1(35): 100,
PlotParam.make_v1(36): 100,
PlotParam.make_v2(2): 200,
PlotParam.make_v2(3): 200,
PlotParam.make_v2(4): 200,
PlotParam.make_v2(0, 0, 2): 200,
PlotParam.make_v2(0, 0, 3): 200,
PlotParam.make_v2(0, 0, 4): 200,
}
farmer_space = {k: _expected_plot_size(k, test_constants) * count for k, count in farmer_ks.items()}
wins = {k: 0 for k in farmer_ks.keys()}
@@ -141,5 +141,7 @@ def test_expected_plot_size_v1() -> None:
def test_expected_plot_size_v2() -> None:
for strength in [2, 3, 4, 5, 6, 7]:
plot_size = _expected_plot_size(PlotParam.make_v2(strength), test_constants)
assert plot_size == 988_513_566
for plot_index in [2, 300, 400, 500, 600, 700]:
for group_id in [2, 3, 4, 5, 6, 7]:
plot_size = _expected_plot_size(PlotParam.make_v2(plot_index, group_id, strength), test_constants)
assert plot_size == 988_513_566
@@ -43,7 +43,7 @@ def b32(key: str) -> bytes32:
return bytes32.from_hexstr(key)
# TODO: todo_v2_plots more test cases
# TODO: todo_v2_plots more test cases, cover plot_index and group_id
@datacases(
ProofOfSpaceCase(
id="Neither pool public key nor pool contract puzzle hash",
@@ -113,7 +113,7 @@ def b32(key: str) -> bytes32:
ProofOfSpaceCase(
id="v2 plot strength 0",
pos_challenge=bytes32(b"1" * 32),
plot_size=PlotParam.make_v2(0),
plot_size=PlotParam.make_v2(0, 0, 0),
pool_contract_puzzle_hash=bytes32(b"1" * 32),
plot_public_key=G1Element(),
expected_error="Plot strength (0) is lower than the minimum (2)",
@@ -121,15 +121,15 @@ def b32(key: str) -> bytes32:
ProofOfSpaceCase(
id="v2 plot strength 33",
pos_challenge=bytes32(b"1" * 32),
plot_size=PlotParam.make_v2(33),
plot_size=PlotParam.make_v2(0, 0, 33),
pool_contract_puzzle_hash=bytes32(b"1" * 32),
plot_public_key=G1Element(),
expected_error="Plot strength (33) is too high (max is 32)",
),
ProofOfSpaceCase(
id="Not passing the plot filter v2",
pos_challenge=b32("0cbb408989205e9a94cc012f0d2717e9336795b0853f972965ad0c75c5700ed9"),
plot_size=PlotParam.make_v2(32),
pos_challenge=b32("5862b9d5210b008c0c30e2673e327b4a6c98c34d93dd05c7a253320eb5db1712"),
plot_size=PlotParam.make_v2(0, 0, 32),
pool_contract_puzzle_hash=bytes32(b"1" * 32),
plot_public_key=g1(
"879526b4e7b616cfd64984d8ad140d0798b048392a6f11e2faf09054ef467ea44dc0dab5e5edb2afdfa850c5c8b629cc"
@@ -139,7 +139,7 @@ def b32(key: str) -> bytes32:
ProofOfSpaceCase(
id="v2 not activated",
pos_challenge=bytes32(b"1" * 32),
plot_size=PlotParam.make_v2(2),
plot_size=PlotParam.make_v2(0, 0, 2),
pool_contract_puzzle_hash=bytes32(b"1" * 32),
plot_public_key=G1Element(),
height=uint32(DEFAULT_CONSTANTS.HARD_FORK2_HEIGHT - 1),
@@ -153,13 +153,13 @@ def test_verify_and_get_quality_string(caplog: pytest.LogCaptureFixture, case: P
pool_public_key=case.pool_public_key,
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
plot_public_key=case.plot_public_key,
version_and_size=case.plot_size,
params=case.plot_size,
proof=b"1",
)
quality_string = verify_and_get_quality_string(
pos=pos,
constants=DEFAULT_CONSTANTS,
original_challenge_hash=b32("0x73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
original_challenge_hash=b32("73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
signage_point=b32("0x7b3e23dbd438f9aceefa9827e2c5538898189987f49b06eceb7a43067e77b531"),
height=case.height,
prev_transaction_block_height=case.height,
@@ -171,8 +171,8 @@ def test_verify_and_get_quality_string(caplog: pytest.LogCaptureFixture, case: P
@datacases(
ProofOfSpaceCase(
id="not passing the plot filter v2",
plot_size=PlotParam.make_v2(2),
pos_challenge=b32("389f3f2f67d37a63d81a21d0e96898ff4eaa7007e1507630bea6a2608795a418"),
plot_size=PlotParam.make_v2(0, 0, 2),
pos_challenge=b32("9483df4e178307ae677d86664daaef4fc52689b2b6cd7825351f2a2ad7075adb"),
plot_public_key=g1(
"afa3aaf09c03885154be49216ee7fb2e4581b9c4a4d7e9cc402e27280bf0cfdbdf1b9ba674e301fd1d1450234b3b1868"
),
@@ -187,7 +187,7 @@ def test_verify_and_get_quality_string_v2(caplog: pytest.LogCaptureFixture, case
pool_public_key=case.pool_public_key,
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
plot_public_key=case.plot_public_key,
version_and_size=case.plot_size,
params=case.plot_size,
proof=b"1",
)
plot_param = pos.param()
@@ -197,7 +197,7 @@ def test_verify_and_get_quality_string_v2(caplog: pytest.LogCaptureFixture, case
quality_string = verify_and_get_quality_string(
pos=pos,
constants=DEFAULT_CONSTANTS,
original_challenge_hash=b32("0x73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
original_challenge_hash=b32("73490e166d0b88347c37d921660b216c27316aae9a3450933d3ff3b854e5831a"),
signage_point=b32("0xf7c1bd874da5e709d4713d60c8a70639eb1167b367a9c3787c65c1e582e2e662"),
height=case.height,
prev_transaction_block_height=case.height,
@@ -223,11 +223,11 @@ def test_verify_and_get_quality_string_v2(caplog: pytest.LogCaptureFixture, case
(PlotParam.make_v1(49), True),
(PlotParam.make_v1(50), True),
(PlotParam.make_v1(51), False), # too large
(PlotParam.make_v2(1), False), # too small
(PlotParam.make_v2(2), True),
(PlotParam.make_v2(3), True),
(PlotParam.make_v2(32), True),
(PlotParam.make_v2(33), False), # strength too high
(PlotParam.make_v2(0, 0, 1), False), # too small
(PlotParam.make_v2(0, 0, 2), True),
(PlotParam.make_v2(0, 0, 3), True),
(PlotParam.make_v2(0, 0, 32), True),
(PlotParam.make_v2(0, 0, 33), False), # strength too high
],
)
def test_check_plot_param(plot_param: PlotParam, valid: bool) -> None:
@@ -290,7 +290,7 @@ def test_calculate_prefix_bits_v1(height: uint32, expected: int) -> None:
],
)
def test_calculate_prefix_bits_v2(height: uint32, expected: int) -> None:
assert calculate_prefix_bits(DEFAULT_CONSTANTS, height, PlotParam.make_v2(28)) == expected
assert calculate_prefix_bits(DEFAULT_CONSTANTS, height, PlotParam.make_v2(0, 0, 28)) == expected
def test_v1_phase_out() -> None:
+9 -10
View File
@@ -1641,7 +1641,11 @@ async def test_unfinished_block_with_replaced_generator(
pos.pool_public_key,
pos.pool_contract_puzzle_hash,
public_key,
pos.version_and_size,
pos.version,
pos.plot_index,
pos.meta_group,
pos.strength,
pos.size,
pos.proof,
)
@@ -2153,13 +2157,14 @@ async def test_compact_protocol_invalid_messages(
wrong_challenge = block.reward_chain_block.challenge_chain_sp_vdf.challenge
wrong_iters = block.reward_chain_block.challenge_chain_sp_vdf.number_of_iterations
wrong_vdf_info, wrong_vdf_proof = get_vdf_info_and_proof(
wrong_vdf_info, _ = get_vdf_info_and_proof(
bt.constants,
ClassgroupElement.get_default_element(),
wrong_challenge,
wrong_iters,
True,
)
wrong_vdf_proof = VDFProof(uint8(0), b"1239819023890", True)
timelord_protocol_invalid_messages: list[timelord_protocol.RespondCompactProofOfTime] = []
full_node_protocol_invalid_messages: list[fnp.RespondCompactVDF] = []
for block in blocks_2[:2]:
@@ -2171,7 +2176,6 @@ async def test_compact_protocol_invalid_messages(
sub_slot.challenge_chain.challenge_chain_end_of_slot_vdf.number_of_iterations,
True,
)
assert wrong_vdf_proof != correct_vdf_proof
timelord_protocol_invalid_messages.append(
timelord_protocol.RespondCompactProofOfTime(
vdf_info,
@@ -2198,7 +2202,6 @@ async def test_compact_protocol_invalid_messages(
sub_slot.infused_challenge_chain.infused_challenge_chain_end_of_slot_vdf.number_of_iterations,
True,
)
assert wrong_vdf_proof != correct_vdf_proof
timelord_protocol_invalid_messages.append(
timelord_protocol.RespondCompactProofOfTime(
vdf_info,
@@ -2226,14 +2229,10 @@ async def test_compact_protocol_invalid_messages(
block.reward_chain_block.challenge_chain_sp_vdf.number_of_iterations,
True,
)
sp_vdf_proof = wrong_vdf_proof
if wrong_vdf_proof == correct_vdf_proof:
# This can actually happen...
sp_vdf_proof = VDFProof(uint8(0), b"1239819023890", True)
timelord_protocol_invalid_messages.append(
timelord_protocol.RespondCompactProofOfTime(
vdf_info,
sp_vdf_proof,
wrong_vdf_proof,
block.header_hash,
block.height,
uint8(CompressibleVDFField.CC_SP_VDF),
@@ -2245,7 +2244,7 @@ async def test_compact_protocol_invalid_messages(
block.header_hash,
uint8(CompressibleVDFField.CC_SP_VDF),
vdf_info,
sp_vdf_proof,
wrong_vdf_proof,
)
)
@@ -1,13 +1,15 @@
from __future__ import annotations
import pytest
from chia_rs import Program as SerializedProgram
from chia_rs import (
CoinSpend,
SpendBundleConditions,
SpendConditions,
get_spends_for_trusted_block,
get_spends_for_trusted_block_with_conditions,
)
from chia_rs import Program as SerializedProgram
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint32, uint64
from chia.consensus.generator_tools import tx_removals_and_additions
@@ -110,11 +112,31 @@ def test_get_spends_for_block(caplog: pytest.LogCaptureFixture) -> None:
conditions = get_spends_for_trusted_block(
test_constants, TEST_GENERATOR.program, TEST_GENERATOR.generator_refs, 100
)
assert conditions["block_spends"] == []
assert conditions["block_spends"] == [
CoinSpend(
Coin(
bytes32.fromhex("0101010101010101010101010101010101010101010101010101010101010101"),
bytes32.fromhex("6c04a09251046f8dd47efe681af7e47f6e61e68fb2f9ad47c5031ec3e36c5564"),
uint64(123),
),
SerializedProgram.fromhex("80"),
SerializedProgram.fromhex("ff80ffff018080"),
)
]
def test_get_spends_for_block_with_conditions(caplog: pytest.LogCaptureFixture) -> None:
conditions = get_spends_for_trusted_block_with_conditions(
test_constants, TEST_GENERATOR.program, TEST_GENERATOR.generator_refs, 100
)
assert conditions == []
assert len(conditions) == 1
assert conditions[0]["coin_spend"] == CoinSpend(
Coin(
bytes32.fromhex("0101010101010101010101010101010101010101010101010101010101010101"),
bytes32.fromhex("6c04a09251046f8dd47efe681af7e47f6e61e68fb2f9ad47c5031ec3e36c5564"),
uint64(123),
),
SerializedProgram.fromhex("80"),
SerializedProgram.fromhex("ff80ffff018080"),
)
assert len(conditions[0]["conditions"]) == 1024
@@ -2764,7 +2764,7 @@ def transactions_1000_fixture(test_wallet: WalletTool, seeded_random: random.Ran
# if we try to fill the mempool with more than 550, all spends won't
# necessarily fit in the block, which the test assumes
@pytest.mark.anyio
@pytest.mark.parametrize("mempool_size", [1, 2, 100, 300, 400, 550, 730])
@pytest.mark.parametrize("mempool_size", [1, 2, 100, 300, 400, 550, 630])
@pytest.mark.parametrize("seed", [0, 1, 2, 3, 4])
@pytest.mark.parametrize("old", [True, False])
async def test_create_block_generator(
@@ -2772,7 +2772,7 @@ async def test_create_block_generator(
) -> None:
# the old way of creating bloks doesn't fit this many transactions, so we
# expect it to fail
expect_failure = mempool_size == 730 and old
expect_failure = mempool_size == 630 and old
bundles = transactions_1000
all_coins = [s.coin for b in bundles for s in b.coin_spends]
@@ -87,7 +87,7 @@ async def test_farmer_get_harvesters_and_summary(
res = await harvester_rpc_client.get_plots()
nonlocal harvester_plots
harvester_plots = res["plots"]
return len(harvester_plots) == 175
return len(harvester_plots) == 65
await time_out_assert(10, non_zero_plots)
@@ -333,14 +333,14 @@ def test_plot_matches_filter(filter_item: FilterItem, match: bool) -> None:
@pytest.mark.parametrize(
"endpoint, filtering, sort_key, reverse, expected_plot_count",
[
(FarmerRpcClient.get_harvester_plots_valid, [], "filename", False, 175),
(FarmerRpcClient.get_harvester_plots_valid, [], "size", True, 175),
(FarmerRpcClient.get_harvester_plots_valid, [], "filename", False, 65),
(FarmerRpcClient.get_harvester_plots_valid, [], "size", True, 65),
(
FarmerRpcClient.get_harvester_plots_valid,
[FilterItem("pool_contract_puzzle_hash", None)],
"file_size",
True,
165,
55,
),
(
FarmerRpcClient.get_harvester_plots_valid,
@@ -354,7 +354,7 @@ def test_plot_matches_filter(filter_item: FilterItem, match: bool) -> None:
[FilterItem("size", "130")], # 127 means v2 plot, 2 means strength
"size",
True,
55,
23,
),
(
FarmerRpcClient.get_harvester_plots_valid,
+16 -2
View File
@@ -634,8 +634,15 @@ async def test_get_blockchain_state(
blocks = bt.get_consecutive_blocks(num_blocks, block_list_input=blocks, guarantee_transaction_block=True)
for block in blocks:
# For overflow blocks, the last sub-slot is not yet finished
# from the unfinished block's perspective, so we must exclude it
if is_overflow_block(bt.constants, block.reward_chain_block.signage_point_index):
finished_ss = block.finished_sub_slots[:-1]
else:
finished_ss = block.finished_sub_slots
unf = UnfinishedBlock(
block.finished_sub_slots,
finished_ss,
block.reward_chain_block.get_unfinished(),
block.challenge_chain_sp_proof,
block.reward_chain_sp_proof,
@@ -740,8 +747,15 @@ async def test_coin_name_found_in_mempool(one_node: SimulatorsAndWalletsServices
blocks = bt.get_consecutive_blocks(2, block_list_input=blocks, guarantee_transaction_block=True)
for block in blocks:
# For overflow blocks, the last sub-slot is not yet finished
# from the unfinished block's perspective, so we must exclude it
if is_overflow_block(bt.constants, block.reward_chain_block.signage_point_index):
finished_ss = block.finished_sub_slots[:-1]
else:
finished_ss = block.finished_sub_slots
unf = UnfinishedBlock(
block.finished_sub_slots,
finished_ss,
block.reward_chain_block.get_unfinished(),
block.challenge_chain_sp_proof,
block.reward_chain_sp_proof,
+2 -2
View File
@@ -580,7 +580,7 @@ async def test_farmer_new_proof_of_space_for_pool_stats(
pool_public_key=case.pool_public_key,
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
plot_public_key=case.plot_public_key,
version_and_size=case.plot_size,
params=case.plot_size,
proof=case.proof,
)
new_pos = NewProofOfSpace(
@@ -728,7 +728,7 @@ def create_valid_pos(farmer: Farmer) -> tuple[farmer_protocol.NewSignagePoint, P
pool_public_key=case.pool_public_key,
pool_contract_puzzle_hash=case.pool_contract_puzzle_hash,
plot_public_key=case.plot_public_key,
version_and_size=case.plot_size,
params=case.plot_size,
proof=case.proof,
)
new_pos = NewProofOfSpace(
@@ -10,7 +10,7 @@ from unittest.mock import AsyncMock, Mock
import pytest
from chia_rs import G1Element, PartialProof
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint8, uint32, uint64
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
from chia._tests.conftest import HarvesterFarmerEnvironment
from chia._tests.util.split_managers import split_async_manager
@@ -345,6 +345,8 @@ async def test_v2_partial_proofs_new_sp_hash(
partial_proofs=[test_partial_proof],
signage_point_index=uint8(0),
plot_size=uint8(32),
plot_index=uint16(0),
meta_group=uint8(0),
strength=uint8(5),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
pool_public_key=None,
@@ -376,6 +378,8 @@ async def test_v2_partial_proofs_missing_sp_hash(
partial_proofs=[test_partial_proof],
signage_point_index=uint8(0),
plot_size=uint8(32),
plot_index=uint16(0),
meta_group=uint8(0),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
strength=uint8(5),
pool_public_key=None,
@@ -423,6 +427,8 @@ async def test_v2_partial_proofs_with_existing_sp(
],
signage_point_index=uint8(0),
plot_size=uint8(32),
plot_index=uint16(0),
meta_group=uint8(0),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
strength=uint8(5),
pool_public_key=G1Element(),
@@ -457,8 +463,10 @@ async def test_solution_response_handler(
partial_proofs=[test_partial_proof],
signage_point_index=uint8(0),
plot_size=uint8(32),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
plot_index=uint16(0),
meta_group=uint8(0),
strength=uint8(5),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
pool_public_key=G1Element(),
pool_contract_puzzle_hash=bytes32(b"4" * 32),
plot_public_key=G1Element(),
@@ -544,8 +552,10 @@ async def test_solution_response_empty_proof(
],
signage_point_index=uint8(0),
plot_size=uint8(32),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
plot_index=uint16(0),
meta_group=uint8(0),
strength=uint8(5),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
pool_public_key=G1Element(),
pool_contract_puzzle_hash=bytes32(b"4" * 32),
plot_public_key=G1Element(),
@@ -612,8 +622,10 @@ async def test_v2_partial_proofs_solver_exception(
],
signage_point_index=uint8(0),
plot_size=uint8(32),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
plot_index=uint16(0),
meta_group=uint8(0),
strength=uint8(5),
plot_id=bytes32.fromhex("abababababababababababababababababababababababababababababababab"),
pool_public_key=G1Element(),
pool_contract_puzzle_hash=bytes32(b"4" * 32),
plot_public_key=G1Element(),
@@ -19,7 +19,7 @@ from chia.harvester.harvester_rpc_client import HarvesterRpcClient
from chia.harvester.harvester_service import HarvesterService
from chia.protocols import farmer_protocol
from chia.simulator.block_tools import create_block_tools_async, test_constants
from chia.types.blockchain_format.proof_of_space import get_plot_id, passes_plot_filter
from chia.types.blockchain_format.proof_of_space import passes_plot_filter
from chia.util.keychain import Keychain
@@ -39,7 +39,7 @@ def test_filter_prefix_bits_on_blocks(
) -> None:
passed = 0
for block in default_10000_blocks:
plot_id = get_plot_id(blockchain_constants, block.reward_chain_block.proof_of_space)
plot_id = block.reward_chain_block.proof_of_space.compute_plot_id()
original_challenge_hash = block.reward_chain_block.pos_ss_cc_challenge_hash
if block.reward_chain_block.challenge_chain_sp_vdf is None:
assert block.reward_chain_block.signage_point_index == 0
@@ -20,7 +20,7 @@ from chia_rs import (
RewardChainSubSlot,
)
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint8, uint32, uint64
from chia_rs.sized_ints import uint8, uint16, uint32, uint64
from chia._tests.util.misc import patch_request_handler
from chia._tests.util.time_out_assert import time_out_assert
@@ -376,7 +376,11 @@ def prepare_sp_and_pos_for_fee_test(
pool_public_key=None,
pool_contract_puzzle_hash=None,
plot_public_key=pubkey,
version_and_size=uint8(32),
version=uint8(0),
plot_index=uint16(0),
meta_group=uint8(0),
strength=uint8(0),
size=uint8(32),
proof=proof,
),
signage_point_index=uint8(0),
-1
View File
@@ -158,7 +158,6 @@ class TestNewPeak:
ConsensusMode.PLAIN,
ConsensusMode.HARD_FORK_2_0,
ConsensusMode.SOFT_FORK_2_6,
ConsensusMode.HARD_FORK_3_0_AFTER_PHASE_OUT,
],
reason="test builds a synthetic unfinished block for HF3.0",
)
+26 -4
View File
@@ -21,7 +21,7 @@ from chia_rs import (
VDFProof,
)
from chia_rs.sized_bytes import bytes32, bytes100
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
from chia.consensus.coinbase import create_farmer_coin, create_pool_coin
from chia.consensus.default_constants import DEFAULT_CONSTANTS
@@ -71,12 +71,34 @@ def rand_vdf_proof() -> VDFProof:
def rand_full_block() -> FullBlock:
version = uint8(random.randint(0, 1))
plot_index = uint16(0)
group_id = uint8(0)
strength = uint8(0)
size = uint8(0)
if version == 0:
size = uint8(random.randint(18, 32))
elif version == 1:
plot_index = uint16(random.randint(0, 65535))
group_id = uint8(random.randint(0, 255))
strength = uint8(random.randint(2, 10))
if random.randint(0, 1) == 0:
pool_public_key = rand_g1()
pool_contract_hash = None
else:
pool_public_key = None
pool_contract_hash = rand_hash()
proof_of_space = ProofOfSpace(
rand_hash(),
pool_public_key,
pool_contract_hash,
rand_g1(),
None,
rand_g1(),
uint8(0),
version,
plot_index,
group_id,
strength,
size,
random.randbytes(8 * 32),
)
+10 -4
View File
@@ -81,7 +81,11 @@ proof_of_space = ProofOfSpace(
"b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0"
),
),
uint8(204),
uint8(1), # version 1
uint16(3145), # plot_index
uint8(5), # meta_group
uint8(3), # strength
uint8(0), # size
bytes.fromhex(
"a67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
),
@@ -160,9 +164,11 @@ partial_proof = harvester_protocol.PartialProofsData(
PartialProof([uint64(256)] * 16),
PartialProof([uint64(257)] * 16),
],
uint8(4),
uint8(32),
uint8(5),
uint8(4), # signage point
uint8(32), # plot size
uint16(3145), # plot_index
uint8(5), # meta_group
uint8(3), # strength
bytes32.fromhex("346e8dc02e9b44c0571caa74fd99f163d4c5d7deaedac87125528721493f7a8a"),
G1Element.from_bytes(
bytes.fromhex(
Binary file not shown.
+83 -17
View File
@@ -26,7 +26,11 @@ declare_proof_of_space_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_signature": "0xc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
@@ -75,7 +79,9 @@ partial_proof_json: dict[str, Any] = {
],
"signage_point_index": 4,
"plot_size": 32,
"strength": 5,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"plot_id": "0x346e8dc02e9b44c0571caa74fd99f163d4c5d7deaedac87125528721493f7a8a",
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": "0x91240fbacdf93b44c0571caa74fd99f163d4c5d7deaedac87125528721493f7a",
@@ -143,7 +149,11 @@ respond_proof_of_weight_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"cc_signage_point": {
@@ -287,7 +297,11 @@ respond_proof_of_weight_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -482,7 +496,11 @@ respond_blocks_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -659,7 +677,11 @@ respond_blocks_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -842,7 +864,11 @@ respond_block_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -1028,7 +1054,11 @@ respond_unfinished_block_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -1393,7 +1423,11 @@ respond_header_block_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -1575,7 +1609,11 @@ respond_block_headers_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -1831,7 +1869,11 @@ respond_header_blocks_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -2214,7 +2256,11 @@ new_proof_of_space_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"signage_point_index": 160,
@@ -2255,7 +2301,7 @@ request_signatures_json: dict[str, Any] = {
},
{
"kind": 7,
"data": "0xdada61e179e67e5e8bc7aaab16e192facf0f15871f0c479d2a96ac5f85721a1a2293a92f557d08441fb331df88bc142e70c110e21620374118fb220ccc3ef621378197e850882ec901a04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c00b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0cc000000b0a67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f929287fab514e2204808821e2afe8c4d84f0093c75554b067fe4fca272890c9d00f98dff6bdcc3926b33cb8ab22e11bd15c13d6a9b6832ac948b3273f5ccd8e7ec",
"data": "0xdada61e179e67e5e8bc7aaab16e192facf0f15871f0c479d2a96ac5f85721a1a2293a92f557d08441fb331df88bc142e70c110e21620374118fb220ccc3ef621378197e850882ec901a04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c02b6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d00c490503000000b0a67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f929287fab514e2204808821e2afe8c4d84f0093c75554b067fe4fca272890c9d00f98dff6bdcc3926b33cb8ab22e11bd15c13d6a9b6832ac948b3273f5ccd8e7ec",
},
],
"rc_block_unfinished": {
@@ -2267,6 +2313,10 @@ request_signatures_json: dict[str, Any] = {
"pool_public_key": None,
"pool_contract_puzzle_hash": "0x1b9d1eaa3c6a9b27cd90ad9070eb012794a74b277446417bc7b904145010c087",
"plot_public_key": "0x8fde05dff50c7409c6ac3c5c42d7cdf596e6232bdfa833e715dbd19cfec3e9d08a407b11288a0a6fd25a932ebd0d6a3f",
"version": 0,
"plot_index": 0,
"meta_group": 0,
"strength": 0,
"size": 20,
"proof": "0x6b99913f88112ab38726b8119e7f7006b24274f1a8c4c552c2a23c8076bdf0d4e8546c4a47fb5b82041e429a3fd44936ce5e9d811a4996a6f0d2896805b6ae018430d944db57080b1abb5863cb48c6deeaf86e93e6c2f0f8f88f527aa4966d88e1e607dadb45869f18225ef1b987d2b43a08a8defff0b0320106fdaad531edfca2b7b78d873d3f20a3780b2baaea3caafb8ad47f43e649872d16e69afd06527d",
},
@@ -2370,7 +2420,11 @@ post_partial_payload_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"sp_hash": "0x929287fab514e2204808821e2afe8c4d84f0093c75554b067fe4fca272890c9d",
@@ -2387,7 +2441,11 @@ post_partial_request_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"sp_hash": "0x929287fab514e2204808821e2afe8c4d84f0093c75554b067fe4fca272890c9d",
@@ -2466,7 +2524,11 @@ new_peak_timelord_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
@@ -2537,7 +2599,11 @@ new_unfinished_block_timelord_json: dict[str, Any] = {
"pool_public_key": "0xa04c6b5ac7dfb935f6feecfdd72348ccf1d4be4fe7e26acf271ea3b7d308da61e0a308f7a62495328a81f5147b66634c",
"pool_contract_puzzle_hash": None,
"plot_public_key": "0xb6449c2c68df97c19e884427e42ee7350982d4020571ead08732615ff39bd216bfd630b6460784982bec98b49fea79d0",
"size": 204,
"version": 1,
"plot_index": 3145,
"meta_group": 5,
"strength": 3,
"size": 0,
"proof": "0xa67188ae0c02c49b0e821a9773033a3fbd338030c383080dbb8b1d63f07af427d8075e59d911f85ea562fd967823588f9a405a4464fdf5dc0866ee15bebd6b94cb147e28aa9cf96da930611486b779737ed721ea376b9939ba05357141223d75d21b21f310ec32d85ed3b98cf301494ea91b8501138481f3bfa1c384fd998b1fdd2855ac6f0c8554c520fb0bfa3663f238124035e14682bc11eaf7c372b6af4ed7f59a406810c71711906f8c91f94b1f",
},
"challenge_chain_sp_vdf": {
+26 -12
View File
@@ -25,7 +25,7 @@ from chia_rs import (
TransactionsInfo,
)
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
from chia._tests.util.benchmarks import rand_g1, rand_g2, rand_hash, rand_vdf, rand_vdf_proof, rewards
from chia.consensus.generator_tools import get_block_header
@@ -71,17 +71,31 @@ def vdf_proof() -> VDFProof:
def get_proof_of_space() -> Iterator[ProofOfSpace]:
for pool_pk in [g1(), None]:
for plot_hash in [hsh(), None]:
for pos_version in [0, 0x80]:
yield ProofOfSpace(
hsh(), # challenge
pool_pk,
plot_hash,
g1(), # plot_public_key
uint8(pos_version | 32), # this is version and k-size
random.randbytes(8 * 32),
)
for pool_pk, plot_hash in [(g1(), None), (None, hsh())]:
yield ProofOfSpace(
hsh(), # challenge
pool_pk,
plot_hash,
g1(), # plot_public_key
uint8(0), # version
uint16(0), # plot_index (not used for v1)
uint8(0), # group_id (not used for v1)
uint8(0), # strength (not used for v1)
uint8(32), # this is k-size
random.randbytes(8 * 32),
)
yield ProofOfSpace(
hsh(), # challenge
pool_pk,
plot_hash,
g1(), # plot_public_key
uint8(1), # version
uint16(123), # plot_index
uint8(21), # group_id
uint8(4), # strength
uint8(0), # not used for v2
random.randbytes(8 * 32),
)
def get_reward_chain_block(height: uint32) -> Iterator[RewardChainBlock]:
+6 -2
View File
@@ -22,7 +22,7 @@ from chia_rs import (
compute_merkle_set_root,
)
from chia_rs.sized_bytes import bytes32, bytes100
from chia_rs.sized_ints import uint8, uint32, uint64, uint128
from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
from chiabip158 import PyBIP158
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
@@ -42,7 +42,11 @@ DEFAULT_PROOF_OF_SPACE = ProofOfSpace(
G1Element(),
None,
G1Element(),
uint8(20),
uint8(0), # version 1
uint16(0), # plot_index
uint8(0), # group_id
uint8(0), # strength
uint8(20), # size
bytes(32 * 5),
)
DEFAULT_VDF_INFO = VDFInfo(bytes32.zeros, uint64(1), ClassgroupElement(bytes100.zeros))
@@ -177,7 +177,7 @@ class TestWeightProof:
assert wp is not None
@pytest.mark.anyio
# TODO: todo_v2_plots this test stalls for HARD_FORK_3_0. possibly because
# TODO: todo_v2_plots this test fails for HARD_FORK_3_0. possibly because
# of force_overflow=True. Investigate, fix and remove this limit_consensus_modes()
@pytest.mark.limit_consensus_modes(
allowed=[ConsensusMode.PLAIN, ConsensusMode.HARD_FORK_2_0, ConsensusMode.HARD_FORK_3_0_AFTER_PHASE_OUT],
+6 -3
View File
@@ -44,7 +44,6 @@ from chia.types.blockchain_format.proof_of_space import (
calculate_prefix_bits,
generate_plot_public_key,
generate_taproot_sk,
get_plot_id,
verify_and_get_quality_string,
)
@@ -109,7 +108,7 @@ class FarmerAPI:
prev_transaction_block_height=sp.last_tx_height,
)
if computed_quality_string is None:
plotid: bytes32 = get_plot_id(self.farmer.constants, new_proof_of_space.proof)
plotid: bytes32 = new_proof_of_space.proof.compute_plot_id()
self.farmer.log.error(f"Invalid proof of space: {plotid.hex()} proof: {new_proof_of_space.proof}")
return None
@@ -571,7 +570,11 @@ class FarmerAPI:
proof_data.pool_public_key,
proof_data.pool_contract_puzzle_hash,
proof_data.plot_public_key,
proof_data.plot_size,
uint8(1), # we only use this for v2 plots
proof_data.plot_index,
proof_data.meta_group,
proof_data.strength,
uint8(0), # size is unused for v2 proofs
proof_bytes,
),
proof_data.signage_point_index,
+16 -2
View File
@@ -38,6 +38,10 @@ def skip_bytes32(buf: memoryview) -> memoryview:
return buf[32:]
def skip_uint16(buf: memoryview) -> memoryview:
return buf[2:]
def skip_uint32(buf: memoryview) -> memoryview:
return buf[4:]
@@ -119,9 +123,19 @@ def skip_g2_element(buf: memoryview) -> memoryview:
def skip_proof_of_space(buf: memoryview) -> memoryview:
buf = skip_bytes32(buf) # challenge
buf = skip_optional(buf, skip_g1_element) # pool_public_key
buf = skip_optional(buf, skip_bytes32) # pool_contract_puzzle_hash
discriminant = buf[0]
buf = buf[1:]
is_v2 = (discriminant & 0x2) != 0
if (discriminant & 0x1) != 0:
buf = skip_bytes32(buf) # pool_contract_puzzle_hash
buf = skip_g1_element(buf) # plot_public_key
buf = skip_uint8(buf) # size
if not is_v2:
buf = skip_uint8(buf) # size
else:
buf = skip_uint16(buf) # plot_index
buf = skip_uint8(buf) # group_id
buf = skip_uint8(buf) # strength
return skip_bytes(buf) # proof
+6 -1
View File
@@ -207,6 +207,9 @@ class HarvesterAPI:
if len(good_partial_proofs) == 0:
return None
param = plot_info.prover.get_param()
assert param.strength_v2 is not None
return PartialProofsData(
new_challenge.challenge_hash,
new_challenge.sp_hash,
@@ -214,7 +217,9 @@ class HarvesterAPI:
good_partial_proofs,
new_challenge.signage_point_index,
self.harvester.constants.PLOT_SIZE_V2,
plot_info.prover.get_strength(),
param.plot_index,
param.meta_group,
param.strength_v2,
plot_id,
plot_info.pool_public_key,
plot_info.pool_contract_puzzle_hash,
+8 -4
View File
@@ -4,7 +4,7 @@ import logging
from datetime import datetime
from pathlib import Path
from chia_rs import AugSchemeMPL, G1Element, PrivateKey, create_v2_plot
from chia_rs import AugSchemeMPL, G1Element, PrivateKey, compute_plot_id_v2, create_v2_plot
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint8, uint16
from chiapos import DiskPlotter
@@ -14,7 +14,6 @@ from chia.plotting.util import Params, stream_plot_info_ph, stream_plot_info_pk
from chia.types.blockchain_format.proof_of_space import (
calculate_plot_id_ph,
calculate_plot_id_pk,
calculate_plot_id_v2,
generate_plot_public_key,
)
from chia.util.bech32m import decode_puzzle_hash
@@ -334,8 +333,13 @@ async def create_v2_plots(
else: # pragma: no cover
assert False, "one of pool_contract_puzzle_hash and pool_public_key must be set"
plot_id = calculate_plot_id_v2(
uint8(size), plot_index, meta_group, pool_ph_or_pk, plot_public_key, uint8(strength)
plot_id = compute_plot_id_v2(
uint8(strength),
plot_public_key,
keys.pool_public_key,
keys.pool_contract_puzzle_hash,
plot_index,
meta_group,
)
filename = f"plot-k{size}-{plot_id}.plot2"
+3 -1
View File
@@ -74,7 +74,9 @@ class V2Prover:
return self._prover.get_filename()
def get_param(self) -> PlotParam:
return PlotParam.make_v2(self._prover.get_strength())
# TODO: todo_v2_plots explose plot_index and group_id from the prover
# and initialize them here
return PlotParam.make_v2(0, 0, self._prover.get_strength())
def get_strength(self) -> uint8:
return uint8(self._prover.get_strength())
+7 -2
View File
@@ -5,7 +5,7 @@ from enum import IntEnum
from chia_rs import G1Element, G2Element, PartialProof, PlotParam, ProofOfSpace, RewardChainBlockUnfinished
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import int16, uint8, uint32, uint64
from chia_rs.sized_ints import int16, uint8, uint16, uint32, uint64
from chia.util.streamable import Streamable, streamable
@@ -85,6 +85,8 @@ class PartialProofsData(Streamable):
partial_proofs: list[PartialProof]
signage_point_index: uint8
plot_size: uint8
plot_index: uint16
meta_group: uint8
strength: uint8
plot_id: bytes32
pool_public_key: G1Element | None
@@ -156,8 +158,11 @@ class Plot(Streamable):
compression_level: uint8 | None
def param(self) -> PlotParam:
# TODO: todo_v2_plots we need plot_index and meta_group here. Maybe we
# just need a version 2 of this message. We still need the existing
# version for backwards compatibility with existing harvesters
if (self.size & 0x80) != 0:
return PlotParam.make_v2(self.size & 0x7F)
return PlotParam.make_v2(0, 0, self.size & 0x7F)
else:
return PlotParam.make_v1(self.size)
+6 -13
View File
@@ -138,7 +138,7 @@ GENERATOR_MOD: SerializedProgram = SerializedProgram.from_bytes(ROM_BOOTSTRAP_GE
test_constants = DEFAULT_CONSTANTS.replace(
MIN_PLOT_SIZE_V1=uint8(18),
PLOT_SIZE_V2=uint8(18),
PLOT_SIZE_V2=uint8(20),
MIN_BLOCKS_PER_CHALLENGE_BLOCK=uint8(12),
DIFFICULTY_STARTING=uint64(2**10),
DISCRIMINANT_SIZE_BITS=uint16(16),
@@ -539,18 +539,11 @@ class BlockTools:
num_og_plots: int = 15,
num_pool_plots: int = 5,
num_non_keychain_plots: int = 3,
num_v2_plots: int = 150,
num_v2_plots: int = 40,
plot_size: int = 20,
bitfield: bool = True,
testrun_uid: str | None = None,
) -> bool:
# we have 20 v1 plots, each about 16.6 MB
# in order to balance that out with v2 plots, we need approximately the
# same size on disk. A v2 k-18 plot is expected to be about 630 kB, so we
# need about 26 times more v2 plots, i.e. 527. That's a bit much, so we
# go for 150 plots instead, it might make it a bit more expensive to
# generate the test chains, but we lower the difficulty level for the
# pure v2 chains.
print(
f"setup_plots({num_og_plots}, {num_pool_plots}, "
f"{num_non_keychain_plots}, {num_v2_plots}) "
@@ -589,11 +582,11 @@ class BlockTools:
existing_plots = False
# v2 plots
for i in range(num_v2_plots):
plot = await self.new_plot2(plot_size=18, strength=2 + (i % 3))
plot = await self.new_plot2(plot_size=20, strength=2 + (i % 2))
if plot.new_plot:
existing_plots = False
for i in range(num_pool_plots):
plot = await self.new_plot2(self.pool_ph, plot_size=18, strength=2)
plot = await self.new_plot2(self.pool_ph, plot_size=20, strength=2 + (i % 2))
if plot.new_plot:
existing_plots = False
await self.refresh_plots()
@@ -683,7 +676,7 @@ class BlockTools:
path: Path | None = None,
plot_keys: PlotKeys | None = None,
exclude_plots: bool = False,
plot_size: int = 18,
plot_size: int = 20,
strength: int = 2,
) -> BlockToolsNewPlotResult:
final_dir = self.plot_dir
@@ -2269,7 +2262,7 @@ async def create_block_tools_async(
num_og_plots: int = 15,
num_pool_plots: int = 5,
num_non_keychain_plots: int = 3,
num_v2_plots: int = 150,
num_v2_plots: int = 40,
testrun_uid: str | None = None,
) -> AsyncIterator[BlockTools]:
global create_block_tools_async_count
+18 -57
View File
@@ -19,57 +19,38 @@ def make_pos(
pool_public_key: G1Element | None,
pool_contract_puzzle_hash: bytes32 | None,
plot_public_key: G1Element,
version_and_size: PlotParam,
params: PlotParam,
proof: bytes,
) -> ProofOfSpace:
k: int
if version_and_size.size_v1 is not None:
k = version_and_size.size_v1
if params.size_v1 is not None:
version = 0
plot_index = 0
meta_group = 0
strength = 0
k = params.size_v1
else:
assert version_and_size.strength_v2 is not None
k = version_and_size.strength_v2
assert k is not None
assert k <= 0x3F
k |= 0x80
version = 1
assert params.strength_v2 is not None
plot_index = params.plot_index
meta_group = params.meta_group
strength = params.strength_v2
k = 0
return ProofOfSpace(
challenge,
pool_public_key,
pool_contract_puzzle_hash,
plot_public_key,
uint8(version),
uint16(plot_index),
uint8(meta_group),
uint8(strength),
uint8(k),
proof,
)
def get_plot_id(constants: ConsensusConstants, pos: ProofOfSpace) -> bytes32:
plot_param = pos.param()
if pos.pool_public_key is None:
assert pos.pool_contract_puzzle_hash is not None
pool_pk_or_contract_ph: G1Element | bytes32 = pos.pool_contract_puzzle_hash
else:
assert pos.pool_contract_puzzle_hash is None
pool_pk_or_contract_ph = pos.pool_public_key
# V2 plots
if plot_param.strength_v2 is not None:
# TODO: todo_v2_plots index and meta_group need to be added to ProofOfSpace
plot_index = uint16(0)
meta_group = uint8(0)
return calculate_plot_id_v2(
constants.PLOT_SIZE_V2,
plot_index,
meta_group,
pool_pk_or_contract_ph,
pos.plot_public_key,
uint8(plot_param.strength_v2),
)
# V1 plots
if isinstance(pool_pk_or_contract_ph, G1Element):
return calculate_plot_id_pk(pool_pk_or_contract_ph, pos.plot_public_key)
else:
return calculate_plot_id_ph(pool_pk_or_contract_ph, pos.plot_public_key)
def check_plot_param(constants: ConsensusConstants, ps: PlotParam) -> bool:
size_v1 = ps.size_v1
strength_v2 = ps.strength_v2
@@ -170,7 +151,7 @@ def verify_and_get_quality_string(
if not check_plot_param(constants, plot_param):
return None
plot_id: bytes32 = get_plot_id(constants, pos)
plot_id: bytes32 = pos.compute_plot_id()
new_challenge: bytes32 = calculate_pos_challenge(plot_id, original_challenge_hash, signage_point)
if new_challenge != pos.challenge:
@@ -253,26 +234,6 @@ def calculate_pos_challenge(plot_id: bytes32, challenge_hash: bytes32, signage_p
return std_hash(calculate_plot_filter_input(plot_id, challenge_hash, signage_point))
def calculate_plot_id_v2(
k: uint8,
index: uint16,
meta_group: uint8,
pool_pk_or_ph: G1Element | bytes32,
plot_public_key: G1Element,
strength: uint8,
) -> bytes32:
version = uint8(2)
plot_group_id = std_hash(
k.stream_to_bytes()
+ version.stream_to_bytes()
+ strength.stream_to_bytes()
+ bytes(plot_public_key)
+ bytes(pool_pk_or_ph)
)
plot_id = std_hash(plot_group_id + index.stream_to_bytes() + meta_group.stream_to_bytes())
return plot_id
def calculate_plot_id_pk(
pool_public_key: G1Element,
plot_public_key: G1Element,
+1 -1
View File
@@ -20,7 +20,7 @@ network_overrides: &network_overrides
GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: "3d8765d3a597ec1d99663f6c9816d915b9f68613ac94009884c4addaefcce6af"
testnet0:
MIN_PLOT_SIZE_V1: 18
PLOT_SIZE_V2: 18
PLOT_SIZE_V2: 20
GENESIS_CHALLENGE: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
GENESIS_PRE_FARM_POOL_PUZZLE_HASH: "d23da14695a188ae5708dd152263c4db883eb27edeb936178d4d988b8f3ce5fc"
GENESIS_PRE_FARM_FARMER_PUZZLE_HASH: "3d8765d3a597ec1d99663f6c9816d915b9f68613ac94009884c4addaefcce6af"
+29 -29
View File
@@ -1,4 +1,4 @@
# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand.
# This file is automatically @generated by Poetry 2.2.0 and should not be changed by hand.
[[package]]
name = "aiofiles"
@@ -872,38 +872,38 @@ pytest = ">=8.3.3,<9.0.0"
[[package]]
name = "chia-rs"
version = "0.37.0"
version = "0.38.1"
description = ""
optional = false
python-versions = "*"
groups = ["main"]
files = [
{file = "chia_rs-0.37.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:2d41db7846a54f4e9acc5e20096eab8a8cd387326fbf9253eef303150dcc124b"},
{file = "chia_rs-0.37.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:938ebde34af09b96acb5bf6f3be0200e28e8cdf6cfe54cda7f8dbe66a5b5bfc8"},
{file = "chia_rs-0.37.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44d3661dd4056761ba0b7d186a1bf5688f988c50201e77ad3ce92340f02aaa6d"},
{file = "chia_rs-0.37.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:10b490c14b8f607deba13fcc0a0095bb31affa4d0b0f94423538c21296a1c388"},
{file = "chia_rs-0.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:83e64cd834791d0e61dd5cd13650834897c4708d6130cd28be83b756d3c12681"},
{file = "chia_rs-0.37.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:d58ad1556baaba4c3e36d3bfa6c79611f3349c938635c173a9bea7c5aa755b87"},
{file = "chia_rs-0.37.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:6d925a188e9a38c2020a8d40d080d8c507cad6c82c27a648def2e6a7f005afa0"},
{file = "chia_rs-0.37.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:27753b9b45004688293368f289d69ac43085ca7bb203229ed9d8c9d58fd62c1c"},
{file = "chia_rs-0.37.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e53f0cdbb1ea5e04d3fc484633a615f65c8dfc062e7b21127b7fc8a02085d827"},
{file = "chia_rs-0.37.0-cp311-cp311-win_amd64.whl", hash = "sha256:74daad0d2266aa293406d92513d57ce3beda6c7da73ba365143c78ac871df7f6"},
{file = "chia_rs-0.37.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:614e8154be519006e828553c951f3604efde54225731936c27d82fe07dc1770d"},
{file = "chia_rs-0.37.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:3e813637df5dbfbf76797cd576ae4088f760e9dafd3930d9848285d80e2ac8ea"},
{file = "chia_rs-0.37.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:2472009ca39831409397912bb6f3b4d76f6ef8059cc8fe840685b5e847c94fc9"},
{file = "chia_rs-0.37.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4bac95fa0813954171f37d30264d7a58680d96b5bef63aa38cd0bf655e5c8f41"},
{file = "chia_rs-0.37.0-cp312-cp312-win_amd64.whl", hash = "sha256:5cf3cc0b1db442e4c2d85b3c2034b88f1d87dd097aac2b8591af9309a989c23a"},
{file = "chia_rs-0.37.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:cd5293bf22044c76632d870a512ecc4ff6ba69021d1880a7d4458f4342b3cd59"},
{file = "chia_rs-0.37.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:ccfb622abc491780f2405e0de544a6ca7b924d5004b7dfe4b79c4aa54037dd46"},
{file = "chia_rs-0.37.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:ef2c1cc971860ee4d084e371752612fbc2a61c6e2cf280e5ff2e05efa9577c95"},
{file = "chia_rs-0.37.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:dc24a6d171a03bb05a9f237c94b9458b7f970299bc32472931d19b3fa9fd800d"},
{file = "chia_rs-0.37.0-cp313-cp313-win_amd64.whl", hash = "sha256:b872923fff3f3d4ce539d5c660ada180d0805f7413b75fee74b8f147d796800b"},
{file = "chia_rs-0.37.0-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:43325270ce134767bc0eb687df42c7374ea4bc89c6d04423f3957e395945ae8f"},
{file = "chia_rs-0.37.0-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:56311e8ed362142d9c27e7832301b7696c50cea51db795cde0f67ba401e89a9f"},
{file = "chia_rs-0.37.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:f81e10b0a9ee2dfbd80be07a605672b4169876158945ddc48b81d6b5eaeabfad"},
{file = "chia_rs-0.37.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:57d0c588f2f5599d3ef1280cf48c2d881c65a6e4adddf6c0079d264c948c7182"},
{file = "chia_rs-0.37.0-cp314-cp314-win_amd64.whl", hash = "sha256:c40491af95960b4289db31e35a66305c2fcc8aae4889851ab576333613092015"},
{file = "chia_rs-0.37.0.tar.gz", hash = "sha256:4068dd6eddef0a1cd674bb47a483d9c435087220707c4819a6032fc1d16945dc"},
{file = "chia_rs-0.38.1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:27aba8f58bd987f68786d16f15850e9a60a3bdb4b36b4cfa31777873a2febdbf"},
{file = "chia_rs-0.38.1-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:20a6e0e7404fa697dbbdc44ee264938e9995f69ad7fbfc2fcc33d4a5f2274d1f"},
{file = "chia_rs-0.38.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:cb3592ccf2b1db562edceaa47e681d2cd75b21ed5d20f1e9f0567be29274310a"},
{file = "chia_rs-0.38.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:d68c362fbc7352b70806a17e7f6539849288e52c2edf1a1e9650b12fd2c3cc8a"},
{file = "chia_rs-0.38.1-cp310-cp310-win_amd64.whl", hash = "sha256:10114a682f5a65a78944b04cac5386dc2b4bd034608e1bb6efc6b48c816b3b72"},
{file = "chia_rs-0.38.1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:3ffc1a49f64eb9d60be535ec88bbd90a7fc3c6319769e86947d7380828d38531"},
{file = "chia_rs-0.38.1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:894c8c59ec7762617a2e6119efa10a8902241f3013c563fe8675793e627e24ea"},
{file = "chia_rs-0.38.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:db665c4d255ee0f3b27d78adcd454d644d07f28458684797a04da0675d239cf0"},
{file = "chia_rs-0.38.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:e1bf37fa7c42a96a75ce9a375452e5f99a71418d00f5fa6615f8b0d90fad533b"},
{file = "chia_rs-0.38.1-cp311-cp311-win_amd64.whl", hash = "sha256:976c8cc5cea05142d879466caf2610bdc79481a9d8b8b13aaac3dad103b352ea"},
{file = "chia_rs-0.38.1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:3dcf335ac41356966f599b2cddba637fc79f73fb43f4c6066b93de58fd3f469a"},
{file = "chia_rs-0.38.1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:8abbffe25cf90763065a9fa56d56a1df2c5aa4ecea55c91e76d354baf3051aea"},
{file = "chia_rs-0.38.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:cab0c3f9b09eaac54f40e6aae985c9afcb69d846cae2b1f6dcf513547d26affc"},
{file = "chia_rs-0.38.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:43e2923cc05be26b082e541882c1e4e0f9e57f2e3205700d03b916f14c93d359"},
{file = "chia_rs-0.38.1-cp312-cp312-win_amd64.whl", hash = "sha256:568e1a081a873da2109abcb8f6e7a89a6360d857a2b7ae6cc1039d0563132eb6"},
{file = "chia_rs-0.38.1-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:3b2239730e21c958c500357fc52da716c9dab19dee31df01ca6ef051d63cac2c"},
{file = "chia_rs-0.38.1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:e4338405cb1e98a826891de21cb95ef491f4fa45b40586b3ff50ac9db71d38d9"},
{file = "chia_rs-0.38.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:6ca6e1aad76e3fd047af0817a225b17acd68dff33c8c13a2b34f57bd85bb0b95"},
{file = "chia_rs-0.38.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:d6afccefa2363b901721df5d5fc10ff4498957eaf5a0ef238bb56d5ccdcfc0ed"},
{file = "chia_rs-0.38.1-cp313-cp313-win_amd64.whl", hash = "sha256:ef54c10ccfe179eba285186d204989cfe26f2b42d1ab952836b1bf070908bce2"},
{file = "chia_rs-0.38.1-cp314-cp314-macosx_13_0_arm64.whl", hash = "sha256:8d6677a718febbe3154e481ff33fd1b7c33522f438e969fd8813b89b4a87b4e5"},
{file = "chia_rs-0.38.1-cp314-cp314-macosx_13_0_x86_64.whl", hash = "sha256:199cf9f1de3a912c1407d085d9099d28f7c0d9cd11db02bdb3771375aae87ae8"},
{file = "chia_rs-0.38.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e485830bbc3871f9464772fead4940e829ea53c7ddcfc21d4a9eff650ced0c8c"},
{file = "chia_rs-0.38.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:30e71a544a263115d4b8a40b2e09368bfe1c50afabd59ca8e46be4ca5c3a3775"},
{file = "chia_rs-0.38.1-cp314-cp314-win_amd64.whl", hash = "sha256:04368586bcfe841e7b22b3d78b6066befff279a463b5af578b93d6b356666efe"},
{file = "chia_rs-0.38.1.tar.gz", hash = "sha256:e28f3572b4760b2afb9339a695a524c410c843166656881e657382c06d5b2a34"},
]
[package.dependencies]
@@ -4101,4 +4101,4 @@ upnp = ["miniupnpc"]
[metadata]
lock-version = "2.1"
python-versions = ">=3.10, <4"
content-hash = "64aae75f34fc0f7494038548f5004ddae3c61cd7ded8397b362269a1cddaa945"
content-hash = "cfe513b0cfe92d4208fce595b81b018768ab3069dd53fd7096f5717d8ee2f438"
+1 -1
View File
@@ -53,7 +53,7 @@ boto3 = ">=1.35.43" # AWS S3 for Data Layer S3 plugin
chiabip158 = ">=1.5.2" # bip158-style wallet filters
chiapos = ">=2.0.10" # proof of space
chia-puzzles-py = ">=0.20.1"
chia_rs = ">=0.37.0, <0.38"
chia_rs = ">=0.38.0, <0.39"
chiavdf = ">=1.1.10" # timelord and vdf verification
click = ">=8.1.7" # For the CLI
clvm = ">=0.9.14"