Initial commit

This commit is contained in:
Yaser
2026-08-13 19:50:53 +03:30
commit 38084458fe
879 changed files with 95198 additions and 0 deletions

View File

@@ -0,0 +1,149 @@
defaults: &defaults
TIMEZONE: 'Tehran'
# Configure Redis URL, for a TCP connection:
# `redis://:[password]@[hostname]:[port]/[db]`
# (password, port and database are optional).
REDIS_URL: redis://localhost:6379
REDIS_PASSWORD: ~
REDIS_CLUSTER: false
# Application URL configuration variables.
URL_HOST: peatio.tech
URL_ROOT_PATH: '/'
URL_SCHEME: http
FORCE_SECURE_CONNECTION: 'false' # Set to "true" to disable access via unsecured HTTP, send HSTS headers and use secure cookies.
# Configuration variables for logger.
LOG_LEVEL: ~ # Default level for production is warn, otherwise debug.
# Configuration variables for API CORS.
#
# Set list of allowed origins using the variable below.
# By default it allows access to API from all origins.
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin
API_CORS_ORIGINS: '*'
# Access-Control-Allow-Credentials response header is not supported
# if the CORS header Access-Control-Allow-Origin is *.
API_CORS_ALLOW_CREDENTIALS: 'false'
# The Access-Control-Max-Age response header indicates how long
# the results of a preflight request can be cached.
# Default value 3600.
API_CORS_MAX_AGE: ~
# Configuration variables for Sentry.
SENTRY_DSN_BACKEND: ~ # Specify Sentry DSN used for Rails application.
# Customize page metadata like title, description & keywords for landing, cabinet & admin modules.
METADATA_TITLE: Peatio Exchange
METADATA_DESCRIPTION: The Opensource Cryptocurrency Exchange
METADATA_KEYWORDS: Peatio,Opensource,Exchange,Cryptocurrency
# Configuration variables for JWT verification.
# Get explanation at https://en.wikipedia.org/wiki/JSON_Web_Token.
#
# JWT_PUBLIC_KEY
#
# JWT provider uses private key for encoding JSON Web Tokens
# while public key is used for decoding by resources.
#
# For example, Barong is JWT provider, Peatio is resource accepting JWT.
# Barong must have private key installed, Peatio must have public key installed.
#
# You can generate keypair by running:
#
# ruby -e "require 'openssl'; require 'base64'; OpenSSL::PKey::RSA.generate(2048).tap { |p| puts '', 'PRIVATE RSA KEY (URL-safe Base64 encoded, PEM):', '', Base64.urlsafe_encode64(p.to_pem), '', 'PUBLIC RSA KEY (URL-safe Base64 encoded, PEM):', '', Base64.urlsafe_encode64(p.public_key.to_pem) }"
#
# Copy the generated private key and put it's value to appropriate variable at JWT provider (for example, at Barong it will be JWT_SHARED_SECRET_KEY).
# Copy the generated public key and put it's value to variable JWT_PUBLIC_KEY (at Peatio).
#
# Peatio and JWT provider should have the same keypair installed, or they would not understand each other.
#
# You may want to adjust key length or cipher.
#
# Development and test environments already don't include sample keys.
#
# You can generate valid JWT by running:
#
# JWT.encode(payload, OpenSSL::PKey.read(Base64.urlsafe_decode64(ENCODED_PRIVATE_KEY)), ENV.fetch('JWT_ALGORITHM'))
#
# Replace ENCODED_PRIVATE_KEY with private key printed by previous command.
#
# You can decode JWT by running:
#
# JWT.decode(token, OpenSSL::PKey.read(Base64.urlsafe_decode64(ENCODED_PUBLIC_KEY)), true, algorithms: [ENV.fetch('JWT_ALGORITHM')])
#
# To authenticate using JWT send it's value in "Authorization" header:
#
# curl -H "Authorization: Bearer TOKEN" http://localhost:3000/api/v2/account/balances
#
JWT_PUBLIC_KEY: ~
JWT_ALGORITHM: RS256 # JWT signing algorithm (mandatory).
JWT_ISSUER: ~ # JWT issuer name (optional).
JWT_AUDIENCE: peatio # Could be comma-separated value (optional).
JWT_DEFAULT_LEEWAY: ~ # Seconds (optional).
JWT_ISSUED_AT_LEEWAY: '180' # Seconds (optional).
JWT_EXPIRATION_LEEWAY: ~ # Seconds (optional).
JWT_NOT_BEFORE_LEEWAY: ~ # Seconds (optional).
PEATIO_JWT_PRIVATE_KEY: ~
# Scout APM configuration variables.
SCOUT_KEY: ~ # Your organization key for Scout APM. Found on the settings screen.
SCOUT_APP_NAME: ~ # Application name in APM Web UI.
SCOUT_LOG_LEVEL: warn # Verboseness of logs (debug, info, warn, error)
SCOUT_ENV: production # List of Rails environments for which Scout should be enabled.
# Configuration variables for dynamic Barong levels (1.8+).
MINIMUM_MEMBER_LEVEL_FOR_DEPOSIT: '0'
MINIMUM_MEMBER_LEVEL_FOR_WITHDRAW: '0'
MINIMUM_MEMBER_LEVEL_FOR_TRADING: '0'
# Event API configuration.
# JWT configuration.
# You can generate keypair using:
#
# ruby -e "require 'openssl'; require 'base64'; OpenSSL::PKey::RSA.generate(2048).tap { |p| puts '', 'PRIVATE RSA KEY (URL-safe Base64 encoded, PEM):', '', Base64.urlsafe_encode64(p.to_pem), '', 'PUBLIC RSA KEY (URL-safe Base64 encoded, PEM):', '', Base64.urlsafe_encode64(p.public_key.to_pem) }"
#
EVENT_API_JWT_PRIVATE_KEY: ~ # Private key. Must be URL-safe Base64 encoded in PEM format.
EVENT_API_JWT_ALGORITHM: RS256
# RabbitMQ configuration.
# You can use just «EVENT_API_RABBITMQ_URL» or specify configuration per separate variable.
EVENT_API_RABBITMQ_URL: ~
EVENT_API_RABBITMQ_HOST: localhost
EVENT_API_RABBITMQ_PORT: "5672"
EVENT_API_RABBITMQ_USERNAME: guest
EVENT_API_RABBITMQ_PASSWORD: guest
RANGER_HOST: '0.0.0.0'
RANGER_PORT: '8081'
RANGER_CONNECT_SECURE: 'false'
BULLET: 'false'
# Configuration to allow Withdraw via API i.e (POST api/v2/account/withdraws)
ENABLE_ACCOUNT_WITHDRAWAL_API: 'true'
# Configure Vault to verify OTP for Withdraw API
#VAULT_ADDR: http://127.0.0.1:8200
#VAULT_TOKEN: ""
# Configure to limit currencies and markets on the platform.
MAX_CURRENCIES: ~
MAX_MARKETS: ~
development:
<<: *defaults
# Development configuration variables for Event API JWT.
# TODO i think below line must be comment
# EVENT_API_JWT_PRIVATE_KEY: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBb3VLVHh2SFVJVDJENmdXaWJRcS9kbW9BUUwyeWJ6SGFiUXRlc1AyL2o1VjkvUExaCmhHNWtLVkpPWjcxVVdMQ3BjZTQxeHZzQ0lKd0Q5MnVDNW5Lak5wblRDTWpwTUJNMGg0aFF4a2VOeHdNeU41N1gKM1QzbWFCVmZzUTNCblErSm84L0tzdUxhODlvY0dDeDgvYlUyOGNld2FxRk8ydUVMWWJiaUZadGFCenFJd0ZCdQpTM3hGQmt6NE16MGgvWEIxTjl5ZDg5d25OMm1oWVBsU0xrTGVUdFoyeWswK2krZHhZd2V4MEozOXJDS0hnRWRKCko1NTZHNmdtZWpJZ3dtcHNVeHJpdkVJRU5jR09POHdmQVBUVy92SFZmc2ROTExHejRtZE9CWmxsa2orcFFQODYKTnFSUjRKSnFDdEg3dHYyaXVBSGI4NnB5anVlZkVGU3ljMmxZRXdJREFRQUJBb0lCQUJrUlViamVZczB5MEdobApzWmVpZmREVmczQnpRVkRIbFZ3TzBlWGZSMm5ya2RZcDhidmwyVmhhcUdKaXl1WlRXZUNFenBYdTcyYmhXK0xxCkV0MHdhMW50MW9LVm1QMmpGd1I4d0NHanhYZ0pUK01yZVFFOWs0WVZOQUxsb1JSdzNiZnVOTDNQRis5TGMrTnMKaFZmdVdhUmdIUkJyL3R6RW9hSEtLWVUxd1djM0poSitNRklNVkZBT0RvaGp6bXNlV2lzTDNnbzVrUC9KYUpVZwprNm13Wnd0QzRvQ3pPQ3FoRGF0WVI3cktJbXMyS1lCNVBwaTRDTThkRzJGTzBwWGxXUU9XT0t2N01TUjlVeEtzCmd4YWFRRlhjajBQM2lSRFVQMDRkSWtqblNtemZmR0F2L3lBTHovZjk0V1lIK3gvd01DWms4ejJ4bnRJclllM3UKN0NOd045RUNnWUVBMEplcThCaXlKczF6YlBpcTlWWnR5L3R0M1dhaXJDbUl4cXRwU2syVU9UNmh2TldiMTUxVwpBMGRWYWEvSVBhdDV4ZkNWdGhkNlB3UGpJbWVPVXQ4Mlhib2JYeE8zREJUcmVzTlRNWUhiMGVUK09sSG04SU5uCnVwOGFxZWpWejc1ME5VYUxGWWpxWk1wVVR1Z2FVREIzNWZ1bXg0SXliNm5LRGMvSStrN25qUlVDZ1lFQXgrZVAKcE4vR1dqYjJUOU1CUm1xdkVtSGxKOXBZSEZpWGZlWnJHdzg3Q2E5WjVDYVp1VzBrSVAwSlhWSDZOOThqL2RvbApDTHZPdE5oZVFoaGUrTU91VXJMT0ttaytpckM5SEk2cW9aT3Nkc0lCc0pXSHdPanB1UW00OWNvdXc0K2ZKOWRxCjN2cTE2bG5EQlNoRU5HTEFhdVBzWDhLRUlYVzhRRnBDM3ppbXFvY0NnWUI2bTh2VVdRL09reEQzeXFyaWpxejMKSzVFR2hKKzF4cXdvNnZSMndtY1B4dXJXemxCT1NxTVdSa1hFVzVpOTl4OGE1REY3MlF6NElWYlBFRU91SHBvYwpPWnFCSmx0LzlJUDlvdll4c1h6K1FUWFdIZkk3Q1dKZFpjd01kMW5HUk5LVnhpTld3eVhUbk1JMXAyUmdJajAzCnA5WCtpMThPRjZVMnZSNExVM256aVFLQmdBVVZzOGFxMW4zRzloN3pyQTJoZXhDSm91MlBsVHdyV0xjZ0hFdFUKNk5pSE9FOGdXRHFxTndnTHg2Z3pCSjFWTkxJcFVWWFdpUng2Z0hOSDhXcDhkN3VzeHFlM2c1cTlnaUh1MHhKSApFbFQyL0ZvRWc2NTVmakJ4dWQydXBkL2RrRnZRRSt6V0RiaUhUZm1jbTVlRmg0VndoTHV1MC9PUjdoYm85TmgrCnRXYVRBb0dCQUwxVjFUTWZZRFhwYjFwaFBaV2pQL29iV1NqK2VyUXlYdit3TTIxVzRYWFI4YTBkV2hOVXdVeDAKdU9WZ2s1ZlN1OExtNG0zWGNYZ09wV0VJVkZJTzFodDFNN0xxZ0VGNGhFOHl6Y0Vldy9HWXR4VkpCTWEyODVpVQpaVUtkeCt6QWd5VFlnYk50VkVseTVobGRuT2orVmNzanVEL3krWEhXWVl5OVpLa2pNdDhECi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
# Event API JWT public key value is.
# EVENT_API_JWT_PUBLIC_KEY: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFvdUtUeHZIVUlUMkQ2Z1dpYlFxLwpkbW9BUUwyeWJ6SGFiUXRlc1AyL2o1VjkvUExaaEc1a0tWSk9aNzFVV0xDcGNlNDF4dnNDSUp3RDkydUM1bktqCk5wblRDTWpwTUJNMGg0aFF4a2VOeHdNeU41N1gzVDNtYUJWZnNRM0JuUStKbzgvS3N1TGE4OW9jR0N4OC9iVTIKOGNld2FxRk8ydUVMWWJiaUZadGFCenFJd0ZCdVMzeEZCa3o0TXowaC9YQjFOOXlkODl3bk4ybWhZUGxTTGtMZQpUdFoyeWswK2krZHhZd2V4MEozOXJDS0hnRWRKSjU1Nkc2Z21laklnd21wc1V4cml2RUlFTmNHT084d2ZBUFRXCi92SFZmc2ROTExHejRtZE9CWmxsa2orcFFQODZOcVJSNEpKcUN0SDd0djJpdUFIYjg2cHlqdWVmRUZTeWMybFkKRXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
test:
<<: *defaults
production:
<<: *defaults

