Hi, I'm a bot! This change was automatically merged because:
- It only modifies existing Draft or Last Call EIP(s)
- The PR was approved or written by at least one author of each modified EIP
- The build is passing
* Brought issue #152 into the repo as a draft EIP.
Thanks @tjade273!
* Make the draft EIP consistent with the template
Also added myself as an author
* Break backwards compatibility into its own section
* Added notes about the in-progress implementation
Should have a working geth precompile and initial benchmarks shortly
* Specify EIP-2046 as a requirement
While 2046's cheaper precompile contract calls aren't a requirement for
this EIP's implementation, shipping this precompile without EIP-2046
would make the F function expensive for some of the motivating usecases.
* Don't use ABI encoding for precompile
Replace the existing ABI encoding interface to the BLAKE2b `F`
precompile with a loosely pack struct that's `staticcall`-friendly.
H/t to @pdyraga for putting together the interface!
* Add @pdyraga to the EIP authors.
* Remove less relevant EIP rationale
Let's not relitigate precompiles, WASM, etc in thie EIP :)
* Use 0x09 as the precompile address
If a conflicting EIP is moving forward the EIP editor can assign a new
address
* Choosing an EIP number
Contributing docs suggest EIPs be named `eip-draft-with-a-title` until
an editor has been assigned, but discussing this work off-platform
without a number is a problem.
Assigning 152 as the issue number where the `F` precompile was
originally raised (https://github.com/ethereum/EIPs/issues/152)
* Add a missing colon
Thanks @axic 🙌
* Spelling updates
* Add @MadeOfTin to the authors list
* Prefer the original issue for discussion
* Clarify the precompile's initial implementation
* Make the precompile return value clear
* Clean up references wording
* More rationale around this BLAKE2b approach
* Fix a couple misspellings
* Updated the interface for F precompile
- F precompile accepts now `abi.encodePacked` parameters taking
exactly 213 bytes. This is safer and does not require left-padding data
- `rounds` parameter is now the first one as the gas cost depends only
on this parameter
* Updated gas cost section proposing GFROUND=1
* Detailed benchmarks moved to appendix section
* Benchmark stats are compared against ecRecover as a baseline
* Clarification: f parameter is true if it is nonzero
This rule is compatible with Solidity for boolean.
* Avoid referring to abi.encodePacked
The specification should not be Solidity-specific. Instead of
referring to abi.encodePacked we now just say "tightly encoded".
* Fixed incorrect link
"specified in the RFC" linked to the geth PR for F precompile
instead of linking to the BLAKE2b RFC.
* Shortened the description about when parameter f is considered as true
* Minor grammar improvement
* Updated information about endianness of F precompile inputs
BLAKE2b is consistently little-endian. abi.encodePacked encodes each
of its arguments in big-endian order. We need to be clear which parameters
should go as little-endian (h, m, t) and which parameters should go as
big-endian (rounds, f).
* Strict validation of f parameter
* Initial test vectors for F precompile
Test cases covered:
- input length too short
- input length too long
- malformed f flag encoding
- correct input, test vector from BLAKE2b RFC, Appendix A
* Test vector for a non-final round
* Test vector for the maximum number of rounds
* Test vector for a single round
* Added test vector for empty input
* The final block indicator (8-bit word) does not have endianness
* Clarify state vector encoding does not change in the output
* Put too short input test vector next to empty input test vector
* Added test vector for zero-rounds BLAKE2b case