Review first
Do these in order. Later PRs assume earlier ones.
neo-vm#592 — VmFeatures on ExecutionEngineLimits. Current opcode behavior must stay identical (SafeSubStr / StrictContainerAccess / BoundedShift already in Current). Jump table stays; handlers branch on Limits.Has.
neo#4740 (draft) — map Echidna/Gorgon (and later forks) onto those flags in ApplicationEngine.LimitsFor. This is the neo.dll companion to Allow to ignore the recovery logs #592 .
neo-vm#593 then neo-vm#594 — stacked on Allow to ignore the recovery logs #592 . Confirm IEquatableContent and CompoundSpan are not in Current, and opcode EQUAL / CAT JSON stay unchanged.
neo#4741 / neo#4742 (drafts) — host-side: keep content-EQUAL and compound splice off until a hardfork.
Everything else can be reviewed in parallel after 592/4740.
Checklist
neo-vm (merge 592 before dependents)
neo.dll (drafts until neo-vm lands)
neo-node (master-n3, independent of each other)
Notes for reviewers
Do not reverse the stack: neo.dll must not enable a VM feature before neo-vm ships it. Merge neo-vm#592 (and publish a CI package) before un-drafting Map hardforks onto neo-vm VmFeatures (dpends on neo-vm#592) #4740 .
Current behavior: IEquatableContent, CompoundSpan, and ContentHashCode are not in VmFeatureSets.Current. Opcode JSON tests should still match master.
neo-node PRs target master-n3 and do not depend on the neo-vm stack.
Review first
Do these in order. Later PRs assume earlier ones.
VmFeaturesonExecutionEngineLimits. Current opcode behavior must stay identical (SafeSubStr/StrictContainerAccess/BoundedShiftalready inCurrent). Jump table stays; handlers branch onLimits.Has.ApplicationEngine.LimitsFor. This is the neo.dll companion to Allow to ignore the recovery logs #592.IEquatableContentandCompoundSpanare not inCurrent, and opcodeEQUAL/ CAT JSON stay unchanged.Everything else can be reviewed in parallel after 592/4740.
Checklist
neo-vm (merge 592 before dependents)
VmFeaturesflags for opcode hardforksIEquatableContent(depends on Allow to ignore the recovery logs #592)GetSafeSpan/ComputeSpan(depends on Allow to ignore the recovery logs #592)IMemoryOwnerfor ByteString/Buffer (independent of Allow to ignore the recovery logs #592)GetHashCode/ToHashCode(depends on AddisRecovering#594)ComputeSpan/ 32-byte Integer (depends on AddisRecovering#594)ILogger, debugger middleware (independent)neo.dll (drafts until neo-vm lands)
VmFeatures(depends on neo-vm#592)IEquatableContentoff consensus EQUALCompoundSpanoff splice opcodesKeepAlivefor pooled buffers that leave the VM (depends on neo-vm#595)neo-node (
master-n3, independent of each other)Https.MaxRedirectsgetcandidatesempty stack returns[]not{}getversionputs neo-node assembly version in existinguseragent(fixes neo-node#983; no extra JSON field)parse/VMInstructionlisting (UTF-8 comments, hashes, timestamps, blob size)neo-tui: plugin load, liveshow state, connected peers, command output popupNotes for reviewers
IEquatableContent,CompoundSpan, andContentHashCodeare not inVmFeatureSets.Current. Opcode JSON tests should still match master.master-n3and do not depend on the neo-vm stack.