View File

@@ -0,0 +1,5 @@
order_count: 500
base_url: 'http://localhost:3000'
threads: 10
market: 'btcusd'
server_token: 'Bearer '

View File

@@ -0,0 +1,36 @@
- currencies: btc,usd # List of fiat currencies for creating deposits.
traders: 25 # Number of members who will trade.
threads: 50 # Number of simultaneous threads which will publish messages to RabbitMQ.
report_path: bench/reports # Path for saving benchmark report.
log_path: bench/log # Path for logging benchmark status.
orders:
#
# Generic config.
injector: dummy # Order injector name.
number: 100000 # Number of orders to be created and published to RabbitMQ (at least 100_000).
step: 10000 # Step for writing sql transactions.
markets: btcusd # Markets for performing trading.
#
# Dummy injector specific config.
min_volume: 0.1 # Order min volume (default 0.1).
max_volume: 1.0 # Order max volume (default 1.0).
min_price: 0.5 # Order min price (default 0.5).
max_price: 2.0 # Order max price (default 2.0).
- currencies: btc,usd # List of fiat currencies for creating deposits.
traders: 25 # Number of members who will trade.
threads: 50 # Number of simultaneous threads which will publish messages to RabbitMQ.
report_path: bench/reports # Path for saving benchmark report.
log_path: bench/log # Path for logging benchmark status.
orders:
#
# Generic config.
injector: bitfinex # Order injector name.
number: 100000 # Number of orders to be created and published to RabbitMQ (at least 100_000).
step: 10000 # Step for writing sql transactions.
markets: btcusd # Markets for performing trading.
#
# Bitfinex injector specific config.
# Path to bitfinex order history file.
# TODO: Add example how to generate this file.
data_load_path: config/bench/data/usd-eur.csv

