web3-provider-engine
Version:
A JavaScript library for composing Ethereum provider objects using middleware modules
59 lines (56 loc) • 1.94 kB
JavaScript
;
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
/* Sanitization Subprovider
* For Parity compatibility
* removes irregular keys
*/
var inherits = require('util').inherits;
var Subprovider = require('./subprovider.js');
var extend = require('xtend');
var ethUtil = require('@ethereumjs/util');
module.exports = SanitizerSubprovider;
inherits(SanitizerSubprovider, Subprovider);
function SanitizerSubprovider(opts) {
var self = this;
}
SanitizerSubprovider.prototype.handleRequest = function (payload, next, end) {
var txParams = payload.params[0];
if (_typeof(txParams) === 'object' && !Array.isArray(txParams)) {
var sanitized = cloneTxParams(txParams);
payload.params[0] = sanitized;
}
next();
};
// we use this to clean any custom params from the txParams
var permitted = ['from', 'to', 'value', 'data', 'gas', 'gasPrice', 'nonce', 'fromBlock', 'toBlock', 'address', 'topics'];
function cloneTxParams(txParams) {
var sanitized = permitted.reduce(function (copy, permitted) {
if (permitted in txParams) {
if (Array.isArray(txParams[permitted])) {
copy[permitted] = txParams[permitted].map(function (item) {
return sanitize(item);
});
} else {
copy[permitted] = sanitize(txParams[permitted]);
}
}
return copy;
}, {});
return sanitized;
}
function sanitize(value) {
switch (value) {
case 'latest':
return value;
case 'pending':
return value;
case 'earliest':
return value;
default:
if (typeof value === 'string') {
return ethUtil.addHexPrefix(value.toLowerCase());
} else {
return value;
}
}
}