1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | var _values = _interopRequireDefault(require("@babel/runtime/core-js/object/values"));
|
6 |
|
7 | require("core-js/modules/web.dom.iterable");
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | const BN = require('bn.js');
|
14 |
|
15 | const headerEncode = require('@polkadot/primitives-json/header/encode');
|
16 |
|
17 | const createKey = require('@polkadot/storage/key');
|
18 |
|
19 | const state = require('@polkadot/storage');
|
20 |
|
21 | const bnToU8a = require('@polkadot/util/bn/toU8a');
|
22 |
|
23 | const u8aToHex = require('@polkadot/util/u8a/toHex');
|
24 |
|
25 | const randomAsU8a = require('@polkadot/util-crypto/random/asU8a');
|
26 |
|
27 | const testKeyring = require('@polkadot/util-keyring/testing');
|
28 |
|
29 | const keyring = testKeyring();
|
30 | const emitEvents = ['connected', 'disconnected'];
|
31 | let emitIndex = 0;
|
32 |
|
33 | function makeBlockHeader(prevNumber) {
|
34 | const blockNumber = prevNumber.addn(1);
|
35 | return {
|
36 | digest: {
|
37 | logs: []
|
38 | },
|
39 | extrinsicsRoot: randomAsU8a(),
|
40 | number: blockNumber,
|
41 | parentHash: prevNumber.eqn(-1) ? new Uint8Array(32) : bnToU8a(prevNumber, 256),
|
42 | stateRoot: bnToU8a(blockNumber, 256)
|
43 | };
|
44 | }
|
45 |
|
46 | function updateSubs(subscriptions, method, value) {
|
47 | subscriptions[method].lastValue = value;
|
48 | (0, _values.default)(subscriptions[method].callbacks).forEach(cb => {
|
49 | try {
|
50 |
|
51 | cb(null, value);
|
52 | } catch (error) {
|
53 | console.error(`Error on '${method}' subscription`, error);
|
54 | }
|
55 | });
|
56 | }
|
57 |
|
58 | function setStorageBn(storage, key, value, ...keyParams) {
|
59 | const keyValue = u8aToHex(createKey(key).apply(null, keyParams));
|
60 | storage[keyValue] = bnToU8a(value, 64, true);
|
61 | }
|
62 |
|
63 | module.exports = function mocks({
|
64 | emitter,
|
65 | storage,
|
66 | subscriptions
|
67 | }) {
|
68 | let newHead = makeBlockHeader(new BN(-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(storage, state.staking.public.freeBalanceOf, newHead.number.muln(3).iaddn(index), publicKey());
|
80 | setStorageBn(storage, state.system.public.accountIndexOf, newHead.number.addn(index), publicKey());
|
81 | });
|
82 | setStorageBn(storage, state.timestamp.public.current, Math.floor(Date.now() / 1000));
|
83 | updateSubs(subscriptions, 'subscribe_newHead', headerEncode(newHead));
|
84 | }, 5000);
|
85 | }; |
\ | No newline at end of file |