View File

@@ -0,0 +1,36 @@
- currencies: btc,usd # List of fiat currencies for creating deposits.
traders: 25 # Number of members who will trade.
threads: 50 # Number of simultaneous threads which will publish messages to RabbitMQ.
report_path: bench/reports # Path for saving benchmark report.
log_path: bench/log # Path for logging benchmark status.
orders:
#
# Generic config.
injector: dummy # Order injector name.
number: 10000 # Number of orders to be created and published to RabbitMQ (at least 2000).
step: 10000
markets: btcusd # Markets for performing trading.
#
# Dummy injector specific config.
min_volume: 0.1 # Order min volume (default 0.1).
max_volume: 1.0 # Order max volume (default 1.0).
min_price: 0.5 # Order min price (default 0.5).
max_price: 2.0 # Order max price (default 2.0).
- currencies: btc,usd # List of fiat currencies for creating deposits.
traders: 25 # Number of members who will trade.
threads: 50 # Number of simultaneous threads which will publish messages to RabbitMQ.
report_path: bench/reports # Path for saving benchmark report.
log_path: bench/log # Path for logging benchmark status.
orders:
#
# Generic config.
injector: bitfinex # Order injector name.
number: 10000 # Number of orders to be created and published to RabbitMQ (at least 2000).
step: 10000 # Step for writing sql transactions.
markets: btcusd # Markets for performing trading.
#
# Bitfinex injector specific config.
# Path to bitfinex order history file.
# TODO: Add example how to generate this file.
data_load_path: config/bench/data/usd-eur.csv

