Skip to content

Commit 1b9bba9

Browse files
committed
smc.* classes
1 parent c126e58 commit 1b9bba9

31 files changed

+713
-1
lines changed

TonLibDotNet.Demo/Program.cs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
using Microsoft.Extensions.DependencyInjection;
22
using Microsoft.Extensions.Hosting;
33
using Microsoft.Extensions.Logging;
4+
using TonLibDotNet.Requests.Smc;
45
using TonLibDotNet.Types;
56
using TonLibDotNet.Types.Dns;
7+
using TonLibDotNet.Types.Smc;
68
using TonLibDotNet.Types.Wallet;
79

810
namespace TonLibDotNet
@@ -73,6 +75,11 @@ public static async Task Main(string[] args)
7375
await RunDnsDemo(tonClient, logger);
7476
}
7577

78+
if (!useMainnet)
79+
{
80+
await RunSmcDemo(tonClient, logger);
81+
}
82+
7683
// Loggers need some time to flush data to screen/console.
7784
await Task.Delay(TimeSpan.FromSeconds(1));
7885
}
@@ -213,8 +220,9 @@ private static async Task RunDnsDemo(ITonClient tonClient, ILogger logger)
213220
// Let's ask it for next part
214221
res = await tonClient.DnsResolve("toncenter.", (res.Entries[0].Value as EntryDataNextResolver).Resolver, null, null);
215222
// Now we have NFT itself (Contract Type = Domain, toncenter.ton, EQAiIsvar4OYBn8BGBf9flfin6tl5poBx4MgJe4CQJYasy51) in 'NextResolver'
223+
var nftAccountAddress = (res.Entries[0].Value as EntryDataNextResolver).Resolver;
216224
// Let's ask it about actual ADNL of this domain
217-
res = await tonClient.DnsResolve(".", (res.Entries[0].Value as EntryDataNextResolver).Resolver, null, null);
225+
res = await tonClient.DnsResolve(".", nftAccountAddress, null, null);
218226
// And now we have ADNL address in answer
219227
var adnl2 = (res.Entries[0].Value as EntryDataAdnlAddress)?.AdnlAddress.Value;
220228

@@ -230,6 +238,30 @@ private static async Task RunDnsDemo(ITonClient tonClient, ILogger logger)
230238

