Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into add-ut-24q3
Browse files Browse the repository at this point in the history
  • Loading branch information
chenzhitong committed Aug 26, 2024
2 parents ad494b3 + dc926f7 commit 34aba56
Show file tree
Hide file tree
Showing 74 changed files with 2,331 additions and 632 deletions.
1 change: 1 addition & 0 deletions src/Neo.CLI/CLI/MainService.Network.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

using Akka.Actor;
using Neo.ConsoleService;
using Neo.Extensions;
using Neo.IO;
using Neo.Json;
using Neo.Network.P2P;
Expand Down
23 changes: 23 additions & 0 deletions src/Neo.Extensions/AssemblyExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// AssemblyExtensions.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.

using System.Reflection;

namespace Neo.Extensions
{
public static class AssemblyExtensions
{
public static string GetVersion(this Assembly assembly)
{
return assembly.GetName().Version!.ToString(3);
}
}
}
42 changes: 42 additions & 0 deletions src/Neo.Extensions/Collections/HashSetExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// HashSetExtensions.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.

using System.Collections.Generic;

namespace Neo.Extensions
{
public static class HashSetExtensions
{
public static void Remove<T>(this HashSet<T> set, ISet<T> other)
{
if (set.Count > other.Count)
{
set.ExceptWith(other);
}
else
{
set.RemoveWhere(u => other.Contains(u));
}
}

public static void Remove<T, V>(this HashSet<T> set, IReadOnlyDictionary<T, V> other)
{
if (set.Count > other.Count)
{
set.ExceptWith(other.Keys);
}
else
{
set.RemoveWhere(u => other.ContainsKey(u));
}
}
}
}
38 changes: 38 additions & 0 deletions src/Neo.Extensions/DateTimeExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// DateTimeExtensions.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.

using System;

namespace Neo.Extensions
{
public static class DateTimeExtensions
{
/// <summary>
/// Converts a <see cref="DateTime"/> to timestamp.
/// </summary>
/// <param name="time">The <see cref="DateTime"/> to convert.</param>
/// <returns>The converted timestamp.</returns>
public static uint ToTimestamp(this DateTime time)
{
return (uint)new DateTimeOffset(time.ToUniversalTime()).ToUnixTimeSeconds();
}

/// <summary>
/// Converts a <see cref="DateTime"/> to timestamp in milliseconds.
/// </summary>
/// <param name="time">The <see cref="DateTime"/> to convert.</param>
/// <returns>The converted timestamp.</returns>
public static ulong ToTimestampMS(this DateTime time)
{
return (ulong)new DateTimeOffset(time.ToUniversalTime()).ToUnixTimeMilliseconds();
}
}
}
1 change: 1 addition & 0 deletions src/Neo.Extensions/Neo.Extensions.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFrameworks>netstandard2.1;net8.0</TargetFrameworks>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PackageId>Neo.Extensions</PackageId>
<PackageTags>NEO;Blockchain;Extensions</PackageTags>
<OutputPath>../../bin/$(PackageId)</OutputPath>
Expand Down
40 changes: 40 additions & 0 deletions src/Neo.Extensions/Net/IpAddressExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// IpAddressExtensions.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.

using System.Net;

namespace Neo.Extensions
{
public static class IpAddressExtensions
{
/// <summary>
/// Checks if address is IPv4 Mapped to IPv6 format, if so, Map to IPv4.
/// Otherwise, return current address.
/// </summary>
public static IPAddress UnMap(this IPAddress address)
{
if (address.IsIPv4MappedToIPv6)
address = address.MapToIPv4();
return address;
}

/// <summary>
/// Checks if IPEndPoint is IPv4 Mapped to IPv6 format, if so, unmap to IPv4.
/// Otherwise, return current endpoint.
/// </summary>
public static IPEndPoint UnMap(this IPEndPoint endPoint)
{
if (!endPoint.Address.IsIPv4MappedToIPv6)
return endPoint;
return new IPEndPoint(endPoint.Address.UnMap(), endPoint.Port);
}
}
}
34 changes: 34 additions & 0 deletions src/Neo.Extensions/RandomExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// RandomExtensions.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.

using System;
using System.Numerics;

namespace Neo.Extensions
{
public static class RandomExtensions
{
public static BigInteger NextBigInteger(this Random rand, int sizeInBits)
{
if (sizeInBits < 0)
throw new ArgumentException("sizeInBits must be non-negative");
if (sizeInBits == 0)
return 0;
Span<byte> b = stackalloc byte[sizeInBits / 8 + 1];
rand.NextBytes(b);
if (sizeInBits % 8 == 0)
b[^1] = 0;
else
b[^1] &= (byte)((1 << sizeInBits % 8) - 1);
return new BigInteger(b);
}
}
}
53 changes: 53 additions & 0 deletions src/Neo.Extensions/SecureStringExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// SecureStringExtensions.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.

