Diederik Loerakker b15669b7a5 Backport master (v0.9.1) to dev (#1482)
* p2p-interface: clarify that signing_root is used for block requests

* hash cleanups

* one more hash tree root gone for blocks - block hashes are always
signing roots!
* use simple serialize data types consistently

* Describe which finalized root/epoch to use

* remove custody_bits from attestation

* remove AttestationDataAndCustodyBit

* Specify inclusive range for genesis deposits

* add initial fork choice bounce prevention and tests

* PR feedback

* further test bounce attack

* wipe queued justified after epoch transition

* remove extra var

* minor fmt

* only allow attestatiosn to be considered from current and previous epoch

* use best_justified_checkpoint instead of queued_justified_checkpoints

* use helper for slots since epoch start

* be explicit about use of genesis epoch for previous epoch in fork choice on_block

* pr feedback

* add note aboutgenesis attestations

* cleanup get_eth1_vote

* make eth1_follow_distance clearer

* Update the expected proposer period

Since `SECONDS_PER_SLOT` is now `12`

* minor fix to comment in mainnet config

* Update 0_beacon-chain.md
2019-11-15 16:27:04 -05:00
..
2019-05-16 16:36:35 +02:00

Building pyspecs from specs.md

The benefit of the particular spec design is that the given Markdown files can be converted to a spec.py file for the purposes of testing and linting. As a result, bugs are discovered and patched more quickly.

Specs can be built from either a single Markdown document or multiple files that must be combined in a given order. Given 2 spec objects, build_spec.combine_spec_objects will combine them into a single spec object which, subsequently, can be converted into a specs.py.

Usage

For usage of the spec builder, run python3 -m build_spec --help.

@Labels and inserts

The functioning of the spec combiner is largely automatic in that given spec0.md and spec1.md, SSZ Objects will be extended and old functions will be overwritten. Extra functionality is provided for more granular control over how files are combined. In the event that only a small portion of code is to be added to an existing function, insert functionality is provided. This saves having to completely redefine the old function from spec0.md in spec1.md. This is done by marking where the change is to occur in the old file and marking which code is to be inserted in the new file. This is done as follows:

  • In the old file, a label is added as a Python comment marking where the code is to be inserted. This would appear as follows in spec0.md:
def foo(x):
    x << 1
    # @YourLabelHere
    return x
  • In spec1, the new code can then be inserted by having a code-block that looks as follows:
#begin insert @YourLabelHere
    x += x
#end insert @YourLabelHere

Note: The code to be inserted has the same level of indentation as the surrounding code of its destination insert point.