Skip to content

Remove Tarjan - #576

Merged
shargon merged 7 commits into
neo-project:masterfrom
AnnaShaleva:remove-tarjan
Jun 1, 2026
Merged

shargon merged 7 commits into
neo-project:masterfrom
AnnaShaleva:remove-tarjan

Conversation

@AnnaShaleva

Copy link
Copy Markdown
Member

Starting from #564, RC V2 is used as a default reference counter implementation in the core. RC V1 is not used anymore. This PR is required for cases like #571 (comment).

@neo-project/core I advice you to review this PR commit-by-commit instead of reviewing the overall PR diff. This way it's easier to track the changes.

@codecov

codecov Bot commented May 20, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.66667% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 85.60%. Comparing base (cf8284a) to head (97e25f5).

Files with missing lines Patch % Lines
src/Neo.VM/JumpTable/JumpTable.Compound.cs 94.73% 0 Missing and 1 partial ⚠️
src/Neo.VM/Types/Map.cs 66.66% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #576      +/-   ##
==========================================
- Coverage   85.80%   85.60%   -0.20%     
==========================================
  Files          44       41       -3     
  Lines        2868     2599     -269     
  Branches      400      337      -63     
==========================================
- Hits         2461     2225     -236     
+ Misses        323      287      -36     
- Partials       84       87       +3     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Comment thread src/Neo.VM/Types/StackItem.cs

@Jim8y Jim8y left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One small ReferenceCounter edge case should be fixed before merging.

Comment thread src/Neo.VM/ReferenceCounter.cs Outdated
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Follow ApplicationEngine style, no functional changes.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
This property is not needd anymore since there's a single
IReferenceCounter implementation.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
No functional changes.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
@AnnaShaleva
AnnaShaleva requested a review from Jim8y May 20, 2026 15:08
@Turalchik Turalchik mentioned this pull request May 20, 2026
Comment thread tests/Neo.VM.Tests/UT_ReferenceCounterComprehensive.cs
Comment thread src/Neo.VM/JumpTable/JumpTable.Compound.cs
Jim8y
Jim8y previously approved these changes May 20, 2026

@Jim8y Jim8y left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me after the update. The bulk AddStackReference case is covered now.

@AnnaShaleva
AnnaShaleva requested review from ajara87 and shargon May 21, 2026 09:49

@shargon shargon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@superboyiii could you check states with this patch?

@superboyiii

Copy link
Copy Markdown
Member

@superboyiii could you check states with this patch?

Sure

@AnnaShaleva

Copy link
Copy Markdown
Member Author

@superboyiii could you check states with this patch?

I just realized that we need an update of the Neo core itself for this PR, will push an update ASAP.

@AnnaShaleva AnnaShaleva mentioned this pull request May 25, 2026
18 tasks
ajara87
ajara87 previously approved these changes May 25, 2026

@ajara87 ajara87 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@shargon shargon left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Waiting for @superboyiii for merge

Co-authored-by: Alvaro <amjarag@gmail.com>
@AnnaShaleva
AnnaShaleva dismissed stale reviews from ajara87 and Jim8y via 115efc1 May 26, 2026 08:00
@superboyiii

superboyiii commented May 26, 2026

Copy link
Copy Markdown
Member

@shargon @AnnaShaleva
Incompatible data appears at block 889076
Original:

