https://github.com/hypernormalisation/coinblockpro
A toy server written in Sanic to mimic an online currency exchange, with REST and websocket APIs.
https://github.com/hypernormalisation/coinblockpro
Last synced: 5 months ago
JSON representation
A toy server written in Sanic to mimic an online currency exchange, with REST and websocket APIs.
- Host: GitHub
- URL: https://github.com/hypernormalisation/coinblockpro
- Owner: hypernormalisation
- License: gpl-3.0
- Created: 2020-10-02T16:49:00.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2020-10-09T21:37:08.000Z (over 5 years ago)
- Last Synced: 2026-01-05T23:57:29.503Z (6 months ago)
- Language: Jupyter Notebook
- Homepage:
- Size: 40 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# coinblockpro
A toy server written in Sanic to mimic an online currency exchange, with
REST and websocket APIs.
## Installation
`coinblockpro` is available on the Python Package Index (PyPI).
`pip install coinblockpro`
## Run
The bash script `run_cbp_server` is placed in the user's bin when the
package is installed. Running:
`./run_cbp_server`
will produce output like the following:
```
[2020-10-05 19:19:37 +0100] [34227] [INFO] Creating ticker db at /tmp/tickers.db.
[2020-10-05 19:19:37 +0100] [34227] [INFO] Created db.
[2020-10-05 19:19:37 +0100] [34227] [INFO] Running websocket server.
[2020-10-05 19:19:37 +0100] [34227] [INFO] Goin' Fast @ http://0.0.0.0:8001
[2020-10-05 19:19:37 +0100] [34227] [INFO] Starting modulation coroutine.
[2020-10-05 19:19:37 +0100] [34227] [INFO] Starting worker [34227]
[2020-10-05 19:19:38 +0100] [34228] [INFO] Running REST server.
[2020-10-05 19:19:38 +0100] [34228] [INFO] Goin' Fast @ http://0.0.0.0:8000
[2020-10-05 19:19:38 +0100] [34228] [INFO] Starting worker [34228]
[2020-10-05 19:19:43 +0100] [34227] [INFO] update to market btc_ltc: 3350.505 -> 3292.16
[2020-10-05 19:19:49 +0100] [34227] [INFO] update to market ltc_dot: 2752.763 -> 2708.661
```
## Market simulation
The primary purpose of this toy server is to facilitate the development
of algorithms to keep real-time information on an exchange's markets.
As such, the information simulated is reduced to a single price per
market, initialised randomly between 0 and 10000. A single market is
chosen randomly and fluctuated at a random time interval of the order of
half a second.
## Connecting to the server
The server runs on the localhost.
The REST API is available on port 8000, while the websocket API is
available on port 8001.
### REST endpoints:
`/full_ticker` - no parameters, returns a json response of the form:
```
{ 'result':
{'btc_eur': 2134.12, 'btc_usd': 2245.76} ... }
}
```
`/single_ticker` - single parameter "market", must be given. Returns a
json response of the form:
```
{ 'result':
{'btc_eur': 2134.12}
}
```
The list of available markets can be found at:
```python
import coinblockpro
coinblockpro.markets
```
Some example requests are given below:
```python
import requests
r1 = requests.get('http://0.0.0.0:8000/full_ticker')
r2 = requests.get('http://0.0.0.0:8000/singler_ticker', params={'market': 'btc_eur'})
```
### Websocket API
The websocket API runs on the localhost, on port 8001, and gives
real-time information on markets as they change at the `/ticker_feed`
endpoint.
An example configuration using the `websockets` library is given below.
```python
import websockets
import asyncio
import websockets
async def subscribe():
async with websockets.connect('ws://0.0.0.0:8001/ticker_feed') as ws:
while True:
resp = await ws.recv()
print(resp)
if __name__ == '__main__':
asyncio.run(subscribe())
```
## Example client
Example clients to build up and keep real-time information on markets
from the server are given in the
[Jupyter notebook here](ticker_client.ipynb).