@neo-one/node-levelup
Version:
NEO•ONE levelup node storage.
1,133 lines (1,002 loc) • 33.3 kB
JavaScript
'use strict';
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var clientCore = require('@neo-one/client-core');
var nodeCore = require('@neo-one/node-core');
var utils = require('@neo-one/utils');
var bytewise = _interopDefault(require('bytewise'));
var operators = require('rxjs/operators');
var Observable = require('rxjs/Observable');
function _asyncToGenerator(fn) {
return function () {
var self = this,
args = arguments;
return new Promise(function (resolve, reject) {
var gen = fn.apply(self, args);
function step(key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _next(value) {
step("next", value);
}
function _throw(err) {
step("throw", err);
}
_next();
});
};
}
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function");
}
subClass.prototype = Object.create(superClass && superClass.prototype, {
constructor: {
value: subClass,
enumerable: false,
writable: true,
configurable: true
}
});
if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
}
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _toConsumableArray(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
return arr2;
} else {
return Array.from(arr);
}
}
var NotFoundError =
/*#__PURE__*/
function (_CustomError) {
_inherits(NotFoundError, _CustomError);
function NotFoundError() {
var _this;
_classCallCheck(this, NotFoundError);
_this = _possibleConstructorReturn(this, (NotFoundError.__proto__ || Object.getPrototypeOf(NotFoundError)).call(this, 'Not found'));
_this.code = 'NOT_FOUND';
return _this;
}
return NotFoundError;
}(utils.CustomError);
var UnknownTypeError =
/*#__PURE__*/
function (_CustomError2) {
_inherits(UnknownTypeError, _CustomError2);
function UnknownTypeError() {
var _this2;
_classCallCheck(this, UnknownTypeError);
_this2 = _possibleConstructorReturn(this, (UnknownTypeError.__proto__ || Object.getPrototypeOf(UnknownTypeError)).call(this, 'Unknown type'));
_this2.code = 'UNKNOWN_TYPE';
return _this2;
}
return UnknownTypeError;
}(utils.CustomError);
var KeyNotFoundError =
/*#__PURE__*/
function (_CustomError3) {
_inherits(KeyNotFoundError, _CustomError3);
function KeyNotFoundError(keyString) {
var _this3;
_classCallCheck(this, KeyNotFoundError);
_this3 = _possibleConstructorReturn(this, (KeyNotFoundError.__proto__ || Object.getPrototypeOf(KeyNotFoundError)).call(this, "Key ".concat(keyString, " not found in database")));
_this3.code = 'KEY_NOT_FOUND';
return _this3;
}
return KeyNotFoundError;
}(utils.CustomError);
var serializeHeaderHash = function serializeHeaderHash(hash) {
return clientCore.common.uInt256ToBuffer(hash);
};
var deserializeHeaderHash = function deserializeHeaderHash(hash) {
return clientCore.common.bufferToUInt256(hash);
};
var serializeBlockHash = function serializeBlockHash(hash) {
return clientCore.common.uInt256ToBuffer(hash);
};
var deserializeBlockHash = function deserializeBlockHash(hash) {
return clientCore.common.bufferToUInt256(hash);
};
var accountKeyPrefix = 'account';
var actionKeyPrefix = 'action';
var assetKeyPrefix = 'asset';
var blockKeyPrefix = 'block';
var blockSystemFeeKeyPrefix = 'blockSystemFee';
var headerKeyPrefix = 'header';
var headerHashKeyPrefix = 'header-index';
var transactionKeyPrefix = 'transaction';
var outputKeyPrefix = 'output';
var transactionSpentCoinsKeyPrefix = 'transactionSpentCoins';
var contractKeyPrefix = 'contract';
var storageItemKeyPrefix = 'storageItem';
var validatorKeyPrefix = 'validator';
var invocationDataKeyPrefix = 'invocationData';
var settingsPrefix = 'settings';
var serializeHeaderIndexHashKey = function serializeHeaderIndexHashKey(index) {
return bytewise.encode([headerHashKeyPrefix, index]);
};
var maxHeaderHashKey = bytewise.encode([settingsPrefix, 'max-header-hash']);
var maxBlockHashKey = bytewise.encode([settingsPrefix, 'max-block-hash']);
var serializeStorageItemKey = function serializeStorageItemKey(_ref) {
var hash = _ref.hash,
key = _ref.key;
return bytewise.encode([storageItemKeyPrefix, clientCore.common.uInt160ToBuffer(hash), key]);
};
var serializeStorageItemKeyString = function serializeStorageItemKeyString(_ref2) {
var hash = _ref2.hash,
key = _ref2.key;
return "".concat(storageItemKeyPrefix, ":") + "".concat(clientCore.common.uInt160ToString(hash), ":") + "".concat(key.toString('hex'));
};
var getStorageItemKeyMin = function getStorageItemKeyMin(_ref3) {
var hash = _ref3.hash;
return bytewise.encode(hash == null ? bytewise.sorts.array.bound.lower([storageItemKeyPrefix]) : bytewise.sorts.array.bound.lower([storageItemKeyPrefix, clientCore.common.uInt160ToBuffer(hash)]));
};
var getStorageItemKeyMax = function getStorageItemKeyMax(_ref4) {
var hash = _ref4.hash;
return bytewise.encode(hash == null ? bytewise.sorts.array.bound.upper([storageItemKeyPrefix]) : bytewise.sorts.array.bound.upper([storageItemKeyPrefix, clientCore.common.uInt160ToBuffer(hash)]));
};
var serializeActionKey = function serializeActionKey(_ref5) {
var blockIndex = _ref5.blockIndex,
transactionIndex = _ref5.transactionIndex,
index = _ref5.index;
return bytewise.encode([actionKeyPrefix, blockIndex, transactionIndex, index]);
};
var serializeActionKeyString = function serializeActionKeyString(_ref6) {
var blockIndex = _ref6.blockIndex,
transactionIndex = _ref6.transactionIndex,
index = _ref6.index;
return "".concat(actionKeyPrefix, ":") + "".concat(blockIndex, ":") + "".concat(transactionIndex, ":") + "".concat(index);
};
var getActionKeyMin = function getActionKeyMin(_ref7) {
var blockIndexStart = _ref7.blockIndexStart,
transactionIndexStart = _ref7.transactionIndexStart,
indexStart = _ref7.indexStart;
return bytewise.encode(bytewise.sorts.array.bound.lower([actionKeyPrefix, blockIndexStart, transactionIndexStart, indexStart].filter(function (value) {
return value != null;
})));
};
var getActionKeyMax = function getActionKeyMax(_ref8) {
var blockIndexStop = _ref8.blockIndexStop,
transactionIndexStop = _ref8.transactionIndexStop,
indexStop = _ref8.indexStop;
return bytewise.encode(bytewise.sorts.array.bound.upper([actionKeyPrefix, blockIndexStop == null ? Number.MAX_SAFE_INTEGER : blockIndexStop, transactionIndexStop == null ? Number.MAX_SAFE_INTEGER : transactionIndexStop, indexStop == null ? Number.MAX_SAFE_INTEGER : indexStop]));
};
var serializeValidatorKey = function serializeValidatorKey(_ref9) {
var publicKey = _ref9.publicKey;
return bytewise.encode([validatorKeyPrefix, clientCore.common.ecPointToBuffer(publicKey)]);
};
var serializeValidatorKeyString = function serializeValidatorKeyString(_ref10) {
var publicKey = _ref10.publicKey;
return "".concat(validatorKeyPrefix, ":").concat(clientCore.common.ecPointToString(publicKey));
};
var validatorMinKey = bytewise.encode(bytewise.sorts.array.bound.lower([validatorKeyPrefix]));
var validatorMaxKey = bytewise.encode(bytewise.sorts.array.bound.upper([validatorKeyPrefix]));
var serializeUInt160Key = function serializeUInt160Key(_ref11) {
var hash = _ref11.hash;
return clientCore.common.uInt160ToBuffer(hash);
};
var serializeUInt256Key = function serializeUInt256Key(_ref12) {
var hash = _ref12.hash;
return clientCore.common.uInt256ToBuffer(hash);
};
var createSerializeUInt160Key = function createSerializeUInt160Key(prefix) {
return function (input) {
return bytewise.encode([prefix, serializeUInt160Key(input)]);
};
};
var createSerializeUInt256Key = function createSerializeUInt256Key(prefix) {
return function (input) {
return bytewise.encode([prefix, serializeUInt256Key(input)]);
};
};
var createSerializeUInt160KeyString = function createSerializeUInt160KeyString(prefix) {
return function (input) {
return "".concat(prefix, ":").concat(clientCore.common.uInt160ToString(input.hash));
};
};
var createSerializeUInt256KeyString = function createSerializeUInt256KeyString(prefix) {
return function (input) {
return "".concat(prefix, ":").concat(clientCore.common.uInt256ToString(input.hash));
};
};
var accountMinKey = bytewise.encode(bytewise.sorts.array.bound.lower([accountKeyPrefix]));
var accountMaxKey = bytewise.encode(bytewise.sorts.array.bound.upper([accountKeyPrefix]));
var serializeOutputKey = function serializeOutputKey(_ref13) {
var index = _ref13.index,
hash = _ref13.hash;
return bytewise.encode([outputKeyPrefix, serializeUInt256Key({
hash: hash
}), index]);
};
var serializeOutputKeyString = function serializeOutputKeyString(_ref14) {
var index = _ref14.index,
hash = _ref14.hash;
return "".concat(outputKeyPrefix, ":").concat(clientCore.common.uInt256ToString(hash), ":").concat(index);
};
var typeKeyToSerializeKey = {
account: createSerializeUInt160Key(accountKeyPrefix),
action: serializeActionKey,
asset: createSerializeUInt256Key(assetKeyPrefix),
block: createSerializeUInt256Key(blockKeyPrefix),
blockSystemFee: createSerializeUInt256Key(blockSystemFeeKeyPrefix),
header: createSerializeUInt256Key(headerKeyPrefix),
transaction: createSerializeUInt256Key(transactionKeyPrefix),
output: serializeOutputKey,
transactionSpentCoins: createSerializeUInt256Key(transactionSpentCoinsKeyPrefix),
contract: createSerializeUInt160Key(contractKeyPrefix),
storageItem: serializeStorageItemKey,
validator: serializeValidatorKey,
invocationData: createSerializeUInt256Key(invocationDataKeyPrefix)
};
var typeKeyToSerializeKeyString = {
account: createSerializeUInt160KeyString(accountKeyPrefix),
action: serializeActionKeyString,
asset: createSerializeUInt256KeyString(assetKeyPrefix),
block: createSerializeUInt256KeyString(blockKeyPrefix),
blockSystemFee: createSerializeUInt256KeyString(blockSystemFeeKeyPrefix),
header: createSerializeUInt256KeyString(headerKeyPrefix),
transaction: createSerializeUInt256KeyString(transactionKeyPrefix),
output: serializeOutputKeyString,
transactionSpentCoins: createSerializeUInt256KeyString(transactionSpentCoinsKeyPrefix),
contract: createSerializeUInt160KeyString(contractKeyPrefix),
storageItem: serializeStorageItemKeyString,
validator: serializeValidatorKeyString,
invocationData: createSerializeUInt256KeyString(invocationDataKeyPrefix)
};
var convertAddChange = function convertAddChange(changeIn) {
var change = changeIn;
switch (change.type) {
case 'account':
return [{
type: 'put',
key: typeKeyToSerializeKey.account(change.value),
value: change.value.serializeWire()
}];
case 'action':
return [{
type: 'put',
key: typeKeyToSerializeKey.action({
blockIndex: change.value.blockIndex,
transactionIndex: change.value.transactionIndex,
index: change.value.index
}),
value: change.value.serializeWire()
}];
case 'asset':
return [{
type: 'put',
key: typeKeyToSerializeKey.asset(change.value),
value: change.value.serializeWire()
}];
case 'block':
return [{
type: 'put',
key: typeKeyToSerializeKey.block(change.value),
value: change.value.serializeWire()
}, {
type: 'put',
key: maxBlockHashKey,
value: serializeBlockHash(change.value.hash)
}];
case 'blockSystemFee':
return [{
type: 'put',
key: typeKeyToSerializeKey.blockSystemFee(change.value),
value: change.value.serializeWire()
}];
case 'header':
return [{
type: 'put',
key: typeKeyToSerializeKey.header(change.value),
value: change.value.serializeWire()
}, {
type: 'put',
key: maxHeaderHashKey,
value: serializeHeaderHash(change.value.hash)
}, {
type: 'put',
key: serializeHeaderIndexHashKey(change.value.index),
value: serializeHeaderHash(change.value.hash)
}];
case 'transaction':
return [{
type: 'put',
key: typeKeyToSerializeKey.transaction(change.value),
value: change.value.serializeWire()
}];
case 'output':
return [{
type: 'put',
key: typeKeyToSerializeKey.output({
hash: change.value.hash,
index: change.value.index
}),
value: change.value.output.serializeWire()
}];
case 'transactionSpentCoins':
return [{
type: 'put',
key: typeKeyToSerializeKey.transactionSpentCoins(change.value),
value: change.value.serializeWire()
}];
case 'contract':
return [{
type: 'put',
key: typeKeyToSerializeKey.contract(change.value),
value: change.value.serializeWire()
}];
case 'storageItem':
return [{
type: 'put',
key: typeKeyToSerializeKey.storageItem({
hash: change.value.hash,
key: change.value.key
}),
value: change.value.serializeWire()
}];
case 'validator':
return [{
type: 'put',
key: typeKeyToSerializeKey.validator({
publicKey: change.value.publicKey
}),
value: change.value.serializeWire()
}];
case 'invocationData':
return [{
type: 'put',
key: typeKeyToSerializeKey.invocationData(change.value),
value: change.value.serializeWire()
}];
default:
// eslint-disable-next-line
change.type;
throw new UnknownTypeError();
}
};
var convertDeleteChange = function convertDeleteChange(change) {
switch (change.type) {
case 'account':
return {
type: 'del',
key: typeKeyToSerializeKey.account(change.key)
};
case 'contract':
return {
type: 'del',
key: typeKeyToSerializeKey.contract(change.key)
};
case 'storageItem':
return {
type: 'del',
key: typeKeyToSerializeKey.storageItem(change.key)
};
default:
// eslint-disable-next-line
change.type;
throw new UnknownTypeError();
}
};
var convertChange = (function (change) {
if (change.type === 'add') {
return convertAddChange(change.change);
} else if (change.type === 'delete') {
return [convertDeleteChange(change.change)];
} // eslint-disable-next-line
change.type; // TODO: Make better
throw new Error('Bad change type');
});
var streamToObservable = (function (getStream) {
return Observable.Observable.create(function (observer) {
var stream = getStream();
var done = false;
var cleanup = function cleanup() {
if (!done) {
done = true; // eslint-disable-next-line
stream.removeListener('end', onEnd); // eslint-disable-next-line
stream.removeListener('error', onError); // eslint-disable-next-line
stream.removeListener('data', onData);
}
};
var onEnd = function onEnd() {
cleanup();
observer.complete();
};
var onError = function onError(error) {
cleanup();
observer.error(error);
};
var onData = function onData(data) {
return observer.next(data);
};
stream.once('error', onError);
stream.once('end', onEnd);
stream.on('data', onData);
return function () {
return cleanup();
};
});
});
function createTryGet(_ref) {
var get = _ref.get;
return (
/*#__PURE__*/
function () {
var _ref2 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(key) {
var result;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return get(key);
case 3:
result = _context.sent;
return _context.abrupt("return", result);
case 7:
_context.prev = 7;
_context.t0 = _context["catch"](0);
if (!(_context.t0.notFound || _context.t0.code === 'KEY_NOT_FOUND')) {
_context.next = 11;
break;
}
return _context.abrupt("return", null);
case 11:
throw _context.t0;
case 12:
case "end":
return _context.stop();
}
}
}, _callee, this, [[0, 7]]);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}()
);
}
function createTryGetLatest(_ref3) {
var db = _ref3.db,
latestKey = _ref3.latestKey,
deserializeResult = _ref3.deserializeResult,
get = _ref3.get;
return (
/*#__PURE__*/
_asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee2() {
var result, _value;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return db.get(latestKey);
case 3:
result = _context2.sent;
_context2.next = 6;
return get(deserializeResult(result));
case 6:
_value = _context2.sent;
return _context2.abrupt("return", _value);
case 10:
_context2.prev = 10;
_context2.t0 = _context2["catch"](0);
if (!(_context2.t0.notFound || _context2.t0.code === 'KEY_NOT_FOUND')) {
_context2.next = 14;
break;
}
return _context2.abrupt("return", null);
case 14:
throw _context2.t0;
case 15:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[0, 10]]);
}))
);
}
function createReadStorage(_ref5) {
var db = _ref5.db,
serializeKey = _ref5.serializeKey,
serializeKeyString = _ref5.serializeKeyString,
deserializeValue = _ref5.deserializeValue;
var get =
/*#__PURE__*/
function () {
var _ref6 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee3(key) {
var result;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.prev = 0;
_context3.next = 3;
return db.get(serializeKey(key));
case 3:
result = _context3.sent;
return _context3.abrupt("return", deserializeValue(result));
case 7:
_context3.prev = 7;
_context3.t0 = _context3["catch"](0);
if (!(_context3.t0.notFound || _context3.t0.code === 'KEY_NOT_FOUND')) {
_context3.next = 11;
break;
}
throw new KeyNotFoundError(serializeKeyString(key));
case 11:
throw _context3.t0;
case 12:
case "end":
return _context3.stop();
}
}
}, _callee3, this, [[0, 7]]);
}));
return function get(_x2) {
return _ref6.apply(this, arguments);
};
}();
return {
get: get,
tryGet: createTryGet({
get: get
})
};
}
function createAll(_ref7) {
var db = _ref7.db,
minKey = _ref7.minKey,
maxKey = _ref7.maxKey,
deserializeValue = _ref7.deserializeValue;
return streamToObservable(function () {
return db.createValueStream({
gte: minKey,
lte: maxKey
});
}).pipe(operators.map(function (value) {
return deserializeValue(value);
}));
}
function createReadAllStorage(_ref8) {
var db = _ref8.db,
serializeKey = _ref8.serializeKey,
serializeKeyString = _ref8.serializeKeyString,
minKey = _ref8.minKey,
maxKey = _ref8.maxKey,
deserializeValue = _ref8.deserializeValue;
var readStorage = createReadStorage({
db: db,
serializeKey: serializeKey,
serializeKeyString: serializeKeyString,
deserializeValue: deserializeValue
});
return {
get: readStorage.get,
tryGet: readStorage.tryGet,
all: createAll({
db: db,
minKey: minKey,
maxKey: maxKey,
deserializeValue: deserializeValue
})
};
}
function createReadGetAllStorage(_ref9) {
var db = _ref9.db,
serializeKey = _ref9.serializeKey,
serializeKeyString = _ref9.serializeKeyString,
getMinKey = _ref9.getMinKey,
getMaxKey = _ref9.getMaxKey,
deserializeValue = _ref9.deserializeValue;
var readStorage = createReadStorage({
db: db,
serializeKey: serializeKey,
serializeKeyString: serializeKeyString,
deserializeValue: deserializeValue
});
return {
get: readStorage.get,
tryGet: readStorage.tryGet,
getAll: function getAll(keys) {
return createAll({
db: db,
minKey: getMinKey(keys),
maxKey: getMaxKey(keys),
deserializeValue: deserializeValue
});
}
};
}
var levelUpStorage$1 = (function (_ref) {
var db = _ref.db,
context = _ref.context;
var getHash =
/*#__PURE__*/
function () {
var _ref3 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee(_ref2) {
var hashOrIndex, hash, result;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
hashOrIndex = _ref2.hashOrIndex;
hash = hashOrIndex;
if (!(typeof hash === 'number')) {
_context.next = 15;
break;
}
_context.prev = 3;
_context.next = 6;
return db.get(serializeHeaderIndexHashKey(hash));
case 6:
result = _context.sent;
hash = deserializeHeaderHash(result);
_context.next = 15;
break;
case 10:
_context.prev = 10;
_context.t0 = _context["catch"](3);
if (!_context.t0.notFound) {
_context.next = 14;
break;
}
throw new KeyNotFoundError("".concat(hash));
case 14:
throw _context.t0;
case 15:
return _context.abrupt("return", hash);
case 16:
case "end":
return _context.stop();
}
}
}, _callee, this, [[3, 10]]);
}));
return function getHash(_x) {
return _ref3.apply(this, arguments);
};
}();
var headerBase = createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.header,
serializeKeyString: typeKeyToSerializeKeyString.header,
deserializeValue: function deserializeValue(buffer) {
return clientCore.Header.deserializeWire({
context: context,
buffer: buffer
});
}
});
var getHeader =
/*#__PURE__*/
function () {
var _ref5 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee2(_ref4) {
var hashOrIndex, hash;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
hashOrIndex = _ref4.hashOrIndex;
_context2.next = 3;
return getHash({
hashOrIndex: hashOrIndex
});
case 3:
hash = _context2.sent;
return _context2.abrupt("return", headerBase.get({
hash: hash
}));
case 5:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
return function getHeader(_x2) {
return _ref5.apply(this, arguments);
};
}();
var header = {
get: getHeader,
tryGet: createTryGet({
get: getHeader
}),
tryGetLatest: createTryGetLatest({
db: db,
latestKey: maxHeaderHashKey,
deserializeResult: function deserializeResult(result) {
return {
hash: deserializeHeaderHash(result)
};
},
get: headerBase.get
})
};
var blockBase = createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.block,
serializeKeyString: typeKeyToSerializeKeyString.block,
deserializeValue: function deserializeValue(buffer) {
return clientCore.Block.deserializeWire({
context: context,
buffer: buffer
});
}
});
var getBlock =
/*#__PURE__*/
function () {
var _ref7 = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee3(_ref6) {
var hashOrIndex, hash;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
hashOrIndex = _ref6.hashOrIndex;
_context3.next = 3;
return getHash({
hashOrIndex: hashOrIndex
});
case 3:
hash = _context3.sent;
return _context3.abrupt("return", blockBase.get({
hash: hash
}));
case 5:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
return function getBlock(_x3) {
return _ref7.apply(this, arguments);
};
}();
var block = {
get: getBlock,
tryGet: createTryGet({
get: getBlock
}),
tryGetLatest: createTryGetLatest({
db: db,
latestKey: maxBlockHashKey,
deserializeResult: function deserializeResult(result) {
return {
hash: deserializeBlockHash(result)
};
},
get: blockBase.get
})
};
var transaction = createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.transaction,
serializeKeyString: typeKeyToSerializeKeyString.transaction,
deserializeValue: function deserializeValue(buffer) {
return clientCore.deserializeTransactionWire({
context: context,
buffer: buffer
});
}
});
var output = createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.output,
serializeKeyString: typeKeyToSerializeKeyString.output,
deserializeValue: function deserializeValue(buffer) {
return clientCore.Output.deserializeWire({
context: context,
buffer: buffer
});
}
});
return {
header: header,
block: block,
blockSystemFee: createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.blockSystemFee,
serializeKeyString: typeKeyToSerializeKeyString.blockSystemFee,
deserializeValue: function deserializeValue(buffer) {
return nodeCore.BlockSystemFee.deserializeWire({
context: context,
buffer: buffer
});
}
}),
account: createReadAllStorage({
db: db,
serializeKey: typeKeyToSerializeKey.account,
serializeKeyString: typeKeyToSerializeKeyString.account,
minKey: accountMinKey,
maxKey: accountMaxKey,
deserializeValue: function deserializeValue(buffer) {
return clientCore.Account.deserializeWire({
context: context,
buffer: buffer
});
}
}),
action: createReadGetAllStorage({
db: db,
serializeKey: typeKeyToSerializeKey.action,
serializeKeyString: typeKeyToSerializeKeyString.action,
getMinKey: getActionKeyMin,
getMaxKey: getActionKeyMax,
deserializeValue: function deserializeValue(buffer) {
return clientCore.deserializeActionWire({
context: context,
buffer: buffer
});
}
}),
asset: createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.asset,
serializeKeyString: typeKeyToSerializeKeyString.asset,
deserializeValue: function deserializeValue(buffer) {
return clientCore.Asset.deserializeWire({
context: context,
buffer: buffer
});
}
}),
transaction: transaction,
transactionSpentCoins: createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.transactionSpentCoins,
serializeKeyString: typeKeyToSerializeKeyString.transactionSpentCoins,
deserializeValue: function deserializeValue(buffer) {
return nodeCore.TransactionSpentCoins.deserializeWire({
context: context,
buffer: buffer
});
}
}),
output: output,
contract: createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.contract,
serializeKeyString: typeKeyToSerializeKeyString.contract,
deserializeValue: function deserializeValue(buffer) {
return clientCore.Contract.deserializeWire({
context: context,
buffer: buffer
});
}
}),
storageItem: createReadGetAllStorage({
db: db,
serializeKey: typeKeyToSerializeKey.storageItem,
serializeKeyString: typeKeyToSerializeKeyString.storageItem,
getMinKey: getStorageItemKeyMin,
getMaxKey: getStorageItemKeyMax,
deserializeValue: function deserializeValue(buffer) {
return clientCore.StorageItem.deserializeWire({
context: context,
buffer: buffer
});
}
}),
validator: createReadAllStorage({
db: db,
serializeKey: typeKeyToSerializeKey.validator,
serializeKeyString: typeKeyToSerializeKeyString.validator,
minKey: validatorMinKey,
maxKey: validatorMaxKey,
deserializeValue: function deserializeValue(buffer) {
return clientCore.Validator.deserializeWire({
context: context,
buffer: buffer
});
}
}),
invocationData: createReadStorage({
db: db,
serializeKey: typeKeyToSerializeKey.invocationData,
serializeKeyString: typeKeyToSerializeKeyString.invocationData,
deserializeValue: function deserializeValue(buffer) {
return clientCore.InvocationData.deserializeWire({
context: context,
buffer: buffer
});
}
}),
close: function () {
var _close = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee4() {
return regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return db.close();
case 2:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
return function close() {
return _close.apply(this, arguments);
};
}(),
commit: function () {
var _commit = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee5(changeSet) {
var changesList, changes;
return regeneratorRuntime.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
changesList = changeSet.map(function (change) {
return convertChange(change);
});
changes = changesList.reduce(function (acc, converted) {
acc.push.apply(acc, _toConsumableArray(converted));
return acc;
}, []);
_context5.next = 4;
return db.batch(changes);
case 4:
case "end":
return _context5.stop();
}
}
}, _callee5, this);
}));
return function commit(_x4) {
return _commit.apply(this, arguments);
};
}()
};
});
module.exports = levelUpStorage$1;
//# sourceMappingURL=index.js.map