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

[Neo VM] adopt light gc from neogo #3581

Open
wants to merge 36 commits into
base: HF_Echidna
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
afa99ca
adopt light gc
Jim8y Nov 15, 2024
a6b3f69
format
Jim8y Nov 15, 2024
4874a6e
fix building issue in benchmark
Jim8y Nov 16, 2024
a8fd587
fix popitem
Jim8y Nov 16, 2024
4de3809
revert change
Jim8y Nov 17, 2024
d7cde61
revert to fix compatibillity
Jim8y Nov 17, 2024
e9061e5
Merge branch 'HF_Echidna' into rc-v2
Jim8y Nov 17, 2024
5d9d7c4
adopt new solution as using null rc, instead of making large scale ch…
Jim8y Nov 17, 2024
0ccd831
avoid change that is currently not necessary
Jim8y Nov 17, 2024
fc8df97
revert null default
Jim8y Nov 17, 2024
6acfc2c
revert null default
Jim8y Nov 17, 2024
2d6deab
revert null
Jim8y Nov 17, 2024
6200bdb
apply compound update and apply hardfork
Jim8y Nov 17, 2024
06fc016
fix stack
Jim8y Nov 17, 2024
4bb8043
fix applicationengine rc version issue
Jim8y Nov 17, 2024
e735b5e
update ut to adopt RCV2
Jim8y Nov 17, 2024
24efc8b
fix UT
Jim8y Nov 17, 2024
aa58fc9
update UT and bench, and apply hecate suggestion
Jim8y Nov 18, 2024
067d3bc
Merge branch 'HF_Echidna' into rc-v2
Jim8y Nov 18, 2024
83c3d2f
update exception message
Jim8y Nov 18, 2024
c2582e2
Update src/Neo.VM/Types/CompoundType.cs
shargon Nov 20, 2024
5d8921c
define and use isRC2
Jim8y Nov 21, 2024
0cb2432
Merge branch 'rc-v2' of github.com:Jim8y/neo into rc-v2
Jim8y Nov 21, 2024
1da5aa7
Avoid replace benchmarks
shargon Nov 21, 2024
ae56086
Clean interface
shargon Nov 21, 2024
ce7aa88
Clean array
shargon Nov 21, 2024
0c16261
Solve HF problem
shargon Nov 21, 2024
c9833da
Fix compile
shargon Nov 21, 2024
07e8a40
Clean code
shargon Nov 21, 2024
c8346d0
Reduce changes
shargon Nov 21, 2024
c625280
Reduce changes in ExecutionEngine and use the same order
shargon Nov 21, 2024
d2960fa
Fix bug and optimize
shargon Nov 21, 2024
a3901cb
Fix comment
shargon Nov 21, 2024
4a65dfd
Update src/Neo.VM/JumpTable/JumpTable.Compound.cs
shargon Nov 21, 2024
8e77783
Avoid exceptions if old method is called
shargon Nov 21, 2024
92b2873
Move logic to CheckPostExecution
shargon Nov 21, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 43 additions & 2 deletions benchmarks/Neo.VM.Benchmarks/Benchmarks.POC.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
// modifications are permitted.

using BenchmarkDotNet.Attributes;
using Neo.VM.Benchmark.OpCode;
using System.Diagnostics;

namespace Neo.VM.Benchmark
Expand Down Expand Up @@ -387,11 +388,51 @@ public void PoC_GetScriptContainer()
private static void Run(string poc)
{
byte[] script = Convert.FromBase64String(poc);
using ExecutionEngine engine = new();
using BenchmarkEngine engine = new();
engine.LoadScript(script);
engine.Execute();
engine.ExecuteOneGASBenchmark();

Debug.Assert(engine.State == VMState.HALT);
}
}
}

//
// | Method | Mean | Error | StdDev |
// |----------------------- |----------------:|---------------:|---------------:|
// | NeoIssue2528 | 55,319.65 us | 1,105.171 us | 1,687.713 us |
// | NeoVMIssue418 | 347.21 us | 4.985 us | 4.663 us |
// | NeoIssue2723 | 71.05 us | 0.674 us | 0.630 us |
// | PoC_NewBuffer | 68.60 us | 0.691 us | 0.646 us |
// | PoC_Cat | 68.96 us | 0.831 us | 0.777 us |
// | PoC_Left | 65.76 us | 0.773 us | 0.723 us |
// | PoC_Right | 64.84 us | 0.679 us | 0.635 us |
// | PoC_ReverseN | 8,399,264.69 us | 152,328.560 us | 135,035.301 us |
// | PoC_Substr | 65.07 us | 1.122 us | 1.050 us |
// | PoC_NewArray | 2,903,663.37 us | 15,827.726 us | 14,805.265 us |
// | PoC_NewStruct | 3,027,978.35 us | 12,747.892 us | 11,300.674 us |
// | PoC_Roll | 1,274,207.78 us | 8,063.045 us | 7,542.177 us |
// | PoC_XDrop | 1,217,206.92 us | 22,759.560 us | 21,289.307 us |
// | PoC_MemCpy | 70.88 us | 1.407 us | 1.728 us |
// | PoC_Unpack | 384,346.69 us | 3,212.166 us | 2,847.502 us |
// | PoC_GetScriptContainer | 69.26 us | 0.620 us | 0.580 us |


// | Method | Mean | Error | StdDev |
// |----------------------- |----------------:|---------------:|---------------:|
// | NeoIssue2528 | 698,949.53 us | 13,657.042 us | 22,817.849 us |
// | NeoVMIssue418 | 589.21 us | 11.631 us | 17.409 us |
// | NeoIssue2723 | 70.68 us | 1.375 us | 1.739 us |
// | PoC_NewBuffer | 71.54 us | 1.350 us | 1.607 us |
// | PoC_Cat | 70.13 us | 1.387 us | 2.077 us |
// | PoC_Left | 69.71 us | 1.230 us | 1.151 us |
// | PoC_Right | 70.44 us | 1.358 us | 1.564 us |
// | PoC_ReverseN | 8,387,677.64 us | 157,776.848 us | 154,957.961 us |
// | PoC_Substr | 66.31 us | 0.834 us | 0.780 us |
// | PoC_NewArray | 4,081,067.00 us | 21,804.230 us | 20,395.690 us |
// | PoC_NewStruct | 4,073,281.73 us | 14,618.967 us | 13,674.591 us |
// | PoC_Roll | 1,226,264.36 us | 9,115.778 us | 8,952.913 us |
// | PoC_XDrop | 1,220,594.82 us | 12,695.011 us | 9,911.430 us |
// | PoC_MemCpy | 65.53 us | 0.737 us | 0.616 us |
// | PoC_Unpack | 392,349.50 us | 7,267.582 us | 7,463.272 us |
// | PoC_GetScriptContainer | 66.83 us | 0.622 us | 0.551 us |
1 change: 1 addition & 0 deletions benchmarks/Neo.VM.Benchmarks/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using Neo.VM.Benchmark;
using Neo.VM.Benchmark.OpCode;
using System.Reflection;

// Flag to determine if running benchmark or running methods
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// Benchmarks_Convert.cs file belongs to the neo project and is free
// Benchmarks_ConvertRCV1.cs file belongs to the neo project and is free
// software distributed under the MIT software license, see the
// accompanying file LICENSE in the main directory of the
// repository or http://www.opensource.org/licenses/mit-license.php
Expand All @@ -16,7 +16,7 @@

namespace Neo.VM.Benchmark
{
public class Benchmarks_Convert
public class Benchmarks_ConvertRCV1
{
private Dictionary<StackItemType, List<StackItem>>? testItemsByType;

Expand All @@ -26,6 +26,11 @@ public void Setup()
testItemsByType = CreateTestItemsByType();
}

public virtual IReferenceCounter CreateReferenceCounter()
{
return new ReferenceCounter();
}

[Benchmark]
[ArgumentsSource(nameof(GetTypeConversionPairs))]
public void BenchConvertTo(StackItemType fromType, StackItemType toType)
Expand Down Expand Up @@ -60,7 +65,7 @@ public IEnumerable<object[]> GetTypeConversionPairs()

private Dictionary<StackItemType, List<StackItem>> CreateTestItemsByType()
{
var referenceCounter = new ReferenceCounter();
var referenceCounter = CreateReferenceCounter();
var result = new Dictionary<StackItemType, List<StackItem>>();

foreach (StackItemType type in Enum.GetValues(typeof(StackItemType)))
Expand Down
131 changes: 131 additions & 0 deletions benchmarks/Neo.VM.Benchmarks/VMTypes/Benchmarks_ConvertRCV2.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// Benchmarks_ConvertRCV2.cs file belongs to the neo project and is free
// software distributed under the MIT software license, see the
// accompanying file LICENSE in the main directory of the
// repository or http://www.opensource.org/licenses/mit-license.php
// for more details.
//
// Redistribution and use in source and binary forms with or without
// modifications are permitted.

namespace Neo.VM.Benchmark
{
public class Benchmarks_ConvertRCV2 : Benchmarks_ConvertRCV1
{
public override IReferenceCounter CreateReferenceCounter()
{
return new ReferenceCounterV2();
}
}
}

// BenchmarkDotNet v0.13.12, Windows 11 (10.0.22631.4249/23H2/2023Update/SunValley3)
// Intel Core i9-14900HX, 1 CPU, 32 logical and 24 physical cores
// .NET SDK 8.0.205
// [Host] : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2
// DefaultJob : .NET 8.0.5 (8.0.524.21615), X64 RyuJIT AVX2
//
//
// | Method | fromType | toType | Mean | Error | StdDev |
// |--------------- |----------------- |----------------- |-------------:|------------:|------------:|
// | BenchConvertTo | Any | Any | 1.762 ns | 0.0195 ns | 0.0182 ns |
// | BenchConvertTo | Any | Pointer | 1.791 ns | 0.0196 ns | 0.0183 ns |
// | BenchConvertTo | Any | Boolean | 1.774 ns | 0.0245 ns | 0.0229 ns |
// | BenchConvertTo | Any | Integer | 1.781 ns | 0.0236 ns | 0.0220 ns |
// | BenchConvertTo | Any | ByteString | 1.767 ns | 0.0255 ns | 0.0226 ns |
// | BenchConvertTo | Any | Buffer | 1.774 ns | 0.0217 ns | 0.0203 ns |
// | BenchConvertTo | Any | Array | 1.770 ns | 0.0412 ns | 0.0385 ns |
// | BenchConvertTo | Any | Struct | 1.787 ns | 0.0227 ns | 0.0212 ns |
// | BenchConvertTo | Any | Map | 1.796 ns | 0.0292 ns | 0.0273 ns |
// | BenchConvertTo | Any | InteropInterface | 1.820 ns | 0.0549 ns | 0.0675 ns |
// | BenchConvertTo | Pointer | Any | 2.312 ns | 0.0210 ns | 0.0175 ns |
// | BenchConvertTo | Pointer | Pointer | 2.337 ns | 0.0157 ns | 0.0146 ns |
// | BenchConvertTo | Pointer | Boolean | 2.352 ns | 0.0190 ns | 0.0169 ns |
// | BenchConvertTo | Pointer | Integer | 2.334 ns | 0.0231 ns | 0.0216 ns |
// | BenchConvertTo | Pointer | ByteString | 2.317 ns | 0.0298 ns | 0.0279 ns |
// | BenchConvertTo | Pointer | Buffer | 2.329 ns | 0.0274 ns | 0.0256 ns |
// | BenchConvertTo | Pointer | Array | 2.338 ns | 0.0257 ns | 0.0241 ns |
// | BenchConvertTo | Pointer | Struct | 2.336 ns | 0.0318 ns | 0.0298 ns |
// | BenchConvertTo | Pointer | Map | 2.351 ns | 0.0676 ns | 0.0903 ns |
// | BenchConvertTo | Pointer | InteropInterface | 2.281 ns | 0.0133 ns | 0.0125 ns |
// | BenchConvertTo | Boolean | Any | 5,926.451 ns | 118.1195 ns | 136.0266 ns |
// | BenchConvertTo | Boolean | Pointer | 6,001.282 ns | 15.3048 ns | 12.7802 ns |
// | BenchConvertTo | Boolean | Boolean | 4.459 ns | 0.0151 ns | 0.0133 ns |
// | BenchConvertTo | Boolean | Integer | 14.104 ns | 0.1526 ns | 0.1428 ns |
// | BenchConvertTo | Boolean | ByteString | 11.650 ns | 0.0539 ns | 0.0450 ns |
// | BenchConvertTo | Boolean | Buffer | 26.106 ns | 0.1549 ns | 0.1449 ns |
// | BenchConvertTo | Boolean | Array | 5,813.116 ns | 28.1911 ns | 26.3700 ns |
// | BenchConvertTo | Boolean | Struct | 5,809.844 ns | 19.1249 ns | 15.9702 ns |
// | BenchConvertTo | Boolean | Map | 6,061.558 ns | 29.3991 ns | 27.4999 ns |
// | BenchConvertTo | Boolean | InteropInterface | 5,924.682 ns | 80.5533 ns | 75.3496 ns |
// | BenchConvertTo | Integer | Any | 5,240.903 ns | 41.0628 ns | 38.4102 ns |
// | BenchConvertTo | Integer | Pointer | 5,479.116 ns | 75.8232 ns | 70.9251 ns |
// | BenchConvertTo | Integer | Boolean | 5.981 ns | 0.0445 ns | 0.0416 ns |
// | BenchConvertTo | Integer | Integer | 4.277 ns | 0.0177 ns | 0.0166 ns |
// | BenchConvertTo | Integer | ByteString | 19.053 ns | 0.2125 ns | 0.1883 ns |
// | BenchConvertTo | Integer | Buffer | 32.782 ns | 0.1653 ns | 0.1380 ns |
// | BenchConvertTo | Integer | Array | 4,693.207 ns | 14.2446 ns | 12.6275 ns |
// | BenchConvertTo | Integer | Struct | 4,737.341 ns | 60.1813 ns | 56.2936 ns |
// | BenchConvertTo | Integer | Map | 4,808.431 ns | 23.5380 ns | 22.0174 ns |
// | BenchConvertTo | Integer | InteropInterface | 4,684.409 ns | 24.7033 ns | 21.8989 ns |
// | BenchConvertTo | ByteString | Any | 5,833.857 ns | 20.1553 ns | 18.8533 ns |
// | BenchConvertTo | ByteString | Pointer | 5,807.973 ns | 11.7754 ns | 10.4386 ns |
// | BenchConvertTo | ByteString | Boolean | 33.007 ns | 0.1574 ns | 0.1472 ns |
// | BenchConvertTo | ByteString | Integer | 23.622 ns | 0.0755 ns | 0.0669 ns |
// | BenchConvertTo | ByteString | ByteString | 4.288 ns | 0.0152 ns | 0.0142 ns |
// | BenchConvertTo | ByteString | Buffer | 24.881 ns | 0.0889 ns | 0.0788 ns |
// | BenchConvertTo | ByteString | Array | 6,030.813 ns | 19.9562 ns | 18.6670 ns |
// | BenchConvertTo | ByteString | Struct | 5,811.185 ns | 24.0781 ns | 22.5226 ns |
// | BenchConvertTo | ByteString | Map | 5,866.820 ns | 17.0315 ns | 15.0980 ns |
// | BenchConvertTo | ByteString | InteropInterface | 5,757.124 ns | 16.3184 ns | 14.4658 ns |
// | BenchConvertTo | Buffer | Any | 4,886.279 ns | 17.1370 ns | 14.3102 ns |
// | BenchConvertTo | Buffer | Pointer | 4,698.364 ns | 14.5491 ns | 12.1492 ns |
// | BenchConvertTo | Buffer | Boolean | 6.130 ns | 0.0323 ns | 0.0302 ns |
// | BenchConvertTo | Buffer | Integer | 4,645.764 ns | 15.8146 ns | 14.7930 ns |
// | BenchConvertTo | Buffer | ByteString | 29.874 ns | 0.1518 ns | 0.1268 ns |
// | BenchConvertTo | Buffer | Buffer | 4.939 ns | 0.0190 ns | 0.0178 ns |
// | BenchConvertTo | Buffer | Array | 4,683.427 ns | 21.3813 ns | 20.0001 ns |
// | BenchConvertTo | Buffer | Struct | 4,680.762 ns | 15.7220 ns | 13.9371 ns |
// | BenchConvertTo | Buffer | Map | 4,706.510 ns | 14.2061 ns | 12.5934 ns |
// | BenchConvertTo | Buffer | InteropInterface | 4,703.050 ns | 15.8002 ns | 14.0064 ns |
// | BenchConvertTo | Array | Any | 4,652.710 ns | 23.2061 ns | 20.5716 ns |
// | BenchConvertTo | Array | Pointer | 4,625.049 ns | 12.4455 ns | 11.6415 ns |
// | BenchConvertTo | Array | Boolean | 5.568 ns | 0.0181 ns | 0.0169 ns |
// | BenchConvertTo | Array | Integer | 4,659.897 ns | 19.8036 ns | 18.5243 ns |
// | BenchConvertTo | Array | ByteString | 4,663.020 ns | 12.4988 ns | 11.6914 ns |
// | BenchConvertTo | Array | Buffer | 4,680.281 ns | 14.9748 ns | 13.2748 ns |
// | BenchConvertTo | Array | Array | 4.246 ns | 0.0124 ns | 0.0110 ns |
// | BenchConvertTo | Array | Struct | 1,193.106 ns | 98.5374 ns | 285.8748 ns |
// | BenchConvertTo | Array | Map | 4,742.631 ns | 35.5855 ns | 33.2867 ns |
// | BenchConvertTo | Array | InteropInterface | 4,670.743 ns | 9.3547 ns | 7.8116 ns |
// | BenchConvertTo | Struct | Any | 4,643.558 ns | 31.0451 ns | 29.0396 ns |
// | BenchConvertTo | Struct | Pointer | 4,867.925 ns | 22.2347 ns | 19.7105 ns |
// | BenchConvertTo | Struct | Boolean | 5.581 ns | 0.0251 ns | 0.0235 ns |
// | BenchConvertTo | Struct | Integer | 4,653.442 ns | 17.7417 ns | 16.5956 ns |
// | BenchConvertTo | Struct | ByteString | 4,646.242 ns | 13.7830 ns | 12.8926 ns |
// | BenchConvertTo | Struct | Buffer | 4,776.205 ns | 14.1918 ns | 13.2751 ns |
// | BenchConvertTo | Struct | Array | 1,622.573 ns | 144.8116 ns | 398.8532 ns |
// | BenchConvertTo | Struct | Struct | 4.195 ns | 0.0327 ns | 0.0290 ns |
// | BenchConvertTo | Struct | Map | 4,672.579 ns | 17.6257 ns | 16.4871 ns |
// | BenchConvertTo | Struct | InteropInterface | 4,653.476 ns | 8.2047 ns | 7.6747 ns |
// | BenchConvertTo | Map | Any | 4,676.540 ns | 15.2010 ns | 13.4753 ns |
// | BenchConvertTo | Map | Pointer | 4,663.489 ns | 13.7871 ns | 12.2219 ns |
// | BenchConvertTo | Map | Boolean | 5.535 ns | 0.0205 ns | 0.0192 ns |
// | BenchConvertTo | Map | Integer | 4,661.275 ns | 12.4402 ns | 11.6366 ns |
// | BenchConvertTo | Map | ByteString | 4,662.482 ns | 25.7111 ns | 24.0502 ns |
// | BenchConvertTo | Map | Buffer | 4,859.809 ns | 18.2981 ns | 16.2208 ns |
// | BenchConvertTo | Map | Array | 4,627.149 ns | 10.7487 ns | 9.5285 ns |
// | BenchConvertTo | Map | Struct | 4,646.504 ns | 22.4190 ns | 20.9707 ns |
// | BenchConvertTo | Map | Map | 4.160 ns | 0.0180 ns | 0.0169 ns |
// | BenchConvertTo | Map | InteropInterface | 4,667.024 ns | 14.1790 ns | 13.2630 ns |
// | BenchConvertTo | InteropInterface | Any | 4,700.511 ns | 17.4725 ns | 15.4889 ns |
// | BenchConvertTo | InteropInterface | Pointer | 4,705.819 ns | 25.2035 ns | 23.5754 ns |
// | BenchConvertTo | InteropInterface | Boolean | 5.557 ns | 0.0244 ns | 0.0228 ns |
// | BenchConvertTo | InteropInterface | Integer | 4,695.410 ns | 21.8674 ns | 20.4547 ns |
// | BenchConvertTo | InteropInterface | ByteString | 4,674.552 ns | 18.8705 ns | 17.6515 ns |
// | BenchConvertTo | InteropInterface | Buffer | 4,649.237 ns | 23.9084 ns | 22.3639 ns |
// | BenchConvertTo | InteropInterface | Array | 4,827.652 ns | 29.7153 ns | 27.7957 ns |
// | BenchConvertTo | InteropInterface | Struct | 4,624.202 ns | 10.3563 ns | 8.0855 ns |
// | BenchConvertTo | InteropInterface | Map | 4,695.310 ns | 23.1192 ns | 21.6257 ns |
// | BenchConvertTo | InteropInterface | InteropInterface | 4.137 ns | 0.0156 ns | 0.0138 ns |
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// Benchmarks_DeepCopy.cs file belongs to the neo project and is free
// Benchmarks_DeepCopyRCV1.cs file belongs to the neo project and is free
// software distributed under the MIT software license, see the
// accompanying file LICENSE in the main directory of the
// repository or http://www.opensource.org/licenses/mit-license.php
Expand All @@ -14,8 +14,13 @@

namespace Neo.VM.Benchmark
{
public class Benchmarks_DeepCopy
public class Benchmarks_DeepCopyRCV1
{
public virtual IReferenceCounter CreateReferenceCounter()
{
return new ReferenceCounter();
}

public IEnumerable<(int Depth, int ElementsPerLevel)> ParamSource()
{
int[] depths = [2, 4];
Expand All @@ -39,15 +44,15 @@ public class Benchmarks_DeepCopy
[Benchmark]
public void BenchNestedArrayDeepCopy()
{
var root = new Array(new ReferenceCounter());
var root = new Array(CreateReferenceCounter());
CreateNestedArray(root, Params.Depth, Params.ElementsPerLevel);
_ = root.DeepCopy();
}

[Benchmark]
public void BenchNestedArrayDeepCopyWithReferenceCounter()
{
var referenceCounter = new ReferenceCounter();
var referenceCounter = CreateReferenceCounter();
var root = new Array(referenceCounter);
CreateNestedArray(root, Params.Depth, Params.ElementsPerLevel, referenceCounter);
_ = root.DeepCopy();
Expand All @@ -56,15 +61,15 @@ public void BenchNestedArrayDeepCopyWithReferenceCounter()
[Benchmark]
public void BenchNestedTestArrayDeepCopy()
{
var root = new TestArray(new ReferenceCounter());
var root = new TestArray(CreateReferenceCounter());
CreateNestedTestArray(root, Params.Depth, Params.ElementsPerLevel);
_ = root.DeepCopy();
}

[Benchmark]
public void BenchNestedTestArrayDeepCopyWithReferenceCounter()
{
var referenceCounter = new ReferenceCounter();
var referenceCounter = CreateReferenceCounter();
var root = new TestArray(referenceCounter);
CreateNestedTestArray(root, Params.Depth, Params.ElementsPerLevel, referenceCounter);
_ = root.DeepCopy();
Expand Down
21 changes: 21 additions & 0 deletions benchmarks/Neo.VM.Benchmarks/VMTypes/Benchmarks_DeepCopyRCV2.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// Benchmarks_DeepCopyRCV2.cs file belongs to the neo project and is free
// software distributed under the MIT software license, see the
// accompanying file LICENSE in the main directory of the
// repository or http://www.opensource.org/licenses/mit-license.php
// for more details.
//
// Redistribution and use in source and binary forms with or without
// modifications are permitted.

namespace Neo.VM.Benchmark
{
public class Benchmarks_DeepCopyRCV2 : Benchmarks_DeepCopyRCV1
{
public override IReferenceCounter CreateReferenceCounter()
{
return new ReferenceCounterV2();
}
}
}
Loading
Loading