Skip to content
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

[fixes] UInt160 Class #3422

Merged
merged 24 commits into from
Aug 29, 2024
Merged

Conversation

cschuchardt88
Copy link
Member

@cschuchardt88 cschuchardt88 commented Jul 18, 2024

Change Log

  • Fixed GetHashCode method
  • Added implicit string to UInt160
  • Added implicit byte[] to UInt160
  • Fixed accuracy for TryParse methods test cases
  • Added more test cases for new features

Type of change

  • Optimization (the change is only an optimization)
  • Style (the change is only a code style for better maintenance or standard purpose)
  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

Unit Tests Locally

Checklist:

  • My code follows the style guidelines of this project
  • I have performed a self-review of my code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules

Jim8y
Jim8y previously approved these changes Jul 19, 2024
Copy link
Member

@shargon shargon left a comment

Choose a reason for hiding this comment

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

In general I think that this PR is slower than the previous version, and it doesn't fix nothing.

src/Neo/UInt160.cs Outdated Show resolved Hide resolved
@cschuchardt88
Copy link
Member Author

In general I think that this PR is slower than the previous version, and it doesn't fix nothing.

What makes you think this?

Using Unsafe.As is same in method BinaryPrimitives.ReadInt32LittleEndian as well, the different is now it can run on BigEndian machines.

Plus I

  • Added implicit string to UInt160
  • Added implicit byte[] to UInt160

So you can do UInt160.Zero == "0x0000000000000000000000000000000000000000" or UInt160 hash = "0xff00000000000000000000000000000000000001" or UInt160 hash = new byte[20];

Fixed collision with GetHashCode which is a bug.

Just read 1st post

@Jim8y
Copy link
Contributor

Jim8y commented Jul 23, 2024

I will do a benchmark for you chris, wait me for one day.

@Jim8y
Copy link
Contributor

Jim8y commented Aug 1, 2024

  1. Generator1:

    Method Mean Error StdDev
    TestOldUInt160Gernerator1 0.0020 ns 0.0006 ns 0.0005 ns
    TestGernerator1 0.0000 ns 0.0000 ns 0.0000 ns
  2. Generator2:

    Method Mean Error StdDev
    TestOldUInt160Gernerator2 6.9133 ns 0.0236 ns 0.0185 ns
    TestGernerator2 12.2943 ns 0.0358 ns 0.0318 ns
  3. CompareTo:

    Method Mean Error StdDev
    TestOldUInt160CompareTo 13.1190 ns 0.0148 ns 0.0124 ns
    TestCompareTo 16.0586 ns 0.0244 ns 0.0204 ns
  4. Equals:

    Method Mean Error StdDev
    TestOldUInt160Equals 6.9993 ns 0.0133 ns 0.0125 ns
    TestEquals 14.4972 ns 0.0230 ns 0.0192 ns
  5. Parse:

    Method Mean Error StdDev
    TestOldUInt160Parse 379.4385 ns 0.5059 ns 0.4225 ns
    TestParse 627.1156 ns 9.2775 ns 8.2242 ns
  6. TryParse:

    Method Mean Error StdDev
    TestOldUInt160TryParse 421.7860 ns 2.1910 ns 1.9423 ns
    TestTryParse 17062.1403 ns 59.4341 ns 49.6302 ns
  7. OperatorLarger:

    Method Mean Error StdDev
    TestOldUInt160OperatorLarger 1.4663 ns 0.0034 ns 0.0028 ns
    TestOperatorLarger 1.4726 ns 0.0046 ns 0.0041 ns
  8. OperatorLargerAndEqual:

    Method Mean Error StdDev
    TestOldUInt160OperatorLargerAndEqual 1.4642 ns 0.0009 ns 0.0008 ns
    TestOperatorLargerAndEqual 1.4887 ns 0.0199 ns 0.0176 ns
  9. OperatorSmaller:

    Method Mean Error StdDev
    TestOldUInt160OperatorSmaller 1.4639 ns 0.0017 ns 0.0014 ns
    TestOperatorSmaller 1.4830 ns 0.0185 ns 0.0164 ns
  10. OperatorSmallerAndEqual:

    Method Mean Error StdDev
    TestOldUInt160OperatorSmallerAndEqual 1.4653 ns 0.0032 ns 0.0025 ns
    TestOperatorSmallerAndEqual 1.4748 ns 0.0160 ns 0.0150 ns

