X: Activating Burner service

This commit is contained in:
2026-08-14 20:26:11 +02:00
parent c70be47c27
commit 7d1557932d
4 changed files with 66 additions and 18 deletions
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 MiB

@@ -409,7 +409,7 @@ public final class EvelynIOUBurnerServiceImpl
} }
ΩPriceΩ inputPriceInUsdc; ΩPriceΩ inputPriceInUsdc;
if (USDC_ID.equals(currencyId)) { if (USDC_ID.equals(currencyId) || USDT_ID.equals(currencyId)) {
inputPriceInUsdc = BigDecimal.ONE; inputPriceInUsdc = BigDecimal.ONE;
} else { } else {
inputPriceInUsdc = findFreshPrice( inputPriceInUsdc = findFreshPrice(
@@ -895,15 +895,15 @@ public final class EvelynIOUBurnerServiceImpl
); );
if (canonicalCurrency == null) { if (canonicalCurrency == null) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"CIS returned null for " + purpose + " UUID " "CIS returned <null> for " + purpose + " UUID "
+ currencyId + currencyId
); );
} }
if (!currencyId.equals(canonicalCurrency.id())) { if (!currencyId.equals(canonicalCurrency.id())) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"CIS returned canonical currency UUID " "CIS returned canonical currency UUID '"
+ canonicalCurrency.id() + canonicalCurrency.id()
+ " while resolving " + "' while resolving "
+ currencyId + currencyId
); );
} }
@@ -2,7 +2,10 @@ package com.r35157.nenjim.hubd.impl.ref;
import com.fanitas.evelyn.core.Evelyn; import com.fanitas.evelyn.core.Evelyn;
import com.fanitas.evelyn.core.impl.ref.EvelynImpl; import com.fanitas.evelyn.core.impl.ref.EvelynImpl;
import com.fanitas.evelyn.service.burner.EvelynIOUBurnerService;
import com.fanitas.evelyn.service.burner.impl.ref.EvelynIOUBurnerServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.r35157.assetaz.services.cis.CurrencyTypeIds;
import com.r35157.assetaz.services.ticker.plugins.pricesource.PriceSource; import com.r35157.assetaz.services.ticker.plugins.pricesource.PriceSource;
import com.r35157.assetaz.services.ticker.TickerService; import com.r35157.assetaz.services.ticker.TickerService;
import com.r35157.assetaz.services.ticker.plugins.pricesource.impl.hardcoded.HardcodedPriceSource; import com.r35157.assetaz.services.ticker.plugins.pricesource.impl.hardcoded.HardcodedPriceSource;
@@ -18,9 +21,12 @@ import com.r35157.jupiterperpsalarm.JupiterPerpsAlarm;
import com.r35157.jupiterperpsalarm.impl.ref.JupiterPerpsAlarmImpl; import com.r35157.jupiterperpsalarm.impl.ref.JupiterPerpsAlarmImpl;
import com.r35157.libs.jupiter.perps.JupiterPerpsService; import com.r35157.libs.jupiter.perps.JupiterPerpsService;
import com.r35157.libs.jupiter.perps.impl.anchoridl.AnchorIdlJupiterPerpsServiceImpl; import com.r35157.libs.jupiter.perps.impl.anchoridl.AnchorIdlJupiterPerpsServiceImpl;
import com.r35157.libs.jupiter.swap.JupiterSwapService;
import com.r35157.libs.jupiter.swap.impl.ref.JupiterSwapServiceImpl;
import com.r35157.libs.objcache.ObjectCache; import com.r35157.libs.objcache.ObjectCache;
import com.r35157.libs.objcache.impl.ref.ObjectCacheImpl; import com.r35157.libs.objcache.impl.ref.ObjectCacheImpl;
import com.r35157.libs.solana.impl.cached.CachedSolanaBlockChain; import com.r35157.libs.solana.impl.cached.CachedSolanaBlockChain;
import com.r35157.libs.valuetypes.basic.MoneyAmount;
import com.r35157.nenjim.composer.NenjimComposer; import com.r35157.nenjim.composer.NenjimComposer;
import com.r35157.nenjim.composer.impl.ref.NenjimComposerImpl; import com.r35157.nenjim.composer.impl.ref.NenjimComposerImpl;
import com.r35157.nenjim.hubd.NenjimHub; import com.r35157.nenjim.hubd.NenjimHub;
@@ -33,6 +39,8 @@ import com.r35157.libs.raydium.impl.ref.RaydiumImpl;
import com.r35157.libs.solana.SolanaBlockChain; import com.r35157.libs.solana.SolanaBlockChain;
import com.r35157.libs.solana.impl.ref.SolanaBlockChainImpl; import com.r35157.libs.solana.impl.ref.SolanaBlockChainImpl;
import com.r35157.libs.valuetypes.basic.TradingPair; import com.r35157.libs.valuetypes.basic.TradingPair;
import com.r35157.service.notification.BoundNotificationService;
import com.r35157.service.notification.impl.discord.DiscordNotificationServiceImpl;
import com.r35157.stm.SodaTaskManager; import com.r35157.stm.SodaTaskManager;
import com.r35157.stm.impl.ref.SodaTaskManagerImpl; import com.r35157.stm.impl.ref.SodaTaskManagerImpl;
import com.r35157.suwimo.hub.client.SuwimoClient; import com.r35157.suwimo.hub.client.SuwimoClient;
@@ -41,9 +49,13 @@ import crypto.r35157.nenjim.NenjimProcess;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.net.URI;
import java.net.http.HttpClient; import java.net.http.HttpClient;
import java.time.Clock; import java.time.Clock;
import java.time.Duration;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import static com.r35157.assetaz.services.cis.CurrencyTypeIds.EVE_ID; import static com.r35157.assetaz.services.cis.CurrencyTypeIds.EVE_ID;
@@ -66,17 +78,18 @@ public class NenjimHubImpl implements NenjimHub {
log.info("Starting:"); log.info("Starting:");
log.info(" Services..."); log.info(" Services...");
tickerService.start(); tickerService.start();
jupiterPerpsAlarm.start(); //jupiterPerpsAlarm.start();
evelynServiceProd.start(); evelynServiceProd.start();
evelynServiceTest.start(); evelynServiceTest.start();
evelynIOUBurnerServiceProd.start();
log.info(" Applications..."); log.info(" Applications...");
missionControl.start(); missionControl.start();
nenjimComposer.start(); //nenjimComposer.start();
processManager.start(); //processManager.start();
testTool.start(); //testTool.start();
sodaTaskManager.start(); //sodaTaskManager.start();
suwimoClient.start(); //suwimoClient.start();
System.out.println("Done - Now online!"); System.out.println("Done - Now online!");
@@ -154,6 +167,11 @@ public class NenjimHubImpl implements NenjimHub {
"evelyn_perps_prod", "evelyn_perps_prod",
solanaBlockChain solanaBlockChain
); );
solanaWalletEvelynBurnerProd = new SolanaWalletImpl(
"5kjVTc1rebYHg56NyTxSSN1XMKqT2E81eWiaSx1CmzmV",
"evelyn_burner_prod",
solanaBlockChain
);
} }
private void initializePlugins() { private void initializePlugins() {
@@ -189,6 +207,32 @@ public class NenjimHubImpl implements NenjimHub {
evelynServiceTest = new EvelynImpl("Test", tickerService, eveUSDT, clockUTC); evelynServiceTest = new EvelynImpl("Test", tickerService, eveUSDT, clockUTC);
jupiterSwapService = new JupiterSwapServiceImpl(solanaBlockChain, solanaWalletEvelynBurnerProd);
discordAssetAZTokenNotificationService = new DiscordNotificationServiceImpl(
URI.create("https://discordapp.com/api/webhooks/1537799046025187458/RtoNR5HnGmnutsMfM8AKP8mLDVqP1AxpEQ3p2IvBiaqVOjuVWNcShMkIh2D9uT27Mt4A"),
"DiscordBot (https://git.r35157.com/r35157/com_r35157_nenjim-hubd-impl_ref, 0.1)",
Duration.ofSeconds(10)
);
List<MoneyAmount> burnTokenCandidates = List.of(new MoneyAmount(new ΩAmountΩ("0.1"), cis.resolve(CurrencyTypeIds.USDT_ID)));
ΩUSDCAmountΩ maximumSwapAmountPerIterationInUSD = new ΩUSDCAmountΩ("0.25");
evelynIOUBurnerServiceProd = new EvelynIOUBurnerServiceImpl(
solanaWalletEvelynBurnerProd,
jupiterSwapService,
solanaBlockChain,
tickerService,
cis,
discordAssetAZTokenNotificationService,
burnTokenCandidates,
maximumSwapAmountPerIterationInUSD,
200,
2*1000*60L,
Duration.ofSeconds(10),
Duration.ofHours(1)
);
// TODO: Old but more correct way to auto start plugins - but it is currently broken. // TODO: Old but more correct way to auto start plugins - but it is currently broken.
/* /*
String[] processesToAutoStart = { String[] processesToAutoStart = {
@@ -208,12 +252,12 @@ public class NenjimHubImpl implements NenjimHub {
} }
private void initializeApplications() { private void initializeApplications() {
nenjimComposer = new NenjimComposerImpl(); //nenjimComposer = new NenjimComposerImpl();
processManager = new NenjimProcessManagerImpl(); //processManager = new NenjimProcessManagerImpl();
testTool = new NenjimTestToolImpl(); //testTool = new NenjimTestToolImpl();
sodaTaskManager = new SodaTaskManagerImpl(); //sodaTaskManager = new SodaTaskManagerImpl();
missionControl = new EvelynMissionControlImpl(evelynServiceProd, evelynServiceTest); missionControl = new EvelynMissionControlImpl(evelynServiceProd, evelynServiceTest);
suwimoClient = new SuwimoClientImpl(); //suwimoClient = new SuwimoClientImpl();
} }
private void waitForAndShutdown() throws InterruptedException { private void waitForAndShutdown() throws InterruptedException {
@@ -253,6 +297,7 @@ public class NenjimHubImpl implements NenjimHub {
private SolanaWallet evelynPerpsProd; private SolanaWallet evelynPerpsProd;
private SolanaWallet solanaWalletEvelynPerpsProd; private SolanaWallet solanaWalletEvelynPerpsProd;
private SolanaWallet solanaWalletEvelynPerpsTest; private SolanaWallet solanaWalletEvelynPerpsTest;
private SolanaWallet solanaWalletEvelynBurnerProd;
private JupiterPerpsService jupiterServicePerpsProd; private JupiterPerpsService jupiterServicePerpsProd;
private JupiterPerpsService jupiterServicePerpsTest; private JupiterPerpsService jupiterServicePerpsTest;
@@ -265,6 +310,9 @@ public class NenjimHubImpl implements NenjimHub {
private JupiterPerpsAlarm jupiterPerpsAlarm; private JupiterPerpsAlarm jupiterPerpsAlarm;
private Evelyn evelynServiceProd; private Evelyn evelynServiceProd;
private Evelyn evelynServiceTest; private Evelyn evelynServiceTest;
private JupiterSwapService jupiterSwapService;
private BoundNotificationService discordAssetAZTokenNotificationService;
private EvelynIOUBurnerService evelynIOUBurnerServiceProd;
// Applications // Applications
private EvelynMissionControl missionControl; private EvelynMissionControl missionControl;
@@ -20,7 +20,7 @@ import java.util.Map;
* Synchronously delivers bound notification messages through a Discord * Synchronously delivers bound notification messages through a Discord
* incoming webhook. * incoming webhook.
*/ */
public class DiscordNotificationService implements BoundNotificationService { public class DiscordNotificationServiceImpl implements BoundNotificationService {
/** /**
* Creates a service bound to a canonical Discord incoming-webhook endpoint. * Creates a service bound to a canonical Discord incoming-webhook endpoint.
@@ -44,7 +44,7 @@ public class DiscordNotificationService implements BoundNotificationService {
* the required Discord format, or if the * the required Discord format, or if the
* timeout is null, zero, or negative * timeout is null, zero, or negative
*/ */
public DiscordNotificationService( public DiscordNotificationServiceImpl(
@NotNull ΩRestEndpointΩ discordWebhookEndpoint, @NotNull ΩRestEndpointΩ discordWebhookEndpoint,
@NotNull ΩUserAgentΩ userAgent, @NotNull ΩUserAgentΩ userAgent,
@NotNull Duration timeout @NotNull Duration timeout
@@ -134,7 +134,7 @@ public class DiscordNotificationService implements BoundNotificationService {
|| !endpoint.isAbsolute() || !endpoint.isAbsolute()
|| !"https".equalsIgnoreCase(endpoint.getScheme()) || !"https".equalsIgnoreCase(endpoint.getScheme())
|| endpoint.getHost() == null || endpoint.getHost() == null
|| !"discord.com".equalsIgnoreCase(endpoint.getHost()) || !"discordapp.com".equalsIgnoreCase(endpoint.getHost())
|| endpoint.getUserInfo() != null || endpoint.getUserInfo() != null
|| endpoint.getFragment() != null || endpoint.getFragment() != null
|| endpoint.getQuery() != null || endpoint.getQuery() != null