github.com/diadata-org/diadata@v1.4.593/documentation/tutorials/exchange-scrapers/alephium/alephium-ayin-dex-scraper-flow.puml (about) 1 @startuml 2 3 legend top left 4 1. Asset collector service fetches all swap assets from AYIN exchange - and stores to DB(dia.Pool) with liquidity=0 5 2. Exchange scraper polls alephium REST API - to get info about swap events 6 3. Liquidity scraper fills liquidity via alephium REST API 7 end legend 8 9 box "DEX scraper" #LightBlue 10 participant "Asset collector" as assetCollector 11 participant "Scraper" as scraper 12 participant "Liquidity" as liquidity 13 participant "Storage" as storage 14 participant "Stream" as stream #LightGreen 15 end box 16 17 box Alephium 18 participant "Alephium node https://node.mainnet.alephium.org/docs" as anode 19 participant "Alephium backend https://backend.mainnet.alephium.org/docs" as abackend 20 end box 21 22 == Get tokens data - symbol, decimals, name - asset collector == 23 24 group "Asset collector" 25 26 autonumber 27 assetCollector -> abackend++: get all swap contract addresses 28 abackend -> assetCollector--++: swap contract response ([]string) 29 loop Each swap contract address 30 assetCollector -> anode--++: Get token id pair for swap contract address 31 anode -> assetCollector--++: response with token pair 32 assetCollector -> anode--++: Multicall contract - give me token's data(name, symbol, decimals) 33 anode -> assetCollector--++: multicall response 34 assetCollector -> storage--++: Adopt data to dia.Asset and store to dia.Asset and to dia.Pool 35 end 36 37 deactivate storage 38 deactivate assetCollector 39 40 end group 41 42 43 == DEX scraper == 44 45 group "Listen swap events(eventIndex=7)" 46 47 scraper -> storage--++: get data from DB - dia.Pool 48 storage -> scraper--++: response tokens - ready for use (dia.Pool([]dia.Asset)) 49 50 loop Each swap contract address 51 scraper -> abackend--++: Get events for token 52 abackend -> scraper--++: Decode data 53 scraper -> anode--++: get transaction details to fill Timestamp in dia.Trade 54 anode -> scraper--++: decode data, fill dia.Trade struct, 55 scraper -> stream--++: send decoded data to next stream handler 56 end 57 58 end group 59 60 == Liquidity scraper == 61 62 group "Receive pool liquidity data" 63 64 liquidity -> storage--++: get data from DB - dia.Pool 65 storage -> liquidity--++: response tokens - ready for use (dia.Pool([]dia.Asset)) 66 67 loop Each pool contract address(dia.Pool) 68 liquidity -> anode--++: Get liquidity data 69 anode -> liquidity--++: Decode data 70 liquidity -> storage--++: Store data 71 end 72 73 deactivate storage 74 deactivate liquidity 75 76 end group 77 78 @enduml 79