Skip to content

Commit f13c058

Browse files
authored
Add Protocol 23 support (#80)
* chore: update XDR definitions for Protocol 23 (#63) * refactor: rename SorobanResources.readBytes to diskReadBytes (#64) * feat: add DestinationMuxedId and DestinationMuxedIdType to InvokeHostFunctionOperationResponse.AssetContractBalanceChange (#65) * refactor: rename SorobanResources.readBytes to diskReadBytes * feat: add DestinationMuxedId and DestinationMuxedIdType to InvokeHostFunctionOperationResponse.AssetContractBalanceChange * feat: update SubmitTransactionAsyncResponse (#66) * feat: add events field to TransactionInfo (#67) * feat: update SorobanServer.SimulateTransaction to add support for non-root authorization (#68) * chore: add SorobanResourceExtensionV0 unit test (#74) * feat: update LedgerEntryChange (#75) * feat: update config setting types (#70) * feat: improve StrKey (#71) * feat: update RPC getEvents (#69) * feat: add new variants of ScAddress - muxed account, liquidity pool and claimable balance (#72) * feat: add new variants of ScAddress - muxed account, liquidity pool and claimable balance * Add validation * chore: improve ScAddress (#73) * chore: improve ScAddress * feat: Add support for TransactionMetaV4 (#77) * chore: improve ClaimableBalanceId (#78) * chore: improve OperationsRequestBuilder
1 parent e21ac93 commit f13c058

File tree

131 files changed

+5214
-1495
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+5214
-1495
lines changed

Examples/Soroban/SorobanExamples.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ private static async Task<SimulateTransactionResponse> SimulateAndUpdateTransact
403403

404404
private static LedgerKey CreateLedgerKeyContractData(string contractId)
405405
{
406-
var scContractId = new SCContractId(contractId);
406+
var scContractId = new ScContractId(contractId);
407407

408408
var contractDataDurability =
409409
ContractDataDurability.Create(ContractDataDurability.ContractDataDurabilityEnum.PERSISTENT);
Lines changed: 115 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,150 @@
11
using System;
22
using Microsoft.VisualStudio.TestTools.UnitTesting;
33
using StellarDotnetSdk.Soroban;
4+
using SCVal = StellarDotnetSdk.Soroban.SCVal;
45

56
namespace StellarDotnetSdk.Tests;
67

78
[TestClass]
89
public class AddressTest
910
{
1011
[TestMethod]
11-
public void TestAccountIdWithInvalidArgument()
12+
[DataRow("Invalid id")]
13+
[DataRow("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ",
14+
DisplayName = "Valid muxed account ID")]
15+
[DataRow("LAAABKAZRNPCLGKMDSS3AVLPV2ZHGJNMORRJNFCBITQKOQDNKAPIUSGG", DisplayName = "Valid liquidity pool ID")]
16+
[DataRow("GC5ZDZL56FJT75QOWB4OH7KBPBFBBYIJCDNTUNTB3QRFV4Z2IVUE6ES", DisplayName = "Invalid account ID")]
17+
[ExpectedException(typeof(ArgumentException))]
18+
public void TestAccountIdWithInvalidArgument(string id)
1219
{
13-
const string invalidAccountId = "Invalid id";
14-
var ex = Assert.ThrowsException<ArgumentException>(() => new SCAccountId(invalidAccountId));
15-
Assert.IsTrue(ex.Message.Contains("Invalid account ID"));
20+
_ = new ScAccountId(id);
1621
}
1722

1823
[TestMethod]
19-
public void TestContractIdWithInvalidArgument()
24+
[DataRow("Invalid id")]
25+
[DataRow("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ",
26+
DisplayName = "Valid muxed account ID")]
27+
[DataRow("GDWIZBODB4V7Q4V5TS4OMPUMDDTDNXMFQOSLVE6JG7PL4MHPTG6XO43Q", DisplayName = "Valid account ID")]
28+
[DataRow("BAAKEZMZYI3VFSJMHZ2PMC3SBANQWP2LDKBVH42XQSHWTSBOH7TDOPHPFA", DisplayName = "Valid claimable balance ID")]
29+
[DataRow("LAAABKAZRNPCLGKMDSS3AVLPV2ZHGJNMORRJNFCBITQKOQDNKAPIUSGG", DisplayName = "Valid liquidity pool ID")]
30+
[DataRow("CBFZDBUL3OC2VRMCFKTV4G6H5R5FNRLDVCIE536CRWWF4RKXWGTSSLD", DisplayName = "Invalid contract ID")]
31+
[ExpectedException(typeof(ArgumentException))]
32+
public void TestContractIdWithInvalidArgument(string id)
2033
{
21-
const string invalidContractId = "Invalid id";
22-
var ex = Assert.ThrowsException<ArgumentException>(() => new SCContractId(invalidContractId));
23-
Assert.AreEqual("Invalid contract id (Parameter 'value')", ex.Message);
34+
_ = new ScContractId(id);
35+
}
36+
37+
38+
[TestMethod]
39+
[ExpectedException(typeof(ArgumentException))]
40+
[DataRow("Invalid id")]
41+
[DataRow("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ",
42+
DisplayName = "Valid muxed account ID")]
43+
[DataRow("GDWIZBODB4V7Q4V5TS4OMPUMDDTDNXMFQOSLVE6JG7PL4MHPTG6XO43Q", DisplayName = "Valid account ID")]
44+
[DataRow("0000a8198b5e25994c1ca5b0556faeb27325ac746296944144e0a7406d501e8a",
45+
DisplayName = "Valid liquidity pool ID but in hex format")]
46+
[DataRow("LAARAHN7HK7EW57IB6FK5SOZIXXK56GKBOMSVJQTMRHOTABLMA2A5VH", DisplayName = "Invalid liquidity pool ID")]
47+
public void TestLiquidityPoolWithInvalidArgument(string id)
48+
{
49+
_ = new ScLiquidityPoolId(id);
50+
}
51+
52+
[TestMethod]
53+
[ExpectedException(typeof(ArgumentException))]
54+
[DataRow("Invalid id")]
55+
[DataRow("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ",
56+
DisplayName = "Valid muxed account ID")]
57+
[DataRow("GDWIZBODB4V7Q4V5TS4OMPUMDDTDNXMFQOSLVE6JG7PL4MHPTG6XO43Q", DisplayName = "Valid account ID")]
58+
[DataRow("00f6d640e0264946d35889231ce65dd63699e90dbcedea642b2d98ead157ee8758",
59+
DisplayName = "Valid claimable balance ID but in hex format")]
60+
[DataRow("BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4T", DisplayName = "Invalid claimable balance ID")]
61+
public void TestClaimableBalanceWithInvalidArgument(string id)
62+
{
63+
_ = new ScClaimableBalanceId(id);
64+
}
65+
66+
[TestMethod]
67+
[ExpectedException(typeof(ArgumentException))]
68+
[DataRow("Invalid id")]
69+
[DataRow("GDWIZBODB4V7Q4V5TS4OMPUMDDTDNXMFQOSLVE6JG7PL4MHPTG6XO43Q", DisplayName = "Valid account ID")]
70+
[DataRow("LAAABKAZRNPCLGKMDSS3AVLPV2ZHGJNMORRJNFCBITQKOQDNKAPIUSGG", DisplayName = "Valid liquidity pool ID")]
71+
[DataRow("BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU", DisplayName = "Valid claimable balance ID")]
72+
[DataRow("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJU",
73+
DisplayName = "Invalid account ID")]
74+
public void TestMuxedAccountWithInvalidArgument(string id)
75+
{
76+
_ = new ScMuxedAccountId(id);
2477
}
2578

2679
[TestMethod]
2780
public void TestAccountIdWithValidArgument()
2881
{
29-
var scAccountId = new SCAccountId("GCZFMH32MF5EAWETZTKF3ZV5SEVJPI53UEMDNSW55WBR75GMZJU4U573");
82+
var scAccountId = new ScAccountId("GCZFMH32MF5EAWETZTKF3ZV5SEVJPI53UEMDNSW55WBR75GMZJU4U573");
3083

3184
// Act
32-
var scAccountIdXdrBase64 = scAccountId.ToXdrBase64();
33-
var fromXdrBase64ScAccountId = (SCAccountId)SCVal.FromXdrBase64(scAccountIdXdrBase64);
85+
var xdrBase64 = scAccountId.ToXdrBase64();
86+
var decodedAccountId = (ScAccountId)SCVal.FromXdrBase64(xdrBase64);
3487

3588
// Assert
36-
Assert.AreEqual(scAccountId.InnerValue, fromXdrBase64ScAccountId.InnerValue);
89+
Assert.AreEqual(scAccountId.InnerValue, decodedAccountId.InnerValue);
3790
}
3891

3992
[TestMethod]
4093
public void TestContractIdWithValidArgument()
4194
{
42-
var scContractId = new SCContractId("CAC2UYJQMC4ISUZ5REYB2AMDC44YKBNZWG4JB6N6GBL66CEKQO3RDSAB");
95+
var scContractId = new ScContractId("CAC2UYJQMC4ISUZ5REYB2AMDC44YKBNZWG4JB6N6GBL66CEKQO3RDSAB");
96+
97+
// Act
98+
var xdrBase64 = scContractId.ToXdrBase64();
99+
var decodedContractId = (ScContractId)SCVal.FromXdrBase64(xdrBase64);
100+
101+
// Assert
102+
Assert.AreEqual(scContractId.InnerValue, decodedContractId.InnerValue);
103+
}
104+
105+
[TestMethod]
106+
[DataRow("BAAD6DBUX6J22DMZOHIEZTEQ64CVCHEDRKWZONFEUL5Q26QD7R76RGR4TU")]
107+
public void TestClaimableBalanceWithValidArgument(string id)
108+
{
109+
var claimableBalanceId = new ScClaimableBalanceId(id);
110+
111+
// Act
112+
var xdrBase64 = claimableBalanceId.ToXdrBase64();
113+
var decodedClaimableBalanceId = (ScClaimableBalanceId)SCVal.FromXdrBase64(xdrBase64);
114+
115+
// Assert
116+
Assert.AreEqual(claimableBalanceId.InnerValue, decodedClaimableBalanceId.InnerValue);
117+
}
118+
119+
[TestMethod]
120+
[DataRow("LAARAHN7HK7EW57IB6FK5SOZIXXK56GKBOMSVJQTMRHOTABLMA2A5VHB")]
121+
[DataRow("LAAAMWWZQUAU443Y4OAP22N2JDL2GEE5XVXDP5FSVIIWFLP3JD2M2YCG")]
122+
public void TestLiquidityPoolWithValidArgument(string id)
123+
{
124+
var liquidityPoolId = new ScLiquidityPoolId(id);
125+
126+
// Act
127+
var xdrBase64 = liquidityPoolId.ToXdrBase64();
128+
var decodedLiquidityPoolId = (ScLiquidityPoolId)SCVal.FromXdrBase64(xdrBase64);
129+
130+
// Assert
131+
Assert.AreEqual(liquidityPoolId.InnerLiquidityPoolId, decodedLiquidityPoolId.InnerLiquidityPoolId);
132+
}
133+
134+
[TestMethod]
135+
[DataRow("MA7QYNF7SOWQ3GLR2BGMZEHXAVIRZA4KVWLTJJFC7MGXUA74P7UJUAAAAAAAAAAAACJUQ")]
136+
[DataRow("MAAAAAAAAAAAACZPKFNFGLIWAV45NTUVN6G7CWYS3GGYLONUBFC5ICGJXSRT2JFFZA5VA")]
137+
[DataRow("MAAAAAAAAAAAAC5OILZZBNM3E4JSWOEGLPA3YJ6EIFZLMOC5VZR4CMIKBR62SU4BRCDDK")]
138+
[DataRow("MAAAAAAAAAAAAC4N3AYUY6MEGEP2IXWKNTHWNOEUDY3VYMRNGTICZE726IBULR76S3PWW")]
139+
public void TestMuxedAccountWithValidArgument(string id)
140+
{
141+
var muxedAccountId = new ScMuxedAccountId(id);
43142

44143
// Act
45-
var scContractIdXdrBase64 = scContractId.ToXdrBase64();
46-
var fromXdrBase64ScContractId = (SCContractId)SCVal.FromXdrBase64(scContractIdXdrBase64);
144+
var xdrBase64 = muxedAccountId.ToXdrBase64();
145+
var decodedMuxedAccountId = (ScMuxedAccountId)SCVal.FromXdrBase64(xdrBase64);
47146

48147
// Assert
49-
Assert.AreEqual(scContractId.InnerValue, fromXdrBase64ScContractId.InnerValue);
148+
Assert.AreEqual(muxedAccountId.InnerValue, decodedMuxedAccountId.InnerValue);
50149
}
51150
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using StellarDotnetSdk.Xdr;
4+
5+
namespace StellarDotnetSdk.Tests;
6+
7+
[TestClass]
8+
public class ClaimableBalanceIdUtilsTest
9+
{
10+
[TestMethod]
11+
[DataRow("299a32106238f3b2d84d4142783fe320253bcda775d1bfb7accdb533021ddccf",
12+
"BAACTGRSCBRDR45S3BGUCQTYH7RSAJJ3ZWTXLUN7W6WM3NJTAIO5ZT2U6I")]
13+
public void TestFromXdr(string hex, string base32)
14+
{
15+
var xdrClaimableBalanceId = new ClaimableBalanceID
16+
{
17+
Discriminant =
18+
ClaimableBalanceIDType.Create(ClaimableBalanceIDType.ClaimableBalanceIDTypeEnum
19+
.CLAIMABLE_BALANCE_ID_TYPE_V0),
20+
V0 = new Hash(Convert.FromHexString(hex)),
21+
};
22+
var id = ClaimableBalanceIdUtils.FromXdr(xdrClaimableBalanceId);
23+
Assert.AreEqual(id, base32);
24+
}
25+
26+
[TestMethod]
27+
[DataRow("BAACTGRSCBRDR45S3BGUCQTYH7RSAJJ3ZWTXLUN7W6WM3NJTAIO5ZT2U6I",
28+
"00000000299a32106238f3b2d84d4142783fe320253bcda775d1bfb7accdb533021ddccf")]
29+
public void TestToHexString(string input, string output)
30+
{
31+
var hex = ClaimableBalanceIdUtils.ToHexString(input).ToLower();
32+
Assert.AreEqual(output, hex);
33+
}
34+
35+
[TestMethod]
36+
[DataRow("00000000299a32106238f3b2d84d4142783fe320253bcda775d1bfb7accdb533021ddccf",
37+
"BAACTGRSCBRDR45S3BGUCQTYH7RSAJJ3ZWTXLUN7W6WM3NJTAIO5ZT2U6I")]
38+
public void TestToBase32String(string input, string output)
39+
{
40+
var base32 = ClaimableBalanceIdUtils.ToBase32String(input);
41+
Assert.AreEqual(output, base32);
42+
}
43+
}

0 commit comments

Comments
 (0)