@Jim8y
Copy link
Contributor

Jim8y commented Aug 1, 2024

@cschuchardt88 @shargon please check the benchmark, some methods become way slower than before.

Copy link
Member

@shargon shargon left a comment

Choose a reason for hiding this comment

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

I think that this pr should not be merged because it was not proved that is faster

@cschuchardt88
Copy link
Member Author

GetHashCode still needs to be fixed. Its so small the difference whos going to see the difference. Plus we don't know what he testing here. CPU, Memory or etc.

@cschuchardt88
Copy link
Member Author

cschuchardt88 commented Aug 1, 2024

@shargon @Jim8y
I changed anything back but see below.

As you can see everything is the same but TryParse Parse and GetHashCode.

Tests are not accurate

BenchmarkDotNet v0.13.12

  • Windows 11 (10.0.22631.3958/23H2/2023Update/SunValley3)
  • Intel Core i7-8700K CPU 3.70GHz (Coffee Lake), 1 CPU, 12 logical and 6 physical cores

.NET SDK 8.0.303

  • [Host] : .NET 8.0.7 (8.0.724.31311), X64 RyuJIT AVX2
  • DefaultJob : .NET 8.0.7 (8.0.724.31311), X64 RyuJIT AVX2
Method Mean Error StdDev Median
TestOldUInt160Gernerator1 0.0000 ns 0.0000 ns 0.0000 ns 0.0000 ns
TestGernerator1 0.0008 ns 0.0019 ns 0.0017 ns 0.0000 ns
TestOldUInt160Gernerator2 8.3340 ns 0.0470 ns 0.0439 ns 8.3340 ns
TestGernerator2 8.4243 ns 0.0423 ns 0.0396 ns 8.4151 ns
TestOldUInt160CompareTo 5.2123 ns 0.0784 ns 0.0733 ns 5.1946 ns
TestCompareTo 5.1717 ns 0.0329 ns 0.0308 ns 5.1673 ns
TestOldUInt160Equals 0.0002 ns 0.0011 ns 0.0009 ns 0.0000 ns
TestEquals 2.0883 ns 0.0101 ns 0.0094 ns 2.0849 ns
TestOldUInt160Parse 473.5925 ns 2.1056 ns 1.9696 ns 473.6506 ns
TestParse 307.7447 ns 1.0599 ns 0.8850 ns 307.9052 ns
TestOldUInt160TryParse 497.2763 ns 3.7228 ns 3.3002 ns 496.1108 ns
TestTryParse 348.7883 ns 1.8946 ns 1.7723 ns 348.6179 ns
TestOldUInt160OperatorLarger 1.1933 ns 0.0152 ns 0.0127 ns 1.1879 ns
TestOperatorLarger 1.1194 ns 0.0081 ns 0.0068 ns 1.1185 ns
TestOldUInt160OperatorLargerAndEqual 1.1216 ns 0.0113 ns 0.0100 ns 1.1191 ns
TestOperatorLargerAndEqual 1.1198 ns 0.0111 ns 0.0098 ns 1.1172 ns
TestOldUInt160OperatorSmaller 1.1200 ns 0.0094 ns 0.0083 ns 1.1220 ns
TestOperatorSmaller 1.1204 ns 0.0108 ns 0.0101 ns 1.1175 ns
TestOldUInt160OperatorSmallerAndEqual 1.1245 ns 0.0065 ns 0.0061 ns 1.1249 ns
TestOperatorSmallerAndEqual 1.1204 ns 0.0080 ns 0.0071 ns 1.1209 ns

@cschuchardt88 cschuchardt88 changed the title [fix/expand] UInt160 Class [fixes] UInt160 Class Aug 1, 2024
@cschuchardt88 cschuchardt88 added Feature Type: Large changes or new features and removed Optimization Optmization issues labels Aug 1, 2024
@cschuchardt88 cschuchardt88 requested review from shargon and Jim8y August 1, 2024 21:22
src/Neo/UInt160.cs Show resolved Hide resolved
src/Neo/UInt160.cs Show resolved Hide resolved
src/Neo/UInt160.cs Outdated Show resolved Hide resolved
@cschuchardt88
Copy link
Member Author

cschuchardt88 commented Aug 2, 2024

@Jim8y @shargon @vncoelho @roman-khimov
For hex is should start with 0x not 0X. Should we continue to allow 0X prefix for Parse and TryParse methods? Or will this mess up neogo and contracts along with dev-pack?

@roman-khimov
Copy link
Contributor

I've never seen 0X being used and some of NeoGo code expects only 0x, but at the same time if it was allowed previously then we better just make it compatible and forget about it.

@cschuchardt88 cschuchardt88 requested a review from shargon August 5, 2024 20:03
@cschuchardt88
Copy link
Member Author

@shargon check to see if all your changes have been made.

@Jim8y
Copy link
Contributor

Jim8y commented Aug 12, 2024

What we say about this pr, are we going to merge this one? i run the bechmark again, the performance is still slower for some methods.

@cschuchardt88
Copy link
Member Author

cschuchardt88 commented Aug 23, 2024

What we say about this pr, are we going to merge this one? i run the bechmark again, the performance is still slower for some methods.

  1. A bug fix with GetHashCode.
  2. Makes TryParse faster.
  3. Adds two features.
UInt160 bytes = new byte[20];
UInt160 strs = "0x1230000000000000000000000000000000000000";

@cschuchardt88 cschuchardt88 requested a review from shargon August 23, 2024 02:12
@shargon
Copy link
Member

shargon commented Aug 23, 2024

If the performance is not lower, I'm good with the code

@cschuchardt88
Copy link
Member Author

@Jim8y

