diff --git a/src/util/wallet_tools.py b/src/util/wallet_tools.py index f416cf33..9033deab 100644 --- a/src/util/wallet_tools.py +++ b/src/util/wallet_tools.py @@ -1,4 +1,4 @@ -from typing import List, Optional, Dict +from typing import List, Optional, Dict, Tuple from blspy import PrivateKey, AugSchemeMPL, G1Element, G2Element @@ -129,7 +129,7 @@ class WalletTool: condition_dic: Dict[ConditionOpcode, List[ConditionVarPair]], fee: int = 0, secretkey=None, - ) -> List[Tuple[Program, CoinSolution]]: + ) -> List[CoinSolution]: spends = [] spend_value = coin.amount puzzle_hash = coin.puzzle_hash diff --git a/src/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py b/src/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py index e6c99d60..ce91a5b6 100644 --- a/src/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py +++ b/src/wallet/puzzles/p2_delegated_puzzle_or_hidden_puzzle.py @@ -69,7 +69,9 @@ def puzzle_for_pk(public_key: PublicKeyProgram) -> Program: return MOD.curry(public_key) -def solution_with_delegated_puzzle(delegated_puzzle: Program, solution: Program) -> Program: +def solution_with_delegated_puzzle( + delegated_puzzle: Program, solution: Program +) -> Program: return Program.to([[], delegated_puzzle, solution]) diff --git a/src/wallet/wallet.py b/src/wallet/wallet.py index e389c22e..befd9251 100644 --- a/src/wallet/wallet.py +++ b/src/wallet/wallet.py @@ -13,7 +13,10 @@ from src.util.condition_tools import ( ) from src.util.ints import uint64, uint32 from src.wallet.abstract_wallet import AbstractWallet -from src.wallet.puzzles.p2_delegated_puzzle import puzzle_for_pk, solution_for_conditions +from src.wallet.puzzles.p2_delegated_puzzle import ( + puzzle_for_pk, + solution_for_conditions, +) from src.wallet.puzzles.puzzle_utils import ( make_assert_my_coin_id_condition, make_assert_time_exceeds_condition, @@ -273,9 +276,7 @@ class Wallet(AbstractWallet): def secret_key_for_public_key(self, public_key: G1Element) -> Optional[PrivateKey]: return self._pk2sk.get(bytes(public_key)) - async def sign_transaction( - self, coin_solutions: List[CoinSolution] - ) -> SpendBundle: + async def sign_transaction(self, coin_solutions: List[CoinSolution]) -> SpendBundle: signatures = [] for coin_solution in coin_solutions: @@ -288,7 +289,9 @@ class Wallet(AbstractWallet): coin_solution.solution ) if err or conditions_dict is None: - error_msg = f"Sign transaction failed, con:{conditions_dict}, error: {err}" + error_msg = ( + f"Sign transaction failed, con:{conditions_dict}, error: {err}" + ) self.log.error(error_msg) raise ValueError(error_msg) @@ -298,8 +301,9 @@ class Wallet(AbstractWallet): ): secret_key = self.secret_key_for_public_key(_) if secret_key is None: - self.log.error(f"no secret key for {_}") - return None + e_msg = f"no secret key for {_}" + self.log.error(e_msg) + raise ValueError(e_msg) signature = AugSchemeMPL.sign(secret_key, msg) signatures.append(signature) diff --git a/tests/full_node/test_mempool.py b/tests/full_node/test_mempool.py index be3b618c..055537f6 100644 --- a/tests/full_node/test_mempool.py +++ b/tests/full_node/test_mempool.py @@ -1,6 +1,6 @@ import asyncio from time import time -from typing import List, Tuple +from typing import List import pytest @@ -9,7 +9,6 @@ from src.protocols import full_node_protocol from src.types.coin_solution import CoinSolution from src.types.condition_var_pair import ConditionVarPair from src.types.condition_opcodes import ConditionOpcode -from src.types.program import Program from src.types.spend_bundle import SpendBundle from src.util.condition_tools import ( conditions_for_solution, @@ -868,25 +867,23 @@ class TestMempool: ): pass - unsigned: List[ - Tuple[Program, CoinSolution] - ] = wallet_a.generate_unsigned_transaction( + unsigned: List[CoinSolution] = wallet_a.generate_unsigned_transaction( 1000, receiver_puzzlehash, block.get_coinbase(), {}, 0 ) assert len(unsigned) == 1 + coin_solution = unsigned[0] - puzzle, solution = unsigned[0] - code_ = [puzzle, solution.solution] - sexp = Program.to(code_) - - err, con, cost = conditions_for_solution(sexp) + err, con, cost = conditions_for_solution(coin_solution.solution) assert con is not None + puzzle, solution = list(coin_solution.solution.as_iter()) conditions_dict = conditions_by_opcode(con) - pkm_pairs = pkm_pairs_for_conditions_dict(conditions_dict, solution.coin.name()) + pkm_pairs = pkm_pairs_for_conditions_dict( + conditions_dict, coin_solution.coin.name() + ) assert len(pkm_pairs) == 1 - assert pkm_pairs[0][1] == solution.solution.first().get_tree_hash() + assert pkm_pairs[0][1] == solution.first().get_tree_hash() spend_bundle = wallet_a.sign_transaction(unsigned) assert spend_bundle is not None