Skip to content

Commit cc0fa25

Browse files
committed
feat: update packages
1 parent 6d795e2 commit cc0fa25

9 files changed

Lines changed: 72 additions & 45 deletions

File tree

src/Base58Encoding.Benchmarks/Base58ComparisonBenchmark.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@
66

77
namespace Base58Encoding.Benchmarks;
88

9-
[SimpleJob(RuntimeMoniker.Net90)]
10-
[SimpleJob(RuntimeMoniker.Net10_0)]
119
[MemoryDiagnoser]
12-
[DisassemblyDiagnoser(exportCombinedDisassemblyReport: true)]
10+
//[DisassemblyDiagnoser(exportCombinedDisassemblyReport: true)]
1311
[HideColumns("Job", "Error", "StdDev", "Median", "RatioSD")]
1412
public class Base58ComparisonBenchmark
1513
{

src/Base58Encoding.Benchmarks/Base58Encoding.Benchmarks.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFrameworks>net9.0;net10.0</TargetFrameworks>
5+
<TargetFrameworks>net10.0</TargetFrameworks>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
88
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="BenchmarkDotNet" Version="0.15.2" />
13-
<PackageReference Include="SimpleBase" Version="5.4.1" />
12+
<PackageReference Include="BenchmarkDotNet" Version="0.15.8" />
13+
<PackageReference Include="SimpleBase" Version="5.6.0" />
1414
</ItemGroup>
1515

1616
<ItemGroup>

src/Base58Encoding.Benchmarks/FastVsRegularEncodeBenchmark.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace Base58Encoding.Benchmarks;
55
[MemoryDiagnoser]
66
public class FastVsRegularEncodeBenchmark
77
{
8-
public byte[] _data;
9-
private string _encodedBase58;
8+
private byte[] _data = default!;
9+
private string _encodedBase58 = default!;
1010

1111
[GlobalSetup]
1212
public void Setup()
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using BenchmarkDotNet.Running;
22
using Base58Encoding.Benchmarks;
33

4-
//BenchmarkRunner.Run<Base58ComparisonBenchmark>();
5-
BenchmarkRunner.Run<FastVsRegularEncodeBenchmark>();
4+
BenchmarkRunner.Run<Base58ComparisonBenchmark>();
5+
//BenchmarkRunner.Run<FastVsRegularEncodeBenchmark>();
66
//BenchmarkRunner.Run<BoundsCheckComparisonBenchmark>();

src/Base58Encoding.Tests/Base58Encoding.Tests.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9.0</TargetFramework>
4+
<TargetFramework>net10.0</TargetFramework>
55
<OutputType>Exe</OutputType>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
@@ -13,7 +13,7 @@
1313

1414
<ItemGroup>
1515
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
16-
<PackageReference Include="SimpleBase" Version="5.4.1" />
16+
<PackageReference Include="SimpleBase" Version="5.6.0" />
1717
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
1818
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
1919
<PrivateAssets>all</PrivateAssets>

src/Base58Encoding.Tests/Base58Tests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,4 +270,36 @@ public void Encode_WithLeadingZeroPatterns_PreservesCorrectly()
270270
}
271271
}
272272

273+
[Theory]
274+
[InlineData(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, "11111111111111111111111111111112")] // All zeros + 1
275+
[InlineData(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }, "1111111111111111111111111111115S")] // 257 case
276+
[InlineData(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, "JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFG")] // All 0xFF
277+
[InlineData(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE }, "JEKNVnkbo3jma5nREBBJCDoXFVeKkD56V3xKrvRmWxFF")] // All 0xFF - 1
278+
public void DecodeBitcoin32Fast_WithFireDancerTestVectors_WorksCorrectly(byte[] expectedBytes, string encoded)
279+
{
280+
// Act - Test the fast decode method directly
281+
var decoded = Base58.DecodeBitcoin32Fast(encoded);
282+
283+
// Assert
284+
Assert.NotNull(decoded);
285+
Assert.Equal(expectedBytes, decoded);
286+
Assert.Equal(32, decoded.Length);
287+
}
288+
289+
[Theory]
290+
[InlineData(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }, "1111111111111111111111111111111111111111111111111111111111111112")] // All zeros + 1
291+
[InlineData(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 }, "111111111111111111111111111111111111111111111111111111111111115S")] // 257 case
292+
[InlineData(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }, "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roQ")] // All 0xFF
293+
[InlineData(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE }, "67rpwLCuS5DGA8KGZXKsVQ7dnPb9goRLoKfgGbLfQg9WoLUgNY77E2jT11fem3coV9nAkguBACzrU1iyZM4B8roP")] // All 0xFF - 1
294+
public void DecodeBitcoin64Fast_WithFireDancerTestVectors_WorksCorrectly(byte[] expectedBytes, string encoded)
295+
{
296+
// Act - Test the fast decode method directly
297+
var decoded = Base58.DecodeBitcoin64Fast(encoded);
298+
299+
// Assert
300+
Assert.NotNull(decoded);
301+
Assert.Equal(expectedBytes, decoded);
302+
Assert.Equal(64, decoded.Length);
303+
}
304+
273305
}
Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,34 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

3-
<PropertyGroup>
4-
<TargetFrameworks>net9.0;net10.0</TargetFrameworks>
5-
<ImplicitUsings>enable</ImplicitUsings>
6-
<Nullable>enable</Nullable>
3+
<PropertyGroup>
4+
<TargetFrameworks>net10.0</TargetFrameworks>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
77

8-
<PackageId>Base58Encoding</PackageId>
9-
<Authors>Nikolay Zdravkov</Authors>
10-
<Description>A high-performance Base58 encoding/decoding library for .NET</Description>
11-
<PackageTags>base58;encoding;bitcoin;cryptocurrency</PackageTags>
12-
<PackageProjectUrl>https://github.com/unsafePtr/Base58Encoding</PackageProjectUrl>
13-
<RepositoryUrl>https://github.com/unsafePtr/Base58Encoding</RepositoryUrl>
14-
<PackageLicenseExpression>MIT</PackageLicenseExpression>
15-
<PackageReadmeFile>README.md</PackageReadmeFile>
16-
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
17-
</PropertyGroup>
8+
<PackageId>Base58Encoding</PackageId>
9+
<Authors>Nikolay Zdravkov</Authors>
10+
<Description>A high-performance Base58 encoding/decoding library for .NET</Description>
11+
<PackageTags>base58;encoding;bitcoin;cryptocurrency</PackageTags>
12+
<PackageProjectUrl>https://github.com/unsafePtr/Base58Encoding</PackageProjectUrl>
13+
<RepositoryUrl>https://github.com/unsafePtr/Base58Encoding</RepositoryUrl>
14+
<PackageLicenseExpression>MIT</PackageLicenseExpression>
15+
<PackageReadmeFile>README.md</PackageReadmeFile>
16+
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
17+
</PropertyGroup>
1818

19-
<ItemGroup>
20-
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
21-
<_Parameter1>Base58Encoding.Benchmarks</_Parameter1>
22-
</AssemblyAttribute>
23-
</ItemGroup>
24-
<ItemGroup>
25-
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
26-
<_Parameter1>Base58Encoding.Tests</_Parameter1>
27-
</AssemblyAttribute>
28-
</ItemGroup>
19+
<ItemGroup>
20+
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
21+
<_Parameter1>Base58Encoding.Benchmarks</_Parameter1>
22+
</AssemblyAttribute>
23+
</ItemGroup>
24+
<ItemGroup>
25+
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
26+
<_Parameter1>Base58Encoding.Tests</_Parameter1>
27+
</AssemblyAttribute>
28+
</ItemGroup>
2929

30-
<ItemGroup>
31-
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
32-
</ItemGroup>
30+
<ItemGroup>
31+
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
32+
</ItemGroup>
3333

3434
</Project>

src/Base58Encoding/CountLeading.Base58.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public partial class Base58
99
{
1010
internal static int CountLeadingZeros(ReadOnlySpan<byte> data)
1111
{
12-
if (data.Length < 64)
12+
if (data.Length < 32)
1313
return CountLeadingZerosScalar(data);
1414

1515
int count = CountLeadingZerosSimd(data, out int processed);

src/Base58Encoding/Decode.Base58.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ internal byte[] DecodeGeneric(ReadOnlySpan<char> encoded)
122122
// Validate + convert using Bitcoin decode table (return null for invalid chars)
123123
if (c >= 128 || bitcoinDecodeTable[c] == 255)
124124
return null;
125-
125+
126126
rawBase58[j] = bitcoinDecodeTable[c];
127127
}
128128
}
@@ -196,9 +196,6 @@ internal byte[] DecodeGeneric(ReadOnlySpan<char> encoded)
196196

197197
internal static byte[]? DecodeBitcoin64Fast(ReadOnlySpan<char> encoded)
198198
{
199-
// Validate string length - should be between 1 and 88 chars for 64-byte output
200-
if (encoded.Length > 88) return null;
201-
202199
int charCount = encoded.Length;
203200

204201
// Convert to raw base58 digits with validation + conversion in one pass
@@ -219,7 +216,7 @@ internal byte[] DecodeGeneric(ReadOnlySpan<char> encoded)
219216
// Validate + convert using Bitcoin decode table (return null for invalid chars)
220217
if (c >= 128 || bitcoinDecodeTable[c] == 255)
221218
return null;
222-
219+
223220
rawBase58[j] = bitcoinDecodeTable[c];
224221
}
225222
}

0 commit comments

Comments
 (0)