UNPKG

1.75 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const bignumber_js_1 = require("bignumber.js");
4const log_1 = require("../common/log");
5const log = log_1.create('randomizer-backend');
6class 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}
36exports.default = RandomizerBackend;
37//# sourceMappingURL=randomizer.js.map
\No newline at end of file