using System;
using System.Runtime.InteropServices;
using System.Security;

namespace Neo.Extensions
{
public static class SecureStringExtensions
{
public static string? GetClearText(this SecureString secureString)
{
if (secureString is null)
throw new ArgumentNullException(nameof(secureString));

var unmanagedStringPtr = IntPtr.Zero;

try
{
unmanagedStringPtr = Marshal.SecureStringToGlobalAllocUnicode(secureString);
return Marshal.PtrToStringUni(unmanagedStringPtr);
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(unmanagedStringPtr);
}
}

public static SecureString ToSecureString(this string value, bool asReadOnly = true)
{
unsafe
{
fixed (char* passwordChars = value)
{
var securePasswordString = new SecureString(passwordChars, value.Length);

if (asReadOnly)
securePasswordString.MakeReadOnly();
return securePasswordString;
}
}
}
}
}
36 changes: 36 additions & 0 deletions src/Neo.Extensions/StringExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// StringExtensions.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.

using System;
using System.Globalization;

namespace Neo.Extensions
{
public static class StringExtensions
{
/// <summary>
/// Converts a hex <see cref="string"/> to byte array.
/// </summary>
/// <param name="value">The hex <see cref="string"/> to convert.</param>
/// <returns>The converted byte array.</returns>
public static byte[] HexToBytes(this string value)
{
if (value == null || value.Length == 0)
return [];
if (value.Length % 2 == 1)
throw new FormatException();
var result = new byte[value.Length / 2];
for (var i = 0; i < result.Length; i++)
result[i] = byte.Parse(value.Substring(i * 2, 2), NumberStyles.AllowHexSpecifier);
return result;
}
}
}
1 change: 1 addition & 0 deletions src/Neo.GUI/GUI/CreateMultiSigContractDialog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
// modifications are permitted.

using Neo.Cryptography.ECC;
using Neo.Extensions;
using Neo.SmartContract;
using Neo.Wallets;
using System;
Expand Down
1 change: 1 addition & 0 deletions src/Neo.GUI/GUI/ImportCustomContractDialog.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// Redistribution and use in source and binary forms with or without
// modifications are permitted.

using Neo.Extensions;
using Neo.SmartContract;
using Neo.Wallets;
using System;
Expand Down
1 change: 1 addition & 0 deletions src/Neo.GUI/GUI/ParametersEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
// modifications are permitted.

using Neo.Cryptography.ECC;
using Neo.Extensions;
using Neo.SmartContract;
using System;
using System.Collections.Generic;
Expand Down
2 changes: 1 addition & 1 deletion src/Neo.IO/Caching/HashSetCache.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

namespace Neo.IO.Caching
{
class HashSetCache<T> : IReadOnlyCollection<T> where T : IEquatable<T>
internal class HashSetCache<T> : IReadOnlyCollection<T> where T : IEquatable<T>
{
/// <summary>
/// Sets where the Hashes are stored
Expand Down
2 changes: 1 addition & 1 deletion src/Neo.IO/Caching/KeyedCollectionSlim.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

namespace Neo.IO.Caching;

abstract class KeyedCollectionSlim<TKey, TItem>
internal abstract class KeyedCollectionSlim<TKey, TItem>
where TKey : notnull
where TItem : class, IStructuralEquatable, IStructuralComparable, IComparable
{
Expand Down
3 changes: 2 additions & 1 deletion src/Neo.IO/Neo.IO.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
<ItemGroup>
<InternalsVisibleTo Include="Neo" />
<InternalsVisibleTo Include="Neo.UnitTests" />
<InternalsVisibleTo Include="$(AssemblyName).Tests" />
<InternalsVisibleTo Include="Neo.Extensions" />
<InternalsVisibleTo Include="Neo.Extensions.Tests" />
</ItemGroup>

<ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions src/Neo/Cryptography/ECC/ECCurve.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
// Redistribution and use in source and binary forms with or without
// modifications are permitted.

using Neo.Extensions;
using System.Globalization;
using System.Numerics;

Expand Down
36 changes: 36 additions & 0 deletions src/Neo/Extensions/HashSetExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// Copyright (C) 2015-2024 The Neo Project.
//
// HashSetExtensions.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.

using Neo.IO.Caching;
using System;
using System.Collections.Generic;

namespace Neo.Extensions
{
/// <summary>
/// A helper class that provides common functions.
/// </summary>
public static class HashSetExtensions
{
internal static void Remove<T>(this HashSet<T> set, HashSetCache<T> other)
where T : IEquatable<T>
{
if (set.Count > other.Count)
{
set.ExceptWith(other);
}
else
{
set.RemoveWhere(u => other.Contains(u));
}
}
}
}
Loading

0 comments on commit 34aba56

Please sign in to comment.