View File

@@ -0,0 +1,36 @@
- currencies: btc,usd # List of fiat currencies for creating deposits.
traders: 25 # Number of members who will trade.
threads: 50 # Number of simultaneous threads which will publish messages to RabbitMQ.
report_path: bench/reports # Path for saving benchmark report.
log_path: bench/log # Path for logging benchmark status.
orders:
#
# Generic config.
injector: dummy # Order injector name.
number: 20000 # Number of orders to be created and published to RabbitMQ (at least 2000).
step: 10000 # Step for writing sql transactions.
markets: btcusd # Markets for performing trading.
#
# Dummy injector specific config.
min_volume: 0.1 # Order min volume (default 0.1).
max_volume: 1.0 # Order max volume (default 1.0).
min_price: 0.5 # Order min price (default 0.5).
max_price: 2.0 # Order max price (default 2.0).
- currencies: btc,usd # List of fiat currencies for creating deposits.
traders: 25 # Number of members who will trade.
threads: 50 # Number of simultaneous threads which will publish messages to RabbitMQ.
report_path: bench/reports # Path for saving benchmark report.
log_path: bench/log # Path for logging benchmark status.
orders:
#
# Generic config.
injector: bitfinex # Order injector name.
number: 20000 # Number of orders to be created and published to RabbitMQ (at least 4000).
step: 10000 # Step for writing sql transactions.
markets: btcusd # Markets for performing trading.
#
# Bitfinex injector specific config.
# Path to bitfinex order history file.
# TODO: Add example how to generate this file.
data_load_path: config/bench/data/usd-eur.csv

View File

@@ -0,0 +1,73 @@
<% if ENV['MANAGEMENT_API_V1_CONFIG'] %>
<%= File.read(ENV['MANAGEMENT_API_V1_CONFIG']) %>
<% else %>
# Be sure to restart your server when you modify this file.
#
# This file keeps all the security configuration variables for «Management API v1».
#
# Keeps all the public keys used to validate signatures.
# All values must be presented in PEM format and be URL-safe Base64 encoded.
#
# Example:
#
# keychain:
# backend-1.mycompany.example:
# algorithm: RS256
# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF3UjNPT1RQbzZvZE8wM3hXVDRNawp6TXJuM2pQS2pVdW0rVkc5dUZWODZNejVnMm1ueXdSRDc4MEY4aXVaZm41SGtROFpTUlFHYlRHNnB1dlVWWDFCClA0MWIrUW52VHFtWFhHcE9aSklzV3V2cHA4dHpZenFOejUvcTRRdUZQWDlrczdtaVV2dkNzbmo5S21Wb08yMU4KUVgyOWZUNkRJYldkUnJvWU1IOHloVmRrSjRVQnhYeHlSWmZ4VnN4UFVwckNodEgxN1JwNnQvYVRTR0VZNndQNwpKbEVCZi9Gb0djQk15OU5BOWhqZFMyMWxGcmVYeXdaUzZYdmhrN3dydGJWT2didU5EajdVeWhjS0RCaHA4c2VjCkV4TlB6d2p4ckhGTzhZaitFejBCMmZKQ1FDWW9SVG1kTzVEQS9kRTFHQmtqeXRCZjhDdGVIdExXcmZIU2g5em0KNlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
# backend-2.mycompany.example:
# algorithm: HS384
# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFyZm53OXpGMDRCaFlZTk5mblVKawppK2YwWUE2RitDdlZtMGozOEV1c2E2ZHdkRnBaMEFhK0dzRjlEWGpuOXgzTjdpZzlxNnFmbTN5TzdJbmxqZmdZCmp4eU12MmdXcTNTZmhySmZpUWd3dmh2NHJiMzJiTmc3ckxPTVJmenVDeUQ2aFBQU2FueTM3ZnhSNmxKR3E5SUcKUTRJa3JPNmZIOGozUllQVDBGUVlJcXg1a2pNbU9wczFlV2xTR1RYbDZWSDNtVWxxTWVMSjJjL1NMZ3Y3dUxDagpmMVpDTXFELzB4VERWZ0ZxbzJSSlRucEcvUzlXRHdpZ3U0aTdyY1VkeDcrQUMvK2lNSGpNL1VZekRtWHJDQkpaCjBnSUVPV1ZwM2dMMzNocmRZci9uNU11SFRiMXpJUHdJQW1ySHpmWFpwOEQxNVVUdGtENktXU1FINWQ5SnAvVncKN3dJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==
# backend-3.mycompany.example:
# algorithm: RS512
# value: LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUEzL2VIUUd1V2NFUHhwY2pxaVN5SQpLYmFlTFhnNHhrTFcwMU12eHlPVENMeHNrbVk5T0ViVTBQa2ptaFk1bWhiOXpmVjJqMVBmbXdXQmp5bXJ2alJJCmlWMDdxczA1OUx3UGhyL0JZc0lnYk13bWVEZUp5VHlxTmFvckNkVklhamxMVHhGSklNOGtXTUg1TUcrR2U0b2wKc1VWblEwRDNZdURvNCtPSzJiSDBOY3M5ZEFTWGx4T0lsenpZTlFkUTNCSUxZbFE3MW9CRDNmTWRyaXQwSktVYwphb25jTXJ0RlB2WlRuZjZROUhVM2VpR3NxTHhWczVZRTBGUlVsd0Z4TjZzbnZNQW9rNEpRT3A5cUExUi96WHMwCnRWdUVpeEJ1Sm5jSjZSYlp5UVp5YWg3YzAxd1NLcks1UTRudVh3VlhXUkhvd0gxOTZHMU9TODhoYmVZNHNneTkKdForZ3NsdlZIYWJmK1JqK0JtZmNOYmx2T1lQWlI4K3dVQ2pOWW43L1BWRjQ0NDRzUCtTZkEyejdvaU1OVStrVwpGVHM5dVdRNGxzQ0RIQnd6ZXNFMDc0dmZLMHF4c0NNN0hWeHhVc2gvNGx3aGppZTgrTFNqdzliWTlrcjJxWWFmClRMRnpoVWl2clJMaEpWdnZkQmRRYlBIUFVybnJ2TnFqblRYOWtFcWR4bktrbWluWmhtbU1pakpKa1dGREgwbmgKNmR4ZlZwZ2puYXUzWmoyZkNSNFV6aXNXK25MaExUc1Fadzd0b0NaVUo2aWV6N0psOEpJYWdBVWJ5OW8ycUN4ZgpWcTBwK3pwRlZKUFZzelVQNkZMTzh3Tjd5aThVT3l4T3VmdmEvOHgySmRJTzJ4emlPc2ZLVnhIZTFZRkZtWVdtCnZKaWZ1ZGUrdCtBbS9EM1FMSjlpK2JNQ0F3RUFBUT09Ci0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo=
#
#
keychain: {}
#
# Keeps all the JWT verification options.
# The documentation is available at https://github.com/jwt/ruby-jwt#support-for-reserved-claim-names.
# Check lib/jwt/default_options.rb for the default options.
#
jwt: {}
#
# Keep all the API security scopes.
#
# The API security scope consists of scope name, list of permitted and mandatory signers.
# The scope name is associated with API actions. For example, write_deposits is associated with
# ability to create deposits and accept them. The scopes which have «write» in the name are supposed
# to be dangerous so they must require more signatures then read-only scopes
#
# Each scope must include list of permitted and mandatory signers.
# Peatio validates JWT signatures against permitted keys and doesn't trust
# JWTs which don't include signatures from all mandatory signers.
#
# Example:
# scopes:
# read_deposits:
# permitted_signers: ['backend-1.mycompany.example', 'backend-2.mycompany.example']
# mandatory_signers: ['backend-1.mycompany.example']
# write_deposits:
# permitted_signers: ['backend-1.mycompany.example', 'backend-2.mycompany.example']
# mandatory_signers: ['backend-1.mycompany.example', 'backend-2.mycompany.example']
#
# The available scopes include:
# read_deposits
# write_deposits
# read_withdraws
# write_withdraws
# read_operations
# write_operations
# read_transfers
# write_transfers
# write_members
# read_currencies
# write_currencies
# read_markets
# write_markets
# tools
#
scopes: {}
<% end %>

View File

