Skip to content

Commit

Permalink
Addiitonal information in the web node
Browse files Browse the repository at this point in the history
  • Loading branch information
maxirmx committed Jul 17, 2024
1 parent 64e52b6 commit 7a17cff
Show file tree
Hide file tree
Showing 19 changed files with 391 additions and 71 deletions.
53 changes: 53 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,59 @@ jobs:
min-versions-to-keep: 1
delete-only-untagged-versions: 'true'

release-web-node:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write

steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true

- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: maxirmx
password: ${{ secrets.GITHUB_TOKEN }}

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/maxirmx/dkg-web-node
tags: |
type=schedule
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=sha
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
file: dkgWebNode/Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

- name: Purge old versions
if: contains(github.ref, 'refs/tags/v')
continue-on-error: true
uses: actions/delete-package-versions@v5
with:
package-name: dkg-web-node
package-type: 'container'
min-versions-to-keep: 1
delete-only-untagged-versions: 'true'

release-dkg-node:
runs-on: ubuntu-latest
permissions:
Expand Down
44 changes: 42 additions & 2 deletions dkgCommon/Models/StatusResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,30 +24,70 @@
// POSSIBILITY OF SUCH DAMAGE.

using dkgCommon.Constants;
using System.Threading.Tasks;

namespace dkgCommon.Models
{
public class StatusResponse
{
public int RoundId { get; set; }
public RStatus RoundStatus { get; set; }
public int LastRoundId { get; set; }
public RStatus LastRoundStatus { get; set; }
public int? LastRoundResult { get; set; } = null;
public NStatus Status { get; set; }
public NStatus LastStatus { get; set; }
public int? LastNodeRandom { get; set; } = null;
public string[] Data { get; set; }

public StatusResponse()
{
RoundId = -1;
RoundId = 0;
LastRoundId = 0;
Status = NStatus.Unknown;
LastStatus = NStatus.Unknown;
RoundStatus = RStatus.Unknown;
LastRoundStatus = RStatus.Unknown;
Data = [];
}
public StatusResponse(int roundId, NStatus status)
{
RoundId = roundId;
LastRoundId = 0;
Status = status;
LastStatus = NStatus.Unknown;
RoundStatus = RStatus.Unknown;
LastRoundStatus = RStatus.Unknown;
Data = [];

}
public StatusResponse(int roundId, RStatus roundStatus,
int lastRoundId, RStatus lastRoundStatus, int? lastRoundResult,
NStatus status, NStatus lastStatus, int? lastNodeRandom)
{
RoundId = roundId;
RoundStatus = roundStatus;
LastRoundId = lastRoundId;
LastRoundStatus = lastRoundStatus;
LastRoundResult = lastRoundResult;
Status = status;
LastStatus = lastStatus;
LastNodeRandom = lastNodeRandom;
Data = [];
}
public StatusResponse(int roundId, NStatus status, string[] data)
public StatusResponse(int roundId, RStatus roundStatus,
int lastRoundId, RStatus lastRoundStatus, int? lastRoundResult,
NStatus status, NStatus lastStatus, int? lastNodeRandom,
string[] data)
{
RoundId = roundId;
RoundStatus = roundStatus;
LastRoundId = lastRoundId;
LastRoundStatus = lastRoundStatus;
LastRoundResult = lastRoundResult;
Status = status;
LastStatus = lastStatus;
LastNodeRandom = lastNodeRandom;
Data = data;
}
public override string ToString()
Expand Down
55 changes: 49 additions & 6 deletions dkgNodeLibrary/Services/DkgNodeService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
using dkgCommon.Models;

using static dkgCommon.Constants.NStatus;
using System.Text.RegularExpressions;


namespace dkgNode.Services
Expand All @@ -46,9 +47,49 @@ public class DkgNodeService
// Node Status and Round
internal NStatus Status { get; set; } = NotRegistered;
internal int? Round { get; set; } = null;
internal RStatus RoundStatus { get; set; } = RStatus.Unknown;
public int? LastRound { get; set; } = null;
public RStatus LastRoundStatus { get; set; } = RStatus.Unknown;
public string LastRoundResult { get; set; } = "N/A";
public NStatus LastNodeStatus { get; set; } = Unknown;
public string LastNodeRandom { get; set; } = "N/A";
public NStatus GetStatus() => Status;
public int? GetRound() => Round;
public void SetStatus(NStatus status)
public RStatus GetRoundStatus() => RoundStatus;
public int? GetLastRound() => LastRound;
public RStatus GetLastRoundStatus() => LastRoundStatus;
public string GetLastRoundResult() => LastRoundResult;
public NStatus GetLastNodeStatus() => LastNodeStatus;
public string GetLastNodeRandom() => LastNodeRandom;
private static string FormatResult(int? result)
{
if (result == null)
{
return "N/A";
}

string str = result.Value.ToString("D6");
string formatted = Regex.Replace(str, ".{2}", "$0 ").Trim();
return formatted;
}

public void SetStatus(StatusResponse statusResponse)
{
Status = statusResponse.Status;
Round = statusResponse.RoundId;
RoundStatus = (Round is not null && Round > 0) ? statusResponse.RoundStatus : RStatus.Unknown;
if (statusResponse.LastRoundId != 0)
{
LastRound = statusResponse.LastRoundId;
LastRoundStatus = statusResponse.LastRoundStatus;
LastRoundResult = FormatResult(statusResponse.LastRoundResult);
LastNodeStatus = statusResponse.LastStatus;
LastNodeRandom = FormatResult(statusResponse.LastNodeRandom);
}

NotifyDkgStateChanged();
}
public void SetStatusOnly(NStatus status)
{
Status = status;
NotifyDkgStateChanged();
Expand All @@ -57,19 +98,21 @@ public void SetStatusAndRound(NStatus status, int round)
{
Status = status;
Round = round;
RoundStatus = (Round is not null && Round > 0) ? RStatus.NotStarted : RStatus.Unknown;
NotifyDkgStateChanged();
}
public void SetStatusClearRound(NStatus status)
{
Status = status;
Round = null;
RoundStatus = RStatus.Unknown;
NotifyDkgStateChanged();
}

// ...
internal Secp256k1Group G { get; }
internal IScalar PrivateKey { get; set; } // Приватный ключ этого узла
internal IPoint PublicKey { get; set; } // Публичный ключ этого узла
internal IScalar? PrivateKey { get; set; } // Приватный ключ этого узла
internal IPoint? PublicKey { get; set; } // Публичный ключ этого узла

// Пороговое значение для верификации ключа, то есть сколько нужно валидных commitment'ов
// Алгоритм Шамира допускает минимальное значение = N/2+1, где N - количество участников
Expand Down Expand Up @@ -216,7 +259,7 @@ public async Task RunDkg(HttpClient httpClient, string[] encodedPublicKeys, Canc
{
Logger.LogError("'{Name}': failed to parse service node response '{responseContent}' from '{ServiceNodeUrl}'\n{Message}",
Name, encodedPublicKeys, ServiceNodeUrl, ex.Message);
SetStatus(Failed);
SetStatusOnly(Failed);
return;
}

Expand Down Expand Up @@ -366,7 +409,7 @@ public async Task<StatusResponse> ReportStatus(HttpClient httpClient, string[]?
{
Logger.LogDebug("'{Name}': Changing node state to {Status}", Name, statusResponse.Status);
if (statusResponse.Status == NotRegistered || statusResponse.RoundId == 0) SetStatusClearRound(statusResponse.Status);
else SetStatus(statusResponse.Status);
else SetStatus(statusResponse);
}
}
}
Expand Down Expand Up @@ -405,7 +448,7 @@ private string[] RunDkgStepOne()

try
{
Dkg = DistKeyGenerator.CreateDistKeyGenerator(G, PrivateKey, PublicKeys, Threshold) ??
Dkg = DistKeyGenerator.CreateDistKeyGenerator(G, PrivateKey!, PublicKeys, Threshold) ??
throw new Exception($"Could not create distributed key generator/handler");
deals = Dkg.GetDistDeals() ??
throw new Exception($"Could not get a list of deals");
Expand Down
Loading

0 comments on commit 7a17cff

Please sign in to comment.