{"block":889076,"size":11,"storage":[{"id":-6,"state":"Changed","key":"\u002Bv///xREWymRAmRxj6ULIHl4XLVbucUjIw==","value":"QQEhBfeuYL4E"},{"id":-6,"state":"Changed","key":"\u002Bv///ws=","value":"/L2WBhErEw=="},{"id":-6,"state":"Changed","key":"\u002Bv///xRlCbXNcHfy9\u002B\u002BG5hB0Hg7wf7eZLg==","value":"QQEhBda5fb8M"},{"id":-6,"state":"Changed","key":"\u002Bv///xRG9tpaehSZUFCu7uiPMgoss5PPQA==","value":"QQEhBsoW2dXlAQ=="},{"id":85,"state":"Added","key":"VQAAAGJldFJvbGxvdmVygAA=","value":""},{"id":85,"state":"Added","key":"VQAAAGFyZW5hSGVpZ2h0gAA=","value":"AQ=="},{"id":85,"state":"Added","key":"VQAAAGhpc3RvcnmAAAE=","value":"QQohAQFAgEEGKBQuJ/lhLjkkrDGkB7cKFjw62JKZqCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzEzMCgFTWV0YWwhAQIhBlfbAzt\u002BAUEGKBQlLmBG4QhpA9TzyK0QkuTU3/O6YygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI3MSgFRWFydGghAQkhBu/CjEV\u002BAUEGKBTQuYmRlWWsbCRyjitWlkZflc2hzCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI0OSgERGFyayEBASEGiOEjRX4BQQYoFEvnx7126lPuWw0rXR4AmK3FyeLKKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTcwKAVNZXRhbCEBASEGX/aTNn4BQQYoFI5y\u002Bi6pWjNKw3sS00I80ZjmaDknKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjc3KAVFYXJ0aCEBBCEGVeipRX4BQQYoFIxWWcdA4uo9lmRQ1z6Ku7Kip8qNKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjQ0KAVNZXRhbCEBASEGuMKrRH4BQQYoFCvQqZvCYJ6OKxOsEvsbT9xV214\u002BKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjMwKAVXYXRlciEBASEGcSI0On4BQQYoFNC5iZGVZaxsJHKOK1aWRl\u002BVzaHMKBTW5XASyL/JWIuqBJC1pZzAt069vigCNjMoBUxpZ2h0IQEDIQaU8RhFfgFBBigUCORWYyShkyxR130VNy6TO1EmUxsoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxNTEoBVdhdGVyIQECIQZ5Gs86fgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMjEoBVdhdGVyIQEDIQaq15M9fgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMTEoBERhcmshAQMhBppFjz1\u002BAUEGKBRParjmRYyZTh87DXqhG1ZEp7XedCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE5MCgEV29vZCEBAyEGzrIvKn4BQQYoFByYxgUSGOeS4QW2sV7iQ6EquPVGKBTW5XASyL/JWIuqBJC1pZzAt069vigCMzAoBU1ldGFsIQEDIQZmWEgnfgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMzgoBU1ldGFsIQEFIQZcrps9fgFBBigU759Te6sa1DO6FKPDoajfWvoBHcooFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNjEoBFdvb2QhAQghBvrUZkV\u002BAUEGKBT6h/EAdiBbygyDkc3MIMLYKdmfmigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjk1KAVNZXRhbCEBCiEGlzb5MH4BQQYoFNwkOyGhO6pGoBNjNoSpFY51pme6KBTW5XASyL/JWIuqBJC1pZzAt069vigDMjU0KARXb29kIQEFIQbko0ZFfgFBBigUaO4cxyJWZA67Y8QUngRNE5RF4c0oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyMjUoBUVhcnRoIQEBIQZdXvI2fgFBBigUp7TraGQXMRwlZbxGyOAOHQpKlKAoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMDMoBEZpcmUhAQEhBjguVix\u002BAUEGKBRo7hzHIlZkDrtjxBSeBE0TlEXhzSgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIyOCgERGFyayEBCSEGHd39Nn4BQQYoFNC5iZGVZaxsJHKOK1aWRl\u002BVzaHMKBTW5XASyL/JWIuqBJC1pZzAt069vigCNjgoBEZpcmUhAQkhBppvG0V\u002BAUEGKBRbBM7uTLoR9\u002B9Z6AGrWUDq0Uc6DCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI0OCgEV29vZCEBByEGPXMSRX4BQQYoFKe062hkFzEcJWW8RsjgDh0KSpSgKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjgxKARXb29kIQEJIQanSulFfgFBBigUK9Cpm8Jgno4rE6wS\u002BxtP3FXbXj4oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAI3MigFRWFydGghAQEhBmIY\u002BSh\u002BAUEGKBRMAh734XTqKRQehZBg0tTzMmMG\u002BygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIzNigFTWV0YWwhAQchBpuAzz9\u002BAUEGKBQcmMYFEhjnkuEFtrFe4kOhKrj1RigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjI3KAVXYXRlciEBAyEGe5Y9J34BQQYoFPy2c14W8MbxXO4ocHhj76u\u002B0w4rKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTk1KAREYXJrIQEBIQbsVhEsfgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxNDAoBU1ldGFsIQEBIQbHM5w9fgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMTQoBFdvb2QhAQUhBqH1kT1\u002BAUEGKBSntOtoZBcxHCVlvEbI4A4dCkqUoCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzEwNygERmlyZSEBCSEGOC5WLH4BQQYoFKe062hkFzEcJWW8RsjgDh0KSpSgKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTA1KAVFYXJ0aCEBCiEGru9VLH4BQQYoFKe062hkFzEcJWW8RsjgDh0KSpSgKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTA0KAVXYXRlciEBASEGru9VLH4BQQYoFDk9pyTsEWtIHcnB4IIQUuEmum5YKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTAyKAVNZXRhbCEBBiEGKmvwMX4BQQYoFKe062hkFzEcJWW8RsjgDh0KSpSgKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTA2KAVNZXRhbCEBAyEGOC5WLH4BQQYoFEvnx7126lPuWw0rXR4AmK3FyeLKKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTA4KAREYXJrIQEJIQY6qxUrfgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMTAoBERhcmshAQEhBvsRjj1\u002BAUEGKBQlLmBG4QhpA9TzyK0QkuTU3/O6YygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzExMigEV29vZCEBCSEGkvuPPX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTEzKAVNZXRhbCEBASEGPHWRPX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTE1KAVMaWdodCEBBSEGVaaSPX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTE4KAVXYXRlciEBBCEGmyOTPX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTI1KAVNZXRhbCEBCSEGwgyWPX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTI2KAVFYXJ0aCEBBiEGAoqXPX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTI3KAVXYXRlciEBBiEGiAKYPX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTI4KARGaXJlIQEBIQaig5k9fgFBBigULif5YS45JKwxpAe3ChY8OtiSmagoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMzEoBUVhcnRoIQEHIQarif86fgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMzMoBUVhcnRoIQEJIQYaQZo9fgFBBigUJS5gRuEIaQPU88itEJLk1N/zumMoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxMzQoBERhcmshAQohBhb6mj1\u002BAUEGKBQlLmBG4QhpA9TzyK0QkuTU3/O6YygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE0MSgFV2F0ZXIhAQkhBvmsnD1\u002BAUEGKBQlLmBG4QhpA9TzyK0QkuTU3/O6YygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE0MigFTWV0YWwhAQghBvYlnT1\u002BAUEGKBQI5FZjJKGTLFHXfRU3LpM7USZTGygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE1MCgERmlyZSEBBiEGZ1N7On4BQQYoFAjkVmMkoZMsUdd9FTcukztRJlMbKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTUyKAVXYXRlciEBByEGdVbPOn4BQQYoFAjkVmMkoZMsUdd9FTcukztRJlMbKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTUzKARXb29kIQEFIQaq3846fgFBBigUCORWYyShkyxR130VNy6TO1EmUxsoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxNTQoBERhcmshAQchBnVWzzp\u002BAUEGKBQI5FZjJKGTLFHXfRU3LpM7USZTGygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE1NSgEV29vZCEBBSEGdVbPOn4BQQYoFAjkVmMkoZMsUdd9FTcukztRJlMbKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTU2KARGaXJlIQEEIQZ5Gs86fgFBBigUCORWYyShkyxR130VNy6TO1EmUxsoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxNTcoBERhcmshAQohBqrfzjp\u002BAUEGKBTvn1N7qxrUM7oUo8OhqN9a\u002BgEdyigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE1OCgFV2F0ZXIhAQEhBgR\u002BOD5\u002BAUEGKBSwtn0SniR9/feGD/OfKP4bvvfceigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE2MygERmlyZSEBCSEG/MnDQH4BQQYoFP9K9ILvEvKU50RmviHuSqyajAdTKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTY1KAVFYXJ0aCEBASEGphyKOH4BQQYoFEvnx7126lPuWw0rXR4AmK3FyeLKKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTcxKARXb29kIQEBIQa4fpM2fgFBBigU0LmJkZVlrGwkco4rVpZGX5XNocwoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxNzMoBVdhdGVyIQEDIQa5Og1FfgFBBigU0LmJkZVlrGwkco4rVpZGX5XNocwoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxNzQoBVdhdGVyIQEHIQbsZiNFfgFBBigU0LmJkZVlrGwkco4rVpZGX5XNocwoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMxNzUoBFdvb2QhAQIhBpeqG0V\u002BAUEGKBQ4OXgpXei4MOCc5NJtgrPC7rj85CgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzE4MCgERGFyayEBCSEG4AqjKH4BQQYoFPy2c14W8MbxXO4ocHhj76u\u002B0w4rKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTk0KAVFYXJ0aCEBBSEGMxgSLH4BQQYoFHoRMP4DV5wbI2o15f2t4JZL9v/AKBTW5XASyL/JWIuqBJC1pZzAt069vigDMTk5KAVFYXJ0aCEBASEGUuYhKX4BQQYoFByYxgUSGOeS4QW2sV7iQ6EquPVGKBTW5XASyL/JWIuqBJC1pZzAt069vigCMjEoBUVhcnRoIQEJIQZ7lj0nfgFBBigU9KZvWck3Cn41vw0bGf4880zFA3koFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyMTIoBFdvb2QhAQchBhHh\u002BjJ\u002BAUEGKBRo7hzHIlZkDrtjxBSeBE0TlEXhzSgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIyNCgFTWV0YWwhAQUhBiSg8jZ\u002BAUEGKBRo7hzHIlZkDrtjxBSeBE0TlEXhzSgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIyNigFRWFydGghAQchBl1e8jZ\u002BAUEGKBRo7hzHIlZkDrtjxBSeBE0TlEXhzSgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIyNygFTWV0YWwhAQQhBvIX/jZ\u002BAUEGKBQg7g/fzBm0Ohdsb/AIiHLnd87DWigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIyOSgFRWFydGghAQEhBmNWhTd\u002BAUEGKBQr0KmbwmCejisTrBL7G0/cVdtePigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIzMSgFTWV0YWwhAQUhBnEiNDp\u002BAUEGKBQr0KmbwmCejisTrBL7G0/cVdtePigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzIzMigEV29vZCEBASEGcSI0On4BQQYoFBFBjHrYzFKECY9ygtPTqcZCPDfGKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjMzKAREYXJrIQEBIQaHD/Q7fgFBBigUK9Cpm8Jgno4rE6wS\u002BxtP3FXbXj4oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyMzQoBU1ldGFsIQEHIQZtLsY8fgFBBigU3lpMtK3xclpfvIqm6eCjGyQ28V0oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyMzcoBUVhcnRoIQEGIQb3CMdBfgFBBigU3lpMtK3xclpfvIqm6eCjGyQ28V0oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyMzgoBU1ldGFsIQEBIQZti8dBfgFBBigU3lpMtK3xclpfvIqm6eCjGyQ28V0oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyMzkoBFdvb2QhAQkhBuC\u002BykF\u002BAUEGKBQcmMYFEhjnkuEFtrFe4kOhKrj1RigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjI0KAVMaWdodCEBCSEGe5Y9J34BQQYoFNgCTYDQSXMMw82fkl1tVpZeCV4RKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjQxKAVNZXRhbCEBBiEG2p\u002BSRH4BQQYoFIxWWcdA4uo9lmRQ1z6Ku7Kip8qNKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjQyKAVNZXRhbCEBBSEGoHiqRH4BQQYoFIxWWcdA4uo9lmRQ1z6Ku7Kip8qNKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjQzKAVFYXJ0aCEBASEGWf\u002BqRH4BQQYoFLsd\u002B9qSBhIBk/XyulJqj6M7tJBHKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjQ1KARXb29kIQEIIQbFbOtEfgFBBigUWwTO7ky6EffvWegBq1lA6tFHOgwoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNDcoBFdvb2QhAQUhBmU3EUV\u002BAUEGKBQcmMYFEhjnkuEFtrFe4kOhKrj1RigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjI1KAVXYXRlciEBCSEGe5Y9J34BQQYoFNC5iZGVZaxsJHKOK1aWRl\u002BVzaHMKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjUwKAREYXJrIQEFIQZwpSNFfgFBBigU3CQ7IaE7qkagE2M2hKkVjnWmZ7ooFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNTEoBVdhdGVyIQEJIQbQrEVFfgFBBigU3CQ7IaE7qkagE2M2hKkVjnWmZ7ooFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNTIoBEZpcmUhAQUhBihdR0V\u002BAUEGKBTcJDshoTuqRqATYzaEqRWOdaZnuigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI1MygFV2F0ZXIhAQkhBjUiR0V\u002BAUEGKBTcJDshoTuqRqATYzaEqRWOdaZnuigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI1NSgEV29vZCEBASEG6ixGRX4BQQYoFNwkOyGhO6pGoBNjNoSpFY51pme6KBTW5XASyL/JWIuqBJC1pZzAt069vigDMjU2KAVNZXRhbCEBAyEGN0VrRX4BQQYoFNwkOyGhO6pGoBNjNoSpFY51pme6KBTW5XASyL/JWIuqBJC1pZzAt069vigDMjU3KAVFYXJ0aCEBAyEGe41rRX4BQQYoFNwkOyGhO6pGoBNjNoSpFY51pme6KBTW5XASyL/JWIuqBJC1pZzAt069vigDMjU4KAREYXJrIQEBIQbCSm1FfgFBBigU759Te6sa1DO6FKPDoajfWvoBHcooFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNTkoBERhcmshAQkhBjdYZUV\u002BAUEGKBTcJDshoTuqRqATYzaEqRWOdaZnuigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI2MCgEV29vZCEBASEGoYVtRX4BQQYoFJR/l4Sjr99j3UYTnrOhc8Iwmmk/KBTW5XASyL/JWIuqBJC1pZzAt069vigDMjYyKARGaXJlIQEBIQYY2H9FfgFBBigUlH\u002BXhKOv32PdRhOes6FzwjCaaT8oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNjMoBUVhcnRoIQEDIQachmxFfgFBBigUlH\u002BXhKOv32PdRhOes6FzwjCaaT8oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNjQoBUxpZ2h0IQEHIQZ7jWtFfgFBBigU3CQ7IaE7qkagE2M2hKkVjnWmZ7ooFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNjUoBUxpZ2h0IQEFIQZe/21FfgFBBigUFoVDB\u002Btx\u002B2rpKAFuifJsuwdlm6coFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNjYoBERhcmshAQkhBi1230V\u002BAUEGKBQWhUMH63H7aukoAW6J8my7B2WbpygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI2NygFV2F0ZXIhAQEhBhlH3kV\u002BAUEGKBQWhUMH63H7aukoAW6J8my7B2WbpygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI2OCgFRWFydGghAQkhBse83kV\u002BAUEGKBQlLmBG4QhpA9TzyK0QkuTU3/O6YygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI3MCgFV2F0ZXIhAQchBuVAjEV\u002BAUEGKBQlLmBG4QhpA9TzyK0QkuTU3/O6YygU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI3MygEV29vZCEBByEGwoCNRX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjc0KAVNZXRhbCEBBCEGSYCORX4BQQYoFCUuYEbhCGkD1PPIrRCS5NTf87pjKBTW5XASyL/JWIuqBJC1pZzAt069vigDMjc1KARXb29kIQEGIQZ8OI9FfgFBBigUjFZZx0Di6j2WZFDXPoq7sqKnyo0oFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNzYoBU1ldGFsIQEBIQY6EZhFfgFBBigUS\u002BfHvXbqU\u002B5bDStdHgCYrcXJ4sooFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAMyNzgoBERhcmshAQMhBmwxrEV\u002BAUEGKBRL58e9dupT7lsNK10eAJitxcniyigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI3OSgERGFyayEBBiEGg2uvRX4BQQYoFByYxgUSGOeS4QW2sV7iQ6EquPVGKBTW5XASyL/JWIuqBJC1pZzAt069vigCMjgoBERhcmshAQchBmZYSCd\u002BAUEGKBSntOtoZBcxHCVlvEbI4A4dCkqUoCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI4MCgFV2F0ZXIhAQkhBofJ6EV\u002BAUEGKBSntOtoZBcxHCVlvEbI4A4dCkqUoCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI4MigFTGlnaHQhAQEhBnSF6UV\u002BAUEGKBQlBehCgH\u002BfnxpUrD03nrL67DbBHigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI4MygFTGlnaHQhAQUhBn6N50V\u002BAUEGKBSntOtoZBcxHCVlvEbI4A4dCkqUoCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAzI4NCgFTGlnaHQhAQEhBu4F6kV\u002BAUEGKBQcmMYFEhjnkuEFtrFe4kOhKrj1RigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjUxKARXb29kIQEBIQYEG0gnfgFBBigUHJjGBRIY55LhBbaxXuJDoSq49UYoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAI1NigEV29vZCEBBCEGBBtIJ34BQQYoFByYxgUSGOeS4QW2sV7iQ6EquPVGKBTW5XASyL/JWIuqBJC1pZzAt069vigCNTcoBERhcmshAQEhBgQbSCd\u002BAUEGKBQcmMYFEhjnkuEFtrFe4kOhKrj1RigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjYyKAREYXJrIQEBIQYEG0gnfgFBBigU0LmJkZVlrGwkco4rVpZGX5XNocwoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAI2NCgERGFyayEBCCEGYJ8hRX4BQQYoFNC5iZGVZaxsJHKOK1aWRl\u002BVzaHMKBTW5XASyL/JWIuqBJC1pZzAt069vigCNjYoBERhcmshAQEhBs\u002B\u002BDEV\u002BAUEGKBTQuYmRlWWsbCRyjitWlkZflc2hzCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjY5KAVFYXJ0aCEBAyEGm9YFRX4BQQYoFNC5iZGVZaxsJHKOK1aWRl\u002BVzaHMKBTW5XASyL/JWIuqBJC1pZzAt069vigCNzAoBERhcmshAQMhBkp8BEV\u002BAUEGKBRL58e9dupT7lsNK10eAJitxcniyigU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjgzKAREYXJrIQEFIQabPZM2fgFBBigUHJjGBRIY55LhBbaxXuJDoSq49UYoFNblcBLIv8lYi6oEkLWlnMC3Tr2\u002BKAE5KAVNZXRhbCEBASEGBBtIJ34BQQYoFNYZdtFPyRw6\u002BNMSo3gNTFKIiEbLKBTW5XASyL/JWIuqBJC1pZzAt069vigCOTMoBEZpcmUhAQkhBitTnUV\u002BAUEGKBTwuT0D7dDGjhzNNdbir9W38PRnaCgU1uVwEsi/yViLqgSQtaWcwLdOvb4oAjk0KAVXYXRlciEBASEGEjk7P34BQQYoFGjuHMciVmQOu2PEFJ4ETROUReHNKBTW5XASyL/JWIuqBJC1pZzAt069vigCOTgoBUxpZ2h0IQEJIQbk0qssfgEoAzI2NCEFk7u1mgAhACEAIQAhACEAIQZjCftFfgE="},{"id":26,"state":"Changed","key":"GgAAAAEBZQm1zXB38vfvhuYQdB4O8H\u002B3mS4=","value":"YUWq73XlAA=="},{"id":26,"state":"Changed","key":"GgAAAAEBexuMFivr4zwfu52d5toDTloHje0=","value":"46/AmXM="},{"id":26,"state":"Changed","key":"GgAAAAEBSP9U2y6o8n9bMx9bjhVFVhFGjww=","value":"DMRjvBcE"},{"id":-6,"state":"Changed","key":"\u002Bv///xQaZKQRWSWZUbJfVQkpqOZRRYo08w==","value":"QQEhBYsJg8QL"}]}

