diff --git a/Substrate.NetApi.Test/TypeConverters/PrimitiveTypesTest.cs b/Substrate.NetApi.Test/TypeConverters/PrimitiveTypesTest.cs
index 6c554e9..51ee925 100644
--- a/Substrate.NetApi.Test/TypeConverters/PrimitiveTypesTest.cs
+++ b/Substrate.NetApi.Test/TypeConverters/PrimitiveTypesTest.cs
@@ -184,6 +184,19 @@ public void PrimU128Test()
Assert.AreEqual(value, primImplicit);
}
+ ///
+ /// From real use case here : https://mythos.subscan.io/block/2826170?tab=event&event=2826170-189
+ ///
+ [Test]
+ [TestCase("310789037729451024594500450253905211276")]
+ public void PrimU128_FromMaxBigIntegerValue_Test(string valueStr)
+ {
+ var value = BigInteger.Parse(valueStr);
+
+ var prim = new U128(value);
+ Assert.That(prim.Value, Is.EqualTo(value));
+ }
+
[Test]
public void PrimU128CreateTest()
{
@@ -213,6 +226,22 @@ public void PrimU128_WithNegativeNumber_ShouldFail()
Assert.Throws(() => new U128(number));
}
+ [Test]
+ public void PrimU256_MaxValue()
+ {
+ BigInteger u256Max = BigInteger.Pow(2, 256) - 1;
+ var u256 = new U256(u256Max);
+
+ Assert.That(u256.Value, Is.EqualTo(u256Max));
+ }
+
+ [Test]
+ public void PrimU256_BasicNumberTest()
+ {
+ var u256 = new U256(new BigInteger(10));
+ Assert.That(u256.Value, Is.EqualTo(new BigInteger(10)));
+ }
+
[Test]
public void PrimU256Test()
{
diff --git a/Substrate.NetApi/Model/Types/Primitive/U128.cs b/Substrate.NetApi/Model/Types/Primitive/U128.cs
index 51e3ed2..be8bd2e 100644
--- a/Substrate.NetApi/Model/Types/Primitive/U128.cs
+++ b/Substrate.NetApi/Model/Types/Primitive/U128.cs
@@ -91,13 +91,20 @@ public override void Create(BigInteger value)
var byteArray = value.ToByteArray();
- if (byteArray.Length > TypeSize)
+ if (byteArray.Length > TypeSize + 1)
{
throw new NotSupportedException($"Wrong byte array size for {TypeName()}, max. {TypeSize} bytes!");
}
var bytes = new byte[TypeSize];
- byteArray.CopyTo(bytes, 0);
+ if (byteArray.Length == TypeSize + 1)
+ {
+ Array.Copy(byteArray, 0, bytes, 0, TypeSize);
+ }
+ else
+ {
+ byteArray.CopyTo(bytes, 0);
+ }
Bytes = bytes;
Value = value;
}
diff --git a/Substrate.NetApi/Model/Types/Primitive/U256.cs b/Substrate.NetApi/Model/Types/Primitive/U256.cs
index 633174c..efec4a9 100644
--- a/Substrate.NetApi/Model/Types/Primitive/U256.cs
+++ b/Substrate.NetApi/Model/Types/Primitive/U256.cs
@@ -92,14 +92,20 @@ public override void Create(BigInteger value)
throw new InvalidOperationException($"Unable to create a {nameof(U256)} instance while value is negative");
var byteArray = value.ToByteArray();
-
- if (byteArray.Length > TypeSize)
+
+ if (byteArray.Length > TypeSize + 1)
{
throw new NotSupportedException($"Wrong byte array size for {TypeName()}, max. {TypeSize} bytes!");
}
var bytes = new byte[TypeSize];
- byteArray.CopyTo(bytes, 0);
+ if(byteArray.Length == TypeSize + 1) {
+ Array.Copy(byteArray, 0, bytes, 0, TypeSize);
+ }
+ else {
+ byteArray.CopyTo(bytes, 0);
+ }
+
Bytes = bytes;
Value = value;
}