Adds mint command
This commit is contained in:
parent
991927b95f
commit
2b10f2ec58
|
@ -1,15 +1,19 @@
|
||||||
using CodexPlugin;
|
using CodexContractsPlugin;
|
||||||
|
using Core;
|
||||||
using Discord.WebSocket;
|
using Discord.WebSocket;
|
||||||
|
using GethPlugin;
|
||||||
|
|
||||||
namespace BiblioTech
|
namespace BiblioTech
|
||||||
{
|
{
|
||||||
public abstract class BaseNetCommand : BaseCommand
|
public abstract class BaseNetCommand : BaseCommand
|
||||||
{
|
{
|
||||||
private readonly DeploymentsFilesMonitor monitor;
|
private readonly DeploymentsFilesMonitor monitor;
|
||||||
|
private readonly CoreInterface ci;
|
||||||
|
|
||||||
public BaseNetCommand(DeploymentsFilesMonitor monitor)
|
public BaseNetCommand(DeploymentsFilesMonitor monitor, CoreInterface ci)
|
||||||
{
|
{
|
||||||
this.monitor = monitor;
|
this.monitor = monitor;
|
||||||
|
this.ci = ci;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override async Task Invoke(SocketSlashCommand command)
|
protected override async Task Invoke(SocketSlashCommand command)
|
||||||
|
@ -26,9 +30,16 @@ namespace BiblioTech
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await Execute(command, deployments.Single());
|
var codexDeployment = deployments.Single();
|
||||||
|
var gethDeployment = codexDeployment.GethDeployment;
|
||||||
|
var contractsDeployment = codexDeployment.CodexContractsDeployment;
|
||||||
|
|
||||||
|
var gethNode = ci.WrapGethDeployment(gethDeployment);
|
||||||
|
var contracts = ci.WrapCodexContractsDeployment(contractsDeployment);
|
||||||
|
|
||||||
|
await Execute(command, gethNode, contracts);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract Task Execute(SocketSlashCommand command, CodexDeployment codexDeployment);
|
protected abstract Task Execute(SocketSlashCommand command, IGethNode gethNode, ICodexContracts contracts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,15 +33,18 @@ namespace BiblioTech
|
||||||
ProjectPlugin.Load<CodexContractsPlugin.CodexContractsPlugin>();
|
ProjectPlugin.Load<CodexContractsPlugin.CodexContractsPlugin>();
|
||||||
|
|
||||||
var entryPoint = new EntryPoint(new ConsoleLog(), new KubernetesWorkflow.Configuration(
|
var entryPoint = new EntryPoint(new ConsoleLog(), new KubernetesWorkflow.Configuration(
|
||||||
kubeConfigFile: null, // todo: readonly file
|
kubeConfigFile: null,
|
||||||
operationTimeout: TimeSpan.FromMinutes(5),
|
operationTimeout: TimeSpan.FromMinutes(5),
|
||||||
retryDelay: TimeSpan.FromSeconds(10),
|
retryDelay: TimeSpan.FromSeconds(10),
|
||||||
kubernetesNamespace: "not-applicable"), "datafiles");
|
kubernetesNamespace: "not-applicable"), "datafiles");
|
||||||
|
|
||||||
var monitor = new DeploymentsFilesMonitor();
|
var monitor = new DeploymentsFilesMonitor();
|
||||||
|
|
||||||
|
var ci = entryPoint.CreateInterface();
|
||||||
|
|
||||||
var handler = new CommandHandler(client,
|
var handler = new CommandHandler(client,
|
||||||
new GetBalanceCommand(monitor));
|
new GetBalanceCommand(monitor, ci),
|
||||||
|
new MintCommand(monitor, ci));
|
||||||
|
|
||||||
await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);
|
await client.LoginAsync(TokenType.Bot, Config.ApplicationToken);
|
||||||
await client.StartAsync();
|
await client.StartAsync();
|
||||||
|
|
|
@ -9,29 +9,21 @@ namespace BiblioTech.TokenCommands
|
||||||
public class GetBalanceCommand : BaseNetCommand
|
public class GetBalanceCommand : BaseNetCommand
|
||||||
{
|
{
|
||||||
private readonly EthAddressOption ethOption = new EthAddressOption();
|
private readonly EthAddressOption ethOption = new EthAddressOption();
|
||||||
private readonly CoreInterface ci;
|
|
||||||
|
|
||||||
public GetBalanceCommand(DeploymentsFilesMonitor monitor, CoreInterface ci)
|
public GetBalanceCommand(DeploymentsFilesMonitor monitor, CoreInterface ci)
|
||||||
: base(monitor)
|
: base(monitor, ci)
|
||||||
{
|
{
|
||||||
this.ci = ci;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Name => "balance";
|
public override string Name => "balance";
|
||||||
public override string Description => "Shows Eth and TestToken balance of an eth address.";
|
public override string Description => "Shows Eth and TestToken balance of an eth address.";
|
||||||
public override CommandOption[] Options => new[] { ethOption };
|
public override CommandOption[] Options => new[] { ethOption };
|
||||||
|
|
||||||
protected override async Task Execute(SocketSlashCommand command, CodexDeployment codexDeployment)
|
protected override async Task Execute(SocketSlashCommand command, IGethNode gethNode, ICodexContracts contracts)
|
||||||
{
|
{
|
||||||
var addr = await ethOption.Parse(command);
|
var addr = await ethOption.Parse(command);
|
||||||
if (addr == null) return;
|
if (addr == null) return;
|
||||||
|
|
||||||
var gethDeployment = codexDeployment.GethDeployment;
|
|
||||||
var contractsDeployment = codexDeployment.CodexContractsDeployment;
|
|
||||||
|
|
||||||
var gethNode = ci.WrapGethDeployment(gethDeployment);
|
|
||||||
var contracts = ci.WrapCodexContractsDeployment(contractsDeployment);
|
|
||||||
|
|
||||||
var eth = gethNode.GetEthBalance(addr);
|
var eth = gethNode.GetEthBalance(addr);
|
||||||
var testTokens = contracts.GetTestTokenBalance(gethNode, addr);
|
var testTokens = contracts.GetTestTokenBalance(gethNode, addr);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
using CodexContractsPlugin;
|
||||||
|
using Core;
|
||||||
|
using Discord.WebSocket;
|
||||||
|
using GethPlugin;
|
||||||
|
|
||||||
|
namespace BiblioTech.TokenCommands
|
||||||
|
{
|
||||||
|
public class MintCommand : BaseNetCommand
|
||||||
|
{
|
||||||
|
private readonly string nl = Environment.NewLine;
|
||||||
|
private readonly Ether defaultEthToSend = 10.Eth();
|
||||||
|
private readonly TestToken defaultTestTokensToMint = 1024.TestTokens();
|
||||||
|
private readonly EthAddressOption ethOption = new EthAddressOption();
|
||||||
|
|
||||||
|
public MintCommand(DeploymentsFilesMonitor monitor, CoreInterface ci)
|
||||||
|
: base(monitor, ci)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override string Name => "mint";
|
||||||
|
public override string Description => "Mint some TestTokens and send some Eth to the address if its balance is low.";
|
||||||
|
public override CommandOption[] Options => new[] { ethOption };
|
||||||
|
|
||||||
|
protected override async Task Execute(SocketSlashCommand command, IGethNode gethNode, ICodexContracts contracts)
|
||||||
|
{
|
||||||
|
var addr = await ethOption.Parse(command);
|
||||||
|
if (addr == null) return;
|
||||||
|
|
||||||
|
var report =
|
||||||
|
ProcessEth(gethNode, addr) +
|
||||||
|
ProcessTestTokens(gethNode, contracts, addr);
|
||||||
|
|
||||||
|
await command.RespondAsync(report);
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ProcessTestTokens(IGethNode gethNode, ICodexContracts contracts, EthAddress addr)
|
||||||
|
{
|
||||||
|
var testTokens = contracts.GetTestTokenBalance(gethNode, addr);
|
||||||
|
if (testTokens.Amount < 64m)
|
||||||
|
{
|
||||||
|
contracts.MintTestTokens(gethNode, addr, defaultTestTokensToMint);
|
||||||
|
return $"Minted {defaultTestTokensToMint}." + nl;
|
||||||
|
}
|
||||||
|
return "TestToken balance over threshold." + nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ProcessEth(IGethNode gethNode, EthAddress addr)
|
||||||
|
{
|
||||||
|
var eth = gethNode.GetEthBalance(addr);
|
||||||
|
if (eth.Eth < 1.0m)
|
||||||
|
{
|
||||||
|
gethNode.SendEth(addr, defaultEthToSend);
|
||||||
|
return $"Sent {defaultEthToSend}." + nl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "Eth balance over threshold." + nl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue