struktura oprogramowania:

  • ./exchanger-api/plugins - folder z wtyczkami do wymiennika

  • ./exchanger-api/config - folder z konfiguracjami rest-api

  • ./exchanger-admin-web/config - folder z konfiguracjami po stronie klienta w panelu administracyjnym

  • ./exchanger-client-web/config - folder z konfiguracjami po stronie klienta

sierwisy


  • nginx - sierwis dla szybkiego i stabilnego wydawania aplikacji vue, a także dla proxy rest api i ws

  • mongodb - sierwis główna baza danych projektów

  • redis - sierwis do danych operacyjnych, a także do powiadamiania innych mikroserwisów o nowym zdarzeniu;

  • nodejs - sierwis główna platforma

  • (s) ex-api-http -sierwis udostępnia REST-API (usługa główna działa w trybie klastrowym);

  • (s) ex-ws - sierwis udostępnia połączenie WebSocket z klientami oraz panel administracyjny odpowiedzialny za działania w czasie rzeczywistym;

  • (s) ex-parser-rate - sierwis analizuje przebieg w różnych źródłach, procesy i aktualizacje w bazie danych;

  • (s) ex-cron - sierwis sprawdza stan serwera, zlicza wizyty, czyści niepotrzebne dane i tworzy kopię zapasową bazy danych;

  • (s) ex-payout-service - sierwis przetwarza aplikacje, które są oznaczone jako opłacone lub gotowe do wypłaty (jeśli aktywna jest wymiana automatyczna lub półautomatyczna i skonfigurowane są API systemu płatności);

  • (s) ex-notification-service -sierwis wysyła powiadomienia do klienta i administratora za pośrednictwem poczty e-mail oraz popularnych komunikatorów ;

  • (s) ex-blacklist-bc - sierwis serwis sprawdza i aktualizuje status czarnej listy z serwisu bestchange.org

  • (s) ex-migrate - sierwis sprawdza aktualność danych w bazie danych i sprowadza do jednego standardu;

  • (s) ex-seed - sierwis wgrywa podstawowe dane do wymiennika;


Payout Module

Struktura pliku:

  • plugins/payouts/__NAME_PAYOUT - folder z modulem
  • ./icon.png or ./icon.jpg - ikona modułu 1:1 (zalecane 150px na 150px)
  • ./configure.js - plik reguł konfiguracja modułu również konfiguracja dostępu
  • ./index.js - Klasa modułu (punkt wejścia do modułu)
  • ./template/admin.html - Szablon strony administratora ustawień modułu (szablon vue)
  • ./template/admin.js - Plik eksportu logiki klienta js (vue js)

configure.js:

Przykładowy plik i jego funkcj

module.exports.type = 'payout'; //  typ modułu (payout)
module.exports.title = 'Title of payout'; // tytuł modułu do wyświetlenia w panelu administracyjnym (do 200 znaków)
module.exports.name = 'Name service'; // Nazwa modułu do wyświetlenia w walutach (do 50 znaków)
module.exports.required_npm = []; //tablica wymaganych modułów npm

//tablica xml walut, z którymi współpracuje ten moduł
module.exports.allow_XML = [ 
  "CARDUSD",
  "WMZ",
];

// domyślny objekt konfiguracyjny (zostanie ustawiony w config/app_config.json)
module.exports.default_config = { 
  clientID: '',
  clientSecret: '',
  clientPassword: '',
};

// typy danych w konfiguracji gdzie 1 klucz publiczny 2 sekretny (nie będą każdorazowo przesyłane do administratora)
module.exports.required_config = {
  clientID: 1,
  clientSecret: 2, // hide
  clientPassword: 2, // hide
};

index.js:

musi mieć klasę eksportową

Jak pracować z konfiguracją:
const id_key = __dirname.split('/').slice(-1)[0];
const config = require('../main_config')(id_key);

const clientID = await config.get('clientID')  //pobierz konfigurację według klucza clientID
Przykład konstruktora
constructor(API) {
    this.API = API;
    this.allowIPs = [];
    this.id_key = id_key;
    this.web_domain = config.get('domain');
    this.schema = config.get('schema');
  }

Function getFields(lang,xml){}

Param lang has Sting:

ru, en, etc... - Krótki klucz języka

Param xml has Sting:

Przykład konstruktora

Should Return Array (when xml is support)
// example 
     return [{
        _id: 'account_p',
        name: 'Advanced account USD',
        placeholder: 'U000000',
        regexp: '^U+[0-9]{6,12}$',
        regexp_error: "Account incorrect",
        required: true,
      }];
Should Return NULL (when xml is not support)

Function transfer(order){}

Param order has object:
key Type Required Value
order.uid Number YES order uid
order.outAmount Float YES order outAmount
order.outXML String YES XML of currency for withdrawal
order.outValues Object YES Order requisites
//przykład obiektu order.outValues

order.outValues ={
  account_p:'U000000'
}

// key its from getFields ._id
// value entered client
Should Return Promise -> resolve (when transfer success) {Object}
key Type Required Value
ok Number YES 1 - success
transaction String YES transaction id or transfer id
to String YES Wallet id or other requisites who received payment
currency String YES Currency ISO (example USD)
amount Float YES amount of transfer
fee Float No Fee of tx (will add comment for admin)
note String No Note for order (will show to user)
Should Return Promise -> reject (when transfer fail) {String}

Message of fail