mirror of
https://github.com/logos-storage/logos-storage-network-crawler.git
synced 2026-01-02 13:33:08 +00:00
58 lines
1.7 KiB
Nim
58 lines
1.7 KiB
Nim
import pkg/ethers
|
|
import pkg/questionable
|
|
import ./marketplace/market
|
|
import ./marketplace/marketplace
|
|
import ../config
|
|
import ../component
|
|
import ../state
|
|
|
|
logScope:
|
|
topics = "marketplace"
|
|
|
|
type MarketplaceService* = ref object of Component
|
|
state: State
|
|
market: ?OnChainMarket
|
|
|
|
method getRecentSlotFillEvents*(
|
|
m: MarketplaceService
|
|
): Future[?!seq[SlotFilled]] {.async: (raises: []), base.} =
|
|
# There is (aprox.) 1 block every 10 seconds.
|
|
# 10 seconds * 6 * 60 = 3600 = 1 hour.
|
|
let blocksAgo = 6 * 60
|
|
|
|
if market =? m.market:
|
|
try:
|
|
return success(await market.queryPastSlotFilledEvents(blocksAgo))
|
|
except CatchableError as err:
|
|
return failure(err.msg)
|
|
return failure("MarketplaceService is not started")
|
|
|
|
method start*(m: MarketplaceService): Future[?!void] {.async.} =
|
|
# Todo:
|
|
# - subscribe to requestSubmitted -> add id to list
|
|
# - queryPastStorageRequestedEvents from 3 months ago (max duration) -> add ids to list
|
|
# for list:
|
|
# - get status of request
|
|
# if running:
|
|
# - sum total bytes
|
|
# else:
|
|
# - remove from list
|
|
|
|
let provider = JsonRpcProvider.new(m.state.config.ethProvider)
|
|
without marketplaceAddress =? Address.init(m.state.config.marketplaceAddress):
|
|
return failure("Invalid MarketplaceAddress provided")
|
|
|
|
let marketplace = Marketplace.new(marketplaceAddress, provider)
|
|
m.market = some(OnChainMarket.new(marketplace))
|
|
|
|
return success()
|
|
|
|
method stop*(m: MarketplaceService): Future[?!void] {.async.} =
|
|
return success()
|
|
|
|
proc new(T: type MarketplaceService, state: State): MarketplaceService =
|
|
return MarketplaceService(state: state, market: none(OnChainMarket))
|
|
|
|
proc createMarketplace*(state: State): MarketplaceService =
|
|
return MarketplaceService.new(state)
|