Skip to content

Commit

Permalink
Deposit QSR command for pillars and sentinels (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
KingGorrin committed Jun 20, 2023
1 parent ad1d613 commit f9432c9
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 2 deletions.
9 changes: 8 additions & 1 deletion src/ZenonCli/Options/Pillar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,14 @@ public class Collect : KeyStoreAndConnectionOptions
{
}

[Verb("pillar.withdrawQsr", HelpText = "")]
[Verb("pillar.depositQsr", HelpText = "Deposit QSR to the pillar contract")]
public class DepositQsr : KeyStoreAndConnectionOptions
{
[Value(0, Required = true, MetaName = "amount")]
public long Amount { get; set; }
}

[Verb("pillar.withdrawQsr", HelpText = "Withdraw deposited QSR from the pillar contract")]
public class WithdrawQsr : KeyStoreAndConnectionOptions
{
}
Expand Down
9 changes: 8 additions & 1 deletion src/ZenonCli/Options/Sentinel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,14 @@ public class Collect : KeyStoreAndConnectionOptions
{
}

[Verb("sentinel.withdrawQsr", HelpText = "")]
[Verb("sentinel.depositQsr", HelpText = "Deposit QSR to the sentinel contract")]
public class DepositQsr : KeyStoreAndConnectionOptions
{
[Value(0, Required = true, MetaName = "amount")]
public long Amount { get; set; }
}

[Verb("sentinel.withdrawQsr", HelpText = "Withdraw deposited QSR from the sentinel contract")]
public class WithdrawQsr : KeyStoreAndConnectionOptions
{
}
Expand Down
82 changes: 82 additions & 0 deletions src/ZenonCli/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,9 @@ private static async Task RunAsync(object obj)
case Sentinel.Collect sec:
await ProcessAsync(sec);
break;
case Sentinel.DepositQsr sedq:
await ProcessAsync(sedq);
break;
case Sentinel.WithdrawQsr sewq:
await ProcessAsync(sewq);
break;
Expand Down Expand Up @@ -152,6 +155,9 @@ private static async Task RunAsync(object obj)
case Pillar.Collect pc:
await ProcessAsync(pc);
break;
case Pillar.DepositQsr pd:
await ProcessAsync(pd);
break;
case Pillar.WithdrawQsr pw:
await ProcessAsync(pw);
break;
Expand Down Expand Up @@ -828,6 +834,44 @@ static async Task ProcessAsync(Sentinel.Collect options)
WriteInfo($"Use receiveAll to collect your Sentinel reward(s) after 1 momentum");
}

static async Task ProcessAsync(Sentinel.DepositQsr options)
{
var tokenStandard = TokenStandard.QsrZts;
var address = Znn.Instance.DefaultKeyPair.Address;

if (options.Amount <= 0)
{
WriteError($"The amount must be positive");
return;
}

var account = await Znn.Instance.Ledger
.GetAccountInfoByAddress(address);

var balance = account.BalanceInfoList
.FirstOrDefault(x => x.Token.TokenStandard == tokenStandard);

if (balance == null)
{
WriteError($"You only have {FormatAmount(0, 0)} {tokenStandard} tokens");
return;
}

var amount = options.Amount * balance.Token.DecimalsExponent;

if (balance.Balance < amount)
{
WriteError($"You only have {FormatAmount(balance.Balance.Value, balance.Token.Decimals)} {balance.Token.Symbol} tokens");
return;
}

WriteInfo($"Depositing {FormatAmount(amount, balance.Token.Decimals)} {balance.Token.Symbol} ...");

await Znn.Instance.Send(Znn.Instance.Embedded.Sentinel.DepositQsr(amount));

WriteInfo("Done");
}

static async Task ProcessAsync(Sentinel.WithdrawQsr options)
{
var address = Znn.Instance.DefaultKeyPair.Address;
Expand Down Expand Up @@ -1112,6 +1156,44 @@ static async Task ProcessAsync(Pillar.Collect options)
WriteInfo($"Use receiveAll to collect your Pillar reward(s) after 1 momentum");
}

static async Task ProcessAsync(Pillar.DepositQsr options)
{
var tokenStandard = TokenStandard.QsrZts;
var address = Znn.Instance.DefaultKeyPair.Address;

if (options.Amount <= 0)
{
WriteError($"The amount must be positive");
return;
}

var account = await Znn.Instance.Ledger
.GetAccountInfoByAddress(address);

var balance = account.BalanceInfoList
.FirstOrDefault(x => x.Token.TokenStandard == tokenStandard);

if (balance == null)
{
WriteError($"You only have {FormatAmount(0, 0)} {tokenStandard} tokens");
return;
}

var amount = options.Amount * balance.Token.DecimalsExponent;

if (balance.Balance < amount)
{
WriteError($"You only have {FormatAmount(balance.Balance.Value, balance.Token.Decimals)} {balance.Token.Symbol} tokens");
return;
}

WriteInfo($"Depositing {FormatAmount(amount, balance.Token.Decimals)} {balance.Token.Symbol} ...");

await Znn.Instance.Send(Znn.Instance.Embedded.Pillar.DepositQsr(amount));

WriteInfo("Done");
}

static async Task ProcessAsync(Pillar.WithdrawQsr options)
{
var address = Znn.Instance.DefaultKeyPair.Address;
Expand Down

0 comments on commit f9432c9

Please sign in to comment.