Current:

{"block":889076,"size":8,"storage":[{"id":-6,"state":"Changed","key":"\u002Bv///xREWymRAmRxj6ULIHl4XLVbucUjIw==","value":"QQEhBfeuYL4E"},{"id":-6,"state":"Changed","key":"\u002Bv///ws=","value":"/L2WBhErEw=="},{"id":-6,"state":"Changed","key":"\u002Bv///xRlCbXNcHfy9\u002B\u002BG5hB0Hg7wf7eZLg==","value":"QQEhBda5fb8M"},{"id":-6,"state":"Changed","key":"\u002Bv///xRG9tpaehSZUFCu7uiPMgoss5PPQA==","value":"QQEhBsoW2dXlAQ=="},{"id":26,"state":"Changed","key":"GgAAAAEBZQm1zXB38vfvhuYQdB4O8H\u002B3mS4=","value":"YUWq73XlAA=="},{"id":26,"state":"Changed","key":"GgAAAAEBexuMFivr4zwfu52d5toDTloHje0=","value":"46/AmXM="},{"id":26,"state":"Changed","key":"GgAAAAEBSP9U2y6o8n9bMx9bjhVFVhFGjww=","value":"DMRjvBcE"},{"id":-6,"state":"Changed","key":"\u002Bv///xQaZKQRWSWZUbJfVQkpqOZRRYo08w==","value":"QQEhBYsJg8QL"}]}

These states from the contract id:85 are missing...
It finally makes syncing stuck at block 1005007.

@AnnaShaleva

AnnaShaleva commented May 26, 2026

Copy link
Copy Markdown
Member Author

Incompatible data appears at block 889076

It's something unexpected, because this PR doesn't introduce any new functionality comparing to #564. It just removes an unused code. I will check.

@superboyiii

superboyiii commented May 26, 2026

Copy link
Copy Markdown
Member

Investigation conclusion from Opus4.7

Why This Specific Block Trips the Difference

Looking at the missing id=85, key history value, after base64-decoding the serialized blob:

  • Top-level Struct with 10 fields
  • One field is an Array of 128 sub-Structs
  • Each sub-Struct has 6 fields (two 20-byte addresses, a numeric string, an element name like Metal/Earth/Wood/Fire/Water/Dark/Light, plus two integers)

That single value contains roughly ~900 StackItems. The default MaxStackSize is 2048.

The transaction at block 889076 is the first one that:

  1. Builds (or StdLib.Deserializes) this large history struct,
  2. Keeps it on the evaluation stack / in slots while pushing additional intermediate compound items (typical contract logic: DUP for Storage.Put, pass to StdLib.Serialize, copy to a local slot, etc.).

Under V1, the temporary subtrees that lose their last stack reference are swept by CheckZeroReferred, so the surviving live count stays well below 2048. The contract runs to completion and writes:

