-
Notifications
You must be signed in to change notification settings - Fork 790
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Breaking Releases - Meta Issue (VM v6, others) (old) #1024
Comments
If we export |
Ah, seems you can do both in one file I am now concluding after googling? Didn't know that, so might also be a way. Not sure if I would not like it more to have this on the same level, but we can then always start with the named |
Have added two items to |
This list is becoming vast and I guess it's not realistic that we work this down "straight away" in 2-3 weeks but we'll rather have to implement this step-by-step and likely still need to do updates on the current library versions in parallel. So I guess we'll likely want to - as suggested before - create some branch Should I open such branch on occasion? We likely also want to have this branch protected I guess with more or less the same CI checks and the likes as we have on |
(several comment updates, please read on site) |
maybe even before that we could start with some low hanging fruit like |
@ryanio ah, you are right, the error message TODO should also be possible independently from a breaking release. I always had this in my head in combination with changing the actual error strings (which then would be breaking, independently from using enums or not), which I also wanted to do for a lot of strings since many messages are not very expressive, e.g. the But we can actually separate here and introduce enums in a first step with the exact same messages and then do the error message changes on the breaking release (and then likely announce that from these releases on error messages will change along minor/bugfix releases without notice and people should compare on the enum constants (is this actually possible in JavaScript??? I guess we should really generally open an issue for this whole thing and describe what we are planning to do and give this a short discussion, @ryanio, can you eventually do directly?). Apart from this possible split I would assume there are no further "low hanging fruits to extract" though? 🤔 One major thing I was hoping to get into v6 is actually the consensus encapsulation on Block from #1044 so that we get the library better prepared for "The Merge". Not sure if this is realistic though and if we are already "there" or if this would rather be something for v7. But just to mention. This whole "The Merge" integration would generally need some laid back look and see what structural changes are approaching and where we likely need to break (also, e.g.: this "break point" (haha) where we have the switch from PoW to PoS can not be modelled with Common right now, funnily enough I had this in in the early Casper days (to set the consensus by HF and not by chain) and then removed 😜 ). |
hello, I'd like to help with this, but can't find where to get started. |
@Zachinquarantine Hi there, thanks for the offer. Preparing for breaking releases needs some very specific procedure (since we can't just merge breaking changes into |
RE: BigInt. By this benchmark it seems that BigInt performs far worse than BN in benchmarks. It would be an idea to just try it, but for now it seems that switching to BigInts is going to make things worse instead of better (which I honestly find very surprising if thats true). |
NOTE: ISSUE HAS BEEN REPLACED BY NEW ISSUES #1717 AND #1718
Follow-up on #907
Work currently done towards:
develop
(we might switch tomaster
at some point)Release planning for the next major releases (VM
v6
and other major releases), please use this to add breaking changes planned as well as deprecation tasks which should be executed upon.Planned Release Date (Timeframe): Latest somewhat before Merge HF (~Summer 2022), eventually earier
Breaking Changes / Deprecation Tasks
Ecosystem (updated: 2022-01-13)
important
,not-urgent
: 2-3 day team sprint for error messages -> enumsneeds discussion + evaluation
: Switch to BigInt, Monorepo -> BN.js to BigInt: Performance Analysis #1651BN.js
instances toBigInt
and see how it goes (and performes)Various Libraries (updated: 2022-01-13)
Make all constructors from libraries with async constructor methods (VM, Blockchain, Block, Tx ?) protected, needs strong discussion due to potential inheritance issuesprivate
,protected
will need some renewed discussionneeds discussion + evaluation
: Switch topeerDependencies
library inclusion, see Incompatible Library versions (TypeScript errors) / Peer dependency switch #1200, some experimentation done in Add peerDependencies to packages #1402VM
somewhat important
: AddStateManager
to exports in mainindex.js
file (see here for an example for the current suboptimal import referencingdist
, makeVM
export non-defaultnice-to-have
: Remove deprecatedstate
constructor optionsomewhat important
: Merge theEIP2929StateManager
+ Interface with the standard interface, see Fix EIP2929 #1124 for context on the introduction, also addgenerateAccessList()
to interface and adoptStateManager and
runTx()` code docs, see VM: Generate Access Lists in runTx() #1170somewhat important
: Restructure/sort VM exports (directly exposeStateManger
,Bloom
, other?, unified type location, type/interface exposure,index.ts
->vm.ts
+index.ts
only for exportssomewhat important
: Remove deprecatedgenerateTxReceipt
function inrunBlock
(preferring newer version located inrunTx
), removeReceipt
re-exportscannot judge, please update
: Update BaseTxReceipt gasUsed from Buffer to BN (suggestion added by @ryanio)nice-to-have
: RemoveStateManager.getStateRoot()
force=true
parameter (also in interface)important
: Finish up on VM, Blockchain: fix storing unsettled promises #1201 (VM, Blockchain: fix storing unsettled promises)somewhat important
: Removed deprecatedEIP2930Receipt
andEIP1559Receipt
typessomewhat important
: MovegasRefund
to a tx-level result object instead ofExecResult
todo linknice-to-have
: Re-addVM: stateManager -> add modifyAccountFields method
, PR VM: stateManager -> add modifyAccountFields method #1369nice-to-have
:runCode
throws ifgasLimit
isundefined
: thegasLimit
parameter is mandatory and should be of typeBN
(or at leastBNLike
)Blockchain
nice-to-have
: Consider to remove Blockchain.meta objectsomewhat important
: LimitBlockchain.iterator()
to return anumber
in function and interface, alsoVM.runBlockchain()
andvmPromise
in client full sync modulesomewhat important
: RenamegetHead()
->getIteratorHead()
for better differentiation towards the canonical head functions (eventually also rename?)Block
somewhat important
: Block: Encapsulate Consensus Mechanism #1044: Integrate the currentethash
functionality into a newConsensus
class (or similar) - yet to be integrated and some open design decisions. Discussion triggered by PoA clique implementation in Add Clique Support #1032nice-to-have
: Rename block fieldbloom
tologsBloom
for increased clarity (suggestion by @ryanio)somewhat important
: Directly throw in validation functions likeBlockHeader.validateGasLimit()
(eventually needs some final confirmation), throw with more appropriate error messages (e.g. EIP-1559 specific), see Implement EIP1559 Fee Market + EIP3198 BaseFee #1148 (comment)important
: Switch to centralized default value setting in the main constructor instead of setting in the static constructors, switch to a parameter dict for passing in values to the main constructor (instead of a long list of separate values), makeBlockHeader.fromHeaderData
(would need some check forBlock.fromBlockData
, likely as well) simply an alias for the main constructor instantiation using the same (typed) API, see changes/updates in the tx library for reference--> Subsidiary, move constructor from deprecated to
private
nice-to-have
: Move Block validation methods to Blockchain, Blockchain/Block: move Block validation methods to Blockchain #947Transaction
cannot judge, please update
: Consistent use of BN(0) buffers. These are either empty buffers,undefined
, orBuffer.from('00', 'hex')
, which equals(new BN(0)).toBuffer()
. Related: isSigned returning true for unsigned transactions #1041nice-to-have
(?): Get rid ofBufferLike
type and enforceBuffer
type.nice-to-have
: RemovetransactionType
property in favor oftype
nice-to-have
: Decide on v, r, s aliases for typed txs (keep? remove?)Re-evaluatetx.getMessageToSign(false)
API for legacy txs, eventually it might be a way to switch to return the RLP encoded byte array, see Tx: EIP-155 not properly supported for legacy txs in raw() and serialize() methods #1278 (comment) for context, this might exclude some existing use cases though (so handle with care), eventually the updated documentation on this might also already be enough. Also check the situation for the txs with tx types (how should the method behave for typed txs?).hash()
is called on unsigned legacy txs (so: align with behavior from typed txs), see also comment added along Block, Tx: Caching for hash method #1445 (this needs some additional analysis of the potential side effects)Common (updated: 2022-01-13)
nice-to-have
: MakeCommon
export non-default to ease on Node/JS related problems, see #default, restructure file layout and exports analogue to e.g. the tx library (dedicatedcommon.ts
main source file,index.ts
only for re-exports), partly addressed in Common: Make Export non-default / ESM Module Support #1632important
: Set default hardfork to 'london' (Update 2022-01-13 @holgerd77: confirmed), Common: Set Default HF to London #1657nice-to-have
: Rename method names referring to "active" HFs with the terminology being ambiguous, see this comment Common: Add new isActivatedEIP() method #1125 (comment) (Update 2022-01-13 @holgerd77: will give this some additional thought once the below TODO has been implemented) Common: Rename/delete ambiguous active* methods #1674nice-to-have
: Consider to removesupportedHardforks
,onlySupported
andonlyActive
HF options, see also Deprecate supportedHardforks/onlySupported/onlyActive HF options #1274 (Update 2022-01-13 @holgerd77: confirmed to be useful)nice-to-have
: Introduce more type safety to commonany
responses (chains, hardforks, params)nice-to-have
: execute on all deprecation notes (e.g. remove deprecatedCommon.forCustomChain()
method), Common: Execute on all Deprecation Notes for Breaking Release #1633nice-to-have
: RemoveKovan
support (including chain file), see discussion from block: Add fix for kovan nonce #1334Util
-> BREAKING RELEASE IF DECIDED TO DO BROADER BIGINT INTEGRATION
Note: the Util library should likely not get the same cadence on breaking release upgrades like the other libraries, since breaking releases take a very long time till they get sufficient adoption by the community (the Util library is just not the "we need to update this immediately" library but people are satisfied if its doing its job.
Breaking changes are nevertheless tracked here. It should be decided upon carefully though if a breaking release will be done or not.
bnToRlp()
method (types
)bnToHex()
andbnToUnpaddedBuffer()
methods fromtypes
to thebytes
module@ethereumjs/util
ecsign
and always returnBuffer
, remove function overloading, merge interfaces likeECDSASignature
andECDSASignatureBuffer
(to:ECDSASignature
)homesteadOrLater
parameter inisValidSignature()
fromRpcSig()
function, see doc comment (toRpcSig()
?)const stripZeros = function (a: any): Buffer | number[] | string
andbnToUnpaddedBuffer()
toconst stripZeros = function (a: any): BufferLike
(which also encompassedBN
)? (from @holgerd77, thought about this while reading over https://github.com/ethereumjs/ethereumjs-util/issues/141)object.ts -> defineProperties()
Trie
-> LIKELY NO BREAKING RELEASE
The text was updated successfully, but these errors were encountered: