A web interface for viewing market data from Project Serum, on the Solana blockchain.

Overview

serum-data

A web interface for viewing market data from Project Serum, on the Solana blockchain.

serum-data

Building

Requirements (if not using Docker)

  • Java 17
  • Maven

Building with Maven

mvn clean install

Running in Docker container (pre-built image)

docker pull mmorrell/serum-data:latest
docker run -p 8080:8080 serum-data

Running in Docker container (self-build)

docker build -t serum-data .
docker run -p 8080:8080 serum-data

With custom Solana RPC:

docker build -t serum-data .
docker run -e OPENSERUM_ENDPOINT="http://localhost:8899/" -p 8080:8080 serum-data

With one of the preset RPC validators (GENESYSGO, PROJECT_SERUM). Default is GENEYSGO:

docker build -t serum-data .
docker run -e OPENSERUM_ENDPOINT=PROJECT_SERUM -p 8080:8080 serum-data

Entire server setup (3 scripts) (Docker, Nginx, Ufw, Blue + Green)

These scripts will install NGINX, Docker, and enable UFW on port 22 and 80. It will also start a Blue and Green instance of the application.

curl -sSL https://raw.githubusercontent.com/skynetcap/serum-data/main/scripts/setup.sh | sh
curl -sSL https://raw.githubusercontent.com/skynetcap/serum-data/main/scripts/blue_start.sh | sh
curl -sSL https://raw.githubusercontent.com/skynetcap/serum-data/main/scripts/green_start.sh | sh

Special Thanks

YourKit for providing us with a free profiler open source license.

YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. YourKit is the creator of YourKit Java Profiler, YourKit .NET Profiler, and YourKit YouMonitor.

YourKit Logo

Contributing

Open an issue with details, or pull request with changes.

License

MIT License

Comments
  • Feature: Show maker in trade history

    Feature: Show maker in trade history

    Background: Currently the Trade History window shows price, quantity and taker.

    Feature Idea: Add a maker column to the trade history window.

    Additional Solution Notes: Useful to see which makers are actually getting filled.

    enhancement 
    opened by davidkzeng 4
  • Feature: Allow copying of full market pubkey

    Feature: Allow copying of full market pubkey

    Feature Idea: Please add the ability to copy the full market public key, as well as potentially the bids/asks keys and event queue. Showing lot sizes somewhere could also be cool. Maybe an 'Advanced Info' kind of pane that doesn't need to be shown by default. Would find this very useful as a dev.

    enhancement 
    opened by riordanp 2
  • Feature: Async order book updates [SRM-41]

    Feature: Async order book updates [SRM-41]

    Background: We currently user HTTP polling to get data from our APIs every 1200ms for the order book.

    Feature Idea: Use websockets to connect to the Solana RPC server, and also host our own WSS endpoint to proxy the updates to the user's browser.

    Additional Solution Notes: Tracking: SRM-41

    enhancement priority 
    opened by skynetcap 2
  • Docs: Add API documentation generation

    Docs: Add API documentation generation

    Background: We need to automatically generate a markdown file that can be viewed on GitHub which describes all exposed APIs. This should occur during the maven build process.

    Feature Idea: Do this during maven build with the right plugins.

    Additional Solution Notes:

    • https://github.com/asciidoctor/asciidoctor-maven-plugin
    • https://github.com/springfox/springfox-demos/tree/master/boot-static-docs
    • https://www.javainuse.com/spring/boot_swagger
    • https://www.baeldung.com/spring-rest-openapi-documentation (Has "OpenAPI" standard too)
    enhancement good first issue 
    opened by skynetcap 2
  • Fix: Reduce index HTML rendering lag

    Fix: Reduce index HTML rendering lag

    There is a really inefficient loop somewhere, I think around the token list that was hacked together, adds at least 1-2 seconds to page load times. Remove the delay.

    priority 
    opened by skynetcap 2
  • Feature: Allow hyperlinking to a specific marketId

    Feature: Allow hyperlinking to a specific marketId

    e.g. openserum.io/?market=9wFFyRfZBsuAha4YcuxcXLKwMxJR43S7fPfQLusDBzvT (or some kind of modern permalinking)

    If the URL variable is present, set activeMarketId in javascript to it.

    enhancement priority 
    opened by skynetcap 2
  • Feature: Column for

    Feature: Column for "$ Total" on Orderbooks and Trade History

    Abstract

    Add a column called $ Total on each orderbook and trade history table.

    It will be calculated as follows: $ Total = Price * Quantity.

    This will produce the total $ amount being quoted for the given quote.

    enhancement 
    opened by skynetcap 2
  • Feature: Add multi-threading and retry when caching Tokens and Markets during startup

    Feature: Add multi-threading and retry when caching Tokens and Markets during startup

    Abstract

    As of now, 2 getProgramAccounts RPC requests are made to a Solana RPC server on startup, first to cache the USDC markets, then the SOL markets. They are very slow, and can timeout, causing startup to fail.

    Fix

    1. Add multi-threading to the 2 RPC calls, so they are made concurrently. CompleteableFuture may be preferred, or the most modern Java concurrency pattern that is elegant.
    2. If RPC timeout is experienced during either of the threads, retry up to 3 times.
    enhancement good first issue 
    opened by skynetcap 2
  • [SRM-129] Geyser Data Source

    [SRM-129] Geyser Data Source

    • Uses Geyser DB as data source for bid/ask/EQ accounts.
    • Running in alpha at https://alpha.openserum.io
    • Branch/PR is work in progress, won't be merged until complete and tested thoroughly.
    opened by skynetcap 1
  • Feature: RPC Fallback

    Feature: RPC Fallback

    Background: The app is susceptible to downtime if the RPC server goes down or falls behind slots.

    Feature Idea:

    • Fallback to a 2nd RPC server if the first one goes down, or falls behind slots

    Additional Solution Notes:

    • Anyone can pick this up, or it will be slightly lower in my backlog
    enhancement 
    opened by skynetcap 0
  • Feature: New view

    Feature: New view "All Open Orders by Pubkey" [SRM-42]

    Background: The user needs an easy view/table/page for entering or choosing a market maker entity or pubkey, and seeing all current open orders.

    Feature Idea: Create a new interface for viewing all open Serum orders for a given pubkey, or entity name.

    • Some sort of getProgramAccounts call, without market filters
    • Table row for each market
    • Chart showing pie chart of markets quoted

    Additional Solution Notes: Linear: SRM-42

    enhancement 
    opened by skynetcap 1
  • Metrics: Investigate tracing solutions

    Metrics: Investigate tracing solutions

    We need a solution to view all requests coming through via HTTP, and their whole stack trace and all methods called with timestamps/details, etc.

    I've done this with Splunk in a professional environment, but it is expensive/propreitary.

    Research for a web-based interface for viewing Java traces from HTTP requests.

    research 
    opened by skynetcap 0
  • Metrics: Add Spring metrics w/ custom metrics

    Metrics: Add Spring metrics w/ custom metrics

    Add Spring metrics to our library so it reports to JMX. Add custom metrics for JMX, to see marketIds hit (possibly). (Maybe just access to the cache map via JMX) Or other creative metrics.

    enhancement 
    opened by skynetcap 0
  • Feature: Table w/ top notional quoters on order book

    Feature: Table w/ top notional quoters on order book

    Display dataset in a table:

    • Rows: Owner
    • Columns: "Notional $ quoted on bid/ask" (aggregate for owner)
    • Sorted by: agg. notional, descending
    enhancement 
    opened by skynetcap 0
Releases(v2.1.3)
  • v2.1.3(Aug 20, 2022)

    What's Changed

    • Update header/footer by @skynetcap in https://github.com/skynetcap/serum-data/pull/118
    • Add ads.txt to controller by @skynetcap in https://github.com/skynetcap/serum-data/pull/119
    • Set ads.txt content type to text/plain by @skynetcap in https://github.com/skynetcap/serum-data/pull/120

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v2.1.2...v2.1.3

    Source code(tar.gz)
    Source code(zip)
  • v2.1.2(Aug 14, 2022)

    What's Changed

    • Clean up readme by @skynetcap in https://github.com/skynetcap/serum-data/pull/115
    • Remove "null" token entries when Token isn't cached. by @skynetcap in https://github.com/skynetcap/serum-data/pull/116

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v2.1.1...v2.1.2

    Source code(tar.gz)
    Source code(zip)
  • v2.1.1(Aug 13, 2022)

    What's Changed

    • Weekend optimizations by @skynetcap in https://github.com/skynetcap/serum-data/pull/114

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v2.1.0...v2.1.1

    Source code(tar.gz)
    Source code(zip)
  • v2.1.0(Aug 13, 2022)

    What's Changed

    • Downgrade from Spring 3 to Spring 2.7 by @skynetcap in https://github.com/skynetcap/serum-data/pull/113
    • Add Yourkit configuration to Dockerfile comments by @skynetcap in https://github.com/skynetcap/serum-data/pull/111
    • Disable caching for trade history API by @skynetcap in https://github.com/skynetcap/serum-data/pull/112

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v2.0.0...v2.1.0

    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Aug 12, 2022)

    2.0 Release - Geyser as a Data Source

    • Geyser is the new data source. 2x-3x better performance/updates than RPC.
    • RPC is fully deprecated, but will be maintained with security patches in the rpc branch.

    What's Changed

    • Merge main into Geyser branch by @skynetcap in https://github.com/skynetcap/serum-data/pull/105
    • [SRM-141] Mango Reverse Lookup by @skynetcap in https://github.com/skynetcap/serum-data/pull/106
    • [SRM-141] Fix external linking by @skynetcap in https://github.com/skynetcap/serum-data/pull/107
    • Refactor MarketManager for cleanliness, remove duplicate code. by @skynetcap in https://github.com/skynetcap/serum-data/pull/109
    • [SRM-129] Geyser Data Source by @skynetcap in https://github.com/skynetcap/serum-data/pull/102
    • Update version to 2.0.0 for the Geyser as a Data Source release. by @skynetcap in https://github.com/skynetcap/serum-data/pull/110

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.10...v2.0.0

    Source code(tar.gz)
    Source code(zip)
  • v1.2.10(Aug 12, 2022)

    What's Changed

    • Mango Account support (RPC version) by @skynetcap in https://github.com/skynetcap/serum-data/pull/108

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.9...v1.2.10

    Source code(tar.gz)
    Source code(zip)
  • v1.2.9(Aug 9, 2022)

    What's Changed

    • [SRM-134] Use SolanaFM as explorer by @skynetcap in https://github.com/skynetcap/serum-data/pull/103

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.8...v1.2.9

    Source code(tar.gz)
    Source code(zip)
  • v1.2.8(Aug 5, 2022)

    What's Changed

    • [SRM-126] Add Geyser diagram by @skynetcap in https://github.com/skynetcap/serum-data/pull/100
    • [SRM-130] Add new Jump Trading entity by @skynetcap in https://github.com/skynetcap/serum-data/pull/101

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.7...v1.2.8

    Source code(tar.gz)
    Source code(zip)
  • v1.2.7(Jul 31, 2022)

    What's Changed

    • [SRM-124] Fix token symbol permalinking by @skynetcap in https://github.com/skynetcap/serum-data/pull/98

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.6...v1.2.7

    Source code(tar.gz)
    Source code(zip)
  • v1.2.6(Jul 30, 2022)

    What's Changed

    • Fix permalink pathing by @skynetcap in https://github.com/skynetcap/serum-data/pull/97

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.5...v1.2.6

    Source code(tar.gz)
    Source code(zip)
  • v1.2.5(Jul 30, 2022)

    What's Changed

    • Styling update by @skynetcap in https://github.com/skynetcap/serum-data/pull/96

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.4...v1.2.5

    Source code(tar.gz)
    Source code(zip)
  • v1.2.4(Jul 30, 2022)

    What's Changed

    • [SRM-119] Add percentage bar background for each quote by @skynetcap in https://github.com/skynetcap/serum-data/pull/95

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.3...v1.2.4

    Source code(tar.gz)
    Source code(zip)
  • v1.2.3(Jul 28, 2022)

    What's Changed

    • [SRM-115] Add ImageProxyController by @skynetcap in https://github.com/skynetcap/serum-data/pull/93
    • Update popular markets list by @skynetcap in https://github.com/skynetcap/serum-data/pull/94

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.2...v1.2.3

    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Jul 27, 2022)

    What's Changed

    • Remove unnecessary info from bottom of bids/asks DataTables by @skynetcap in https://github.com/skynetcap/serum-data/pull/91
    • [SRM-112] Calculate best price (for notional) across all markets by @skynetcap in https://github.com/skynetcap/serum-data/pull/92

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.1...v1.2.2

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Jul 27, 2022)

    What's Changed

    • [SRM-111, #83] View: Market Detail by @skynetcap in https://github.com/skynetcap/serum-data/pull/90

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.2.0...v1.2.1

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Jul 26, 2022)

    • Upgrade from Java 11 to Java 17 (new requirement)
    • Spring Boot 3
    • Spring 6

    What's Changed

    • [SRM-113] Upgrade to Spring 6, Spring Boot 3 by @skynetcap in https://github.com/skynetcap/serum-data/pull/88
    • Disable remote debugging by default by @skynetcap in https://github.com/skynetcap/serum-data/pull/89

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.31...v1.2.0

    Source code(tar.gz)
    Source code(zip)
  • v1.1.31(Jul 25, 2022)

    What's Changed

    • [SRM-110] Improve/Condense vertical layout by @skynetcap in https://github.com/skynetcap/serum-data/pull/87

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.30...v1.1.31

    Source code(tar.gz)
    Source code(zip)
  • v1.1.30(Jul 25, 2022)

    What's Changed

    • [SRM-108] Show token search results as DataTable by @skynetcap in https://github.com/skynetcap/serum-data/pull/86

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.29...v1.1.30

    Source code(tar.gz)
    Source code(zip)
  • v1.1.29(Jul 23, 2022)

    What's Changed

    • Update nav + add Solend link by @skynetcap in https://github.com/skynetcap/serum-data/pull/84
    • Add Raydium's stable-swap market making wallet. by @skynetcap in https://github.com/skynetcap/serum-data/pull/85

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.28...v1.1.29

    Source code(tar.gz)
    Source code(zip)
  • v1.1.28(Jul 22, 2022)

    What's Changed

    • [SRM-107] Add Geyser design doc. by @skynetcap in https://github.com/skynetcap/serum-data/pull/81
    • [SRM-107] Add Geyser URL resources by @skynetcap in https://github.com/skynetcap/serum-data/pull/82
    • Add Mango link

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.27...v1.1.28

    Source code(tar.gz)
    Source code(zip)
  • v1.1.27(Jul 21, 2022)

    What's Changed

    • Disable browser caching explicitly by @skynetcap in https://github.com/skynetcap/serum-data/pull/80

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.26...v1.1.27

    Source code(tar.gz)
    Source code(zip)
  • v1.1.26(Jul 21, 2022)

    What's Changed

    • [SRM-106] Fix 2 Javascript NPEs by @skynetcap in https://github.com/skynetcap/serum-data/pull/79

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.25...v1.1.26

    Source code(tar.gz)
    Source code(zip)
  • v1.1.25(Jul 21, 2022)

    What's Changed

    • Disable browser-level caching by @skynetcap in https://github.com/skynetcap/serum-data/pull/78

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.24...v1.1.25

    Source code(tar.gz)
    Source code(zip)
  • v1.1.24(Jul 21, 2022)

    What's Changed

    • [SRM-104] Use cache on DataTable AJAX calls. by @skynetcap in https://github.com/skynetcap/serum-data/pull/77

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.23...v1.1.24

    Source code(tar.gz)
    Source code(zip)
  • v1.1.23(Jul 21, 2022)

  • v1.1.22(Jul 21, 2022)

  • v1.1.21(Jul 20, 2022)

    What's Changed

    • [SRM-98] Auto-detect new markets by @skynetcap in https://github.com/skynetcap/serum-data/pull/75
    • [SRM-99] Add token icons to /markets list by @skynetcap in https://github.com/skynetcap/serum-data/pull/76

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.20...v1.1.21

    Source code(tar.gz)
    Source code(zip)
  • v1.1.20(Jul 19, 2022)

    What's Changed

    • Fix erroneous/fake market listings ("11111..." Pubkey) by @skynetcap in https://github.com/skynetcap/serum-data/pull/74

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.19...v1.1.20

    Source code(tar.gz)
    Source code(zip)
  • v1.1.19(Jul 19, 2022)

    What's Changed

    • [SRM-97] Cache Serum markets for every quote mint. Update caching str… by @skynetcap in https://github.com/skynetcap/serum-data/pull/73

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.18...v1.1.19

    Source code(tar.gz)
    Source code(zip)
  • v1.1.18(Jul 18, 2022)

    What's Changed

    • [SRM-84] Show maker in Trade History [#57] by @skynetcap in https://github.com/skynetcap/serum-data/pull/72

    Full Changelog: https://github.com/skynetcap/serum-data/compare/v1.1.17...v1.1.18

    Source code(tar.gz)
    Source code(zip)
Owner
Michael Morrell
openserum.io
Michael Morrell
Create historical stock market simulation.

Market Simulation Create historical stock market simulation. THIS PROJECT IS MADE FOR SCHOOL! Overview Material designed for Java. Tested with openjdk

null 1 Jan 29, 2022
NFT sales tracking on the secondary market, on the Songbird network and notification via a Discord bot

SgbNftMarketDiscordBot Fork this project for any other chain using Ethereum Virtual Machine (EVM) like ETH, FLR, BSC etc If you like the project or fi

null 4 Jan 9, 2023
In this project, we will implement two Spring Boot Java Web application called, streamer-data-jpa and streamer-data-r2dbc.

In this project, we will implement two Spring Boot Java Web application called, streamer-data-jpa and streamer-data-r2dbc. They both will fetch 1 million of customer's data from MySQL and stream them to Kafka. The main goal is to compare the application's performance and resource utilization.

Ivan Franchin 6 Nov 2, 2022
jedibot is an application that aims to do beneficial actions on the Ethereum blockchain for the DeFi ecosystem while earning a profit for the user.

jedibot is an application that aims to do beneficial actions on the Ethereum blockchain for the DeFi ecosystem while earning a profit for the user. These actions include maintaining the DAI peg, providing liquidity and liquidating undercollateralized assets.

我是高天才! 10 Feb 5, 2022
MarioCash is a trust-based multi-dimensional blockchains built with a vision to connect everything and any blockchain networks.

MarioCash We will change the world by blockchain. What is mariocash? MARIOCASH is a trust-based multi-dimensional blockchains (branches) built with a

Brantley·Williams 23 Mar 10, 2022
BlockChain Pipeline using Jenkins for DevOps

BlockChain Pipeline for Jenkins This project is inspired by the work of Redback and Microsoft teams for developing the process using VSTS. I've chosen

Brantley·Williams 11 Jun 8, 2022
A blockchain system to manage monetary transactions between the different nodes of a decentralized network.

Blockchain under a clear vision A blockchain system to manage monetary transactions between the different nodes of a decentralized network. Authors @s

SamDik 3 Jun 9, 2022
Ethereum blockchain-based e-portfolio management application built using Web3j API, java and solidity languages.

Web3j-Java-based e-Portfolio Manager Ethereum blockchain-based e-portfolio mangement application built using Web3j API, java and solidity languages. W

ibelab 6 Oct 1, 2022
Restler is a library that automatically generates a client for a web service at run time, by analyzing the respective annotated Spring controller interface

Restler Overview Restler is a library that automatically generates a client for a web service at run time, by analyzing the respective annotated Sprin

Excelsior LLC 29 Oct 24, 2022
A fun mini project in Java. Uses Interface, Inheritance, and other OOP concepts

Sequences---Arithmetic-and-Geometric A fun mini project in Java. Uses Interface, Sorting, Inheritance, and other OOP concepts About this project: This

Urjit Aich 2 Feb 18, 2022
This repository is related to the Java Web Developer (ND035), Course - Web Services and APIs

About this Repository This repository is related to the Java Web Developer (ND035), Course - Web Services and APIs It contains the following folders:

Rasha Omran 1 Jan 28, 2022
The application consists of a web page with a list of some movies. The page allows user interaction through ratings of movies listed in the web app.

DSMovie About the project https://matheus-maia-alvarez-dsmovie.netlify.app/ DSMovie is a full stack web and mobile application built during the Spring

Matheus Maia Alvarez 6 Jul 21, 2022
JSON Web Token implementation for Java according to RFC 7519. Easily create, parse and validate JSON Web Tokens using a fluent API.

JWT-Java JSON Web Token library for Java according to RFC 7519. Table of Contents What are JSON Web Tokens? Header Payload Signature Features Supporte

Bastiaan Jansen 6 Jul 10, 2022
An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or to turn an existing project into a devops project using open source software (Git, Docker, Jenkins..)

DevOpsify Description An assistance platform made using Spring framework that analyses your code, and helps you either to start a devops project, or t

obaydah bouifadene 14 Nov 8, 2022
Sui - Modern super user interface implementation on Android.

Sui Modern super user interface (SUI) implementation on Android. The name, Sui, also comes from a character. Introduction Sui provides Java APIs, Shiz

Rikka apps 1k Jan 5, 2023
libraw4j - Java interface to the libraw library

libraw4j (1.0.0-SNAPSHOT) This is heavily W.I.P. Help is welcome! Java interface to the libraw library. Used for reading data from raw images. src/mai

Jacob Andersen 2 Apr 18, 2022
The Apache Commons CSV library provides a simple interface for reading and writing CSV files of various types.

Apache Commons CSV The Apache Commons CSV library provides a simple interface for reading and writing CSV files of various types. Documentation More i

The Apache Software Foundation 307 Dec 26, 2022
The Download Manager uses a simple yet effective GUI interface built with java’s Swing libraries

The Download Manager uses a simple yet effective GUI interface built with java’s Swing libraries.The use of Swing gives the interface a crisp, modern look and feel. The GUI maintains a list of downloads that are currently being managed.

Manish Kumar Mahawar 2 Jan 2, 2022
An easy-to-use Spigot library that implements a GUI interface within offhand maps.

MiniMapGUI An easy-to-use Spigot library that implements a GUI interface within offhand maps. Maven/Gradle Dependencies Replace Tag with the latest ve

byteful 10 Oct 17, 2022