/// <param name="settings">Application config</param> /// <param name="storage">Permanent storage object</param> /// <param name="useLegacyOrderbook"></param> public ExecutionContext(BaseSettings settings, IStorage storage, StellarDataProviderBase stellarDataProvider, bool useLegacyOrderbook = false) { PermanentStorage = storage ?? throw new ArgumentNullException(nameof(storage)); Settings = settings ?? throw new ArgumentNullException(nameof(settings)); StellarDataProvider = stellarDataProvider ?? throw new ArgumentNullException(nameof(settings)); ExtensionsManager = new ExtensionsManager(settings.ExtensionsConfigFilePath); PersistenceManager = new PersistenceManager(PermanentStorage); QuantumProcessor = new QuantumProcessorsStorage(); PendingUpdatesManager = new PendingUpdatesManager(this); PendingUpdatesManager.OnBatchSaved += PendingUpdatesManager_OnBatchSaved; QuantumStorage = new QuantumStorage(); this.useLegacyOrderbook = useLegacyOrderbook; }
public virtual async Task Init() { DynamicSerializersInitializer.Init(); await PermanentStorage.OpenConnection(Settings.ConnectionString); //try to load last settings, we need it to know current auditors var lastHash = new byte[] { }; var lastApex = await PersistenceManager.GetLastApex(); if (lastApex >= 0) { var lastQuantum = await PersistenceManager.GetQuantum(lastApex); lastHash = lastQuantum.Message.ComputeHash(); var snapshot = await PersistenceManager.GetSnapshot(lastApex); await Setup(snapshot); if (IsAlpha) { AppState.State = ApplicationState.Rising;//Alpha should ensure that it has all quanta from auditors } else { AppState.State = ApplicationState.Running; } } else { //if no snapshot, the application is in initialization state AppState.State = ApplicationState.WaitingForInit; } var lastQuantumApex = lastApex < 0 ? 0 : lastApex; QuantumStorage.Init(lastQuantumApex, lastHash); QuantumHandler.Start(); }