@@ -0,0 +1,73 @@
<% if ENV['ACCOUNTS_CONFIG'] %>
<%= File.read(ENV['ACCOUNTS_CONFIG']) %>
<% else %>
- code: 101
type: asset
kind: main
currency_type: fiat
description: Main Fiat Assets Account
scope: platform
- code: 102
type: asset
kind: main
currency_type: coin
description: Main Crypto Assets Account
scope: platform
- code: 201
type: liability
kind: main
currency_type: fiat
description: Main Fiat Liabilities Account
scope: member
- code: 202
type: liability
kind: main
currency_type: coin
description: Main Crypto Liabilities Account
scope: member
- code: 211
type: liability
kind: locked
currency_type: fiat
description: Locked Fiat Liabilities Account
scope: member
- code: 212
type: liability
kind: locked
currency_type: coin
description: Locked Crypto Liabilities Account
scope: member
- code: 301
type: revenue
kind: main
currency_type: fiat
description: Main Fiat Revenues Account
scope: platform
- code: 302
type: revenue
kind: main
currency_type: coin
description: Main Crypto Revenues Account
scope: platform
- code: 401
type: expense
kind: main
currency_type: fiat
description: Main Fiat Expenses Account
scope: platform
- code: 402
type: expense
kind: main
currency_type: coin
description: Main Crypto Expenses Account
scope: platform
<% end %>

View File

@@ -0,0 +1,47 @@
<% if ENV['BLOCKCHAINS_CONFIG'] %>
<%= File.read(ENV['BLOCKCHAINS_CONFIG']) %>
<% else %>
- key: prt-kovan
name: Ethereum Kovan
client: parity # API client name.
server: http://127.0.0.1:8545 # Public Ethereum node endpoint. IMPORTANT: full syncmode.
height: 2500000 # Initial block number from which sync will be started.
min_confirmations: 6 # Minimal confirmations needed for withdraw and deposit confirmation.
explorer:
address: https://kovan.etherscan.io/address/#{address}
transaction: https://kovan.etherscan.io/tx/#{txid}
status: disabled
- key: eth-rinkeby
name: Ethereum Rinkeby
client: geth # API client name.
server: http://127.0.0.1:8545 # Public Ethereum node endpoint. IMPORTANT: full syncmode.
height: 4000000 # Initial block number from which sync will be started.
min_confirmations: 6 # Minimal confirmations needed for withdraw and deposit confirmation.
explorer:
address: https://rinkeby.etherscan.io/address/#{address}
transaction: https://rinkeby.etherscan.io/tx/#{txid}
status: active
- key: eth-mainet
name: Ethereum Mainet
client: geth # API client name.
server: http://127.0.0.1:8545 # Public Ethereum node endpoint. IMPORTANT: full syncmode.
height: 7500000 # Initial block number from which sync will be started.
min_confirmations: 6 # Minimal confirmations needed for withdraw and deposit confirmation.
explorer:
address: https://etherscan.io/address/#{address}
transaction: https://etherscan.io/tx/#{txid}
status: disabled
- key: btc-testnet
name: Bitcoin Testnet
client: bitcoin # API client name.
server: http://user:password@127.0.0.1:18332 # Public Bitcoin node endpoint.
height: 1500000 # Initial block number from which sync will be started.
min_confirmations: 6 # Minimal confirmations needed for withdraw and deposit confirmation.
explorer:
address: https://testnet.blockchain.info/address/#{address}
transaction: https://testnet.blockchain.info/tx/#{txid}
status: active
<% end %>

View File

@@ -0,0 +1,99 @@
<% if ENV['CURRENCIES_CONFIG'] %>
<%= File.read(ENV['CURRENCIES_CONFIG']) %>
<% else %>
- id: usd
name: US Dollar
type: fiat
precision: 2
base_factor: 1
visible: true
deposit_enabled: true
withdrawal_enabled: true
min_deposit_amount: 0
min_collection_amount: 0
withdraw_limit_24h: 100
withdraw_limit_72h: 200
deposit_fee: 0
withdraw_fee: 0
position: 1
options: {}
- id: btc
name: Bitcoin
blockchain_key: btc-testnet
type: coin
precision: 8
base_factor: 100_000_000
visible: true
deposit_enabled: true
withdrawal_enabled: true
# Deposits with less amount are skipped during blockchain synchronization.
# We advise to set value 10 times bigger than the network fee to prevent losses.
min_deposit_amount: 0.0000356
min_collection_amount: 0.0000356
withdraw_limit_24h: 0.1
withdraw_limit_72h: 0.2
deposit_fee: 0
withdraw_fee: 0
position: 2
options: {}
- id: eth
name: Ethereum
blockchain_key: eth-rinkeby
type: coin
precision: 8
base_factor: 1_000_000_000_000_000_000
visible: true
deposit_enabled: true
withdrawal_enabled: true
# Deposits with less amount are skipped during blockchain synchronization.
# We advise to set value 10 times bigger than the network fee to prevent losses.
min_deposit_amount: 0.00021
min_collection_amount: 0.00021
withdraw_limit_24h: 0.2
withdraw_limit_72h: 0.5
deposit_fee: 0
withdraw_fee: 0
position: 3
options:
# ETH tx fees configurations.
#
# Maximum amount of gas you're willing to spend on a particular transaction.
gas_limit: 21_000
# Internal price that is paid for running a transaction on the Ethereum network.
gas_price: 1_000_000_000
- id: trst
name: WeTrust
blockchain_key: eth-rinkeby
parent_id: eth
type: coin
precision: 8
base_factor: 1_000_000 # IMPORTANT: Don't forget to update this variable according
# to your ERC20-based currency requirements
# (usually can be found on the official website).
visible: true
deposit_enabled: true
withdrawal_enabled: true
# Deposits with less amount are skipped during blockchain synchronization.
# We advise to set value 10 times bigger than the network fee to prevent losses.
# NOTE: Network fee is paid in ETH but min_deposit_amount is in TRST.
min_deposit_amount: 2
min_collection_amount: 2
withdraw_limit_24h: 300
withdraw_limit_72h: 600
deposit_fee: 0
withdraw_fee: 0
position: 4
options:
# ERC20 tx fees configurations.
#
# Maximum amount of gas you're willing to spend on a particular transaction.
gas_limit: 90_000
# Internal price that is paid for running a contract on the Ethereum network.
gas_price: 1_000_000_000
#
# ERC20 configuration.
erc20_contract_address: '0x0000000000000000000000000000000000000000' # Always wrap this value in quotes!
<% end %>

View File

@@ -0,0 +1,4 @@
- id: 1
kind: 'fiat'
kyc_level: 1
limit_24_hour: 500000000

View File

@@ -0,0 +1,28 @@
<% if ENV['ENGINES_CONFIG'] %>
<%= File.read(ENV['ENGINES_CONFIG']) %>
<% else %>
- name: peatio-default-engine
driver: peatio
state: online
- name: local-finex-spot-engine
driver: finex-spot
state: online
- name: opendax-finex-spote-engine
driver: opendax
uid: U123456789
url: https://www.opendax.io/api/v2/finex
key: ""
secret: ""
data: {}
# The data field for store some special engines metadata
# Can be used in upstream worker
# Example for upstream:
# {
# "rest"=>"https://url",
# "websocket"=>"wss://url",
# "trade_proxy"=>true,
# "orderbook_proxy"=>"true"
# }
# }
state: online
<% end %>

View File

@@ -0,0 +1,81 @@
<% if ENV['MARKETS_CONFIG'] %>
<%= File.read(ENV['MARKETS_CONFIG']) %>
<% else %>
- id: btcusd
base_unit: btc
quote_unit: usd
engine_name: peatio-default-engine
amount_precision: 4
price_precision: 4
min_price: 0.0001
max_price: 0.0
min_amount: 0.0001
position: 100
state: enabled
data: {}
- id: ethusd
base_unit: eth
quote_unit: usd
engine_name: peatio-default-engine
amount_precision: 4
price_precision: 4
min_price: 0.0001
max_price: 0.0
min_amount: 0.0001
position: 101
state: enabled
data: {}
- id: trstusd
base_unit: trst
quote_unit: usd
engine_name: peatio-default-engine
amount_precision: 4
price_precision: 4
min_price: 0.0001
max_price: 0.0
min_amount: 0.0001
position: 102
state: enabled
data: {}
- id: ethbtc
base_unit: eth
quote_unit: btc
engine_name: peatio-default-engine
amount_precision: 4
price_precision: 4
min_price: 0.0001
max_price: 0.0
min_amount: 0.0001
position: 103
state: enabled
data: {}
- id: trstbtc
base_unit: trst
quote_unit: btc
engine_name: peatio-default-engine
amount_precision: 4
price_precision: 4
min_price: 0.0001
max_price: 0.0
min_amount: 0.0001
position: 104
state: enabled
data: {}
- id: trsteth
base_unit: trst
quote_unit: eth
engine_name: peatio-default-engine
amount_precision: 4
price_precision: 4
min_price: 0.0001
max_price: 0.0
min_amount: 0.0001
position: 105
state: enabled
data: {}
<% end %>

View File

@@ -0,0 +1,28 @@
- id: 1
uid: '1'
email: 'test1@test.com'
level: 2
role: 'admin'
group: 'vip-3'
state: 'active'
- id: 2
uid: '2'
email: 'test2@test.com'
level: 2
role: 'admin'
group: 'vip-3'
state: 'active'
- id: 3
uid: '3'
email: 'test3@test.com'
level: 2
role: 'admin'
group: 'vip-3'
state: 'active'

View File

@@ -0,0 +1,29 @@
<% if ENV['TRADING_FEES_CONFIG'] %>
<%= File.read(ENV['TRADING_FEES_CONFIG']) %>
<% else %>
- market_id: any
group: any
maker: 0.002
taker: 0.002
- market_id: any
group: vip-0
maker: 0.001
taker: 0.002
- market_id: any
group: vip-1
maker: 0.0008
taker: 0.0018
- market_id: any
group: vip-2
maker: 0.0006
taker: 0.0016
- market_id: any
group: vip-3
maker: 0.0
taker: 0.0014
<% end %>

View File

@@ -0,0 +1,108 @@
<% if ENV['WALLETS_CONFIG'] %>
<%= File.read(ENV['WALLETS_CONFIG']) %>
<% else %>
- name: Ethereum Deposit Wallet
blockchain_key: eth-rinkeby
currency_ids: eth,trst
# Address where deposits will be collected to.
address: '0x2b9fBC10EbAeEc28a8Fc10069C0BC29E45eBEB9C' # IMPORTANT: Always wrap this value in quotes!
kind: deposit # Wallet kind (deposit, hot, warm, cold or fee).
max_balance: 0.0
status: active
gateway: geth # Gateway client name.
settings:
#
# Geth gateway client settings.
uri: http://127.0.0.1:8545
secret: 'changeme'
- name: Ethereum Hot Wallet
blockchain_key: eth-rinkeby
currency_ids: eth,trst
# Address where deposits will be collected to.
address: '0x270704935783087a01c7a28d8f2d8f01670c8050' # IMPORTANT: Always wrap this value in quotes!
kind: hot # Wallet kind (deposit, hot, warm, cold or fee).
max_balance: 100.0
status: active
gateway: geth # Gateway client name.
settings:
#
# Geth gateway client settings.
uri: http://127.0.0.1:8545
secret: 'test'
- name: Ethereum Warm Wallet
blockchain_key: eth-rinkeby
currency_ids: eth,trst
# Address where deposits will be collected to.
address: '0x2b9fBC10EbAeEc28a8Fc10069C0BC29E45eBEB9C' # IMPORTANT: Always wrap this value in quotes!
kind: warm # Wallet kind (deposit, hot, warm, cold or fee).
max_balance: 1000.0
status: active
gateway: geth # Gateway client name.
settings:
#
# Geth gateway client settings.
uri: http://127.0.0.1:8545
secret: 'test'
- name: Ethereum Wallet for paying ERC20 fees
blockchain_key: eth-rinkeby
currency_ids: eth
# Address where deposits will be collected to.
address: '0x270704935783087a01c7a28d8f2d8f01670c8050' # IMPORTANT: Always wrap this value in quotes!
kind: fee # Wallet kind (deposit, hot, warm, cold or fee).
max_balance: 100.0
status: active
gateway: geth # Gateway client name.
settings:
#
# Geth gateway client settings.
uri: http://127.0.0.1:8545
secret: 'test'
- name: Bitcoin Deposit Wallet
blockchain_key: btc-testnet
currency_ids: btc
# Address where deposits will be collected to.
address: '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf' # IMPORTANT: Always wrap this value in quotes!
kind: deposit # Wallet kind (deposit, hot, warm, cold or fee).
max_balance: 0.0
status: active
gateway: bitcoind # Gateway client name.
settings:
#
# Bitcoind gateway client settings.
uri: http://user:password@127.0.0.1:18332
- name: Bitcoin Hot Wallet
blockchain_key: btc-testnet
currency_ids: btc
# Address where deposits will be collected to.
address: '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf' # IMPORTANT: Always wrap this value in quotes!
kind: hot # Wallet kind (deposit, hot, warm, cold or fee).
max_balance: 0.0
status: active
gateway: bitcoind # Gateway client name.
settings:
#
# Bitcoind gateway client settings.
uri: http://user:password@127.0.0.1:18332
# skip_deposit_collection - defines if deposit will be collected to
# this wallet. Supported values: true | false. By default `false`.
skip_deposit_collection: true
- name: Bitcoin Warm Wallet
blockchain_key: btc-testnet
currency_ids: btc
# Address where deposits will be collected to.
address: '2N4qYjye5yENLEkz4UkLFxzPaxJatF3kRwf' # IMPORTANT: Always wrap this value in quotes!
kind: warm # Wallet kind (deposit, hot, warm, cold or fee).
max_balance: 0.0
status: active
gateway: bitcoind # Gateway client name.
settings:
#
# Bitcoind gateway client settings.
uri: http://user:password@127.0.0.1:18332
<% end %>

View File

@@ -0,0 +1,21 @@
<% if ENV['WHITELISTED_CONTRACTS'] %>
<%= File.read(ENV['WHITELISTED_CONTRACTS']) %>
<% else %>
- blockchain_key: eth-mainet
address: '0x6c0b51971650d28821ce30b15b02b9826a20b129'
state: active
- blockchain_key: eth-mainet
address: '0x1522900b6dafac587d499a862861c0869be6e428'
state: active
- blockchain_key: eth-rinkeby
address: '0xbbd602bb278edff65cbc967b9b62095ad5be23a3'
state: active
- blockchain_key: eth-rinkeby
address: '0xe3cb6897d83691a8eb8458140a1941ce1d6e6dac'
state: active
<% end %>

View File

@@ -0,0 +1,9 @@
<% if ENV['WITHDRAW_LIMITS_CONFIG'] %>
<%= File.read(ENV['WITHDRAW_LIMITS_CONFIG']) %>
<% else %>
- kyc_level: any
group: any
# limits in USD
limit_24_hour: 100
limit_1_month: 1000
<% end %>