id=85 betRollover   (Added)
id=85 arenaHeight   (Added, value 1)
id=85 history       (Added, the ~7 KB serialized struct)

Under V2, every push of that ~900-item tree adds ~900 to Count. A second push (DUP / copy / re-deserialize) crosses 2048, PostExecuteInstruction throws MaxStackSize exceed, the engine FAULTs, and the transaction's snapshot is rolled back. Hence the three id=85 Added rows disappear in the PR build.

The id=-6 (GasToken fee accounting) and id=26 (the unrelated token contract used elsewhere in the same block) entries remain identical because their writes do not happen inside the faulting transaction — they are produced either by OnPersist or by other transactions in the block. That's exactly the pattern we see: 11 rows → 8 rows, with only the contract-id=85 writes missing.

This field should be accessible from the neo-project/core solution to
properly override some of JumpTable handlers (Remove_Before543,
SetItem_Before543 and etc.).

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
@vncoelho

Copy link
Copy Markdown
Member

@AnnaShaleva , as @superboyiii highlighted, perhaps the change in "ReferenceCounter.PostExecuteInstruction();" made the state difference.

With old cleanup, temporary items could be swept earlier. While, with the new RC behavior, PostExecuteInstruction() throws MaxStackSize exceed, the transaction faults, and the id=85 storage writes are rolled back.

