Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for ZIP: MoonBaZe-0001 aka BigInt #5

Merged
merged 18 commits into from Aug 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/publish.yml
Expand Up @@ -4,6 +4,8 @@ on:
push:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

jobs:
build:
Expand Down
78 changes: 44 additions & 34 deletions README.md
Expand Up @@ -20,11 +20,13 @@ dotnet add package Zenon.Sdk
```csharp
using Zenon;

var nodeUrl = new Uri("ws://nodes.zenon.place:35998");
var nodeUrl = new Uri("ws://my.hc1node.com:35998");

await Znn.Instance.Client.Value.StartAsync(nodeUrl);
var znnClient = Znn.Instance;

await znnClient.Client.Value.StartAsync(nodeUrl);
...
await Znn.Instance.Client.Value.StopAsync();
await znnClient.Client.Value.StopAsync();
```

### Generate wallet
Expand All @@ -35,10 +37,12 @@ using Zenon;
var wallet = "name";
var passphrase = "secret";

Znn.Instance.DefaultKeyStorePath =
Znn.Instance.KeyStoreManager.CreateNew(passphrase, wallet);
Znn.Instance.DefaultKeyStore =
Znn.Instance.KeyStoreManager.ReadKeyStore(passphrase, Znn.Instance.DefaultKeyStorePath);
var znnClient = Znn.Instance;

znnClient.DefaultKeyStorePath =
znnClient.KeyStoreManager.CreateNew(passphrase, wallet);
znnClient.DefaultKeyStore =
znnClient.KeyStoreManager.ReadKeyStore(passphrase, znnClient.DefaultKeyStorePath);
```

### Generate wallet from mnemonic
Expand All @@ -51,37 +55,41 @@ var passphrase = "secret";
var mnemonic =
"route become dream access impulse price inform obtain engage ski believe awful absent pig thing vibrant possible exotic flee pepper marble rural fire fancy";

Znn.Instance.DefaultKeyStorePath =
Znn.Instance.KeyStoreManager.CreateFromMnemonic(mnemonic, passphrase, wallet);
Znn.Instance.DefaultKeyStore =
Znn.Instance.KeyStoreManager.ReadKeyStore(passphrase, Znn.Instance.DefaultKeyStorePath);
var znnClient = Znn.Instance;

znnClient.DefaultKeyStorePath =
znnClient.KeyStoreManager.CreateFromMnemonic(mnemonic, passphrase, wallet);
znnClient.DefaultKeyStore =
znnClient.KeyStoreManager.ReadKeyStore(passphrase, znnClient.DefaultKeyStorePath);
```

### Sending a transaction

```csharp
using Zenon;

var nodeUrl = new Uri("ws://nodes.zenon.place:35998");
var nodeUrl = new Uri("ws://my.hc1node.com:35998");
var wallet = "name";
var passphrase = "secret";
var mnemonic =
"route become dream access impulse price inform obtain engage ski believe awful absent pig thing vibrant possible exotic flee pepper marble rural fire fancy";

Znn.Instance.DefaultKeyStorePath =
Znn.Instance.KeyStoreManager.CreateFromMnemonic(mnemonic, passphrase, wallet);
Znn.Instance.DefaultKeyStore =
Znn.Instance.KeyStoreManager.ReadKeyStore(passphrase, Znn.Instance.DefaultKeyStorePath);
Znn.Instance.DefaultKeyPair =
Znn.Instance.DefaultKeyStore.GetKeyPair(); // Use primary address
var znnClient = Znn.Instance;

await Znn.Instance.Client.Value.StartAsync(nodeUrl);
znnClient.DefaultKeyStorePath =
znnClient.KeyStoreManager.CreateFromMnemonic(mnemonic, passphrase, wallet);
znnClient.DefaultKeyStore =
znnClient.KeyStoreManager.ReadKeyStore(passphrase, znnClient.DefaultKeyStorePath);
znnClient.DefaultKeyPair =
await znnClient.DefaultKeyStore.GetSignerAsync(0); // Use primary address

var tx = Znn.Instance.Embedded.Pillar.CollectReward();
await znnClient.Client.Value.StartAsync(nodeUrl);

await Znn.Instance.Send(tx);
var tx = znnClient.Embedded.Pillar.CollectReward();

await Znn.Instance.Client.Value.StopAsync();
await znnClient.Send(tx);

await znnClient.Client.Value.StopAsync();
```

### Receive a transaction
Expand All @@ -90,35 +98,37 @@ await Znn.Instance.Client.Value.StopAsync();
using Zenon;
using Zenon.Model.NoM;

var nodeUrl = new Uri("ws://nodes.zenon.place:35998");
var nodeUrl = new Uri("ws://my.hc1node.place:35998");
var wallet = "name";
var passphrase = "secret";
var mnemonic =
"route become dream access impulse price inform obtain engage ski believe awful absent pig thing vibrant possible exotic flee pepper marble rural fire fancy";

Znn.Instance.DefaultKeyStorePath =
Znn.Instance.KeyStoreManager.CreateFromMnemonic(mnemonic, passphrase, wallet);
Znn.Instance.DefaultKeyStore =
Znn.Instance.KeyStoreManager.ReadKeyStore(passphrase, Znn.Instance.DefaultKeyStorePath);
Znn.Instance.DefaultKeyPair =
Znn.Instance.DefaultKeyStore.GetKeyPair(); // Use primary address
var znnClient = Znn.Instance;

znnClient.DefaultKeyStorePath =
znnClient.KeyStoreManager.CreateFromMnemonic(mnemonic, passphrase, wallet);
znnClient.DefaultKeyStore =
znnClient.KeyStoreManager.ReadKeyStore(passphrase, znnClient.DefaultKeyStorePath);
znnClient.DefaultKeyPair =
await znnClient.DefaultKeyStore.GetSignerAsync(0); // Use primary address

await Znn.Instance.Client.Value.StartAsync(nodeUrl);
await znnClient.Client.Value.StartAsync(nodeUrl);

var result = await Znn.Instance.Ledger
.GetUnreceivedBlocksByAddress(Znn.Instance.DefaultKeyPair.Address);
var result = await znnClient.Ledger
.GetUnreceivedBlocksByAddress(await znnClient.DefaultKeyPair.GetAddressAsync());

if (result.Count != 0)
{
foreach (var item in result.List)
{
var tx = AccountBlockTemplate.Receive(item.Hash);

await Znn.Instance.Send(tx);
await znnClient.Send(tx);
}
}

await Znn.Instance.Client.Value.StopAsync();
await znnClient.Client.Value.StopAsync();
```

## Contributing
Expand Down
37 changes: 33 additions & 4 deletions src/Zenon.Tests/Api/ApiTest.cs
@@ -1,5 +1,6 @@
using FluentAssertions;
using System;
using System.Numerics;
using System.Threading.Tasks;
using Xunit;
using Zenon.Api.Embedded;
Expand Down Expand Up @@ -545,6 +546,34 @@ public async Task ListResponseAsync(string toAddress, int pageIndex, int pageSiz
result.List.Should().NotBeEmpty();
}
}

public class GetFeeTokenPair
{
public GetFeeTokenPair()
{
this.MethodName = "embedded.bridge.getFeeTokenPair";
}

public string MethodName { get; }

[Theory]
[InlineData("zts1znnxxxxxxxxxxxxx9z4ulx", "Zenon.Resources.api.embedded.bridge.getFeeTokenPair.json")]
public async Task SingleResponseAsync(string tokenStandard, string resourceName)
{
// Setup
var zts = TokenStandard.Parse(tokenStandard);
var api = new BridgeApi(new Lazy<IClient>(() => new TestClient()
.WithMethod(this.MethodName, zts.ToString())
.WithManifestResourceTextResponse(resourceName)));

// Execute
var result = await api.GetFeeTokenPair(zts);

// Validate
result.Should().NotBeNull();
result.TokenStandard.Should().Be(zts);
}
}
}

public class Liquidity
Expand Down Expand Up @@ -1529,17 +1558,17 @@ public async Task ListResponseAsync(string address, int pageIndex, int pageSize,
public class GetPlasmaByQsr
{
[Theory]
[InlineData(100.21, 210441)]
public async Task SingleResponseAsync(double qsrAmount, long expectedResult)
[InlineData("10021000000", "21044100000000")]
public async Task SingleResponseAsync(string qsrAmount, string expectedResult)
{
// Setup
var api = new PlasmaApi(new Lazy<IClient>(() => new TestClient()));

// Execute
var result = await api.GetPlasmaByQsr(qsrAmount);
var result = await api.GetPlasmaByQsr(BigInteger.Parse(qsrAmount));

// Validate
result.Should().Be(expectedResult);
result.Should().Be(BigInteger.Parse(expectedResult));
}
}

Expand Down