diff --git a/codexcrawler/installer.nim b/codexcrawler/installer.nim index 42153bd..5101897 100644 --- a/codexcrawler/installer.nim +++ b/codexcrawler/installer.nim @@ -17,9 +17,6 @@ import ./components/todolist proc createComponents*(state: State): Future[?!seq[Component]] {.async.} = var components: seq[Component] = newSeq[Component]() - - await aaa(state.config) - let clock = createClock() without dht =? (await createDht(state)), err: @@ -31,6 +28,7 @@ proc createComponents*(state: State): Future[?!seq[Component]] {.async.} = let metrics = createMetrics(state.config.metricsAddress, state.config.metricsPort) todoList = createTodoList(state, metrics) + marketplace = createMarketplace(state) without dhtMetrics =? createDhtMetrics(state, metrics), err: return failure(err) @@ -41,5 +39,6 @@ proc createComponents*(state: State): Future[?!seq[Component]] {.async.} = components.add(Crawler.new(state, dht, todoList)) components.add(TimeTracker.new(state, nodeStore, dht, clock)) components.add(dhtMetrics) + components.add(marketplace) return success(components) diff --git a/codexcrawler/services/marketplace.nim b/codexcrawler/services/marketplace.nim index 4872ffe..c1f037b 100644 --- a/codexcrawler/services/marketplace.nim +++ b/codexcrawler/services/marketplace.nim @@ -4,27 +4,50 @@ import pkg/questionable import ./marketplace/market import ./marketplace/marketplace import ../config +import ../component +import ../state -proc aaa*(config: Config) {.async.} = - echo "aaa" +logScope: + topics = "marketplace" - let provider = JsonRpcProvider.new(config.ethProvider) - without marketplaceAddress =? Address.init(config.marketplaceAddress): - raiseAssert("A!") +type + MarketplaceService* = ref object of Component + state: State + market: ?OnChainMarket + +method getZkeyhash*(m: MarketplaceService): Future[?!string] {.async: (raises: []), base.} = + try: + if market =? m.market: + without zkeyhash =? await market.getZkeyHash(): + return failure("Failed to get zkeyHash") + return success(zkeyhash) + return failure("MarketplaceService is not started") + except CatchableError as err: + return failure("Error while getting zkeyHash: " & err.msg) + +method start*(m: MarketplaceService): Future[?!void] {.async.} = + 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) - let market = OnChainMarket.new(marketplace) + m.market = some(OnChainMarket.new(marketplace)) - echo "bbb" - echo "running with marketplace address: " & $marketplaceAddress + return success() - try: - without zkeyhash =? await market.getZkeyHash(): - echo "couldn't get zkeyhash" - return - echo "zkeyhash=" & $zkeyhash +method stop*(m: MarketplaceService): Future[?!void] {.async.} = + return success() - except CatchableError as err: - echo "catchable error! " & err.msg +proc new( + T: type MarketplaceService, + state: State +): MarketplaceService = + return MarketplaceService( + state: state, + market: none(OnChainMarket) + ) - echo "ccc" +proc createMarketplace*(state: State): MarketplaceService = + return MarketplaceService.new( + state + ) diff --git a/tests/codexcrawler/mocks/mockmarketplace.nim b/tests/codexcrawler/mocks/mockmarketplace.nim new file mode 100644 index 0000000..c38d865 --- /dev/null +++ b/tests/codexcrawler/mocks/mockmarketplace.nim @@ -0,0 +1,21 @@ +import pkg/ethers +import pkg/questionable + +import ./marketplace/market +import ./marketplace/marketplace +import ../config +import ../component +import ../state + +logScope: + topics = "marketplace" + +type + MockMarketplaceService* = ref object of MarketplaceService + zkeyHashReturn*: ?!string + +method getZkeyhash*(m: MockMarketplaceService): Future[?!string] {.async: (raises: []).} = + return m.zkeyHashReturn + +proc createMockMarketplaceService*(): MockMarketplaceService = + MockMarketplaceService()