The chia.consensus module no longer depends upon chia.wallet. (#19665)

<!-- Merging Requirements:
- Please give your PR a title that is release-note friendly
- In order to be merged, you must add the most appropriate category
Label (Added, Changed, Fixed) to your PR
-->
<!-- Explain why this is an improvement (Does this add missing
functionality, improve performance, or reduce complexity?) -->

### Purpose:

This PR removes a dependency that is inappropriate and caused a
dependency loop.
This commit is contained in:
Richard Kiss
2025-06-03 12:31:30 -07:00
committed by GitHub
parent 28ca7dce81
commit 15a4536a7a
10 changed files with 28 additions and 34 deletions
@@ -21,7 +21,6 @@ from chia._tests.plot_sync.test_delta import dummy_plot
from chia._tests.util.misc import assert_rpc_error
from chia._tests.util.rpc import validate_get_routes
from chia._tests.util.time_out_assert import time_out_assert, time_out_assert_custom_interval
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.farmer.farmer import Farmer
from chia.plot_sync.receiver import Receiver, get_list_or_len
from chia.plotting.util import add_plot_directory
@@ -40,6 +39,7 @@ from chia.util.bech32m import decode_puzzle_hash, encode_puzzle_hash
from chia.util.config import load_config, lock_and_load_config, save_config
from chia.util.hash import std_hash
from chia.wallet.derive_keys import master_sk_to_wallet_sk, master_sk_to_wallet_sk_unhardened
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
log = logging.getLogger(__name__)
@@ -150,8 +150,8 @@ async def test_farmer_reward_target_endpoints(harvester_farmer_environment: Harv
targets_2 = await farmer_rpc_client.get_reward_targets(True, 2)
assert targets_2["have_pool_sk"] and targets_2["have_farmer_sk"]
new_ph: bytes32 = create_puzzlehash_for_pk(master_sk_to_wallet_sk(bt.farmer_master_sk, uint32(2)).get_g1())
new_ph_2: bytes32 = create_puzzlehash_for_pk(master_sk_to_wallet_sk(bt.pool_master_sk, uint32(7)).get_g1())
new_ph: bytes32 = puzzle_hash_for_pk(master_sk_to_wallet_sk(bt.farmer_master_sk, uint32(2)).get_g1())
new_ph_2: bytes32 = puzzle_hash_for_pk(master_sk_to_wallet_sk(bt.pool_master_sk, uint32(7)).get_g1())
await farmer_rpc_client.set_reward_targets(encode_puzzle_hash(new_ph, "xch"), encode_puzzle_hash(new_ph_2, "xch"))
targets_3 = await farmer_rpc_client.get_reward_targets(True, 10)
@@ -164,10 +164,10 @@ async def test_farmer_reward_target_endpoints(harvester_farmer_environment: Harv
assert not targets_4["have_pool_sk"] and targets_4["have_farmer_sk"]
# check observer addresses
observer_farmer: bytes32 = create_puzzlehash_for_pk(
observer_farmer: bytes32 = puzzle_hash_for_pk(
master_sk_to_wallet_sk_unhardened(bt.farmer_master_sk, uint32(2)).get_g1()
)
observer_pool: bytes32 = create_puzzlehash_for_pk(
observer_pool: bytes32 = puzzle_hash_for_pk(
master_sk_to_wallet_sk_unhardened(bt.pool_master_sk, uint32(7)).get_g1()
)
await farmer_rpc_client.set_reward_targets(
+3 -3
View File
@@ -49,7 +49,6 @@ from chia._tests.wallet.test_wallet_coin_store import (
from chia.cmds.coins import CombineCMD, SplitCMD
from chia.cmds.param_types import CliAmount
from chia.consensus.block_rewards import calculate_base_farmer_reward, calculate_pool_reward
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.rpc.full_node_rpc_client import FullNodeRpcClient
from chia.rpc.rpc_client import ResponseFailureError
from chia.rpc.wallet_request_types import (
@@ -102,6 +101,7 @@ from chia.wallet.derive_keys import master_sk_to_wallet_sk, master_sk_to_wallet_
from chia.wallet.did_wallet.did_wallet import DIDWallet
from chia.wallet.nft_wallet.nft_wallet import NFTWallet
from chia.wallet.puzzles.clawback.metadata import AutoClaimSettings
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
from chia.wallet.signer_protocol import UnsignedTransaction
from chia.wallet.trade_record import TradeRecord
from chia.wallet.trading.offer import Offer
@@ -1702,11 +1702,11 @@ async def _check_delete_key(
sk = await wallet_node.get_key_for_fingerprint(farmer_fp, private=True)
assert sk is not None
farmer_ph = create_puzzlehash_for_pk(create_sk(sk, uint32(0)).get_g1())
farmer_ph = puzzle_hash_for_pk(create_sk(sk, uint32(0)).get_g1())
sk = await wallet_node.get_key_for_fingerprint(pool_fp, private=True)
assert sk is not None
pool_ph = create_puzzlehash_for_pk(create_sk(sk, uint32(0)).get_g1())
pool_ph = puzzle_hash_for_pk(create_sk(sk, uint32(0)).get_g1())
with lock_and_load_config(wallet_node.root_path, "config.yaml") as test_config:
test_config["farmer"]["xch_target_address"] = encode_puzzle_hash(farmer_ph, "txch")
+3 -3
View File
@@ -9,7 +9,6 @@ from typing import Any, Optional
import yaml
from chia.cmds.configure import configure
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.ssl.create_ssl import create_all_ssl
from chia.ssl.ssl_check import (
DEFAULT_PERMISSIONS_CERT_FILE,
@@ -38,6 +37,7 @@ from chia.wallet.derive_keys import (
master_sk_to_wallet_sk_intermediate,
master_sk_to_wallet_sk_unhardened_intermediate,
)
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
def dict_add_new_default(updated: dict[str, Any], default: dict[str, Any], do_not_migrate_keys: dict[str, Any]) -> None:
@@ -94,11 +94,11 @@ def check_keys(new_root: Path, keychain: Optional[Keychain] = None) -> None:
all_targets.append(
encode_puzzle_hash(
create_puzzlehash_for_pk(_derive_path_unhardened(intermediate_o, [i]).get_g1()), prefix
puzzle_hash_for_pk(_derive_path_unhardened(intermediate_o, [i]).get_g1()), prefix
)
)
all_targets.append(
encode_puzzle_hash(create_puzzlehash_for_pk(_derive_path(intermediate_n, [i]).get_g1()), prefix)
encode_puzzle_hash(puzzle_hash_for_pk(_derive_path(intermediate_n, [i]).get_g1()), prefix)
)
if all_targets[-1] == config["farmer"].get("xch_target_address") or all_targets[-2] == config[
"farmer"
+4 -4
View File
@@ -10,7 +10,6 @@ from typing import Any, Optional, Union
from chia_rs import AugSchemeMPL, G1Element, G2Element, PrivateKey
from chia_rs.sized_ints import uint32
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.types.signing_mode import SigningMode
from chia.util.bech32m import bech32_encode, convertbits, encode_puzzle_hash
from chia.util.config import load_config
@@ -31,6 +30,7 @@ from chia.wallet.derive_keys import (
master_sk_to_pool_sk,
master_sk_to_wallet_sk,
)
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
def unlock_keyring() -> None:
@@ -197,7 +197,7 @@ def show_keys(
first_wallet_pk = master_pk_to_wallet_pk_unhardened(key_data.public_key, uint32(0))
if first_wallet_pk is not None:
wallet_address: str = encode_puzzle_hash(create_puzzlehash_for_pk(first_wallet_pk), prefix)
wallet_address: str = encode_puzzle_hash(puzzle_hash_for_pk(first_wallet_pk), prefix)
key["wallet_address"] = wallet_address
else:
key["wallet_address"] = None
@@ -423,7 +423,7 @@ def _search_derived(
# Generate a wallet address using the standard p2_delegated_puzzle_or_hidden_puzzle puzzle
assert child_pk is not None
# TODO: consider generating addresses using other puzzles
address = encode_puzzle_hash(create_puzzlehash_for_pk(child_pk), prefix)
address = encode_puzzle_hash(puzzle_hash_for_pk(child_pk), prefix)
for term in remaining_search_terms:
found_item: Any = None
@@ -682,7 +682,7 @@ def derive_wallet_address(
pubkey = master_pk_to_wallet_pk_unhardened(pk, uint32(i))
# Generate a wallet address using the standard p2_delegated_puzzle_or_hidden_puzzle puzzle
# TODO: consider generating addresses using other puzzles
address = encode_puzzle_hash(create_puzzlehash_for_pk(pubkey), prefix)
address = encode_puzzle_hash(puzzle_hash_for_pk(pubkey), prefix)
if show_hd_path:
print(
f"Wallet address {i} "
+3 -3
View File
@@ -14,7 +14,6 @@ from chia_rs.sized_ints import uint32
from chia.cmds.cmds_util import get_any_service_client
from chia.cmds.start_funcs import async_start
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.protocols.outbound_message import NodeType
from chia.server.resolve_peer_info import set_peer_info
from chia.simulator.simulator_full_node_rpc_client import SimulatorFullNodeRpcClient
@@ -29,6 +28,7 @@ from chia.wallet.derive_keys import (
master_sk_to_wallet_sk,
master_sk_to_wallet_sk_unhardened,
)
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
def get_ph_from_fingerprint(fingerprint: int, key_id: int = 1) -> bytes32:
@@ -37,7 +37,7 @@ def get_ph_from_fingerprint(fingerprint: int, key_id: int = 1) -> bytes32:
raise Exception("Fingerprint not found")
private_key = priv_key_and_entropy[0]
sk_for_wallet_id: PrivateKey = master_sk_to_wallet_sk(private_key, uint32(key_id))
puzzle_hash: bytes32 = create_puzzlehash_for_pk(sk_for_wallet_id.get_g1())
puzzle_hash: bytes32 = puzzle_hash_for_pk(sk_for_wallet_id.get_g1())
return puzzle_hash
@@ -154,7 +154,7 @@ def display_key_info(fingerprint: int, prefix: str) -> None:
print("Farmer public key (m/12381/8444/0/0):", master_sk_to_farmer_sk(sk).get_g1())
print("Pool public key (m/12381/8444/1/0):", master_sk_to_pool_sk(sk).get_g1())
first_wallet_sk: PrivateKey = master_sk_to_wallet_sk_unhardened(sk, uint32(0))
wallet_address: str = encode_puzzle_hash(create_puzzlehash_for_pk(first_wallet_sk.get_g1()), prefix)
wallet_address: str = encode_puzzle_hash(puzzle_hash_for_pk(first_wallet_sk.get_g1()), prefix)
print(f"First wallet address: {wallet_address}")
assert seed is not None
print("Master private key (m):", bytes(sk).hex())
-6
View File
@@ -1,15 +1,9 @@
from __future__ import annotations
from chia_rs import G1Element
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint32, uint64
from chia.types.blockchain_format.coin import Coin
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
def create_puzzlehash_for_pk(pub_key: G1Element) -> bytes32:
return puzzle_hash_for_pk(pub_key)
def pool_parent_id(block_height: uint32, genesis_challenge: bytes32) -> bytes32:
+2 -2
View File
@@ -27,7 +27,6 @@ from typing_extensions import Protocol
from chia import __version__
from chia.cmds.init_funcs import check_keys, chia_init
from chia.cmds.passphrase_funcs import default_passphrase, using_default_passphrase
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.daemon.keychain_server import KeychainServer, keychain_commands
from chia.daemon.windows_signal import kill
from chia.plotters.plotters import get_available_plotters
@@ -55,6 +54,7 @@ from chia.wallet.derive_keys import (
master_sk_to_pool_sk,
master_sk_to_wallet_sk,
)
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
io_pool_exc = ThreadPoolExecutor()
@@ -669,7 +669,7 @@ class WebSocketServer:
pk = sk.get_g1()
else:
pk = master_pk_to_wallet_pk_unhardened(key.public_key, uint32(i))
wallet_address = encode_puzzle_hash(create_puzzlehash_for_pk(pk), prefix)
wallet_address = encode_puzzle_hash(puzzle_hash_for_pk(pk), prefix)
if non_observer_derivation:
hd_path = f"m/12381n/8444n/2n/{i}n"
else:
+3 -3
View File
@@ -44,7 +44,6 @@ from chia_rs.sized_ints import uint8, uint16, uint32, uint64, uint128
from chia.consensus.block_creation import create_unfinished_block, unfinished_block_to_full_block
from chia.consensus.block_record import BlockRecordProtocol
from chia.consensus.blockchain_interface import BlockRecordsProtocol
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.consensus.condition_costs import ConditionCost
from chia.consensus.constants import replace_str_to_bytes
from chia.consensus.default_constants import DEFAULT_CONSTANTS
@@ -120,6 +119,7 @@ from chia.wallet.derive_keys import (
master_sk_to_pool_sk,
master_sk_to_wallet_sk,
)
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
DESERIALIZE_MOD = Program.from_bytes(CHIALISP_DESERIALISATION)
@@ -446,10 +446,10 @@ class BlockTools:
self.pool_pk = master_sk_to_pool_sk(self.pool_master_sk).get_g1()
if reward_ph is None:
self.farmer_ph: bytes32 = create_puzzlehash_for_pk(
self.farmer_ph: bytes32 = puzzle_hash_for_pk(
master_sk_to_wallet_sk(self.farmer_master_sk, uint32(0)).get_g1()
)
self.pool_ph: bytes32 = create_puzzlehash_for_pk(
self.pool_ph: bytes32 = puzzle_hash_for_pk(
master_sk_to_wallet_sk(self.pool_master_sk, uint32(0)).get_g1()
)
else:
+2 -2
View File
@@ -9,7 +9,6 @@ from chia_rs import PrivateKey
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint32
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.daemon.server import WebSocketServer, daemon_launch_lock_path
from chia.server.signal_handlers import SignalHandlers
from chia.simulator.full_node_simulator import FullNodeSimulator
@@ -29,6 +28,7 @@ from chia.util.errors import KeychainFingerprintExists
from chia.util.keychain import Keychain
from chia.util.lock import Lockfile
from chia.wallet.derive_keys import master_sk_to_wallet_sk
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
"""
These functions are used to test the simulator.
@@ -56,7 +56,7 @@ def get_puzzle_hash_from_key(keychain: Keychain, fingerprint: int, key_id: int =
raise Exception("Fingerprint not found")
private_key = priv_key_and_entropy[0]
sk_for_wallet_id: PrivateKey = master_sk_to_wallet_sk(private_key, uint32(key_id))
puzzle_hash: bytes32 = create_puzzlehash_for_pk(sk_for_wallet_id.get_g1())
puzzle_hash: bytes32 = puzzle_hash_for_pk(sk_for_wallet_id.get_g1())
return puzzle_hash
+3 -3
View File
@@ -6,7 +6,7 @@ from chia_rs import AugSchemeMPL, G1Element, PrivateKey
from chia_rs.sized_bytes import bytes32
from chia_rs.sized_ints import uint32
from chia.consensus.coinbase import create_puzzlehash_for_pk
from chia.wallet.puzzles.p2_delegated_puzzle_or_hidden_puzzle import puzzle_hash_for_pk
# EIP 2334 bls key derivation
# https://eips.ethereum.org/EIPS/eip-2334
@@ -131,8 +131,8 @@ def match_address_to_sk(
for i in range(max_ph_to_search):
phs = [
create_puzzlehash_for_pk(master_sk_to_wallet_sk(sk, uint32(i)).get_g1()),
create_puzzlehash_for_pk(master_sk_to_wallet_sk_unhardened(sk, uint32(i)).get_g1()),
puzzle_hash_for_pk(master_sk_to_wallet_sk(sk, uint32(i)).get_g1()),
puzzle_hash_for_pk(master_sk_to_wallet_sk_unhardened(sk, uint32(i)).get_g1()),
]
for address in search_list: