Skip to content

v3.10.2

Latest

Choose a tag to compare

@github-actions github-actions released this 04 Nov 08:51
· 11 commits to master-n3 since this release
bfb648f

What's Changed

What's Changed

  • fix Analyzer settings for v3.10.1 release by @superboyiii in #1927
  • Release phase 2: Update v3.10.1 internal dependency by @superboyiii in #1928
  • Fix: the result consumed by JMPIF by @Wi1l-B0t in #1929
  • Docs: link unsupported syntax diagnostics to guidance by @Jim8y in #1935
  • Fix: char.IsBetween returns wrong result if value > max by @Wi1l-B0t in #1930
  • Fix: ignore self references in contract dependency graphs by @Jim8y in #1933
  • Fix: preserve UTF-8 bytes during string casing by @Jim8y in #1932
  • Test: require Neo analyzer errors for Roslyn-supported probes by @Jim8y in #1931
  • Fix: encode runtime char values as UTF-8 strings by @Jim8y in #1934
  • Fix: string.EndsWith returns wrong result if value is empty by @Wi1l-B0t in #1936
  • Fix: no stackitem to throw in Math.Abs by @Wi1l-B0t in #1937
  • Fix: some wrong descriptions for OpCode by @Wi1l-B0t in #1939
  • Optimize: less opcodes and GAS for HandleBigIntegerPopCount by @Wi1l-B0t in #1940
  • Fix: no stackitem to throw in Math.BigMul by @Wi1l-B0t in #1938
  • Fix: validate all BigInteger constructor overloads by @Jim8y in #1945
  • Fix: diagnose floating-point casts and literals by @Jim8y in #1944
  • Test: bind unsupported syntax probes to diagnostic IDs by @Jim8y in #1943
  • Test: keep unsupported syntax summary synchronized by @Jim8y in #1941
  • Fix: diagnose qualified System.Linq usage by @Jim8y in #1942
  • Optimize: less opcodes and GAS if shift amount is a constant value by @Wi1l-B0t in #1949
  • Fix: the stack not clear before THROW in the checked left shift by @Wi1l-B0t in #1948
  • Optimize: less opcodes and GAS for integer.log2 by @Wi1l-B0t in #1950
  • Fix: the stack not clear before THROW in the CheckDivideOverflow by @Wi1l-B0t in #1951
  • Optimize - replace CONVERT with NZ for bool ^ bool expressions by @ajara87 in #1953
  • Optimize: less opcodes and GAS for integer popcount by @Wi1l-B0t in #1952
  • Optimize: less opcodes and GAS for Int.IsPow2 by @Wi1l-B0t in #1956
  • Fix: add exception message for Char.Parse by @Wi1l-B0t in #1955
  • Optimize: less opcodes and GAS for string methods by @Wi1l-B0t in #1957
  • Optimize: less opcodes and GAS for TryParseWithOut methods by @Wi1l-B0t in #1958
  • Optimize: replace EQUAL+JMPIF with JMPEQ in EmitSwitch case dispatch by @ajara87 in #1954
  • Optimize: less opcodes and GAS for string.IsNullOrWhiteSpace by @Wi1l-B0t in #1959
  • Optimize: less opcodes and GAS for Math.BigMul by @Wi1l-B0t in #1947
  • Optimize: less opcodes and GAS for converting BigInteger to small signed integer by @Wi1l-B0t in #1946
  • Optimize: less opcodes for Enum.Parse & Enum.IsDefined by @Wi1l-B0t in #1962
  • Cover Ownable2Step storage marker collisions by @Jim8y in #1967
  • Preserve Cdecl receiver evaluation order by @Jim8y in #1963
  • Bound Coverlet sequence point ranges by @Jim8y in #1966
  • Optimize: less opcodes for EmitSwitch by @Wi1l-B0t in #1961
  • Preserve Assert argument evaluation order by @Jim8y in #1965
  • Less opcodes and GAS for LeadingZeroCount by @Wi1l-B0t in #1969
  • Less opcodes and GAS for string.EndsWith by @Wi1l-B0t in #1970
  • Optimize char.IsLetter/char.IsAsciiLetter using ASCII case folding by @ajara87 in #1972
  • Preserve expanded params evaluation order by @Jim8y in #1964
  • Less opcodes and GAS for string.Insert by @Wi1l-B0t in #1974
  • Optimize BigInteger.GreatestCommonDivisor: replace PUSH0+JMPEQ/JMPNE with JMPIFNOT/JMPIF by @ajara87 in #1976
  • Less opcodes for char.IsLetterOrDigit by @Wi1l-B0t in #1977
  • Assert BitOperations gas consumption by @Jim8y in #1979
  • Assert StringBuilder gas consumption by @Jim8y in #1978
  • Optimize NUL char normalization for string.Contains(char) and string.IndexOf(char) by @ajara87 in #1975
  • Fix expected gas values by @ajara87 in #1973
  • Strengthen checked Int32 division overflow test by @Jim8y in #1987
  • Fix mixed named and positional argument binding by @Jim8y in #1985
  • Optimize char.IsBetween by @ajara87 in #1971
  • Fix: char.IsAscii by @Wi1l-B0t in #1988
  • Move HandleLength to System.Array.cs. by @Wi1l-B0t in #1989
  • Fix lifted nullable binary operator semantics by @Jim8y in #1986
  • Fix: convert recursive InstructionCoverage.CoverInstruction to an iterative algorithm to prevent StackOverflowException by @ajara87 in #1981
  • Fix signed DivRem overflow handling by @Jim8y in #1984
  • Don't convert bool contant value to integer by @Wi1l-B0t in #1990
  • Fix signed remainder overflow handling by @Jim8y in #1983
  • Less opcodes and GAS for integer switch by @Wi1l-B0t in #1991
  • Less opcodes and GAS for NumericTryParseWithOut by @Wi1l-B0t in #1992
  • Less opcodes and GAS for string.EndsWith by @Wi1l-B0t in #1993
  • Less opcodes and GAS for NumericCreateChecked by @Wi1l-B0t in #1995
  • Less opcodes and GAS for Enum.HasFlag by @Wi1l-B0t in #1994
  • Less GAS for bool xor assign operation by @Wi1l-B0t in #1997
  • Fix class override virtual table construction and lookup by @Jim8y in #1999
  • Preserve static initializers when constant folding is invalidated by @Jim8y in #2000
  • Fix: BigInteger.ToByteArray should return [0x00] if zero by @Wi1l-B0t in #1996
  • Fix: execution fault if value is zero for Helper.ToByteArray by @Wi1l-B0t in #2014
  • Keep unsigned bitwise complements within their declared width by @Jim8y in #2004
  • Fix private method detection for short calls by @Jim8y in #2013
  • Apply custom contract mocks to CALLT invocations by @Jim8y in #2010
  • Preserve exported ABI names in NEP member checks and fixes by @Jim8y in #2007
  • Fix field initializer binding across referenced projects by @Jim8y in #2005
  • Include all contract storage in backward RPC seeks by @Jim8y in #2011
  • Reject checkpoints truncated inside a storage record by @Jim8y in #2012
  • Prevent accumulator overflow in integer Average overloads by @Jim8y in #2006
  • Allow null and default static framework field initializers by @Jim8y in #2008
  • Fix: execution fault if value is zero for Helper.AsSbyte by @Wi1l-B0t in #2016
  • Fix nullable integral cast range handling by @Jim8y in #2001
  • Resolve named StorageMap prefix arguments by parameter binding by @Jim8y in #2009
  • Less opcodes and GAS for NumericParse by @Wi1l-B0t in #2018
  • Preserve lifted nullable unary semantics by @Jim8y in #1998
  • Less GAS for LinqExtensions by @Wi1l-B0t in #2020
  • Less opcodes and GAS for Enum.ToString by @Wi1l-B0t in #2021
  • Less opcodes and GAS for String.Remove by @Wi1l-B0t in #2022
  • Fix: don't load string instance by LdArg0 by @Wi1l-B0t in #2023
  • Less opcodes for enum methods by @Wi1l-B0t in #2024
  • Fix: don't load trim-char by LdArg1 by @Wi1l-B0t in #2026
  • Less opcodes and GAS for StringBuilder methods by @Wi1l-B0t in #2025
  • Preserve argument evaluation order for calls with ref and out parameters by @Jim8y in #2003
  • Less opcodes and GAS for string to lower by @Wi1l-B0t in #2027
  • Fix: wrong result if pad with '\0' for string.PadLeft/PadRight by @Wi1l-B0t in #2033
  • Test: cover 64-bit arithmetic overflow boundaries by @Jim8y in #2029
  • Test: cover malformed and incomplete contract source by @Jim8y in #2028
  • Test: validate Neo C# profile evidence references by @Jim8y in #2032
  • Test: keep unsupported syntax diagnostics in stable order by @Jim8y in #2031
  • Preserve instance receiver evaluation before call arguments by @Jim8y in #2002
  • Less opcodes and GAS for char.IsWhiteSpace & string.IsNullOrWhiteSpace by @Wi1l-B0t in #2035
  • Docs: document integer overflow and narrowing conversion semantics by @Jim8y in #2030
  • Less opcodes for Enum methods by @Wi1l-B0t in #2036
  • CI: run validation selectively for affected changes by @Jim8y in #2041
  • Add string.LastIndexOf(char) by @Wi1l-B0t in #2034
  • Fix compiler crash with single-parameter InitialValueAttribute by @Jim8y in #2038
  • Fix default(T?) generating empty struct instead of null by @Jim8y in #2039
  • Fix stack imbalance in generic Enum.TryParse with ignoreCase by @Jim8y in #2043
  • Simplify redundant two-operand conditional jumps in RemoveUnnecessaryJumps by @Jim8y in #2049
  • Fix ContractSourceCodeAttribute dead code - Source field never populated by @Jim8y in #2040
  • Fix non-ASCII char search in string.Contains and string.IndexOf by @Jim8y in #2045
  • Less opcodes and GAS for NumericTryParseWithOut&BoolTryParseWithOut by @Wi1l-B0t in #2050
  • Less opcodes and GAS for string.Trim/TrimStart/TrimEnd with const trimmed char by @Wi1l-B0t in #2042
  • docs: add security and contribution guidance by @Jim8y in #2057
  • Less opcodes and GAS for ConvertCharToUtf8 by @Wi1l-B0t in #2046
  • ci: add dependency maintenance and CodeQL by @Jim8y in #2058
  • Build(deps): Bump actions/setup-dotnet from 5 to 6 by @dependabot[bot] in #2069
  • Build(deps): Bump actions/delete-package-versions from 4 to 5 by @dependabot[bot] in #2064
  • Build(deps): Bump github/codeql-action from 3 to 4 by @dependabot[bot] in #2066
  • Build(deps): Bump actions/setup-python from 4 to 7 by @dependabot[bot] in #2068
  • Build(deps): Bump actions/checkout from 7.0.0 to 7.0.1 by @dependabot[bot] in #2065
  • Build(deps): Bump codecov/codecov-action from 6 to 7 by @dependabot[bot] in #2067
  • Bump coverlet.collector from 6.0.4 to 10.0.1 by @dependabot[bot] in #2070
  • Bump JsonSchema.Net from 9.2.2 to 9.4.0 by @dependabot[bot] in #2071
  • Bump Microsoft.NET.Test.Sdk from 17.14.1 to 18.10.1 by @dependabot[bot] in #2075
  • Bump System.CommandLine from 2.0.9 to 2.0.12 by @dependabot[bot] in #2079
  • Bump ReportGenerator.Core from 5.4.8 to 5.5.11 by @dependabot[bot] in #2078
  • Less opcodes for enum methods by @Wi1l-B0t in #2081
  • Less opcodes and GAS for Enum.TryParse with constant ignoreCase by @Wi1l-B0t in #2080
  • Bump Microsoft.CodeAnalysis.Analyzers and 2 others by @dependabot[bot] in #2074
  • test: cover peephole optimizer rewrites by @Jim8y in #2089
  • Support findstorage key-cursor pagination in RpcStore by @Jim8y in #2084
  • Fix: EnumGetName with non-constant typeof by @Wi1l-B0t in #2082
  • test: cover zero-value NEP-17 receiver callbacks by @Jim8y in #2092
  • Bump MSTest.TestFramework from 3.9.3 to 4.4.1 by @dependabot[bot] in #2083
  • test: add deterministic compiler fuzz corpus by @Jim8y in #2095
  • fix(security): reject late token callback authorization by @Jim8y in #2086
  • refactor: centralize project contract discovery by @Jim8y in #2088
  • Fix non-ASCII trim character handling in string.Trim variants by @Jim8y in #2047
  • Bump Moq from 4.20.72 to 4.21.0 by @dependabot[bot] in #2102
  • test: expand malformed source coverage by @Jim8y in #2100
  • feat: add deterministic gas snapshot comparisons by @Jim8y in #2094
  • fix: stabilize compiler diagnostic ordering by @Jim8y in #2099
  • Optimize RotateLeft/RotateRight inverse offset calculation by @ajara87 in #2091
  • fix: separate NFT token state and claim storage by @Jim8y in #2063
  • test: cover signed division and remainder boundaries by @Jim8y in #2097
  • test: cover nested nullable conditional access by @Jim8y in #2098
  • Optimize HandleStringLastIndexOf by @ajara87 in #2090
  • test: expand example contract coverage by @Jim8y in #2052
  • docs: add release changelog by @Jim8y in #2096
  • refactor: invoke optimizer strategies through delegates by @Jim8y in #2093
  • fix: correct GAS transfer data in example by @Jim8y in #2062
  • Add storage-state regression tests for ExitGuard and ExecutionEngine.Abort by @Jim8y in #2048
  • fix: block typed catch clauses in contracts by @Jim8y in #2104
  • docs: link platform API diagnostics by @Jim8y in #2108
  • test: cover optimizer strategy rewrites by @Jim8y in #2105
  • fix(security): detect mutual recursive calls by @Jim8y in #2087
  • test: cover analyzer handling of generated code by @Jim8y in #2106
  • test: verify deterministic analyzer execution by @Jim8y in #2107
  • Fold constant conditional jumps to reduce GAS by @Jim8y in #2051
  • feat: add machine-readable compiler diagnostics by @Jim8y in #2101
  • Test analyzer code fix idempotence by @Jim8y in #2113
  • Test packaged analyzer with an external consumer by @Jim8y in #2114
  • Parallelize unit tests and cache Roslyn semantic diagnostics to reduce UTs time by @ajara87 in #2103
  • fix: reject duplicate system call handlers by @Jim8y in #2112
  • fix: classify unsupported control flow failures by @Jim8y in #2111
  • docs: link numeric type diagnostics by @Jim8y in #2117
  • test: validate profile documentation anchors by @Jim8y in #2116
  • test: cover nullable operator truth tables by @Jim8y in #2119
  • ci: run profile validation for profile changes by @Jim8y in #2118
  • feat: add gas snapshot assertions by @Jim8y in #2115
  • fix: make generated artifact ordering culture invariant by @Jim8y in #2110
  • Fix: warning MSTEST0044 by @Wi1l-B0t in #2121
  • Less opcodes and GAS for ByteStringExtension by @Wi1l-B0t in #2122
  • Less opcodes and GAS for Skip<T> & Take<T> by @Wi1l-B0t in #2120
  • Fix: warning MSTEST0017&MSTEST0032 by @Wi1l-B0t in #2124
  • Use NUMEQUAL&NUMNOTEQUAL instead of EQUAL&NOTEQUAL for integer by @Wi1l-B0t in #2123
  • fix(security): flag unused CheckWitness results by @Jim8y in #2085
  • Less opcodes and GAS for string.IndexOf(char) if char is constant value by @Wi1l-B0t in #2125
  • test: add semantic differential matrix by @Jim8y in #2131
  • test: validate profile diagnostic catalog IDs by @Jim8y in #2130
  • docs: document NC2010 range receiver guidance by @Jim8y in #2127
  • Less opcodes and GAS for string.EndsWith(string) if suffix is a constant value by @Wi1l-B0t in #2132
  • test: expand compiler fuzz control flow by @Jim8y in #2129
  • test: add deterministic analyzer fuzz corpus by @Jim8y in #2128
  • Remove obsolete CreateGasWatcher by @ajara87 in #2134
  • Remove MSTEST0052 warning by @ajara87 in #2133
  • Remove MSTEST0030 warning by @ajara87 in #2135
  • Less opcodes and GAS for if (expression == 0) by @Wi1l-B0t in #2139
  • Less opcodes and GAS for string.EndsWith(string) if suffix is constant single byte by @Wi1l-B0t in #2136
  • Less opcodes and GAS for AccessControl by @Wi1l-B0t in #2126
  • Less opcodes and GAS for Enum.TryParse with constant ignoreCase by @Wi1l-B0t in #2138
  • Less opcodes and GAS for ConvertLiftedBinaryExpression by @Wi1l-B0t in #2140
  • Less opcodes and GAS for enum.ToString if enum is a constant value by @Wi1l-B0t in #2137
  • Less GAS for string.StartsWith(string) if prefix is constant single byte by @Wi1l-B0t in #2141
  • Less opcodes and GAS for EmitLiftedNullableBooleanOperator by @Wi1l-B0t in #2142
  • Preserve GAS snapshot integrity and report differences by @Jim8y in #2143
  • Analyze and fix target-typed BigInteger constructors by @Jim8y in #2144
  • Less opcodes and GAS for EmitLiftedComplexAssignmentOperator by @Wi1l-B0t in #2148
  • Validate concrete profile evidence and help references by @Jim8y in #2146
  • Less opcodes and GAS for ConvertConditionalAccessAssignment by @Wi1l-B0t in #2150
  • Less opcodes and GAS for nullable BoolOr by @Wi1l-B0t in #2151
  • Less opcodes and GAS for null checking by @Wi1l-B0t in #2149
  • Resolve Parse initializers semantically and qualify fixes by @Jim8y in #2145
  • Add SARIF output for compiler and analyzer diagnostics by @Jim8y in #2147
  • Fix: diagnose legacy default InitialValue fields by @Jim8y in #2155
  • Fix: diagnose all StringBuilder property writes by @Jim8y in #2154
  • Less opcodes and GAS for if (expression != 0) by @Wi1l-B0t in #2152
  • Less opcodes and GAS for ConvertLiftedShiftExpression by @Wi1l-B0t in #2157
  • Less opcodes and GAS for value == false or value == true by @Wi1l-B0t in #2158
  • Less opcodes and GAS for string.Replace by @Wi1l-B0t in #2159
  • Fix BigInteger.PopCount for large positive values by @ajara87 in #2162
  • Expand compiler fuzz coverage for nullable expressions by @Jim8y in #2168
  • Add a compiled gas snapshot regression baseline by @Jim8y in #2164
  • Generate XML documentation for source packages by @Jim8y in #2166
  • Establish maintainability rule thresholds for new code by @Jim8y in #2165
  • Less opcodes and GAS for new string(string/char, count) by @Wi1l-B0t in #2176
  • Fix debug artifact names and unmapped source locations by @Jim8y in #2180
  • docs: complete analyzer diagnostic help links by @Jim8y in #2170
  • Reject malformed RPC storage records by @Jim8y in #2177
  • test: guard system call registration coverage by @Jim8y in #2173
  • test: guard analyzer diagnostic parity by @Jim8y in #2172
  • Less opcodes and GAS for string.Replace by @Wi1l-B0t in #2175
  • Correct field and exported-name declaration diagnostics by @Jim8y in #2181
  • Preserve symbol and argument binding in analyzer code fixes by @Jim8y in #2178
  • Fix baseline build warnings by @Jim8y in #2169
  • Fix: use JMP_L instead of JMP to avoid JMP too short in SystemCall.Enum by @Wi1l-B0t in #2182
  • Less opcodes and GAS for for loop with integer compare condition by @Wi1l-B0t in #2153
  • Fix coverage aggregation and empty-method boundaries by @Jim8y in #2179
  • Optimize: skip unnecessary operations for StringBuilder.Append("") by @ajara87 in #2160
  • Align SDK compiler with the analyzer Roslyn baseline by @Jim8y in #2183
  • Less opcodes and GAS for string.Compare by @Wi1l-B0t in #2163
  • Keep SupportedStandards code actions compilable by @Jim8y in #2185
  • Diagnose constant Notify names across invocation forms by @Jim8y in #2188
  • Preserve enum widths and nullable values in test results by @Jim8y in #2184
  • Correct Cobertura source and branch coverage export by @Jim8y in #2187
  • bench: add analyzer performance harness by @Jim8y in #2171
  • Fix Unicode separators in string.Split by @ajara87 in #2161
  • Add a BenchmarkDotNet harness for compiler performance by @Jim8y in #2167
  • test: verify analyzer diagnostics across cultures by @Jim8y in #2174
  • Preserve StringBuilder receiver changes made by Append arguments by @Jim8y in #2193
  • Fix: validate checkpoint entries before restore by @Jim8y in #2156
  • Validate storage imports before changing existing data by @Jim8y in #2186
  • Diagnose unsupported collection member types by @Jim8y in #2192
  • Convert contract results using only instance members by @Jim8y in #2191
  • Accept omitted debug collections and preserve document indexes by @Jim8y in #2190
  • Correct Coverlet branch paths and execution counts by @Jim8y in #2189
  • Pad strings with UTF-8 padding characters by @Jim8y in #2196
  • Less opcodes and GAS for string.Concat with empty constants by @ajara87 in #2194
  • Diagnose unsupported types in member signatures by @Jim8y in #2198
  • Call indexer getters for conditional element access by @Jim8y in #2197
  • Reject cyclic RPC storage pagination by @Jim8y in #2200
  • Report string concatenation inside loops by @Jim8y in #2195
  • Convert nullable struct and character test results by @Jim8y in #2199
  • Preserve user-defined conversions in BigInteger code fixes by @Jim8y in #2201
  • fix: expand extern constructors when the declaring assembly has no syntax by @Jim8y in #2202
  • fix: resolve tuple element indexes and pack DivRem results in tuple order by @Jim8y in #2204
  • test: cover notification argument order and signature verification by @Jim8y in #2205
  • fix: remove nullable warning from notification test event by @Jim8y in #2206
  • fix: discard values from void expression lambdas by @Jim8y in #2207
  • fix: support conditional delegate invocation by @Jim8y in #2209
  • fix: preserve tuple assignment semantics by @Jim8y in #2208
  • fix: make divide-by-zero observable to catch blocks by @Jim8y in #2212
  • Stop rewriting PUSH2 ADD/SUB to INC INC/DEC DEC in UseIncDec by @ajara87 in #2214
  • fix: preserve by-ref storage across branches and aliases by @Jim8y in #2210
  • fix: dispatch user-defined operators to their operator methods by @Jim8y in #2211
  • fix: make DivRem observable to catch blocks on a zero divisor by @Jim8y in #2217
  • fix: dispatch by-ref arguments through aliased virtual tables by @Jim8y in #2218
  • Fix optimizer replacing fall-through conditional jumps with DROPs by @ajara87 in #2215
  • fix: diagnose embedded initializers and lower index initializers by @Jim8y in #2216
  • Fix tuple element indices in compound assignments and mutations by @shargon in #2221
  • fix: reject ref reassignment across unsupported control flow by @Jim8y in #2222
  • Fix custom property and indexer mutations on contracts without instance state by @shargon in #2220
  • test: cover evaluation order side effects by @Jim8y in #2225
  • test: cover stack item comparison boundaries by @Jim8y in #2224
  • test: cover string slice and search boundaries by @Jim8y in #2223
  • test: cover nullable conditional boundaries by @Jim8y in #2227
  • fix: initialize captured loop control variables by @Jim8y in #2226
  • fix: restore evaluation stack depth when entering a catch handler by @Jim8y in #2213
  • Chore: add some gas consumed asserts by @Wi1l-B0t in #2232
  • Less opcodes and GAS for ByteString extensions by @Wi1l-B0t in #2233
  • Optimize ByteString.IsAlphabet with ASCII case folding and a single WITHIN by @ajara87 in #2235
  • Fix: Helper.AsByte will be fail if value is 0 by @Wi1l-B0t in #2234
  • Optimize BigInteger.IsEven and IsOdd using bitwise AND by @ajara87 in #2236
  • Optimize StringBuilder.AppendLine with constant strings by @ajara87 in #2237
  • Fix: enforce Helper.ToSbyte input range by @Wi1l-B0t in #2241
  • Fix: ByteString.EndsWith should be failed if byteString is null by @Wi1l-B0t in #2239
  • Optimize string.StartsWith for constant prefixes by @ajara87 in #2244
  • Less opcodes and GAS for ParseHex by @Wi1l-B0t in #2242
  • Optimize LINQ Count for arrays using Length by @ajara87 in #2243
  • Doc: add more accurate description to the Opcode by @Wi1l-B0t in #2231
  • Add some ByteString extensions by @Wi1l-B0t in #2245
  • Fix: Helper.Reverse returns byte[] for all types of Array by @Wi1l-B0t in #2246
  • Optimize string.IndexOf for constant empty strings by @ajara87 in #2247
  • chore: Update Neo dependency to 3.10.2 by @ajara87 in #2238

New Contributors

Full Changelog: v3.10.1...v3.10.2