def test_chaindb_get_score(chaindb, fixture_sm_class, sample_beacon_block_params, fork_choice_scoring): genesis = BeaconBlock.create(**sample_beacon_block_params).mset( "parent_root", GENESIS_PARENT_HASH, "slot", 0) chaindb.persist_block(genesis, genesis.__class__, fork_choice_scoring) genesis_score_key = SchemaV1.make_block_root_to_score_lookup_key( genesis.signing_root) genesis_score_data = chaindb.db.get(genesis_score_key) genesis_score_class = fork_choice_scoring.get_score_class() genesis_score = genesis_score_class.deserialize(genesis_score_data) expected_genesis_score = fork_choice_scoring.score(genesis) assert genesis_score == expected_genesis_score assert (chaindb.get_score(genesis.signing_root, genesis_score_class) == expected_genesis_score) block1 = BeaconBlock.create(**sample_beacon_block_params).mset( "parent_root", genesis.signing_root, "slot", 1) chaindb.persist_block(block1, block1.__class__, fork_choice_scoring) block1_score_key = SchemaV1.make_block_root_to_score_lookup_key( block1.signing_root) block1_score_data = chaindb.db.get(block1_score_key) block1_score = genesis_score_class.deserialize(block1_score_data) expected_block1_score = fork_choice_scoring.score(block1) assert block1_score == expected_block1_score assert (chaindb.get_score(block1.signing_root, genesis_score_class) == expected_block1_score)
def test_chaindb_get_score(chaindb, fixture_sm_class, genesis_block, fork_choice_scoring): chaindb.persist_block(genesis_block, genesis_block.__class__, fork_choice_scoring) genesis_score_key = SchemaV1.make_block_root_to_score_lookup_key( genesis_block.message.hash_tree_root) genesis_score_data = chaindb.db.get(genesis_score_key) genesis_score_class = fork_choice_scoring.get_score_class() genesis_score = genesis_score_class.deserialize(genesis_score_data) expected_genesis_score = fork_choice_scoring.score(genesis_block.message) assert genesis_score == expected_genesis_score assert (chaindb.get_score(genesis_block.message.hash_tree_root, genesis_score_class) == expected_genesis_score) block1 = SignedBeaconBlock.from_parent(genesis_block, FromBlockParams(slot=1)) chaindb.persist_block(block1, block1.__class__, fork_choice_scoring) block1_score_key = SchemaV1.make_block_root_to_score_lookup_key( block1.message.hash_tree_root) block1_score_data = chaindb.db.get(block1_score_key) block1_score = genesis_score_class.deserialize(block1_score_data) expected_block1_score = fork_choice_scoring.score(block1.message) assert block1_score == expected_block1_score assert (chaindb.get_score(block1.message.hash_tree_root, genesis_score_class) == expected_block1_score)
def test_chaindb_get_score(chaindb, sample_beacon_block_params): genesis = BeaconBlock(**sample_beacon_block_params).copy( parent_root=GENESIS_PARENT_HASH, slot=0, ) chaindb.persist_block(genesis, genesis.__class__) genesis_score_key = SchemaV1.make_block_root_to_score_lookup_key( genesis.root) genesis_score = rlp.decode(chaindb.db.get(genesis_score_key), sedes=rlp.sedes.big_endian_int) assert genesis_score == 0 assert chaindb.get_score(genesis.root) == 0 block1 = BeaconBlock(**sample_beacon_block_params).copy( parent_root=genesis.root, slot=1, ) chaindb.persist_block(block1, block1.__class__) block1_score_key = SchemaV1.make_block_root_to_score_lookup_key( block1.root) block1_score = rlp.decode(chaindb.db.get(block1_score_key), sedes=rlp.sedes.big_endian_int) assert block1_score == 1 assert chaindb.get_score(block1.root) == 1
def test_chaindb_get_score(chaindb, sample_beacon_block_params, fork_choice_scoring): genesis = BeaconBlock(**sample_beacon_block_params).copy( previous_block_root=GENESIS_PARENT_HASH, slot=0, ) chaindb.persist_block(genesis, genesis.__class__, fork_choice_scoring) genesis_score_key = SchemaV1.make_block_root_to_score_lookup_key( genesis.signing_root) genesis_score = ssz.decode(chaindb.db.get(genesis_score_key), sedes=ssz.sedes.uint64) assert genesis_score == 0 assert chaindb.get_score(genesis.signing_root) == 0 block1 = BeaconBlock(**sample_beacon_block_params).copy( previous_block_root=genesis.signing_root, slot=1, ) chaindb.persist_block(block1, block1.__class__, fork_choice_scoring) block1_score_key = SchemaV1.make_block_root_to_score_lookup_key( block1.signing_root) block1_score = ssz.decode(chaindb.db.get(block1_score_key), sedes=ssz.sedes.uint64) assert block1_score == 1 assert chaindb.get_score(block1.signing_root) == 1
def test_chaindb_persist_block_and_block_to_root(chaindb, block, fork_choice_scoring): block_to_root_key = SchemaV1.make_block_root_to_score_lookup_key( block.message.hash_tree_root) assert not chaindb.exists(block_to_root_key) chaindb.persist_block(block, block.__class__, fork_choice_scoring) assert chaindb.exists(block_to_root_key)
def _get_score(db: BaseDB, block_root: Hash32) -> int: try: encoded_score = db[SchemaV1.make_block_root_to_score_lookup_key(block_root)] except KeyError: raise BlockNotFound("No block with hash {0} found".format( encode_hex(block_root))) return rlp.decode(encoded_score, sedes=rlp.sedes.big_endian_int)
def _get_score(db: DatabaseAPI, block_root: Hash32) -> int: try: encoded_score = db[SchemaV1.make_block_root_to_score_lookup_key( block_root)] except KeyError: raise BlockNotFound("No block with hash {0} found".format( encode_hex(block_root))) return ssz.decode(encoded_score, sedes=ssz.sedes.uint64)
def _get_score(db: DatabaseAPI, block_root: Root, score_class: Type[BaseScore]) -> BaseScore: try: encoded_score = db[SchemaV1.make_block_root_to_score_lookup_key( block_root)] except KeyError: raise BlockNotFound("No block with root {0} found".format( encode_hex(block_root))) return cast(BaseScore, score_class.deserialize(encoded_score))
def test_chaindb_persist_block_and_slot_to_root(chaindb, block, fork_choice_scoring): with pytest.raises(BlockNotFound): chaindb.get_block_by_root(block.signing_root, block.__class__) slot_to_root_key = SchemaV1.make_block_root_to_score_lookup_key(block.signing_root) assert not chaindb.exists(slot_to_root_key) chaindb.persist_block(block, block.__class__, fork_choice_scoring) assert chaindb.get_block_by_root(block.signing_root, block.__class__) == block assert chaindb.exists(slot_to_root_key)
def _set_block_score_to_db(db: DatabaseAPI, block: BaseBeaconBlock, score: int) -> int: # NOTE if we change the score serialization, we will likely need to # patch up the fork choice logic. # We will decide the score serialization is fixed for now. db.set( SchemaV1.make_block_root_to_score_lookup_key(block.signing_root), ssz.encode(score, sedes=ssz.sedes.uint64), ) return score
def _set_block_scores_to_db(cls, db: BaseDB, block: BaseBeaconBlock) -> int: # TODO: It's a stub before we implement fork choice rule score = block.slot db.set( SchemaV1.make_block_root_to_score_lookup_key(block.signed_root), ssz.encode(score, sedes=ssz.sedes.uint64), ) return score
def _set_block_score_to_db( db: DatabaseAPI, block: BaseBeaconBlock, score: BaseScore ) -> BaseScore: # NOTE if we change the score serialization, we will likely need to # patch up the fork choice logic. # We will decide the score serialization is fixed for now. db.set( SchemaV1.make_block_root_to_score_lookup_key(block.message.hash_tree_root), score.serialize(), ) return score
def _set_block_scores_to_db( cls, db: BaseDB, block: BaseBeaconBlock ) -> int: # TODO: It's a stub before we implement fork choice rule score = block.slot db.set( SchemaV1.make_block_root_to_score_lookup_key(block.root), rlp.encode(score, sedes=rlp.sedes.big_endian_int), ) return score
def test_chaindb_persist_block_and_block_to_root(chaindb, block): block_to_root_key = SchemaV1.make_block_root_to_score_lookup_key(block.signing_root) assert not chaindb.exists(block_to_root_key) chaindb.persist_block(block, block.__class__) assert chaindb.exists(block_to_root_key)