@shargon shargon merged commit 5fe5462 into neo-project:master Aug 29, 2024
7 checks passed
Jim8y added a commit that referenced this pull request Oct 26, 2024
* Remove comments in `nuget.yml` (#3359)

* Fixed Typo in `nuget.yml`

* reverted for path

* Fix: `MemPool` null checks (#3367)

* Fix null error

* Add [MaybeNullWhen(false)]

* Update MemoryPool.cs

* plugins: remove expressions that are always true (#3393)

* this expression is always true

* Improve

---------

Co-authored-by: Shargon <shargon@gmail.com>

* [**Part-1] Add `github` Release Workflow (#3308)

* Added `release.yml`

* Fixed `release.yml`

* Remove `VersionPrefix`

* Added macos leveldb

* Fixed

* Remove comments on the command-line

* Fixed `CodeSign` `neo-cli`

* Added steps for `codesign` in `release.yml`

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* cli: Fix `plugins` command (#3394)

* Fix plugin list

* Update src/Neo.CLI/CLI/MainService.Plugins.cs

---------

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Added blame logging for `dotnet test` (#3384)

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Shargon <shargon@gmail.com>

* Fix download tips (#3395)

* Added `release.yml`

* Fixed `release.yml`

* Remove `VersionPrefix`

* Added macos leveldb

* Fixed

* Remove comments on the command-line

* Fixed `CodeSign` `neo-cli`

* Added steps for `codesign` in `release.yml`

* Add downloading plugin tips

* Change to ConsoleHelper

* Move before first download

---------

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Shargon <shargon@gmail.com>

* `DeprecatedIn` for events (#3362)

* DeprecatedIn for events

* Added UT

* Remove using

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Fix crash when comparing ContractPermissionDescriptor (#3396)

* Update ContractPermissionDescriptor.cs

* Add UT

---------

Co-authored-by: Fernando Diaz Toledano <shargon@gmail.com>
Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* `[neo-cli]` Error Message and Warning - LevelDb (#3380)

* Fixed warnings and error message for `libleveldb` missing

* Update src/Neo.CLI/CLI/MainService.cs

Co-authored-by: lingyido <lingyido@gmail.com>

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: lingyido <lingyido@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Fixed Props Pathing for `dotnet pack` with `nuget` (#3379)

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Part-1 `Neo.IO` - move (#3387)

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* `[Fix]` Test Problems (#3398)

* Fix Test crashes

* disable Build servers

* Fixed Building problem with tests

* Fixed command line

* Removed disable build servers

---------

Co-authored-by: Shargon <shargon@gmail.com>

* `[Typo]` Unit Tests - UT_ProtocolSettings.CreateHKSettings (#3383)

* Typeo with `CreateHKSettings`

* fix ut

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Bump System.Text.Json from 8.0.3 to 8.0.4 in /src/Neo.Json (#3416)

Bumps System.Text.Json from 8.0.3 to 8.0.4.

---
updated-dependencies:
- dependency-name: System.Text.Json
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* [Neo Plugin Store] Unit test (#3399)

* test

* fix snapshot issue and add tests

* fix test

* apply old snapshot

* remove duplicate

* Remove method

---------

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Shargon <shargon@gmail.com>

* `[Add]` Debug Output to `Expect` (#3407)

* Added Debug to Expect

* Update file paths

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Improve code coverage (#3354)

* update

* remove binary file

* Add UT and fixed bug

* Add UT and fixed bug

* Add UT

* Add UT

* Add UT

* Update src/Neo/SmartContract/Manifest/ContractManifest.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* Update src/Neo/SmartContract/Manifest/ContractManifest.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* Update src/Neo/SmartContract/Manifest/ContractManifest.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* Update Base58.cs

* Update UT_Cryptography_Helper.cs

* Update Base58.cs

* update

* Update ContractManifest.cs

* Revert change that affect a syscall

* Revert try

* Remove using

* Update src/Neo/SmartContract/Manifest/ContractManifest.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* Update src/Neo/SmartContract/Manifest/ContractAbi.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* Update src/Neo/SmartContract/Manifest/ContractManifest.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

---------

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Fernando Diaz Toledano <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [Neo Plugin UT] Rpcserver unit test on node (#3353)

* try mock

* not use mock

* test

* fix test

* use neo testutils

* complete rpcserver blockchain tests.

* revert change to ByteArrayComparer

* revert cache change

* add more detail to comments

* add more exception test cases

* fix warning

* Apply suggestions from code review

* update TODO mark

* add node rpc tests

* fix build error

* set the mempool to 5.

* remove memory pool test.

* fix tests

* fix test issue

* Update tests/Neo.UnitTests/TestUtils.Transaction.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Fix release compilation (#3417)

* Fix release

* typo

* Fixed Publish Step (#3411)

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [Neo Core MemoryStore] MemoryStore Unit Tests. (#3404)

* test

* fix snapshot issue and add tests

* fix test

* apply old snapshot

* memory snapshot tests

* memory test

* add more tests

* make it more clear

* revert storetest

---------

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Core Storage] Implicit methods and tests (#3403)

* implicit methods and tests

* udpate

---------

Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Core Store] Rename various snapshots. (#3406)

* rename snapshot

* Remove warning

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* `[Move]` Part-2 Classes into Different Library - `Neo.IO` (#3388)

* Part-1 `Neo.IO` - move

* Part-2

* Added `BigInteger` to `Neo.Extensions`

* Found more `BigInteger`

* Added Tests

* Update tests/Neo.Extensions.Tests/UT_BigIntegerExtensions.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* Revert "Plugin unhandled exception (#3349)" (#3366)

This reverts commit b2f060f.

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* fix obsolete warning (#3428)

* Neo.CLI: update MaxTraceableBlocks setting for NeoFS networks (#3424)

We don't need long tails for NeoFS networks, 3 days is enough for now.
It's checked that this change does not affect the network states.

Port nspcc-dev/neo-go#3518.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Upgrade `nuget` packages (#3421)

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [Neo Core Fix]use strong randomness (#3432)

* use strong randomness

* Update src/Plugins/DBFTPlugin/Consensus/ConsensusContext.MakePayload.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Fixed warning (#3430)

Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Core UT] Fix ut and style (#3413)

* fix ut and style

* clean

* update test

* Update tests/Neo.UnitTests/IO/Caching/UT_DataCache.cs

Co-authored-by: Hecate2 <hecate2@qq.com>

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Hecate2 <hecate2@qq.com>
Co-authored-by: Hecate2 <2474101468@qq.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [**Added**] Build `neo-cli` Docker Image (#3355)

* Added `devcontrainer` test for `neo-cli`

* Basic contrainer setup

* Updated version of `checkout` action job's step.

* Changed to `neo-cli`

* Update `dockerfile`

* Updated `PostCreateCommand`

* Changed to `bookworm-slim`

* Reverted to `Jammy`

* Added `sudo` command for `PostCreateCommand`

* Added permissions

* Removed `screen` command

* Added to `bin` and `PostCreateCommand`

* Changed `devcontainer` files

* Reverted builds

* Added `neo` repo to devcontainer

* Changed to docker-image for github registry

* Fixed Bugs in `docker` support for `neo-cli` image

* Added type `container`

* Revert `.devcontainer` folder

* format

* Changed workflow to `docker` for `pkgs-delete.yml` since we use `v4`

* Deleted `Dockerfile` from `src\Neo.CLI`

* Revert "Deleted `Dockerfile` from `src\Neo.CLI`"

This reverts commit b877de0.

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>

* [Neo Core Doc]create a docs folder and move existing doc to it. (#3435)

* create a docs folder and move existing doc to it.

* move neocli config md

* [**Part-1**] Added `ApplicationLogs` Unit Tests (#3346)

* Added ApplicationLogs Tests

* Fixed pathing and naming

* Merged `Part-2`

* Fixed Test for `Test_Put_Get_NotifyState_Storage`

---------

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* add unit tests for json (#2993)

* add unit tests for json

* fix ut

* add ut cases for JString.

* add  invalid jpath tests

* behavior of jboolean is kinda weird. i have:

Assert.AreEqual failed. Expected:<true>. Actual:<true>.

* fix test error

* add more test

---------

Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Core VM] complete opcode comments (#3437)

* complete opcode comments

* Apply suggestions from code review

* Update src/Neo.VM/OpCode.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Core] Obsolete applicationengine snapshot (#3436)

* Obsolete applicationengine snapshot

* fix UT names

* fix executioncontextstate

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [Neo Plugin RpcServer UT]Plugin rpcserver wallet UTs (#3433)

* wallet

* fix util

* add comments and fix ut

* Update tests/Neo.Plugins.RpcServer.Tests/UT_RpcServer.Wallet.cs

* remove comment

---------

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* `[Move]` Part-3 Classes into Different Library - `Neo.Extensions` (#3400)

* Part-1 `Neo.IO` - move

* Part-2

* Added `BigInteger` to `Neo.Extensions`

* Found more `BigInteger`

* Added `ByteArray` to `Neo.Extensions`

* Added Tests

* Added `tests` from `Part-2`

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* [`Optimization`] Parsing Smart Contract Script Analysis (#3420)

* Fixed Parsing Smart Contract Script Analysis

* Add more opcode outputs

* Bug fixes

* Move to ToString

* Reorder using

* Change ToString

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Vitor Nazário Coelho <vncoelho@gmail.com>
Co-authored-by: Fernando Diaz Toledano <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* update benchmark system (#3442)

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [rpc] Extend `getversion` RPC response with additional protocol settings (#3443)

* getversion

* Extend client

---------

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [Neo Core Add] add char support (#3441)

* add char support

* Update src/Neo/VM/Helper.cs

* add char unit test

---------

Co-authored-by: Shargon <shargon@gmail.com>

* Stopped `RecoveryLogs` store from being created when `IgnoreRecoveryLogs` is `true` (#3444)

Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Core Bug] fix compound type reference issue (#3334)

* fix compound type reference issue

* fix warning

* add benchmark

* throw exception instead

* Update benchmarks/Neo.VM.Benchmarks/Benchmarks.Types.cs

* Update src/Neo.VM/Types/Map.cs

* Apply suggestions from code review

* Update src/Neo.VM/Types/Map.cs

Co-authored-by: Shargon <shargon@gmail.com>

* update accessibality.

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Fix plugin exception (#3426)

* Revert "Revert "Plugin unhandled exception (#3349)" (#3366)"

This reverts commit f307a31.

* ensure leveldb is not used in multithread env

* Revert "Revert "Plugin unhandled exception (#3349)" (#3366)"

This reverts commit f307a31.

* remove async.

* Update src/Neo/Plugins/UnhandledExceptionPolicy.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* not use linq

* Update src/Neo/Plugins/UnhandledExceptionPolicy.cs

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* use ignore case

* Update src/Plugins/TokensTracker/TokensTracker.cs

* Update src/Neo/Plugins/Plugin.cs

Co-authored-by: Shargon <shargon@gmail.com>

---------

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [Neo Json Fix] Json null tests (#3450)

* null operation

* fix array

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>

* Update README.md (#3459)

* Update RpcServer.Blockchain.cs (#3458)

Co-authored-by: Jimmy <jinghui@wayne.edu>

* Set `Password` to `SecureString` for Wallet (#3468)

* Set `Password` to `SecureString` for Wallet information

* Added `UnitTest` for `SecureStringExtensions`

* Update tests/Neo.Extensions.Tests/UT_SecureStringExtensions.cs

Co-authored-by: Shargon <shargon@gmail.com>

* Update src/Neo.Extensions/SecureStringExtensions.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Plugin RPCServer] Rpc parameters. Part I (#3457)

* rpc parameter parse

* update blockchain related apis.

* Update src/Plugins/RpcServer/RpcMethodWithParamsAttribute.cs

* Delete src/Plugins/RpcServer/JsonPropertyNameAttribute.cs

* udpate contract model

* Update src/Plugins/RpcServer/Model/BlockHashOrIndex.cs

* Apply suggestions from code review

Remove comments

* Update src/Plugins/RpcServer/RpcServer.cs

* fix warnings

* ensure it can load both true/false and 1/0

* optimize the pr and add unit tests

* add more tests and check the safe max value and safe min value

* remove format

* remove unused

* format

* Apply suggestions from code review

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* test RpcServer.Utilities, .SmartContract and .Wallet (#3461)

* test RpcServer.Utilities

* test invoke function and script

* TestTraverseIterator

* TestGetUnclaimedGas

* RpcServerSettings.Default with { SessionEnabled = true }

* test call with storage changes and events

* use wallet in invokefunction

* use invalid wallet

* invoke without signer

* all cases for TraverseIterator

* traversing same session twice; not expired session

* cover OnTimer

* test deserializing complex signers

* use Assert.ThrowsException

* TestSendFrom and TestSendMany

* apply code review with `nameof`

* test cancel transaction

* TestInvokeContractVerify

* improve error message

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* `[Move]` Part-4 Classes into Different Library - `Neo.Extensions` (#3408)

* Part-1 `Neo.IO` - move

* Part-2

* Added `BigInteger` to `Neo.Extensions`

* Found more `BigInteger`

* Added `ByteArray` to `Neo.Extensions`

* Added `DateTime` Extensions to `Neo.Extensions`

* Added `HashSetExtensions`, `HashSetExtensions2`, `IpAddressExtensions`, `AssemblyExtensions`, `StringExtensdions`
Deleted `Helper.cs` file

* Added Tests

* Added `tests` from `Part-2`

* Added `tests` for `PART-4`

* Add `using Neo.Extensions` for unit tests

* Change `HashSetExtensions2` to `HashSetExtensions`

* Update tests/Neo.Extensions.Tests/UT_BigIntegerExtensions.cs

* Update and rename StringExtensdions.cs to StringExtensdios.cs

* Rename StringExtensdios.cs to StringExtensions.cs

* `dotnet format`

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Add UT Neo.IO (#3466)

* UT_KeyedCollectionSlim

* Update UT_KeyedCollectionSlim.cs

* Update UT_MemoryReader.cs

* Update UT_MemoryReader.cs

* improve error message when wrong wallet is opened (#3469)

* improve error message when wrong wallet is opened

* update tests

* Update UT RpcServer (#3460)

* Update UT_RpcServer.Blockchain.cs

* Update UT_RpcServer.Blockchain.cs

* update

* fixed bug

* format

* update

* Update NativeContractExtensions.cs

* update

* Remove conflicting files

* update

* format

* [`fixes`] UInt160 Class (#3422)

* Fixed `UInt160` and expanded class

* Cleaned up code for `TryParse`

* Fixed `TryParse`

* Fixed small bug with `TryParse`

* Change `UInt160.Zero` to `static readonly`

* benchmark UInt160

* Fix benchmark

* Fixed bugs and added features for `UInt160` class

* Revert and just keep bug fixes

* Made @shargon changes

* Set `InvariantCultureIgnoreCase` back for `0x` and `0X`

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Jimmy <jimmy@r3e.network>

* test GetApplicationLog (#3470)

* test GetApplicationLog

* filter execution type

* Test_Commands; refactor

* apply review suggestions

---------

Co-authored-by: Shargon <shargon@gmail.com>

* Add UT Neo.Extensions (#3467)

* Add UT Neo.Extensions

* resolve conflicts

* Revert "resolve conflicts"

This reverts commit 6d0a61b.

* add edge case

* update mod test

---------

Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Jimmy <jimmy@r3e.network>

* Add some UT (#3476)

* Update UT_Utility.cs

* TestGetContractState

* Update ConstantTimeUtility.cs (#3472)

- Fix typo

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* Test OracleService (#3475)

* trigger https oracle

* make it internal

* return Task.CompletedTask

---------

Co-authored-by: Jimmy <jimmy@r3e.network>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Shargon <shargon@gmail.com>

* [Neo Plugin RPC] update rpc node methods signatures to use explicit parameter types. (#3479)

* update rpc node methods signatures to use explicit parameter types.

* fix attribute place

---------

Co-authored-by: Christopher Schuchardt <cschuchardt88@gmail.com>
Co-authored-by: Shargon <shargon@gmail.com>

* Fixing errors in comments (#3483)

* Update OpCode.cs

* Update JumpTable.Compound.cs

* Update OpCode.cs

* parse nef file scripts (#3482)

* parse nef file scripts

* nef file path support

---------

Co-authored-by: Vitor Nazário Coelho <vncoelho@gmail.com>

* [Neo VM Style] Throw exception for Integer that is larger than 32 bytes (#3486)

* fix push integer

* Update src/Neo.VM/ScriptBuilder.cs

* Update tests/Neo.VM.Tests/UT_ScriptBuilder.cs

* Update tests/Neo.VM.Tests/UT_ScriptBuilder.cs

* Update RpcError.cs (#3498)

* fix: concurrency conflict in HeaderCache.Count (#3501)

* fix: concurrency conflict in HeaderCache.Count

* Update tests/Neo.UnitTests/Ledger/UT_HeaderCache.cs

* Update tests/Neo.UnitTests/Ledger/UT_HeaderCache.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>

* [`Add`] Transaction Builder (#3477)

* Added Builders with tests

* Added SignerBuilder and started WitnessRuleBuilder

* Added `WitnessConditionBuilder` with tests

* Added more logic

* Fixed `SignerBuilder` class

* Code touch ups

* Added more tests

* Update src/Neo/Builders/TransactionBuilder.cs

* Fixed `And` `Or` and `Not` conditions

* Fixed Memory leak

* Added error message for Witness scripts

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* [`Fix`] Neo Plugins github nuget (#3493)

* Fixed Delete packages for github

* Automatic

* added continue-on-error: true

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

* `[Move]` Part-5 Classes into Different Library - `Neo.Extensions` (#3409)

* Part-1 `Neo.IO` - move

* Part-2

* Added `BigInteger` to `Neo.Extensions`

* Found more `BigInteger`

* Added `ByteArray` to `Neo.Extensions`

* Added `DateTime` Extensions to `Neo.Extensions`

* Added `HashSetExtensions`, `HashSetExtensions2`, `IpAddressExtensions`, `AssemblyExtensions`, `StringExtensdions`
Deleted `Helper.cs` file

* Added `ICollection`, `Memory`,  `String`, `Unsafe` extensions

* Adding `using`

* dotnet format

* Added Tests

* Added `tests` from `Part-2`

* Added `tests` for `PART-4`

* Added `tests` for `PART-5`

* Made changes and fixes

* Fixes

* Apply suggestions from code review

* Update tests/Neo.Extensions.Tests/UT_StringExtensions.cs

* @shagron review changes

* formating

* Moved `UnsafeData` tests to `UT_UnsafeData`

* Formating

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* fix: always throw `DivideByZeroException ` when `BloomFilter` is empty (#3502)

* fix: always throw divided by zero when BloomFilter is empty

* fix: always throw divided by zero when BloomFilter is empty

* fix: concurrency conflict in MemPool.TryRemoveUnVerified (#3500)

* fix: concurrency conflict in MemPool.TryRemoveUnVerified

* Remove method

* Update src/Neo/Ledger/MemoryPool.cs

* clean

* Apply suggestions from code review

* reformat

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* update rvcount error message (#3504)

* Added `CreateStruct` & Fixed `CreateMap` (#3494)

* Added `CreateStruct`, Fixed CreateMap

* Added test and comments

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Shargon <shargon@gmail.com>

* benchmark convert (#3509)

* OpCodes: extend MODMUL tests with negative base/multiplier/mod (#3513)

Allows to avoid bugs like
nspcc-dev/neo-go#3598.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* fix: sensitive data compare should use constant time compare to avoid timing attack (#3508)

* fix: pass compare should use contant time compare to avoid timing attack

* fix: pass compare should use contant time compare to avoid timing attack

* Update src/Plugins/RpcServer/RpcServer.cs

* Update src/Plugins/RpcServer/RpcServer.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* Related to #3508 (comment) (#3516)

Co-authored-by: Jimmy <jinghui@wayne.edu>

* [Benchmark] this pr adds more pocs to benchmark (#3512)

* this pr adds more pocs to benchmark

* format

---------

Co-authored-by: Fernando Diaz Toledano <shargon@gmail.com>

* Bump System.Text.Json from 8.0.4 to 8.0.5 in /src/Neo.Json (#3519)

Bumps [System.Text.Json](https://github.com/dotnet/runtime) from 8.0.4 to 8.0.5.
- [Release notes](https://github.com/dotnet/runtime/releases)
- [Commits](dotnet/runtime@v8.0.4...v8.0.5)

---
updated-dependencies:
- dependency-name: System.Text.Json
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Shargon <shargon@gmail.com>

* Circular reference error info in ToJson (#3522)

Co-authored-by: Shargon <shargon@gmail.com>

* [Benchmark] Benchmark OpCode and VM (#3514)

* add opcode benchmark system

* add opcode benchmark system

* update to make the framework easier to work with.

* Clean code

* filescope namespace

* remove uncomplet benchmark

* add missing using

---------

Co-authored-by: Fernando Diaz Toledano <shargon@gmail.com>

* Move `ReferenceCounter` to an interface (#3524)

* Reference counter V2

* Remove warning

* Interface

* Change to interface

* Update

* Remove V2

* [Neo VM] optimize newstruct (#3525)

* optimize newstruct

* use Array.Fill

* Update src/Neo.VM/JumpTable/JumpTable.Compound.cs

---------

Co-authored-by: Shargon <shargon@gmail.com>

* fea: use canonical TryGet style in IReadOnlyStore (#3533)

* Add references (#3529)

Co-authored-by: Jimmy <jinghui@wayne.edu>

* fix: concurrency conflict in NEP6Wallet.ToJson (#3527)

* fix: concurrency conflict in NEP6Wallet.ToJson

* Update also ChangePasssword

* Reduce lock time

---------

Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>

* fix cref "OpCode.SUBSTR" in comment (#3542)

* ApplicationEngine helper to get engine error info (#3541)

* helper to get engine error info

* cancel try

* Update src/Neo/SmartContract/ApplicationEngine.Helper.cs

Co-authored-by: Shargon <shargon@gmail.com>

* standalone method to get exception stack trace and message

* always return string

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: Shargon <shargon@gmail.com>

* stack opcode example comments (#3546)

* stack opcode example comments

* move index into example

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>

* Expose `GetInteropDescriptor` (#3545)

* Expose GetInteropDescriptor

* Update src/Neo/SmartContract/ApplicationEngine.cs

---------

Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Co-authored-by: Shargon <shargon@gmail.com>
Co-authored-by: 陈志同 <bitcoin2077@outlook.com>
Co-authored-by: Jimmy <jinghui@wayne.edu>
Co-authored-by: NGD Admin <154295625+NGDAdmin@users.noreply.github.com>
Co-authored-by: Owen <38493437+superboyiii@users.noreply.github.com>
Co-authored-by: lingyido <lingyido@gmail.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Vitor Nazário Coelho <vncoelho@gmail.com>
Co-authored-by: Anna Shaleva <shaleva.ann@nspcc.ru>
Co-authored-by: Hecate2 <hecate2@qq.com>
Co-authored-by: Hecate2 <2474101468@qq.com>
Co-authored-by: Jimmy <jimmy@r3e.network>
Co-authored-by: Mirage Mouse <bk@sundialmirage.com>
Co-authored-by: nan01ab <yjcc201374@outlook.com>
@cschuchardt88 cschuchardt88 deleted the fix/uint160-class branch November 17, 2024 10:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature Type: Large changes or new features Waiting for Review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants