Skip to content

Commit f9432c9

Browse files
authored
Deposit QSR command for pillars and sentinels (#3)
1 parent ad1d613 commit f9432c9

File tree

3 files changed

+98
-2
lines changed

3 files changed

+98
-2
lines changed

src/ZenonCli/Options/Pillar.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,14 @@ public class Collect : KeyStoreAndConnectionOptions
5151
{
5252
}
5353

54-
[Verb("pillar.withdrawQsr", HelpText = "")]
54+
[Verb("pillar.depositQsr", HelpText = "Deposit QSR to the pillar contract")]
55+
public class DepositQsr : KeyStoreAndConnectionOptions
56+
{
57+
[Value(0, Required = true, MetaName = "amount")]
58+
public long Amount { get; set; }
59+
}
60+
61+
[Verb("pillar.withdrawQsr", HelpText = "Withdraw deposited QSR from the pillar contract")]
5562
public class WithdrawQsr : KeyStoreAndConnectionOptions
5663
{
5764
}

src/ZenonCli/Options/Sentinel.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,14 @@ public class Collect : KeyStoreAndConnectionOptions
2424
{
2525
}
2626

27-
[Verb("sentinel.withdrawQsr", HelpText = "")]
27+
[Verb("sentinel.depositQsr", HelpText = "Deposit QSR to the sentinel contract")]
28+
public class DepositQsr : KeyStoreAndConnectionOptions
29+
{
30+
[Value(0, Required = true, MetaName = "amount")]
31+
public long Amount { get; set; }
32+
}
33+
34+
[Verb("sentinel.withdrawQsr", HelpText = "Withdraw deposited QSR from the sentinel contract")]
2835
public class WithdrawQsr : KeyStoreAndConnectionOptions
2936
{
3037
}

src/ZenonCli/Program.cs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,9 @@ private static async Task RunAsync(object obj)
117117
case Sentinel.Collect sec:
118118
await ProcessAsync(sec);
119119
break;
120+
case Sentinel.DepositQsr sedq:
121+
await ProcessAsync(sedq);
122+
break;
120123
case Sentinel.WithdrawQsr sewq:
121124
await ProcessAsync(sewq);
122125
break;
@@ -152,6 +155,9 @@ private static async Task RunAsync(object obj)
152155
case Pillar.Collect pc:
153156
await ProcessAsync(pc);
154157
break;
158+
case Pillar.DepositQsr pd:
159+
await ProcessAsync(pd);
160+
break;
155161
case Pillar.WithdrawQsr pw:
156162
await ProcessAsync(pw);
157163
break;
@@ -828,6 +834,44 @@ static async Task ProcessAsync(Sentinel.Collect options)
828834
WriteInfo($"Use receiveAll to collect your Sentinel reward(s) after 1 momentum");
829835
}
830836

837+
static async Task ProcessAsync(Sentinel.DepositQsr options)
838+
{
839+
var tokenStandard = TokenStandard.QsrZts;
840+
var address = Znn.Instance.DefaultKeyPair.Address;
841+
842+
if (options.Amount <= 0)
843+
{
844+
WriteError($"The amount must be positive");
845+
return;
846+
}
847+
848+
var account = await Znn.Instance.Ledger
849+
.GetAccountInfoByAddress(address);
850+
851+
var balance = account.BalanceInfoList
852+
.FirstOrDefault(x => x.Token.TokenStandard == tokenStandard);
853+
854+
if (balance == null)
855+
{
856+
WriteError($"You only have {FormatAmount(0, 0)} {tokenStandard} tokens");
857+
return;
858+
}
859+
860+
var amount = options.Amount * balance.Token.DecimalsExponent;
861+
862+
if (balance.Balance < amount)
863+
{
864+
WriteError($"You only have {FormatAmount(balance.Balance.Value, balance.Token.Decimals)} {balance.Token.Symbol} tokens");
865+
return;
866+
}
867+
868+
WriteInfo($"Depositing {FormatAmount(amount, balance.Token.Decimals)} {balance.Token.Symbol} ...");
869+
870+
await Znn.Instance.Send(Znn.Instance.Embedded.Sentinel.DepositQsr(amount));
871+
872+
WriteInfo("Done");
873+
}
874+
831875
static async Task ProcessAsync(Sentinel.WithdrawQsr options)
832876
{
833877
var address = Znn.Instance.DefaultKeyPair.Address;
@@ -1112,6 +1156,44 @@ static async Task ProcessAsync(Pillar.Collect options)
11121156
WriteInfo($"Use receiveAll to collect your Pillar reward(s) after 1 momentum");
11131157
}
11141158

1159+
static async Task ProcessAsync(Pillar.DepositQsr options)
1160+
{
1161+
var tokenStandard = TokenStandard.QsrZts;
1162+
var address = Znn.Instance.DefaultKeyPair.Address;
1163+
1164+
if (options.Amount <= 0)
1165+
{
1166+
WriteError($"The amount must be positive");
1167+
return;
1168+
}
1169+
1170+
var account = await Znn.Instance.Ledger
1171+
.GetAccountInfoByAddress(address);
1172+
1173+
var balance = account.BalanceInfoList
1174+
.FirstOrDefault(x => x.Token.TokenStandard == tokenStandard);
1175+
1176+
if (balance == null)
1177+
{
1178+
WriteError($"You only have {FormatAmount(0, 0)} {tokenStandard} tokens");
1179+
return;
1180+
}
1181+
1182+
var amount = options.Amount * balance.Token.DecimalsExponent;
1183+
1184+
if (balance.Balance < amount)
1185+
{
1186+
WriteError($"You only have {FormatAmount(balance.Balance.Value, balance.Token.Decimals)} {balance.Token.Symbol} tokens");
1187+
return;
1188+
}
1189+
1190+
WriteInfo($"Depositing {FormatAmount(amount, balance.Token.Decimals)} {balance.Token.Symbol} ...");
1191+
1192+
await Znn.Instance.Send(Znn.Instance.Embedded.Pillar.DepositQsr(amount));
1193+
1194+
WriteInfo("Done");
1195+
}
1196+
11151197
static async Task ProcessAsync(Pillar.WithdrawQsr options)
11161198
{
11171199
var address = Znn.Instance.DefaultKeyPair.Address;

0 commit comments

Comments
 (0)