Giter VIP home page Giter VIP logo

etheriumtesttask's Introduction

Весь проект разделен на 2 части, по задачам

Daemon: запись информации о транзакциях в БД

Api: поиск самого большого изменения по абсолютному значению

Инструкция по запуску:

Задача #1 Daemon:

Так как выборка данных происходит довольно медленно, я начал не с адреса 9842805, а отступил от последнего блока 20 блоков и начал с него, сначала в базу запишутся транзакции из последних 20 блоков, а затем обновление будет в реальном времени, если нужно больше блоков - в файле config.ts можно поменять отступ в переменной "offsetFromLastBlock"

  1. Развернуть СУБД PostgreSQL, я делал в докере, в директории dockerDB лежит скрипт:
    cd dockerDB
    sh ./createDb.sh
    Он развернет docker контейнер с базой и создаст в ней таблицу
  2. Устанавливаем зависимости:
    npm install
  3. Запускаем:
    npm run startDaemon

Пример того как должна выглядеть программа:

База данных с транзакциями:

Задача #2 Api:

  1. Устанавливаем зависимости (если еще не установили):

    npm install
  2. Запускаем сервер:

    npm run startApi
  3. Переходим по адресу:

    localhost:3000
  4. Нажимаем кнопку "Get max abs value" и ждем

Выборка данных занимает много времени (http запросы), поэтому ожидание 100 блоков и расчет транзакций занимает около 50 сек., в файле config.ts в переменной "calcBlockCount" можно поменять количество выбираемых блоков

Пример того как должна выглядеть программа:

Логика работы

Задача #1 Daemon:

При старте инициализируется последний блок. В бесконечном цикле сравнивается текущий номер блока и последний, если текущий меньше чем последний то проихсодит выборка транзакций и запись в БД, если же номер текущего блока дошел до последнего то проихсходит обновление последнего блока

Задача #2 Api:

При отправке post запроса происходит выборка последних 100 блоков по порядку, из каждого извлекаются транзакции, и записываются в Map<string, number>, то есть Map хранит в себе адрес и сумму, изначально сумма инициализируется нулем. Каждая транзакция содержит адреса отправителя и получателя, это означает что отправленное значение в каждой транзакции уменьшается у отправителя и увеличивается у получателя:

addresses[transaction[].from] = 0

addresses[transaction[].to] = 0

addresses[transaction[].from] -= transaction[].value

addresses[transaction[].to] += transaction[].value

etheriumtesttask's People

Contributors

alexanderyarushin avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.