1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const bignumber_js_1 = require("bignumber.js");
|
4 | const log_1 = require("../common/log");
|
5 | const log = log_1.create('randomizer-backend');
|
6 | class RandomizerBackend {
|
7 | constructor(opts, api) {
|
8 | this.spread = opts.spread || 0;
|
9 | this.variation = opts.variation || 0.1;
|
10 | this.getInfo = api.getInfo;
|
11 | this.variation = Math.min(Math.abs(this.variation), 1);
|
12 | log.warn('(!!!) using the randomizer backend. variation=%s', this.variation);
|
13 | }
|
14 | async connect() {
|
15 | }
|
16 | async getRate(sourceAccount, destinationAccount) {
|
17 | const sourceInfo = this.getInfo(sourceAccount);
|
18 | const destinationInfo = this.getInfo(destinationAccount);
|
19 | if (!sourceInfo) {
|
20 | log.error('unable to fetch account info for source account. accountId=%s', sourceAccount);
|
21 | throw new Error('unable to fetch account info for source account. accountId=' + sourceAccount);
|
22 | }
|
23 | if (!destinationInfo) {
|
24 | log.error('unable to fetch account info for destination account. accountId=%s', destinationAccount);
|
25 | throw new Error('unable to fetch account info for destination account. accountId=' + destinationAccount);
|
26 | }
|
27 | const scaleDiff = destinationInfo.assetScale - sourceInfo.assetScale;
|
28 | const randomness = Math.max((0.5 - Math.random()) * this.variation * 2, -1).toFixed(5);
|
29 | const rate = new bignumber_js_1.default(1).plus(randomness).minus(this.spread).shiftedBy(scaleDiff).toPrecision(15);
|
30 | return Number(rate);
|
31 | }
|
32 | submitPayment() {
|
33 | return Promise.resolve();
|
34 | }
|
35 | }
|
36 | exports.default = RandomizerBackend;
|
37 |
|
\ | No newline at end of file |