@polkadot/api-provider
Version:
Transport providers for the API
85 lines (69 loc) • 2.73 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = mocks;
require("core-js/modules/web.dom.iterable");
var _bn = _interopRequireDefault(require("bn.js"));
var _static = _interopRequireDefault(require("@polkadot/storage/static"));
var _Header = _interopRequireDefault(require("@polkadot/types/Header"));
var _toU8a = _interopRequireDefault(require("@polkadot/util/bn/toU8a"));
var _toHex = _interopRequireDefault(require("@polkadot/util/u8a/toHex"));
var _asU8a = _interopRequireDefault(require("@polkadot/util-crypto/random/asU8a"));
var _testing = _interopRequireDefault(require("@polkadot/util-keyring/testing"));
// Copyright 2017-2018 @polkadot/api-provider authors & contributors
// This software may be modified and distributed under the terms
// of the ISC license. See the LICENSE file for details.
// FIXME: This file is way too long and way too messy
const keyring = (0, _testing.default)();
const emitEvents = ['connected', 'disconnected'];
let emitIndex = 0;
function makeBlockHeader(prevNumber) {
const blockNumber = prevNumber.addn(1);
return {
digest: {
logs: []
},
extrinsicsRoot: (0, _asU8a.default)(),
number: blockNumber,
parentHash: prevNumber.eqn(-1) ? new Uint8Array(32) : (0, _toU8a.default)(prevNumber, 256, false),
stateRoot: (0, _toU8a.default)(blockNumber, 256, false)
};
}
function updateSubs(subscriptions, method, value) {
subscriptions[method].lastValue = value;
Object.values(subscriptions[method].callbacks).forEach(cb => {
try {
cb(null, value);
} catch (error) {
console.error(`Error on '${method}' subscription`, error);
}
});
}
function setStorageBn(db, createKey, value, ...keyParams) {
const keyValue = (0, _toHex.default)(createKey(...keyParams));
db[keyValue] = (0, _toU8a.default)(value, 64, true);
}
function mocks({
emitter,
db,
subscriptions
}) {
let newHead = makeBlockHeader(new _bn.default(-1));
setInterval(() => {
if (++emitIndex === emitEvents.length) {
emitIndex = 0;
}
emitter.emit(emitEvents[emitIndex]);
newHead = makeBlockHeader(newHead.number);
keyring.getPairs().forEach(({
publicKey
}, index) => {
setStorageBn(db, _static.default.balances.freeBalance, newHead.number.muln(3).iaddn(index), publicKey());
setStorageBn(db, _static.default.system.accountNonce, newHead.number.addn(index), publicKey());
});
setStorageBn(db, _static.default.timestamp.now, Math.floor(Date.now() / 1000));
updateSubs(subscriptions, 'chain_newHead', new _Header.default(newHead).toJSON());
}, 5000);
}