If you need any double check on state let me know. For know I will wait for this verification.

Ref.
neo-project#576 (comment).

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
AnnaShaleva added a commit to neo-project/neo that referenced this pull request May 29, 2026
Fetch neo-project/neo-vm#576. RC V2 doesn't need
ReferenceCounter to be embedded into StackItem.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
@AnnaShaleva

AnnaShaleva commented May 29, 2026

Copy link
Copy Markdown
Member Author

Finally fixed the diff. The reason was in the non-default JumpTable handlers implementation that was overrided in the core: ApplicationEngine.Remove_Before543, ApplicatrionEngine.SetItem_Before543 and etc. did not updated stack references properly. Fixed in the last commit of neo-project/neo#4550.

@superboyiii please, check again with updated core and VM (also neo-project/neo-node#1056 is required).

@neo-project/core please, review the fixes.

@AnnaShaleva
AnnaShaleva requested review from Jim8y, ajara87 and shargon May 29, 2026 16:10
AnnaShaleva added a commit to neo-project/neo that referenced this pull request May 29, 2026
Fetch neo-project/neo-vm#576. RC V2 doesn't need
ReferenceCounter to be embedded into StackItem.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
@shargon

shargon commented May 29, 2026

Copy link
Copy Markdown
Member

LGTM, waiting for @superboyiii re-test

@AnnaShaleva

Copy link
Copy Markdown
Member Author

I checked this PR together with neo-project/neo#4550 and neo-project/neo-node#1056.

Mainnet states match:

anna@kiwi:~/Documents/GitProjects/nspcc-dev/neo-go$ go run ./scripts/compare-states/compare-states.go http://localhost:10332 http://seed1.neo.org:10332
at 0: 58a5157b7e99eeabf631291f1747ec8eb12ab89461cda888492b17a301de81e8 vs 58a5157b7e99eeabf631291f1747ec8eb12ab89461cda888492b17a301de81e8
at 10332015: 71a322af9e40cbdf09b15d683068a95dcf60a2326ade2f3cd656e26752e57c32 vs 71a322af9e40cbdf09b15d683068a95dcf60a2326ade2f3cd656e26752e57c32
image

Testnet states check is in progress, I'll write back once it finished. Also, @superboyiii is still welcomed to re-check.

@shargon
shargon merged commit 6b718f8 into neo-project:master Jun 1, 2026
5 checks passed
@superboyiii

Copy link
Copy Markdown
Member

I checked this PR together with neo-project/neo#4550 and neo-project/neo-node#1056.

Mainnet states match:

anna@kiwi:~/Documents/GitProjects/nspcc-dev/neo-go$ go run ./scripts/compare-states/compare-states.go http://localhost:10332 http://seed1.neo.org:10332
at 0: 58a5157b7e99eeabf631291f1747ec8eb12ab89461cda888492b17a301de81e8 vs 58a5157b7e99eeabf631291f1747ec8eb12ab89461cda888492b17a301de81e8
at 10332015: 71a322af9e40cbdf09b15d683068a95dcf60a2326ade2f3cd656e26752e57c32 vs 71a322af9e40cbdf09b15d683068a95dcf60a2326ade2f3cd656e26752e57c32
image Testnet states check is in progress, I'll write back once it finished. Also, @superboyiii is still welcomed to re-check.

I will double check.

AnnaShaleva added a commit to neo-project/neo that referenced this pull request Jun 2, 2026
Fetch merged neo-project/neo-vm#576.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
@AnnaShaleva

Copy link
Copy Markdown
Member Author

Testnet is also OK, checked up to 16540714:

anna@kiwi:~/Documents/GitProjects/nspcc-dev/neo-go$ go run ./scripts/compare-states/compare-states.go http://seed1t5.neo.org:20332 http://localhost:20332
at 0: 62fd8ff9b0543aea352257db5b00bbb01d1bc0d2cc665e1f24cf5de0d16ebc7b vs 62fd8ff9b0543aea352257db5b00bbb01d1bc0d2cc665e1f24cf5de0d16ebc7b
at 16540714: 08fd38153bbdc5d0c7079a245b09d37e2f8eb98e54e281980f0ca542bfbaee11 vs 08fd38153bbdc5d0c7079a245b09d37e2f8eb98e54e281980f0ca542bfbaee11
image

@superboyiii

Copy link
Copy Markdown
Member

Mainnet is OK. Data is compatible.

shargon added a commit to neo-project/neo that referenced this pull request Jun 4, 2026
* Remove ReferenceCounter from StackItem constructor

Fetch neo-project/neo-vm#576. RC V2 doesn't need
ReferenceCounter to be embedded into StackItem.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* Remove ReferenceCounter argument from IInteroperable.ToStackItem

RC V2 manages reference counting externally on every stack-related
operation, so there's no need in RC argument in
IInteroperable.ToStackItem.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* Remove ReferenceCounter argument from BinarySerializer.Deserialize

RC V2 manages references externally on every stack interaction, there's
no need to track RC during deserialization.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* SmartContract: fetch RC V2 updates to non-default JumpTable

Ensire all non-default JumpTable handlers properly interact with RC V2.
Based on neo-project/neo-vm#564.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* Remove referenceCounter parameter from Deserialize methods

* Update Neo.VM build

Fetch merged neo-project/neo-vm#576.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* Native: remove RC argument from JsonSerializer.Deserialize

It's unused anymore.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* SmartContract: revert dropping support for NotifyEventArgs.IInteroperable

Ref. #4550 (comment).

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* tests: remove unused code

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* SmartContract: make SETITEM RC fully compatible with default jumptable

Rrf. #4550 (comment).

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

---------

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Alvaro <amjarag@gmail.com>
shargon pushed a commit to neo-project/neo-node that referenced this pull request Jun 4, 2026
* plugins: fetch Tarjan removal updates

Fetch neo-project/neo#4550 and
neo-project/neo-vm#576.

plugins/Directory.Build.props and src/Neo.CLI/Neo.CLI.csproj should be
updated to fetch fresh Neo and Neo.VM builds.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

* *: fetch fresh Neo build

Fetch neo-project/neo#4550.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>

---------

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Co-authored-by: Alvaro <amjarag@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants