{"id":26529385,"url":"https://github.com/thebashpotato/vybe-check-challenge","last_synced_at":"2026-04-14T06:33:12.742Z","repository":{"id":280181151,"uuid":"941206168","full_name":"thebashpotato/vybe-check-challenge","owner":"thebashpotato","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-03T08:19:26.000Z","size":64,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-24T23:28:53.951Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thebashpotato.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-01T18:35:35.000Z","updated_at":"2025-03-03T08:19:29.000Z","dependencies_parsed_at":"2025-03-01T20:23:05.169Z","dependency_job_id":"a22081c4-95f8-4071-ac73-bbbe8fe3949f","html_url":"https://github.com/thebashpotato/vybe-check-challenge","commit_stats":null,"previous_names":["thebashpotato/vybe-check-challenge"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thebashpotato/vybe-check-challenge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebashpotato%2Fvybe-check-challenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebashpotato%2Fvybe-check-challenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebashpotato%2Fvybe-check-challenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebashpotato%2Fvybe-check-challenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thebashpotato","download_url":"https://codeload.github.com/thebashpotato/vybe-check-challenge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thebashpotato%2Fvybe-check-challenge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31785629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T02:24:21.117Z","status":"ssl_error","status_checked_at":"2026-04-14T02:24:20.627Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-21T16:30:21.268Z","updated_at":"2026-04-14T06:33:12.728Z","avatar_url":"https://github.com/thebashpotato.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003ch1\u003esolana-tx-data-extract-code-challenge\u003c/h1\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cdiv align=\"center\"\u003e\n    \u003cimg alt=\"Crates.io\" src=\"https://img.shields.io/badge/standard--readme-OK-green.svg?style=flat-square\"\u003e\n    \u003cimg alt=\"GitHub Actions Workflow Status\" src=\"https://img.shields.io/github/actions/workflow/status/thebashpotato/vybe-check-challenge/rust.yml?style=flat-square\u0026logo=ubuntu\u0026label=Rust%20Build\"\u003e\n    \u003cbr\u003e\n    \u003cp\u003eSolana blockchain transaction extractor\u003c/p\u003e\n\u003c/div\u003e\n\nThe submission is incomplete, I did a simpler version as I didn't have as much time to work on it as I hoped.\n### 1. **Fetch and Process Blockchain Data**\nCreate an application in Rust that:\n- **Interacts with the Solana blockchain** to fetch transaction data from the [Phoenix on-chain orderbook DEX](https://www.phoenix.trade/) program. **DONE**\n- **Decodes transactions** and extracts trade fill events. **DONE**\n- **Stores the processed data** in a database of your choice (Postgres): **DONE (does not store baseTokenMint, qouteTokenMint) doesn't provide any interval or aggregation**\n- Runs **continuously** to fetch new transactions, parse them, and insert the extracted trade fill events into the database in real-time or near real-time: **DONE**\n\n### 2. **Build an API Endpoint**\n- The endpoint is simple, offers no querying/intervals etc. It just calculates OHLC based off all entries in database\n\n## Expectations and Time Guidelines\n\n- **Estimated Time**: This challenge is estimated to take approximately **4-6 hours** to complete the core requirements. This is not a hard limit but rather a guideline to help you plan your time. If you find yourself significantly exceeding this estimate, feel free to let us know.\n    * Took me longer (6 hours Saturday, 10 hours on Sunday), although this is because I went in knowing nothing about Solana, order-books, trading data etc, and not having touched a database in anyway shape or form in 3 years. Although it was a great challenge and I really enjoyed myself.\n\n## Table of Contents\n\n- [Docs](#docs)\n- [Install](#install)\n- [Usage](#usage)\n\n## Docs\n\n1. Challenge description is [here](./docs/challenge-description.md)\n\n\n## Install\n\n\u003e Note that commands should be ran in the root of the project\n\n1. Install rust via [rustup](https://rustup.rs/)\n    - Install the just command runner `cargo install just`\n    - For development you will need the diesel cli tool: `cargo install diesel_cli --no-default-features --features postgres`\n\n2. Install [PostGreSQL](https://www.postgresql.org/download/) for your platform with the following user and password\n    - user: postgres\n    - pw: coffee\n\n3. Once your database is setup execute the following commands\n    - Create a new database: `psql -U postgres -c \"CREATE DATABASE solana_data\"`\n    - Populate the database you just created with the backup file: `psql -U postgres -d solana_data -f data/backup.sql`\n\n4. The Just command runner\n    - Running `just --list` will give you an overview of all commands available\n    - Running `just dev` will compile the project with debug symbols\n    - Running `just release` will compile in release mode\n    - Run the tests: `just test`\n    - Run the integration tests (this will delete the database): `just itest`\n\n5. You will need to sign up at [Helius](https://www.helius.dev/) and get an api key\n\n6. As a convenience for yourself you can set the following environment variable to your Helius api key\n    - Bash/Zsh for example: `export HELIUS_RPC_KEY=\"your-api-key\"`\n\n\n## Usage\n\n\u003e Once you have set the database up and compiled you can run the following executables\n\n1. To start the extractor daemon..\n    - In a seperate terminal: `./target/debug/vn-extractord --api-key $HELIUS_RPC_KEY --log-level debug`\n\n2. To start the api service..\n    - In a seperate terminal: `./target/debug/vn-rest-api --log-level debug`\n\n3. Open `http://127.0.0.1:8080/` in your browser\n    - View simple OHLC data `http://127.0.0.1:8080/ohlc` It just uses all the available entries there is no interval support\n    - View all raw data: `http://127.0.0.1:8080/trade_fills`\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthebashpotato%2Fvybe-check-challenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthebashpotato%2Fvybe-check-challenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthebashpotato%2Fvybe-check-challenge/lists"}