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; }