Skip to content

Commit ee8d5eb

Browse files
authored
next release 0.9.24 & release candidates (#98)
* fixed wrong indexing bitseq updated nodetest to allow specific rpcs * Reverse and FromBitString and ToBitString moved to static utils. * fixed comment * fixed comment * fixed for versions bigger then NET2.0 #97 * added the negative number test * next release * removed old enum extension from usage
1 parent ecb2644 commit ee8d5eb

File tree

16 files changed

+308
-83888
lines changed

16 files changed

+308
-83888
lines changed

Substrate.NetApi.Test/TypeConverters/BaseTypesTest.cs

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using NUnit.Framework;
66
using System.Collections.Generic;
77
using Newtonsoft.Json.Linq;
8+
using Microsoft.VisualStudio.TestPlatform.ObjectModel;
89

910
namespace Substrate.NetApi.Test
1011
{
@@ -191,8 +192,8 @@ public void BaseOptTest()
191192
public void BaseBitSeqTest()
192193
{
193194
var testCase1 = "0xa00b80050000";
194-
var bitSeqTest1 = FromBitString("0b11010000_00000001_10100000_00000000_00000000");
195-
var baseBitSeq1 = new BaseBitSeq<U8, U8>();
195+
var bitSeqTest1 = Utils.FromBitString("0b11010000_00000001_10100000_00000000_00000000");
196+
var baseBitSeq1 = new BaseBitSeq<U8>();
196197
baseBitSeq1.Create(testCase1);
197198
for (int i = 0; i < bitSeqTest1.Length; i++)
198199
{
@@ -201,14 +202,14 @@ public void BaseBitSeqTest()
201202
Assert.AreEqual(testCase1, Utils.Bytes2HexString(baseBitSeq1.Encode()).ToLower());
202203

203204
// Let's create the same object but with the other Create() method
204-
var baseBitSeq1_1 = new BaseBitSeq<U8, U8>();
205-
baseBitSeq1_1.Create(baseBitSeq1.Value);
205+
var baseBitSeq1_1 = new BaseBitSeq<U8>();
206+
baseBitSeq1_1.Create(baseBitSeq1.Value, BitOrder.Lsb0);
206207
Assert.AreEqual(baseBitSeq1.Bytes, baseBitSeq1_1.Bytes);
207208
Assert.AreEqual(baseBitSeq1.Value, baseBitSeq1_1.Value);
208209
Assert.AreEqual(baseBitSeq1.TypeSize, baseBitSeq1_1.TypeSize);
209210

210-
var bitSeqTest2 = FromBitString("0b10000010_10000010_00101000_00000000_00000000");
211-
var baseBitSeq2 = new BaseBitSeq<U8, U8>();
211+
var bitSeqTest2 = Utils.FromBitString("0b10000010_10000010_00101000_00000000_00000000");
212+
var baseBitSeq2 = new BaseBitSeq<U8>();
212213
baseBitSeq2.Create("0xa04141140000");
213214
for (int i = 0; i < bitSeqTest1.Length; i++)
214215
{
@@ -217,17 +218,6 @@ public void BaseBitSeqTest()
217218
Assert.AreEqual("0xa04141140000", Utils.Bytes2HexString(baseBitSeq2.Encode()).ToLower());
218219
}
219220

220-
private byte[] FromBitString(string str)
221-
{
222-
var s = str.Replace("0b", "").Split('_');
223-
var result = new byte[s.Length];
224-
for (int i = 0; i < s.Length; i++)
225-
{
226-
result[i] = Convert.ToByte(s[i], 2);
227-
}
228-
return result;
229-
}
230-
231221
[Test]
232222
public void BaseComTest()
233223
{

Substrate.NetApi.Test/TypeConverters/PrimitiveTypesTest.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
using Substrate.NetApi.Model.Types.Primitive;
44
using NUnit.Framework;
55
using Newtonsoft.Json.Linq;
6+
using System.Linq;
7+
using System.Net;
68

79
namespace Substrate.NetApi.Test
810
{
@@ -232,6 +234,14 @@ public void PrimU256Test()
232234

233235
BigInteger primImplicit = new U256(value);
234236
Assert.AreEqual(value, primImplicit);
237+
238+
var testArray = Utils.GetPublicKeyFrom("unixuHLc4UoAjwLpkQHUWy2NpT5LV4tUqJFnFVNyLaeqBfq22").Reverse().ToArray();
239+
240+
var test = new U256();
241+
test.Create(testArray);
242+
243+
Assert.AreEqual("88948098633472856107773808278376342488924045139856962685537580476255925753211", test.Value.ToString());
244+
Assert.IsTrue(test.Bytes.SequenceEqual(testArray));
235245
}
236246

237247
[Test]

Substrate.NetApi.Test/TypeConverters/TypeEncodingTest.cs

Lines changed: 88 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using Substrate.NetApi.Model.Types.Primitive;
44
using Substrate.NetApi.TypeConverters;
55
using NUnit.Framework;
6+
using System;
67

78
namespace Substrate.NetApi.Test
89
{
@@ -112,11 +113,22 @@ public enum PhaseState
112113
[Test]
113114
public void ExtEnumEncodingTest()
114115
{
115-
var extEnumType = new BaseEnumExt<PhaseState, U8, BaseVoid, BaseVoid>();
116+
// Set up type decoder map for PhaseState
117+
var typeDecoderMap = new Dictionary<PhaseState, Type>
118+
{
119+
{ PhaseState.None, typeof(U8) },
120+
{ PhaseState.Finalization, typeof(BaseVoid) },
121+
{ PhaseState.Initialization, typeof(BaseVoid) }
122+
};
116123

124+
// Initialize BaseEnumRust with the decoder map
125+
var extEnumType = new BaseEnumRust<PhaseState>(typeDecoderMap);
126+
127+
// Decode the input data
117128
int p = 0;
118129
extEnumType.Decode(new byte[] { 0x00, 0x01 }, ref p);
119130

131+
// Assertions to verify values
120132
Assert.AreEqual(PhaseState.None, extEnumType.Value);
121133
Assert.AreEqual("U8", extEnumType.Value2.GetType().Name);
122134
Assert.AreEqual(1, (extEnumType.Value2 as U8).Value);
@@ -125,45 +137,75 @@ public void ExtEnumEncodingTest()
125137
[Test]
126138
public void ExtEnumDencodingTest()
127139
{
128-
var extEnumType = new BaseEnumExt<PhaseState, U8, BaseVoid, BaseVoid>();
140+
// Set up type decoder map for PhaseState
141+
var typeDecoderMap = new Dictionary<PhaseState, Type>
142+
{
143+
{ PhaseState.None, typeof(U8) },
144+
{ PhaseState.Finalization, typeof(BaseVoid) },
145+
{ PhaseState.Initialization, typeof(BaseVoid) }
146+
};
147+
148+
// Initialize BaseEnumRust with the decoder map
149+
var extEnumType = new BaseEnumRust<PhaseState>(typeDecoderMap);
129150

151+
// Decode the input data
130152
int p = 0;
131153
extEnumType.Decode(new byte[] { 0x00, 0x01 }, ref p);
132154

155+
// Assertions to verify values
133156
Assert.AreEqual(PhaseState.None, extEnumType.Value);
134157
Assert.AreEqual("U8", extEnumType.Value2.GetType().Name);
135158
Assert.AreEqual(1, (extEnumType.Value2 as U8).Value);
136159

160+
// Verify the bytes are preserved correctly
137161
Assert.AreEqual(new byte[] { 0x00, 0x01 }, extEnumType.Bytes);
138162
}
139163

140164
[Test]
141165
public void ExtEnumCreateTest()
142166
{
143-
var u8 = new U8(1);
144-
145-
var vecExtEnumTypeFromCreateValue = new BaseEnumExt<PhaseState, U8>();
146-
vecExtEnumTypeFromCreateValue.Create(PhaseState.None, u8);
147-
148-
var vecExtEnumTypeFromCreateByteArray = new BaseEnumExt<PhaseState, U8>();
149-
vecExtEnumTypeFromCreateByteArray.Create(new byte[] { 0, 1 });
150-
151-
var vecExtEnumTypeFromCreateHex = new BaseEnumExt<PhaseState, U8>();
152-
vecExtEnumTypeFromCreateHex.Create("0x0001");
153-
154-
Assert.That(vecExtEnumTypeFromCreateValue.Bytes, Is.EqualTo(vecExtEnumTypeFromCreateByteArray.Bytes));
155-
Assert.That(vecExtEnumTypeFromCreateValue.Value, Is.EqualTo(vecExtEnumTypeFromCreateByteArray.Value));
156-
167+
var typeDecoderMap = new Dictionary<PhaseState, Type>
168+
{
169+
{ PhaseState.None, typeof(U8) },
170+
{ PhaseState.Finalization, typeof(BaseVoid) },
171+
{ PhaseState.Initialization, typeof(BaseVoid) }
172+
};
157173

158-
Assert.That(vecExtEnumTypeFromCreateValue.Bytes, Is.EqualTo(vecExtEnumTypeFromCreateHex.Bytes));
159-
Assert.That(vecExtEnumTypeFromCreateValue.Value, Is.EqualTo(vecExtEnumTypeFromCreateHex.Value));
174+
// Create instance using enum value and U8 value
175+
var u8 = new U8(1);
176+
var byValue = new BaseEnumRust<PhaseState>(typeDecoderMap);
177+
byValue.Create(PhaseState.None, u8);
178+
179+
// Create instance using byte array
180+
var byArray = new BaseEnumRust<PhaseState>(typeDecoderMap);
181+
byArray.Create(new byte[] { 0x00, 0x01 });
182+
183+
// Create instance using hex string
184+
var byHex = new BaseEnumRust<PhaseState>(typeDecoderMap);
185+
byHex.Create("0x0001");
186+
187+
// Assert equality between different creation methods
188+
Assert.That(byValue.Bytes, Is.EqualTo(byArray.Bytes));
189+
Assert.That(byValue.Value, Is.EqualTo(byArray.Value));
190+
Assert.That(byValue.Bytes, Is.EqualTo(byHex.Bytes));
191+
Assert.That(byValue.Value, Is.EqualTo(byHex.Value));
160192
}
161193

162194
[Test]
163-
public void ExtEnumXXX()
195+
public void ExtEnumXXX_NewTest()
164196
{
165-
var vecExtEnumType = new BaseVec<BaseEnumExt<PhaseState, BaseTuple<Arr4U8, BaseVec<U8>>, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid>>();
197+
// Create the type decoder map for PhaseState
198+
var typeDecoderMap = new Dictionary<PhaseState, Type>
199+
{
200+
{ PhaseState.None, typeof(BaseTuple<Arr4U8, BaseVec<U8>>) },
201+
{ PhaseState.Finalization, typeof(BaseVoid) },
202+
{ PhaseState.Initialization, typeof(BaseVoid) }
203+
};
204+
205+
// Initialize the enum wrapper
206+
var baseEnum = new BaseEnumRust<PhaseState>(typeDecoderMap);
166207

208+
// Prepare values
167209
var u8 = new U8();
168210
u8.Create(byte.MaxValue);
169211

@@ -173,17 +215,16 @@ public void ExtEnumXXX()
173215
var vec82 = new BaseVec<U8>();
174216
vec82.Create(new U8[] { u8 });
175217

176-
var tu = new BaseTuple<Arr4U8, BaseVec<U8>>();
177-
tu.Create(vec8, vec82);
178-
179-
var it = new BaseEnumExt<PhaseState, BaseTuple<Arr4U8, BaseVec<U8>>, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid, BaseVoid>();
180-
it.Create(PhaseState.None, tu);
218+
var tuple = new BaseTuple<Arr4U8, BaseVec<U8>>();
219+
tuple.Create(vec8, vec82);
181220

182-
vecExtEnumType.Create(new[] { it });
221+
// Create with PhaseState.None and tuple value
222+
baseEnum.Create(PhaseState.None, tuple);
183223

184-
var encoded = vecExtEnumType.Encode();
224+
// Encode and decode
225+
var encoded = baseEnum.Encode();
185226
int p = 0;
186-
vecExtEnumType.Decode(encoded, ref p);
227+
baseEnum.Decode(encoded, ref p);
187228

188229
Assert.Pass();
189230
}
@@ -194,27 +235,34 @@ internal enum TestEnum26
194235
}
195236

196237
[Test]
197-
public void ExtEnum26()
238+
public void ExtEnum26_NewTest()
198239
{
199-
var ext1 = new BaseEnumExt<TestEnum26, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16>();
240+
// Create the type decoder map for TestEnum26
241+
var typeDecoderMap = new Dictionary<TestEnum26, Type>
242+
{
243+
{ TestEnum26.T1, typeof(U8) },
244+
{ TestEnum26.T2, typeof(U16) },
245+
// Add other mappings as needed
246+
};
200247

201-
var u8 = new U8();
202-
u8.Create(byte.MaxValue);
248+
// Initialize BaseEnumRust
249+
var baseEnum = new BaseEnumRust<TestEnum26>(typeDecoderMap);
203250

251+
// Create U16 value
204252
var u16 = new U16();
205253
u16.Create(ushort.MaxValue);
206254

207-
ext1.Create(TestEnum26.T2, u16);
208-
209-
var encoded = ext1.Encode();
210-
211-
var ext2 = new BaseEnumExt<TestEnum26, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16, U8, U16>();
255+
// Create an instance with TestEnum26.T2
256+
baseEnum.Create(TestEnum26.T2, u16);
212257

258+
// Encode and decode
259+
var encoded = baseEnum.Encode();
213260
int p = 0;
214-
ext2.Decode(encoded, ref p);
261+
baseEnum.Decode(encoded, ref p);
215262

216-
Assert.AreEqual(TestEnum26.T2, ext2.Value);
217-
Assert.AreEqual(ushort.MaxValue, ((U16)ext2.Value2).Value);
263+
// Assertions
264+
Assert.AreEqual(TestEnum26.T2, baseEnum.Value);
265+
Assert.AreEqual(ushort.MaxValue, ((U16)baseEnum.Value2).Value);
218266
}
219267

220268
[Test]
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using Newtonsoft.Json.Linq;
7+
using NUnit.Framework;
8+
using StreamJsonRpc;
9+
using Substrate.NetApi.Model.Rpc;
10+
using Substrate.NetApi.Model.Types.Base;
11+
using Substrate.NetApi.Model.Types.Primitive;
12+
13+
namespace Substrate.NetApi.TestNode
14+
{
15+
public class ModuleStateNextTest : NodeTest
16+
{
17+
public ModuleStateNextTest()
18+
: base("wss://hydradx-rpc.dwellir.com") { }
19+
20+
[Test]
21+
public async Task GetBlockAsyncTestAsync()
22+
{
23+
var result = await _substrateClient.Chain.GetBlockAsync(new Hash("0x467fb6268675b96e707df72d382c14da0045ebc553edd9850414560053870b09"), CancellationToken.None);
24+
25+
Assert.IsNotNull(result);
26+
}
27+
28+
[Test]
29+
public async Task GetKeysPagedAtTestAsync()
30+
{
31+
var parameters = RequestGenerator.GetStorage("System", "Number",
32+
Model.Meta.Storage.Type.Plain);
33+
34+
var currentBlocknumber = await _substrateClient.GetStorageAsync<U32>(parameters, CancellationToken.None);
35+
36+
var blockNumber = new BlockNumber();
37+
blockNumber.Create(currentBlocknumber.Value);
38+
39+
var blockHash = await _substrateClient.Chain.GetBlockHashAsync(blockNumber);
40+
41+
var result = await _substrateClient.State.GetKeysPagedAsync(RequestGenerator.GetStorageKeyBytesHash("System", "BlockHash"), 10, null, blockHash.Bytes, CancellationToken.None);
42+
43+
Assert.IsNotNull(result);
44+
Assert.AreEqual(10, result.Count);
45+
}
46+
47+
[Test]
48+
[TestCase("0x467fb6268675b96e707df72d382c14da0045ebc553edd9850414560053870b09")]
49+
public async Task GetStorageAt_ShouldWorkAsync(string storageKeyHex)
50+
{
51+
var blockHash = await GivenBlockAsync();
52+
var storageKeys = Utils.HexToByteArray(storageKeyHex);
53+
54+
var call_1 = await _substrateClient.State.GetStorageAsync(storageKeys, blockHash, CancellationToken.None);
55+
var call_2 = await _substrateClient.State.GetStorageAsync(storageKeys, Utils.Bytes2HexString(blockHash), CancellationToken.None);
56+
57+
Assert.That(call_1, Is.Not.Null);
58+
Assert.That(call_2, Is.Not.Null);
59+
Assert.That(call_1, Is.EqualTo(call_2));
60+
}
61+
62+
}
63+
}

Substrate.NetApi.TestNode/NodeTest.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ public abstract class NodeTest
1717

1818
protected SubstrateClient _substrateClient;
1919

20+
public string Url { get; }
21+
22+
protected NodeTest(string url = null)
23+
{
24+
Url = url ?? WebSocketUrl;
25+
}
2026

2127
[SetUp]
2228
public async Task ConnectAsync()
@@ -33,7 +39,7 @@ public async Task CloseAsync()
3339
[OneTimeSetUp]
3440
public void CreateClient()
3541
{
36-
_substrateClient = new SubstrateClient(new Uri(WebSocketUrl), ChargeTransactionPayment.Default());
42+
_substrateClient = new SubstrateClient(new Uri(Url), ChargeTransactionPayment.Default());
3743
}
3844

3945
[OneTimeTearDown]

Substrate.NetApi/Model/Extrinsics/ChargeAssetTxPayment.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Generic;
1+
using System;
2+
using System.Collections.Generic;
23
using Substrate.NetApi.Model.Types.Base;
34
using Substrate.NetApi.Model.Types.Primitive;
45

@@ -29,11 +30,18 @@ public enum NativeOrWithId
2930
/// <summary>
3031
/// Asset Identifier for AssetHubs and the Ajuna Chain.
3132
/// </summary>
32-
public sealed class EnumNativeOrWithId : BaseEnumExt<NativeOrWithId, BaseVoid, U32>
33+
public sealed class EnumNativeOrWithId : BaseEnumRust<NativeOrWithId>
3334
{
35+
/// <summary>
36+
/// EnumNativeOrWithId Constructor
37+
/// </summary>
38+
public EnumNativeOrWithId() : base(new Dictionary<NativeOrWithId, Type>
39+
{
40+
{ NativeOrWithId.Native, typeof(BaseVoid) },
41+
{ NativeOrWithId.WithId, typeof(U32) }
42+
}) { }
3443
}
3544

36-
3745
/// <summary>
3846
/// Charge Asset Tx Payment
3947
/// </summary>

0 commit comments

Comments
 (0)