231239
// Unfortunately, asking for account state of NFT itself returns raw.AccountState, not Dns.AccountState, I don't know why :(
232240
_ = await tonClient.GetAccountState("EQAiIsvar4OYBn8BGBf9flfin6tl5poBx4MgJe4CQJYasy51");
241+
242+
// But we can get owner!
243+
var info = await tonClient.SmcLoad(nftAccountAddress);
244+
_ = await tonClient.SmcRunGetMethod(info.Id, new MethodIdName("get_domain"));
245+
_ = await tonClient.SmcRunGetMethod(info.Id, new MethodIdName("get_editor"));
246+
_ = await tonClient.SmcRunGetMethod(info.Id, new MethodIdName("get_nft_data"));
247+
}
248+
249+
private static async Task RunSmcDemo(ITonClient tonClient, ILogger logger)
250+
{
251+
// https://ton-community.github.io/tutorials/02-contract/
252+
const string adr = "EQBYLTm4nsvoqJRvs_L-IGNKwWs5RKe19HBK_lFadf19FUfb";
253+
254+
var raw = await tonClient.RawGetAccountState(adr);
255+
256+
var info = await tonClient.SmcLoad(new AccountAddress(adr));
257+
var code = await tonClient.SmcGetCode(info.Id);
258+
var state = await tonClient.SmcGetState(info.Id);
259+
var data = await tonClient.SmcGetData(info.Id);
260+
var rm = await tonClient.SmcRunGetMethod(info.Id, new MethodIdName("counter"));
261+
262+
// var libs = await tonClient.Execute(new GetLibraries("1234567890"));
263+
264+
_ = await tonClient.SmcForget(info.Id);
233265
}
234266
}
235267
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TonLibDotNet.Requests.Smc
2+
{
3+
public class ForgetTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_Forget);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<Forget>(baseObj);
13+
14+
Assert.Equal(1, obj.Id);
15+
}
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TonLibDotNet.Requests.Smc
2+
{
3+
public class GetCodeTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_GetCode);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<GetCode>(baseObj);
13+
14+
Assert.Equal(1, obj.Id);
15+
}
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TonLibDotNet.Requests.Smc
2+
{
3+
public class GetDataTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_GetData);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<GetData>(baseObj);
13+
14+
Assert.Equal(1, obj.Id);
15+
}
16+
}
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TonLibDotNet.Requests.Smc
2+
{
3+
public class GetStateTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_GetState);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<GetState>(baseObj);
13+
14+
Assert.Equal(1, obj.Id);
15+
}
16+
}
17+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using TonLibDotNet.Types.Internal;
2+
3+
namespace TonLibDotNet.Requests.Smc
4+
{
5+
public class LoadByTransactionTests
6+
{
7+
[Fact]
8+
public void DeserializeOk()
9+
{
10+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_LoadByTransaction);
11+
12+
Assert.NotNull(baseObj);
13+
14+
var obj = Assert.IsType<LoadByTransaction>(baseObj);
15+
16+
Assert.Equal("EQBYLTm4nsvoqJRvs_L-IGNKwWs5RKe19HBK_lFadf19FUfb", obj.AccountAddress.Value);
17+
18+
var itid = Assert.IsType<TransactionId>(obj.TransactionId);
19+
20+
Assert.Equal(9984095000003, itid.Lt);
21+
Assert.Equal("Q54pwYEYuIj41\u002Bgcw0azQKVZT0hune9g45AYdWWzoUY=", itid.Hash);
22+
}
23+
}
24+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TonLibDotNet.Requests.Smc
2+
{
3+
public class LoadTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_Load);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<Load>(baseObj);
13+
14+
Assert.Equal("EQBYLTm4nsvoqJRvs_L-IGNKwWs5RKe19HBK_lFadf19FUfb", obj.AccountAddress.Value);
15+
}
16+
}
17+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using TonLibDotNet.Types.Smc;
2+
3+
namespace TonLibDotNet.Requests.Smc
4+
{
5+
public class RunGetMethodTests
6+
{
7+
[Fact]
8+
public void DeserializeOk()
9+
{
10+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_RunGetMethod);
11+
12+
Assert.NotNull(baseObj);
13+
14+
var obj = Assert.IsType<RunGetMethod>(baseObj);
15+
16+
Assert.Equal(1, obj.Id);
17+
18+
var m = Assert.IsType<MethodIdName>(obj.Method);
19+
20+
Assert.Equal("counter", m.Name);
21+
}
22+
}
23+
}

TonLibDotNet.Tests/SampleValues.Designer.cs

Lines changed: 99 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TonLibDotNet.Tests/SampleValues.resx

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,39 @@
334334
<data name="Raw_Transactions" xml:space="preserve">
335335
<value>{"@type":"raw.transactions","transactions":[{"@type":"raw.transaction","utime":1675263677,"data":"abcdef","transaction_id":{"@type":"internal.transactionId","lt":"34948872000007","hash":"j2fRsAIg2Abex+P+GCRu9dNcmGs36Wd9U0gedEGX8oA="},"fee":"0","storage_fee":"0","other_fee":"0","in_msg":{"@type":"raw.message","source":{"@type":"accountAddress","account_address":"EQAyAAlbgteBHCuI50EzuVvu9Zrk4Ts7pKU3bsphGBcyY0O_"},"destination":{"@type":"accountAddress","account_address":"EQCJTkhd1W2wztkVNp_dsKBpv2SIoUWoIyzI7mQrbSrj_NSh"},"value":"0","fwd_fee":"666672","ihr_fee":"0","created_lt":"34948872000006","body_hash":"lqKW0iTyhcZ77pPDD4owkVfw2qNdxbh+QQt4YwoJz8c=","msg_data":{"@type":"msg.dataRaw","body":"te6cckEBAQEAAgAAAEysuc0=","init_state":""}},"out_msgs":[]},{"@type":"raw.transaction","utime":1675263677,"data":"some-data","transaction_id":{"@type":"internal.transactionId","lt":"34948872000006","hash":"04SaPBuJe5OoLjP4A943p86Y2OLqrRcwv9wQbc1b9YQ="},"fee":"100067","storage_fee":"67","other_fee":"100000","in_msg":{"@type":"raw.message","source":{"@type":"accountAddress","account_address":"EQAyAAlbgteBHCuI50EzuVvu9Zrk4Ts7pKU3bsphGBcyY0O_"},"destination":{"@type":"accountAddress","account_address":"EQCJTkhd1W2wztkVNp_dsKBpv2SIoUWoIyzI7mQrbSrj_NSh"},"value":"880000000","fwd_fee":"666672","ihr_fee":"0","created_lt":"34948872000005","body_hash":"lqKW0iTyhcZ77pPDD4owkVfw2qNdxbh+QQt4YwoJz8c=","msg_data":{"@type":"msg.dataRaw","body":"te6cckEBAQEAAgAAAEysuc0=","init_state":""}},"out_msgs":[]}],"previous_transaction_id":{"@type":"internal.transactionId","lt":"34925318000006","hash":"YsAb3Pf4oUwn7H6MFZCnH26CqdosbJnAlzfg3KTW4H4="}}</value>
336336
</data>
337+
<data name="Smc_Forget" xml:space="preserve">
338+
<value>{"@type":"smc.forget","id":1}</value>
339+
</data>
340+
<data name="Smc_GetCode" xml:space="preserve">
341+
<value>{"@type":"smc.getCode","id":1}</value>
342+
</data>
343+
<data name="Smc_GetData" xml:space="preserve">
344+
<value>{"@type":"smc.getData","id":1}</value>
345+
</data>
346+
<data name="Smc_GetState" xml:space="preserve">
347+
<value>{"@type":"smc.getState","id":1}</value>
348+
</data>
349+
<data name="Smc_Info" xml:space="preserve">
350+
<value>{"@type":"smc.info","id":1}</value>
351+
</data>
352+
<data name="Smc_Load" xml:space="preserve">
353+
<value>{"@type":"smc.load","account_address":{"@type":"accountAddress","account_address":"EQBYLTm4nsvoqJRvs_L-IGNKwWs5RKe19HBK_lFadf19FUfb"}}</value>
354+
</data>
355+
<data name="Smc_LoadByTransaction" xml:space="preserve">
356+
<value>{"@type":"smc.loadByTransaction","account_address":{"@type":"accountAddress","account_address":"EQBYLTm4nsvoqJRvs_L-IGNKwWs5RKe19HBK_lFadf19FUfb"},"transaction_id":{"@type":"internal.transactionId","lt":9984095000003,"hash":"Q54pwYEYuIj41\u002Bgcw0azQKVZT0hune9g45AYdWWzoUY="}}</value>
357+
</data>
358+
<data name="Smc_MethodIdName" xml:space="preserve">
359+
<value>{"@type":"smc.methodIdName","name":"counter"}</value>
360+
</data>
361+
<data name="Smc_MethodIdNumber" xml:space="preserve">
362+
<value>{"@type":"smc.methodIdNumber","number":2}</value>
363+
</data>
364+
<data name="Smc_RunGetMethod" xml:space="preserve">
365+
<value>{"@type":"smc.runGetMethod","id":1,"method":{"@type":"smc.methodIdName","name":"counter"}}</value>
366+
</data>
367+
<data name="Smc_RunResult" xml:space="preserve">
368+
<value>{"@type":"smc.runResult","gas_used":479,"stack":[{"@type":"tvm.stackEntryNumber","number":{"@type":"tvm.numberDecimal","number":"1674271323360"}}],"exit_code":123}</value>
369+
</data>
337370
<data name="Sync" xml:space="preserve">
338371
<value>{"@type":"sync"}</value>
339372
</data>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TonLibDotNet.Types.Smc
2+
{
3+
public class InfoTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_Info);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<Info>(baseObj);
13+
14+
Assert.Equal(1, obj.Id);
15+
}
16+
}
17+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace TonLibDotNet.Types.Smc
2+
{
3+
public class LibraryEntryTests
4+
{
5+
[Fact(Skip = "No sample data")]
6+
public void DeserializeOk()
7+
{
8+
// Nothing
9+
}
10+
}
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
namespace TonLibDotNet.Types.Smc
2+
{
3+
public class MethodIdNameTests
4+
{
5+
[Fact]
6+
public void DeserializeOk()
7+
{
8+
var baseObj = new TonJsonSerializer().Deserialize(SampleValues.Smc_MethodIdName);
9+
10+
Assert.NotNull(baseObj);
11+
12+
var obj = Assert.IsType<MethodIdName>(baseObj);
13+
14+
Assert.Equal("counter", obj.Name);
15+
}
16+
}
17+
}

0 commit comments

Comments
 (0)