mirror of
https://github.com/Chia-Network/chia-blockchain.git
synced 2024-09-22 00:52:32 +03:00
8a028c3594
* Prority locking to consensus * Remove pstats * Linting * Do some stuff outside of lock * Fix startup * Add log timings * Try some different locking * Add limit * catch excp * CLVM inside lock * Try using a semaphore instead * use events for lock queue * test * Add logging for message types * type * remove seed * check new peak waiters * correct FullNodeAPI self.full_node.new_peak._waiters typo * correct logging string typos * only warn about new_peak Waiters if there is at least 1 * remove no-longer-accepted parameter to FullNode.peak_post_processing() * only warn about respond_transaction Waiters if there is at least 1 * lint * Change some constants * Small fix and logging changes * Put message types outside * Change some log levels so we can test with info * More logging * Increase rate limits but decrease paralelism * tweaks * Log dropped tx * Fix pool rpc test * Test fixes * Mempool optimization * Remove from seen if fails * Increase queue sizes * Message types info * More test and logging * Small changes to networking just in case * Decrease logging * Decrease logging even further * Decrease logging even further even further * Decrease logging 3 * Transaction queue * Don't cancel tasks or close connection * Cancel tasks on disconnect (for shutdown purposed) * Fix typo * Catch cancelled * Do multiple at a time * More accurate farmer response time * More efficiently create tasks * Increase queue size and priority by fee * Revert priority * Don't re-request too many times for dropped TX * Handle cancelled error so we don't go into a bad state * Catch cancelled in syncing tasks * Reduce new_peak_sem to improve performance * Less bytes conversion * Missing file, and 2 workers for CLVM * Validate BLS in a new thread * tests * Change semaphore constants * correct a cancellation triggered exception and assertion * Fix send_transaction, dont use BaseException, fix tests * Fix more tests * only log transaction handler cancellation in debug * typing in log * move unfinished validation to diff proc * it is asyncio.CancelledError * Add a test for bad signature * Fix more tests, reduce logging, lint * One more lint * blockchain tests, pass bytes directly, single call * Try to fix rl_wallet failures * Fix mempool test * catch everything * Don't test RL wallet * Fix more tests and return error code * Improve error handling in multiprocess * Add pre-validation time * Add pre-validation time in logs, and revert pytest.ini changes * Add log correctly * Ms.bls cache experiment (#9115) * Logging for cache * Less logging * Return to original plan * Clean up * Remove coment * Remove log * formalize LockQueue shutdown * Comments * Fix blockchain test * Improve cache * Remove logs * Fix sign_coin_spends * Fix pool wallet Co-authored-by: Kyle Altendorf <sda@fstab.net> Co-authored-by: Yostra <straya@chia.net>
41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
from typing import List
|
|
|
|
from blspy import AugSchemeMPL, G2Element, PrivateKey
|
|
|
|
from chia.types.blockchain_format.sized_bytes import bytes32
|
|
from chia.types.coin_spend import CoinSpend
|
|
from chia.util.condition_tools import conditions_by_opcode, conditions_for_solution, pkm_pairs_for_conditions_dict
|
|
from tests.core.make_block_generator import GROUP_ORDER, int_to_public_key
|
|
from tests.block_tools import test_constants
|
|
|
|
|
|
class KeyTool(dict):
|
|
@classmethod
|
|
def __new__(cls, *args):
|
|
return dict.__new__(*args)
|
|
|
|
def add_secret_exponents(self, secret_exponents: List[int]) -> None:
|
|
for _ in secret_exponents:
|
|
self[bytes(int_to_public_key(_))] = _ % GROUP_ORDER
|
|
|
|
def sign(self, public_key: bytes, message_hash: bytes32) -> G2Element:
|
|
secret_exponent = self.get(public_key)
|
|
if not secret_exponent:
|
|
raise ValueError("unknown pubkey %s" % public_key.hex())
|
|
bls_private_key = PrivateKey.from_bytes(secret_exponent.to_bytes(32, "big"))
|
|
return AugSchemeMPL.sign(bls_private_key, message_hash)
|
|
|
|
def signature_for_solution(self, coin_spend: CoinSpend, additional_data: bytes) -> AugSchemeMPL:
|
|
signatures = []
|
|
err, conditions, cost = conditions_for_solution(
|
|
coin_spend.puzzle_reveal, coin_spend.solution, test_constants.MAX_BLOCK_COST_CLVM
|
|
)
|
|
assert conditions is not None
|
|
conditions_dict = conditions_by_opcode(conditions)
|
|
for public_key, message_hash in pkm_pairs_for_conditions_dict(
|
|
conditions_dict, coin_spend.coin.name(), additional_data
|
|
):
|
|
signature = self.sign(public_key, message_hash)
|
|
signatures.append(signature)
|
|
return AugSchemeMPL.aggregate(signatures)
|