示例#1
0
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)
示例#2
0
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)
示例#3
0
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
示例#4
0
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
示例#5
0
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)
示例#6
0
 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)
示例#7
0
 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)
示例#8
0
 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))
示例#9
0
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)
示例#10
0
 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
示例#11
0
    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
示例#12
0
 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
示例#13
0
    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
示例#14
0
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)