Closed Souptacular closed 5 years ago
How about we add in a step 1.5, talking about patch proposals for the Istanbul EIPs?
Here are some examples that we could cover:
EXTCODECOPY
? After the SLOAD repricing, it will be cheaper to load a word out of a contract than to load a single storage slot. This disparity grows as you load more words in series. (Perhaps this is okay, because loading a linear series of bytes actually is faster than loading a bunch of values out of the storage trie)SLOAD
cost to 700STATICCALLWITHLOGSANDVALUE
(obviously with a better name) and interpret call with default stipend as this new SCWLAV@carver I'll add it to the agenda and let you lead the part of the discussion that addresses these things.
Short Istanbul
progress update for the EthereumJS VM:
We are done with all EIP implementations (many thanks to @s1na who did some amazing catch-up within 2 weeks time), for an overview see https://github.com/ethereumjs/ethereumjs-vm/issues/501.
There is one EIP still waiting for a review (EIP-2200, SSTORE net gas metering). After that we can do an Istanbul
v4.1
release - this will likely be mid next week. We'll mark this (the Istanbul
support, so not the VM version release itself) as beta
since this is only basically tested and there might be last minute changes to some EIPs.
Some mental notes (waiting for plane, won't be able to attend the call):
round
: Is there a legit use case for anything other than 12? I mean it's nice that we want to be flexible, but do we meaningfully need to? How many rounds are there in real use cases? I really think the number should be adjusted to the use case. 2 vs. 4 byte doesn't seem to matter to me really. If there's a reason for large rounds, 4 seems safer since it can cover any weirdo scenario. If there's absolutely no reason for large rounds, why not 1 byte or why not hard code 12 rounds altogether?t
fields. @axic mentioned that the old fields are 128 bits and the new suggestion is 32. That does not compute because he suggested halving them. That said, 32 bits can already index 4GB, so I kind of agree that there's no point in supporting something that is impossible to get into the EVM in the first place.m_len
field. This seems a weird addition to avoid Solidity doing proper work :P I kind of get where we're coming from, but still this seems like a weirdo ugly hack to save some loose gas.The SLOAD
"issue" might lead to things happening on chain equivalent to GasToken. I see no harm in this, but it might just lead to unintended practices like that and especially "weird" patterns to store data.
Re Blake 2 vs. 4 byte round: Is there a legit use case for anything other than 12? I mean it's nice that we want to be flexible, but do we meaningfully need to? How many rounds are there in real use cases? I really think the number should be adjusted to the use case. 2 vs. 4 byte doesn't seem to matter to me really. If there's a reason for large rounds, 4 seems safer since it can cover any weirdo scenario. If there's absolutely no reason for large rounds, why not 1 byte or why not hard code 12 rounds altogether?
There are potential future use cases that our team has considered for larger rounds, but they're early and I'd rather not speculate on creative applications just yet.
@zookozcash has also suggested similarly
I do think restricting the rounds to something more reasonable considering gas limits, etc is fine- as the gas pricing is per round, this is priced in regardless. As @axic pointed out the round limit doesn't come from the RFC. The question for me is whether we want clients to need to update to an EIP revision before Istanbul.
Re Blake t fields. @axic mentioned that the old fields are 128 bits and the new suggestion is 32. That does not compute because he suggested halving them. That said, 32 bits can already index 4GB, so I kind of agree that there's no point in supporting something that is impossible to get into the EVM in the first place.
Note @axic withdrew the t
field modification proposal.
There are potential future use cases that our team has considered for larger rounds, but they're early and I'd rather not speculate on creative applications just yet.
I think the confusion is that if you change the rounds, it is not BLAKE2b anymore. It is a different configuration.
And if the precompile is BLAKE2b specific then the rounds has no place in it.
And if the precompile is BLAKE2b specific then the rounds has no place in it.
It's unfortunate that this function doesn't have a better name, but one of the RFC spec authors is also suggesting this flexibility. Leaving it to future developers means this precompile is more likely to handle Sia-style PoW changes as well as future innovation.
Perhaps this is "the BLAKE2 F compression function, supporting 64-bit BLAKE2 variants"? I think that's a worthwhile clarification in the EIP.
It's unfortunate that this function doesn't have a better name, but one of the RFC authors is also suggesting this flexibility..
Can you link to that suggestion please? Can't see it in the RFC.
It's unfortunate that this function doesn't have a better name, but one of the RFC authors is also suggesting this flexibility..
Can you link to that suggestion please? Can't see it in the RFC.
reduced or increased rounds: not currently in use but it is quite possible that in the coming years reduced-round variants may come into use, because that might be necessary to meet performance constraints that the full hash function (and other full hash functions like SHA2 and SHA3) can't meet.
I may be misreading it but to me that paragraph refers to BLAKE2 and not BLAKE2b.
Nitpick: Zooko is not listed as an author on the RFC :wink: (He is on the spec.)
Here's my brief summary of the call: https://github.com/ethereum/EIPs/issues/152#issuecomment-528919091
Let me know if I’ve missed anything or if anything is incorrect.
Beat me to it, thanks @axic!
Closing in favor of https://github.com/ethereum/pm/issues/125.
From the call notes:
I have seen a list of contracts that could be affected and the list is long.
Where can we find the list of contracts?
Ethereum Core Devs Meeting 70 Agenda
Agenda
a) Geth
b) Parity Ethereum
c) Aleth/eth
d) Trinity/PyEVM
e) EthereumJS
f) EthereumJ/Harmony
g) Pantheon
h) Turbo Geth
i) Nimbus
j) web3j
k) Mana/Exthereum
l) Mantis
m) Nethermind