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