UNPKG

2.73 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = mocks;
9
10require("core-js/modules/web.dom.iterable");
11
12var _bn = _interopRequireDefault(require("bn.js"));
13
14var _Header = _interopRequireDefault(require("@polkadot/types/Header"));
15
16var _testing = _interopRequireDefault(require("@polkadot/storage/testing"));
17
18var _toU8a = _interopRequireDefault(require("@polkadot/util/bn/toU8a"));
19
20var _toHex = _interopRequireDefault(require("@polkadot/util/u8a/toHex"));
21
22var _asU8a = _interopRequireDefault(require("@polkadot/util-crypto/random/asU8a"));
23
24var _testing2 = _interopRequireDefault(require("@polkadot/util-keyring/testing"));
25
26// Copyright 2017-2018 @polkadot/api-provider authors & contributors
27// This software may be modified and distributed under the terms
28// of the ISC license. See the LICENSE file for details.
29// FIXME: This file is way too long and way too messy
30const keyring = (0, _testing2.default)();
31const emitEvents = ['connected', 'disconnected'];
32let emitIndex = 0;
33
34function makeBlockHeader(prevNumber) {
35 const blockNumber = prevNumber.addn(1);
36 return {
37 digest: {
38 logs: []
39 },
40 extrinsicsRoot: (0, _asU8a.default)(),
41 number: blockNumber,
42 parentHash: prevNumber.eqn(-1) ? new Uint8Array(32) : (0, _toU8a.default)(prevNumber, 256, false),
43 stateRoot: (0, _toU8a.default)(blockNumber, 256, false)
44 };
45}
46
47function updateSubs(subscriptions, method, value) {
48 subscriptions[method].lastValue = value;
49 Object.values(subscriptions[method].callbacks).forEach(cb => {
50 try {
51 cb(null, value);
52 } catch (error) {
53 console.error(`Error on '${method}' subscription`, error);
54 }
55 });
56}
57
58function setStorageBn(db, createKey, value, ...keyParams) {
59 const keyValue = (0, _toHex.default)(createKey(...keyParams));
60 db[keyValue] = (0, _toU8a.default)(value, 64, true);
61}
62
63function mocks({
64 emitter,
65 db,
66 subscriptions
67}) {
68 let newHead = makeBlockHeader(new _bn.default(-1));
69 setInterval(() => {
70 if (++emitIndex === emitEvents.length) {
71 emitIndex = 0;
72 }
73
74 emitter.emit(emitEvents[emitIndex]);
75 newHead = makeBlockHeader(newHead.number);
76 keyring.getPairs().forEach(({
77 publicKey
78 }, index) => {
79 setStorageBn(db, _testing.default.balances.freeBalance, newHead.number.muln(3).iaddn(index), publicKey());
80 setStorageBn(db, _testing.default.system.accountNonce, newHead.number.addn(index), publicKey());
81 });
82 setStorageBn(db, _testing.default.timestamp.now, Math.floor(Date.now() / 1000));
83 updateSubs(subscriptions, 'chain_newHead', new _Header.default(newHead).toJSON());
84 }, 5000);
85}
\No newline at end of file