rubik-sdk
Version:
Simplify dApp creation
1,109 lines (1,094 loc) • 7.39 MB
JavaScript
var RubicSDK;
/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/@ethereumjs/common/dist.browser/chains/index.js":
/*!**********************************************************************!*\
!*** ./node_modules/@ethereumjs/common/dist.browser/chains/index.js ***!
\**********************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.chains = exports._getInitializedChains = void 0;
var mainnet_json_1 = __importDefault(__webpack_require__(/*! ./mainnet.json */ "./node_modules/@ethereumjs/common/dist.browser/chains/mainnet.json"));
var ropsten_json_1 = __importDefault(__webpack_require__(/*! ./ropsten.json */ "./node_modules/@ethereumjs/common/dist.browser/chains/ropsten.json"));
var rinkeby_json_1 = __importDefault(__webpack_require__(/*! ./rinkeby.json */ "./node_modules/@ethereumjs/common/dist.browser/chains/rinkeby.json"));
var kovan_json_1 = __importDefault(__webpack_require__(/*! ./kovan.json */ "./node_modules/@ethereumjs/common/dist.browser/chains/kovan.json"));
var goerli_json_1 = __importDefault(__webpack_require__(/*! ./goerli.json */ "./node_modules/@ethereumjs/common/dist.browser/chains/goerli.json"));
var sepolia_json_1 = __importDefault(__webpack_require__(/*! ./sepolia.json */ "./node_modules/@ethereumjs/common/dist.browser/chains/sepolia.json"));
/**
* @hidden
*/
function _getInitializedChains(customChains) {
var e_1, _a;
var names = {
'1': 'mainnet',
'3': 'ropsten',
'4': 'rinkeby',
'42': 'kovan',
'5': 'goerli',
'11155111': 'sepolia',
};
var chains = {
mainnet: mainnet_json_1.default,
ropsten: ropsten_json_1.default,
rinkeby: rinkeby_json_1.default,
kovan: kovan_json_1.default,
goerli: goerli_json_1.default,
sepolia: sepolia_json_1.default,
};
if (customChains) {
try {
for (var customChains_1 = __values(customChains), customChains_1_1 = customChains_1.next(); !customChains_1_1.done; customChains_1_1 = customChains_1.next()) {
var chain = customChains_1_1.value;
var name_1 = chain.name;
names[chain.chainId.toString()] = name_1;
chains[name_1] = chain;
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (customChains_1_1 && !customChains_1_1.done && (_a = customChains_1.return)) _a.call(customChains_1);
}
finally { if (e_1) throw e_1.error; }
}
}
chains['names'] = names;
return chains;
}
exports._getInitializedChains = _getInitializedChains;
/**
* @deprecated this constant will be internalized (removed)
* on next major version update
*/
exports.chains = _getInitializedChains();
//# sourceMappingURL=index.js.map
/***/ }),
/***/ "./node_modules/@ethereumjs/common/dist.browser/eips/index.js":
/*!********************************************************************!*\
!*** ./node_modules/@ethereumjs/common/dist.browser/eips/index.js ***!
\********************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.EIPs = void 0;
exports.EIPs = {
1153: __webpack_require__(/*! ./1153.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/1153.json"),
1559: __webpack_require__(/*! ./1559.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/1559.json"),
2315: __webpack_require__(/*! ./2315.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/2315.json"),
2537: __webpack_require__(/*! ./2537.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/2537.json"),
2565: __webpack_require__(/*! ./2565.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/2565.json"),
2718: __webpack_require__(/*! ./2718.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/2718.json"),
2929: __webpack_require__(/*! ./2929.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/2929.json"),
2930: __webpack_require__(/*! ./2930.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/2930.json"),
3198: __webpack_require__(/*! ./3198.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3198.json"),
3529: __webpack_require__(/*! ./3529.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3529.json"),
3540: __webpack_require__(/*! ./3540.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3540.json"),
3541: __webpack_require__(/*! ./3541.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3541.json"),
3554: __webpack_require__(/*! ./3554.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3554.json"),
3607: __webpack_require__(/*! ./3607.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3607.json"),
3651: __webpack_require__(/*! ./3651.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3651.json"),
3670: __webpack_require__(/*! ./3670.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3670.json"),
3675: __webpack_require__(/*! ./3675.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3675.json"),
3855: __webpack_require__(/*! ./3855.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3855.json"),
3860: __webpack_require__(/*! ./3860.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/3860.json"),
4345: __webpack_require__(/*! ./4345.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/4345.json"),
4399: __webpack_require__(/*! ./4399.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/4399.json"),
5133: __webpack_require__(/*! ./5133.json */ "./node_modules/@ethereumjs/common/dist.browser/eips/5133.json"),
};
//# sourceMappingURL=index.js.map
/***/ }),
/***/ "./node_modules/@ethereumjs/common/dist.browser/hardforks/index.js":
/*!*************************************************************************!*\
!*** ./node_modules/@ethereumjs/common/dist.browser/hardforks/index.js ***!
\*************************************************************************/
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.hardforks = void 0;
exports.hardforks = [
['chainstart', __webpack_require__(/*! ./chainstart.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/chainstart.json")],
['homestead', __webpack_require__(/*! ./homestead.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/homestead.json")],
['dao', __webpack_require__(/*! ./dao.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/dao.json")],
['tangerineWhistle', __webpack_require__(/*! ./tangerineWhistle.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/tangerineWhistle.json")],
['spuriousDragon', __webpack_require__(/*! ./spuriousDragon.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/spuriousDragon.json")],
['byzantium', __webpack_require__(/*! ./byzantium.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/byzantium.json")],
['constantinople', __webpack_require__(/*! ./constantinople.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/constantinople.json")],
['petersburg', __webpack_require__(/*! ./petersburg.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/petersburg.json")],
['istanbul', __webpack_require__(/*! ./istanbul.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/istanbul.json")],
['muirGlacier', __webpack_require__(/*! ./muirGlacier.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/muirGlacier.json")],
['berlin', __webpack_require__(/*! ./berlin.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/berlin.json")],
['london', __webpack_require__(/*! ./london.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/london.json")],
['shanghai', __webpack_require__(/*! ./shanghai.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/shanghai.json")],
['arrowGlacier', __webpack_require__(/*! ./arrowGlacier.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/arrowGlacier.json")],
['grayGlacier', __webpack_require__(/*! ./grayGlacier.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/grayGlacier.json")],
['mergeForkIdTransition', __webpack_require__(/*! ./mergeForkIdTransition.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/mergeForkIdTransition.json")],
['merge', __webpack_require__(/*! ./merge.json */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/merge.json")],
];
//# sourceMappingURL=index.js.map
/***/ }),
/***/ "./node_modules/@ethereumjs/common/dist.browser/index.js":
/*!***************************************************************!*\
!*** ./node_modules/@ethereumjs/common/dist.browser/index.js ***!
\***************************************************************/
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
"use strict";
/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ "./node_modules/buffer/index.js")["Buffer"];
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.ConsensusAlgorithm = exports.ConsensusType = exports.Hardfork = exports.Chain = exports.CustomChain = void 0;
var events_1 = __webpack_require__(/*! events */ "./node_modules/events/events.js");
var crc_32_1 = __webpack_require__(/*! crc-32 */ "./node_modules/crc-32/crc32.js");
var ethereumjs_util_1 = __webpack_require__(/*! ethereumjs-util */ "./node_modules/ethereumjs-util/dist.browser/index.js");
var chains_1 = __webpack_require__(/*! ./chains */ "./node_modules/@ethereumjs/common/dist.browser/chains/index.js");
var hardforks_1 = __webpack_require__(/*! ./hardforks */ "./node_modules/@ethereumjs/common/dist.browser/hardforks/index.js");
var eips_1 = __webpack_require__(/*! ./eips */ "./node_modules/@ethereumjs/common/dist.browser/eips/index.js");
var CustomChain;
(function (CustomChain) {
/**
* Polygon (Matic) Mainnet
*
* - [Documentation](https://docs.matic.network/docs/develop/network-details/network)
*/
CustomChain["PolygonMainnet"] = "polygon-mainnet";
/**
* Polygon (Matic) Mumbai Testnet
*
* - [Documentation](https://docs.matic.network/docs/develop/network-details/network)
*/
CustomChain["PolygonMumbai"] = "polygon-mumbai";
/**
* Arbitrum Rinkeby Testnet
*
* - [Documentation](https://developer.offchainlabs.com/docs/public_testnet)
*/
CustomChain["ArbitrumRinkebyTestnet"] = "arbitrum-rinkeby-testnet";
/**
* xDai EVM sidechain with a native stable token
*
* - [Documentation](https://www.xdaichain.com/)
*/
CustomChain["xDaiChain"] = "x-dai-chain";
/**
* Optimistic Kovan - testnet for Optimism roll-up
*
* - [Documentation](https://community.optimism.io/docs/developers/tutorials.html)
*/
CustomChain["OptimisticKovan"] = "optimistic-kovan";
/**
* Optimistic Ethereum - mainnet for Optimism roll-up
*
* - [Documentation](https://community.optimism.io/docs/developers/tutorials.html)
*/
CustomChain["OptimisticEthereum"] = "optimistic-ethereum";
})(CustomChain = exports.CustomChain || (exports.CustomChain = {}));
var Chain;
(function (Chain) {
Chain[Chain["Mainnet"] = 1] = "Mainnet";
Chain[Chain["Ropsten"] = 3] = "Ropsten";
Chain[Chain["Rinkeby"] = 4] = "Rinkeby";
Chain[Chain["Kovan"] = 42] = "Kovan";
Chain[Chain["Goerli"] = 5] = "Goerli";
Chain[Chain["Sepolia"] = 11155111] = "Sepolia";
})(Chain = exports.Chain || (exports.Chain = {}));
var Hardfork;
(function (Hardfork) {
Hardfork["Chainstart"] = "chainstart";
Hardfork["Homestead"] = "homestead";
Hardfork["Dao"] = "dao";
Hardfork["TangerineWhistle"] = "tangerineWhistle";
Hardfork["SpuriousDragon"] = "spuriousDragon";
Hardfork["Byzantium"] = "byzantium";
Hardfork["Constantinople"] = "constantinople";
Hardfork["Petersburg"] = "petersburg";
Hardfork["Istanbul"] = "istanbul";
Hardfork["MuirGlacier"] = "muirGlacier";
Hardfork["Berlin"] = "berlin";
Hardfork["London"] = "london";
Hardfork["ArrowGlacier"] = "arrowGlacier";
Hardfork["GrayGlacier"] = "grayGlacier";
Hardfork["MergeForkIdTransition"] = "mergeForkIdTransition";
Hardfork["Merge"] = "merge";
Hardfork["Shanghai"] = "shanghai";
})(Hardfork = exports.Hardfork || (exports.Hardfork = {}));
var ConsensusType;
(function (ConsensusType) {
ConsensusType["ProofOfStake"] = "pos";
ConsensusType["ProofOfWork"] = "pow";
ConsensusType["ProofOfAuthority"] = "poa";
})(ConsensusType = exports.ConsensusType || (exports.ConsensusType = {}));
var ConsensusAlgorithm;
(function (ConsensusAlgorithm) {
ConsensusAlgorithm["Ethash"] = "ethash";
ConsensusAlgorithm["Clique"] = "clique";
ConsensusAlgorithm["Casper"] = "casper";
})(ConsensusAlgorithm = exports.ConsensusAlgorithm || (exports.ConsensusAlgorithm = {}));
/**
* Common class to access chain and hardfork parameters and to provide
* a unified and shared view on the network and hardfork state.
*
* Use the {@link Common.custom} static constructor for creating simple
* custom chain {@link Common} objects (more complete custom chain setups
* can be created via the main constructor and the {@link CommonOpts.customChains} parameter).
*/
var Common = /** @class */ (function (_super) {
__extends(Common, _super);
/**
*
* @constructor
*/
function Common(opts) {
var e_1, _a;
var _this = this;
var _b, _c;
_this = _super.call(this) || this;
_this._supportedHardforks = [];
_this._eips = [];
_this._customChains = (_b = opts.customChains) !== null && _b !== void 0 ? _b : [];
_this._chainParams = _this.setChain(opts.chain);
_this.DEFAULT_HARDFORK = (_c = _this._chainParams.defaultHardfork) !== null && _c !== void 0 ? _c : Hardfork.Istanbul;
try {
for (var _d = __values(_this._chainParams.hardforks), _e = _d.next(); !_e.done; _e = _d.next()) {
var hf = _e.value;
if (!hf.forkHash) {
hf.forkHash = _this._calcForkHash(hf.name);
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
}
finally { if (e_1) throw e_1.error; }
}
_this._hardfork = _this.DEFAULT_HARDFORK;
if (opts.supportedHardforks) {
_this._supportedHardforks = opts.supportedHardforks;
}
if (opts.hardfork) {
_this.setHardfork(opts.hardfork);
}
if (opts.eips) {
_this.setEIPs(opts.eips);
}
return _this;
}
/**
* Creates a {@link Common} object for a custom chain, based on a standard one.
*
* It uses all the {@link Chain} parameters from the {@link baseChain} option except the ones overridden
* in a provided {@link chainParamsOrName} dictionary. Some usage example:
*
* ```javascript
* Common.custom({chainId: 123})
* ```
*
* There are also selected supported custom chains which can be initialized by using one of the
* {@link CustomChains} for {@link chainParamsOrName}, e.g.:
*
* ```javascript
* Common.custom(CustomChains.MaticMumbai)
* ```
*
* Note that these supported custom chains only provide some base parameters (usually the chain and
* network ID and a name) and can only be used for selected use cases (e.g. sending a tx with
* the `@ethereumjs/tx` library to a Layer-2 chain).
*
* @param chainParamsOrName Custom parameter dict (`name` will default to `custom-chain`) or string with name of a supported custom chain
* @param opts Custom chain options to set the {@link CustomCommonOpts.baseChain}, selected {@link CustomCommonOpts.hardfork} and others
*/
Common.custom = function (chainParamsOrName, opts) {
var _a;
if (opts === void 0) { opts = {}; }
var baseChain = (_a = opts.baseChain) !== null && _a !== void 0 ? _a : 'mainnet';
var standardChainParams = __assign({}, Common._getChainParams(baseChain));
standardChainParams['name'] = 'custom-chain';
if (typeof chainParamsOrName !== 'string') {
return new Common(__assign({ chain: __assign(__assign({}, standardChainParams), chainParamsOrName) }, opts));
}
else {
if (chainParamsOrName === CustomChain.PolygonMainnet) {
return Common.custom({
name: CustomChain.PolygonMainnet,
chainId: 137,
networkId: 137,
}, opts);
}
if (chainParamsOrName === CustomChain.PolygonMumbai) {
return Common.custom({
name: CustomChain.PolygonMumbai,
chainId: 80001,
networkId: 80001,
}, opts);
}
if (chainParamsOrName === CustomChain.ArbitrumRinkebyTestnet) {
return Common.custom({
name: CustomChain.ArbitrumRinkebyTestnet,
chainId: 421611,
networkId: 421611,
}, opts);
}
if (chainParamsOrName === CustomChain.xDaiChain) {
return Common.custom({
name: CustomChain.xDaiChain,
chainId: 100,
networkId: 100,
}, opts);
}
if (chainParamsOrName === CustomChain.OptimisticKovan) {
return Common.custom({
name: CustomChain.OptimisticKovan,
chainId: 69,
networkId: 69,
}, __assign({ hardfork: Hardfork.Berlin }, opts));
}
if (chainParamsOrName === CustomChain.OptimisticEthereum) {
return Common.custom({
name: CustomChain.OptimisticEthereum,
chainId: 10,
networkId: 10,
}, __assign({ hardfork: Hardfork.Berlin }, opts));
}
throw new Error("Custom chain ".concat(chainParamsOrName, " not supported"));
}
};
/**
* Creates a {@link Common} object for a custom chain, based on a standard one. It uses all the `Chain`
* params from {@link baseChain} except the ones overridden in {@link customChainParams}.
*
* @deprecated Use {@link Common.custom} instead
*
* @param baseChain The name (`mainnet`) or id (`1`) of a standard chain used to base the custom
* chain params on.
* @param customChainParams The custom parameters of the chain.
* @param hardfork String identifier ('byzantium') for hardfork (optional)
* @param supportedHardforks Limit parameter returns to the given hardforks (optional)
*/
Common.forCustomChain = function (baseChain, customChainParams, hardfork, supportedHardforks) {
var standardChainParams = Common._getChainParams(baseChain);
return new Common({
chain: __assign(__assign({}, standardChainParams), customChainParams),
hardfork: hardfork,
supportedHardforks: supportedHardforks,
});
};
/**
* Static method to determine if a {@link chainId} is supported as a standard chain
* @param chainId BN id (`1`) of a standard chain
* @returns boolean
*/
Common.isSupportedChainId = function (chainId) {
var initializedChains = (0, chains_1._getInitializedChains)();
return Boolean(initializedChains['names'][chainId.toString()]);
};
Common._getChainParams = function (chain, customChains) {
var initializedChains = (0, chains_1._getInitializedChains)(customChains);
if (typeof chain === 'number' || ethereumjs_util_1.BN.isBN(chain)) {
chain = chain.toString();
if (initializedChains['names'][chain]) {
var name_1 = initializedChains['names'][chain];
return initializedChains[name_1];
}
throw new Error("Chain with ID ".concat(chain, " not supported"));
}
if (initializedChains[chain]) {
return initializedChains[chain];
}
throw new Error("Chain with name ".concat(chain, " not supported"));
};
/**
* Sets the chain
* @param chain String ('mainnet') or Number (1) chain
* representation. Or, a Dictionary of chain parameters for a private network.
* @returns The dictionary with parameters set as chain
*/
Common.prototype.setChain = function (chain) {
var e_2, _a;
if (typeof chain === 'number' || typeof chain === 'string' || ethereumjs_util_1.BN.isBN(chain)) {
// Filter out genesis states if passed in to customChains
var plainCustomChains = void 0;
if (this._customChains &&
this._customChains.length > 0 &&
Array.isArray(this._customChains[0])) {
plainCustomChains = this._customChains.map(function (e) { return e[0]; });
}
else {
plainCustomChains = this._customChains;
}
this._chainParams = Common._getChainParams(chain, plainCustomChains);
}
else if (typeof chain === 'object') {
if (this._customChains.length > 0) {
throw new Error('Chain must be a string, number, or BN when initialized with customChains passed in');
}
var required = ['networkId', 'genesis', 'hardforks', 'bootstrapNodes'];
try {
for (var required_1 = __values(required), required_1_1 = required_1.next(); !required_1_1.done; required_1_1 = required_1.next()) {
var param = required_1_1.value;
if (chain[param] === undefined) {
throw new Error("Missing required chain parameter: ".concat(param));
}
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (required_1_1 && !required_1_1.done && (_a = required_1.return)) _a.call(required_1);
}
finally { if (e_2) throw e_2.error; }
}
this._chainParams = chain;
}
else {
throw new Error('Wrong input format');
}
return this._chainParams;
};
/**
* Sets the hardfork to get params for
* @param hardfork String identifier (e.g. 'byzantium') or {@link Hardfork} enum
*/
Common.prototype.setHardfork = function (hardfork) {
var e_3, _a;
if (!this._isSupportedHardfork(hardfork)) {
throw new Error("Hardfork ".concat(hardfork, " not set as supported in supportedHardforks"));
}
var existing = false;
try {
for (var HARDFORK_CHANGES_1 = __values(hardforks_1.hardforks), HARDFORK_CHANGES_1_1 = HARDFORK_CHANGES_1.next(); !HARDFORK_CHANGES_1_1.done; HARDFORK_CHANGES_1_1 = HARDFORK_CHANGES_1.next()) {
var hfChanges = HARDFORK_CHANGES_1_1.value;
if (hfChanges[0] === hardfork) {
if (this._hardfork !== hardfork) {
this._hardfork = hardfork;
this.emit('hardforkChanged', hardfork);
}
existing = true;
}
}
}
catch (e_3_1) { e_3 = { error: e_3_1 }; }
finally {
try {
if (HARDFORK_CHANGES_1_1 && !HARDFORK_CHANGES_1_1.done && (_a = HARDFORK_CHANGES_1.return)) _a.call(HARDFORK_CHANGES_1);
}
finally { if (e_3) throw e_3.error; }
}
if (!existing) {
throw new Error("Hardfork with name ".concat(hardfork, " not supported"));
}
};
/**
* Returns the hardfork based on the block number or an optional
* total difficulty (Merge HF) provided.
*
* An optional TD takes precedence in case the corresponding HF block
* is set to `null` or otherwise needs to match (if not an error
* will be thrown).
*
* @param blockNumber
* @param td
* @returns The name of the HF
*/
Common.prototype.getHardforkByBlockNumber = function (blockNumber, td) {
var e_4, _a;
blockNumber = (0, ethereumjs_util_1.toType)(blockNumber, ethereumjs_util_1.TypeOutput.BN);
td = (0, ethereumjs_util_1.toType)(td, ethereumjs_util_1.TypeOutput.BN);
var hardfork = Hardfork.Chainstart;
var minTdHF;
var maxTdHF;
var previousHF;
try {
for (var _b = __values(this.hardforks()), _c = _b.next(); !_c.done; _c = _b.next()) {
var hf = _c.value;
// Skip comparison for not applied HFs
if (hf.block === null) {
if (td !== undefined && td !== null && hf.td !== undefined && hf.td !== null) {
if (td.gte(new ethereumjs_util_1.BN(hf.td))) {
return hf.name;
}
}
continue;
}
if (blockNumber.gte(new ethereumjs_util_1.BN(hf.block))) {
hardfork = hf.name;
}
if (td && hf.td) {
if (td.gte(new ethereumjs_util_1.BN(hf.td))) {
minTdHF = hf.name;
}
else {
maxTdHF = previousHF;
}
}
previousHF = hf.name;
}
}
catch (e_4_1) { e_4 = { error: e_4_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_4) throw e_4.error; }
}
if (td) {
var msgAdd = "block number: ".concat(blockNumber, " (-> ").concat(hardfork, "), ");
if (minTdHF) {
if (!this.hardforkGteHardfork(hardfork, minTdHF)) {
var msg = 'HF determined by block number is lower than the minimum total difficulty HF';
msgAdd += "total difficulty: ".concat(td, " (-> ").concat(minTdHF, ")");
throw new Error("".concat(msg, ": ").concat(msgAdd));
}
}
if (maxTdHF) {
if (!this.hardforkGteHardfork(maxTdHF, hardfork)) {
var msg = 'Maximum HF determined by total difficulty is lower than the block number HF';
msgAdd += "total difficulty: ".concat(td, " (-> ").concat(maxTdHF, ")");
throw new Error("".concat(msg, ": ").concat(msgAdd));
}
}
}
return hardfork;
};
/**
* Sets a new hardfork based on the block number or an optional
* total difficulty (Merge HF) provided.
*
* An optional TD takes precedence in case the corresponding HF block
* is set to `null` or otherwise needs to match (if not an error
* will be thrown).
*
* @param blockNumber
* @param td
* @returns The name of the HF set
*/
Common.prototype.setHardforkByBlockNumber = function (blockNumber, td) {
var hardfork = this.getHardforkByBlockNumber(blockNumber, td);
this.setHardfork(hardfork);
return hardfork;
};
/**
* Internal helper function to choose between hardfork set and hardfork provided as param
* @param hardfork Hardfork given to function as a parameter
* @returns Hardfork chosen to be used
*/
Common.prototype._chooseHardfork = function (hardfork, onlySupported) {
if (onlySupported === void 0) { onlySupported = true; }
if (!hardfork) {
hardfork = this._hardfork;
}
else if (onlySupported && !this._isSupportedHardfork(hardfork)) {
throw new Error("Hardfork ".concat(hardfork, " not set as supported in supportedHardforks"));
}
return hardfork;
};
/**
* Internal helper function, returns the params for the given hardfork for the chain set
* @param hardfork Hardfork name
* @returns Dictionary with hardfork params
*/
Common.prototype._getHardfork = function (hardfork) {
var e_5, _a;
var hfs = this.hardforks();
try {
for (var hfs_1 = __values(hfs), hfs_1_1 = hfs_1.next(); !hfs_1_1.done; hfs_1_1 = hfs_1.next()) {
var hf = hfs_1_1.value;
if (hf['name'] === hardfork)
return hf;
}
}
catch (e_5_1) { e_5 = { error: e_5_1 }; }
finally {
try {
if (hfs_1_1 && !hfs_1_1.done && (_a = hfs_1.return)) _a.call(hfs_1);
}
finally { if (e_5) throw e_5.error; }
}
throw new Error("Hardfork ".concat(hardfork, " not defined for chain ").concat(this.chainName()));
};
/**
* Internal helper function to check if a hardfork is set to be supported by the library
* @param hardfork Hardfork name
* @returns True if hardfork is supported
*/
Common.prototype._isSupportedHardfork = function (hardfork) {
var e_6, _a;
if (this._supportedHardforks.length > 0) {
try {
for (var _b = __values(this._supportedHardforks), _c = _b.next(); !_c.done; _c = _b.next()) {
var supportedHf = _c.value;
if (hardfork === supportedHf)
return true;
}
}
catch (e_6_1) { e_6 = { error: e_6_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_6) throw e_6.error; }
}
}
else {
return true;
}
return false;
};
/**
* Sets the active EIPs
* @param eips
*/
Common.prototype.setEIPs = function (eips) {
var e_7, _a;
var _this = this;
if (eips === void 0) { eips = []; }
var _loop_1 = function (eip) {
if (!(eip in eips_1.EIPs)) {
throw new Error("".concat(eip, " not supported"));
}
var minHF = this_1.gteHardfork(eips_1.EIPs[eip]['minimumHardfork']);
if (!minHF) {
throw new Error("".concat(eip, " cannot be activated on hardfork ").concat(this_1.hardfork(), ", minimumHardfork: ").concat(minHF));
}
if (eips_1.EIPs[eip].requiredEIPs) {
;
eips_1.EIPs[eip].requiredEIPs.forEach(function (elem) {
if (!(eips.includes(elem) || _this.isActivatedEIP(elem))) {
throw new Error("".concat(eip, " requires EIP ").concat(elem, ", but is not included in the EIP list"));
}
});
}
};
var this_1 = this;
try {
for (var eips_2 = __values(eips), eips_2_1 = eips_2.next(); !eips_2_1.done; eips_2_1 = eips_2.next()) {
var eip = eips_2_1.value;
_loop_1(eip);
}
}
catch (e_7_1) { e_7 = { error: e_7_1 }; }
finally {
try {
if (eips_2_1 && !eips_2_1.done && (_a = eips_2.return)) _a.call(eips_2);
}
finally { if (e_7) throw e_7.error; }
}
this._eips = eips;
};
/**
* Returns a parameter for the current chain setup
*
* If the parameter is present in an EIP, the EIP always takes precendence.
* Otherwise the parameter if taken from the latest applied HF with
* a change on the respective parameter.
*
* @param topic Parameter topic ('gasConfig', 'gasPrices', 'vm', 'pow')
* @param name Parameter name (e.g. 'minGasLimit' for 'gasConfig' topic)
* @returns The value requested or `null` if not found
*/
Common.prototype.param = function (topic, name) {
var e_8, _a;
// TODO: consider the case that different active EIPs
// can change the same parameter
var value = null;
try {
for (var _b = __values(this._eips), _c = _b.next(); !_c.done; _c = _b.next()) {
var eip = _c.value;
value = this.paramByEIP(topic, name, eip);
if (value !== null) {
return value;
}
}
}
catch (e_8_1) { e_8 = { error: e_8_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_8) throw e_8.error; }
}
return this.paramByHardfork(topic, name, this._hardfork);
};
/**
* Returns the parameter corresponding to a hardfork
* @param topic Parameter topic ('gasConfig', 'gasPrices', 'vm', 'pow')
* @param name Parameter name (e.g. 'minGasLimit' for 'gasConfig' topic)
* @param hardfork Hardfork name
* @returns The value requested or `null` if not found
*/
Common.prototype.paramByHardfork = function (topic, name, hardfork) {
var e_9, _a, e_10, _b;
hardfork = this._chooseHardfork(hardfork);
var value = null;
try {
for (var HARDFORK_CHANGES_2 = __values(hardforks_1.hardforks), HARDFORK_CHANGES_2_1 = HARDFORK_CHANGES_2.next(); !HARDFORK_CHANGES_2_1.done; HARDFORK_CHANGES_2_1 = HARDFORK_CHANGES_2.next()) {
var hfChanges = HARDFORK_CHANGES_2_1.value;
// EIP-referencing HF file (e.g. berlin.json)
if ('eips' in hfChanges[1]) {
var hfEIPs = hfChanges[1]['eips'];
try {
for (var hfEIPs_1 = (e_10 = void 0, __values(hfEIPs)), hfEIPs_1_1 = hfEIPs_1.next(); !hfEIPs_1_1.done; hfEIPs_1_1 = hfEIPs_1.next()) {
var eip = hfEIPs_1_1.value;
var valueEIP = this.paramByEIP(topic, name, eip);
value = valueEIP !== null ? valueEIP : value;
}
}
catch (e_10_1) { e_10 = { error: e_10_1 }; }
finally {
try {
if (hfEIPs_1_1 && !hfEIPs_1_1.done && (_b = hfEIPs_1.return)) _b.call(hfEIPs_1);
}
finally { if (e_10) throw e_10.error; }
}
// Paramater-inlining HF file (e.g. istanbul.json)
}
else {
if (!hfChanges[1][topic]) {
throw new Error("Topic ".concat(topic, " not defined"));
}
if (hfChanges[1][topic][name] !== undefined) {
value = hfChanges[1][topic][name].v;
}
}
if (hfChanges[0] === hardfork)
break;
}
}
catch (e_9_1) { e_9 = { error: e_9_1 }; }
finally {
try {
if (HARDFORK_CHANGES_2_1 && !HARDFORK_CHANGES_2_1.done && (_a = HARDFORK_CHANGES_2.return)) _a.call(HARDFORK_CHANGES_2);
}
finally { if (e_9) throw e_9.error; }
}
return value;
};
/**
* Returns a parameter corresponding to an EIP
* @param topic Parameter topic ('gasConfig', 'gasPrices', 'vm', 'pow')
* @param name Parameter name (e.g. 'minGasLimit' for 'gasConfig' topic)
* @param eip Number of the EIP
* @returns The value requested or `null` if not found
*/
Common.prototype.paramByEIP = function (topic, name, eip) {
if (!(eip in eips_1.EIPs)) {
throw new Error("".concat(eip, " not supported"));
}
var eipParams = eips_1.EIPs[eip];
if (!(topic in eipParams)) {
throw new Error("Topic ".concat(topic, " not defined"));
}
if (eipParams[topic][name] === undefined) {
return null;
}
var value = eipParams[topic][name].v;
return value;
};
/**
* Returns a parameter for the hardfork active on block number
* @param topic Parameter topic
* @param name Parameter name
* @param blockNumber Block number
*/
Common.prototype.paramByBlock = function (topic, name, blockNumber) {
var activeHfs = this.activeHardforks(blockNumber);
var hardfork = activeHfs[activeHfs.length - 1]['name'];
return this.paramByHardfork(topic, name, hardfork);
};
/**
* Checks if an EIP is activated by either being included in the EIPs
* manually passed in with the {@link CommonOpts.eips} or in a
* hardfork currently being active
*
* Note: this method only works for EIPs being supported
* by the {@link CommonOpts.eips} constructor option
* @param eip
*/
Common.prototype.isActivatedEIP = function (eip) {
var e_11, _a;
if (this.eips().includes(eip)) {
return true;
}
try {
for (var HARDFORK_CHANGES_3 = __values(hardforks_1.hardforks), HARDFORK_CHANGES_3_1 = HARDFORK_CHANGES_3.next(); !HARDFORK_CHANGES_3_1.done; HARDFORK_CHANGES_3_1 = HARDFORK_CHANGES_3.next()) {
var hfChanges = HARDFORK_CHANGES_3_1.value;
var hf = hfChanges[1];
if (this.gteHardfork(hf['name']) && 'eips' in hf) {
if (hf['eips'].includes(eip)) {
return true;
}
}
}
}
catch (e_11_1) { e_11 = { error: e_11_1 }; }
finally {
try {
if (HARDFORK_CHANGES_3_1 && !HARDFORK_CHANGES_3_1.done && (_a = HARDFORK_CHANGES_3.return)) _a.call(HARDFORK_CHANGES_3);
}
finally { if (e_11) throw e_11.error; }
}
return false;
};
/**
* Checks if set or provided hardfork is active on block number
* @param hardfork Hardfork name or null (for HF set)
* @param blockNumber
* @param opts Hardfork options (onlyActive unused)
* @returns True if HF is active on block number
*/
Common.prototype.hardforkIsActiveOnBlock = function (hardfork, blockNumber, opts) {
var _a;
if (opts === void 0) { opts = {}; }
blockNumber = (0, ethereumjs_util_1.toType)(blockNumber, ethereumjs_util_1.TypeOutput.BN);
var onlySupported = (_a = opts.onlySupported) !== null && _a !== void 0 ? _a : false;
hardfork = this._chooseHardfork(hardfork, onlySupported);
var hfBlock = this.hardforkBlockBN(hardfork);
if (hfBlock && blockNumber.gte(hfBlock)) {
return true;
}
return false;
};
/**
* Alias to hardforkIsActiveOnBlock when hardfork is set
* @param blockNumber
* @param opts Hardfork options (onlyActive unused)
* @returns True if HF is active on block number
*/
Common.prototype.activeOnBlock = function (blockNumber, opts) {
return this.hardforkIsActiveOnBlock(null, blockNumber, opts);
};
/**
* Sequence based check if given or set HF1 is greater than or equal HF2
* @param hardfork1 Hardfork name or null (if set)
* @param hardfork2 Hardfork name
* @param opts Hardfork options
* @returns True if HF1 gte HF2
*/
Common.prototype.hardforkGteHardfork = function (hardfork1, hardfork2, opts) {
var e_12, _a;
if (opts === void 0) { opts = {}; }
var onlyActive = opts.onlyActive === undefined ? false : opts.onlyActive;
hardfork1 = this._chooseHardfork(hardfork1, opts.onlySupported);
var hardforks;
if (onlyActive) {
hardforks = this.activeHardforks(null, opts);
}
else {
hardforks = this.hardforks();
}
var posHf1 = -1, posHf2 = -1;
var index = 0;
try {
for (var hardforks_2 = __values(hardforks), hardforks_2_1 = hardforks_2.next(); !hardforks_2_1.done; hardforks_2_1 = hardforks_2.next()) {
var hf = hardforks_2_1.value;
if (hf['name'] === hardfork1)
posHf1 = index;
if (hf['name'] === hardfork2)
posHf2 = index;
index += 1;
}
}
catch (e_12_1) { e_12 = { error: e_12_1 }; }
finally {
try {
if (hardforks_2_1 && !hardforks_2_1.done && (_a = hardforks_2.return)) _a.call(hardforks_2);
}
finally { if (e_12) throw e_12.error; }
}
return posHf1 >= posHf2 && posHf2 !== -1;
};
/**
* Alias to hardforkGteHardfork when hardfork is set
* @param hardfork Hardfork name
* @param opts Hardfork options
* @returns True if hardfork set is greater than hardfork provided
*/
Common.prototype.gteHardfork = function (hardfork, opts) {
return this.hardforkGteHardfork(null, hardfork, opts);
};
/**
* Checks if given or set hardfork is active on the chain
* @param hardfork Hardfork name, optional if HF set
* @param opts Hardfork options (onlyActive unused)
* @returns True if hardfork is active on the chain
*/
Common.prototype.hardforkIsActiveOnChain = function (hardfork, opts) {
var e_13, _a;
var _b;
if (opts === void 0) { opts = {}; }
var onlySupported = (_b = opts.onlySupported) !== null && _b !== void 0 ? _b : false;
hardfork = this._chooseHardfork(hardfork, onlySupported);
try {
for (var _c = __values(this.hardforks()), _d = _c.next(); !_d.done; _d = _c.next()) {
var hf = _d.value;
if (hf['name'] === hardfork && hf['block'] !== null)
return true;
}
}
catch (e_13_1) { e_13 = { error: e_13_1 }; }
finally {
try {
if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
}
finally { if (e_13) throw e_13.error; }
}
return false;
};
/**
* Returns the active hardfork switches for the current chain
* @param blockNumber up to block if provided, otherwise for the whole chain
* @param opts Hardfork options (onlyActive unused)
* @return Array with hardfork arrays
*/
Common.prototype.activeHardforks = function (blockNumber, opts) {
var e_14, _a;
if (opts === void 0) { opts = {}; }
var activeHardforks = [];
var hfs = this.hardforks();
try {
for (var hfs_2 = __values(hfs), hfs_2_1 = hfs_2.next(); !hfs_2_1.done; hfs_2_1 = hfs_2.next()) {
var hf = hfs_2_1.value;
if (hf['block'] === null)
continue;
if (blockNumber !== undefined && blockNumber !== null && blockNumber < hf['block'])
break;
if (opts.onlySupported && !this._isSupportedHardfork(hf['name']))
continue;
activeHardforks.push(hf);
}
}
catch (e_14_1) { e_14 = { error: e_14_1 }; }
finally {
try {
if (hfs_2_1 && !hfs_2_1.done && (_a = hfs_2.return)) _a.call(hfs_2);
}
finally { if (e_14) throw e_14.error; }
}
return activeHardforks;
};
/**
* Returns the latest active hardfork name for chain or block or throws if unavailable
* @param blockNumber up to block if provided, otherwise for the whole chain
* @param opts Hardfork options (onlyActive unused)
* @return Hardfork name
*/
Common.prototype.activeHardfork = function (blockNumber, opts) {
if (opts === void 0) { opts = {}; }
var activeHardforks = this.activeHardforks(blockNumber, opts);
if (activeHardforks.length > 0) {
return activeHardforks[activeHardforks.length - 1]['name'];
}
else {
throw new Error("No (supported) active hardfork found");
}
};
/**
* Returns the hardfork change block for hardfork provided or set
* @param hardfork Hardfork name, optional if HF set
* @returns Block number or null if unscheduled
* @deprecated Please use {@link Common.hardforkBlockBN} for large number support
*/
Common.prototype.hardforkBlock = function (hardfork) {
var block = this.hardforkBlockBN(hardfork);
return (0, ethereumjs_util_1.toType)(block, ethereumjs_util_1.TypeOutput.Number);
};
/**
* Returns the hardfork change block for hardfork provided or set
* @param hardfork Hardfork name, optional if HF set
* @returns Block number or null if unscheduled
*/
Common.prototype.hardforkBlockBN = function (hardfork) {
hardfork = this._chooseHardfork(hardfork, false);
var block = this._getHardfork(hardfork)['block'];
if (block === undefined || block === null) {
return null;
}
return new ethereumjs_util_1.BN(block);
};
/**
* Returns the hardfork change total difficulty (Merge HF) for hardfork provided or set
* @param hardfork Hardfork name, optional if HF set
* @returns Total difficulty or null if no set
*/
Common.prototype.hardforkTD = function (hardfork) {
hardfork = this._chooseHardfork(hardfork, false);
var td = this._getHardfork(hardfork)['td'];
if (td === undefined || td === null) {
return null;
}
return new ethereumjs_util_1.BN(td);
};
/**
* True if block number provided is the hardfork (given or set) change block
* @param blockNumber Number of the block to check
* @param hardfork Hardfork name, optional if HF set
* @returns True if blockNumber is HF block
*/
Common.prototype.isHardforkBlock = function (blockNumber, hardfork) {
blockNumber = (0, ethereumjs_util_1.toType)(blockNumber, ethereumjs_util_1.TypeOutput.BN);
hardfork = this._chooseHardfork(hardfork, false);
var block = this.hardforkBlockBN(hardfork);
return block ? block.eq(blockNumber) : false;
};
/**
* Returns the change block for the next hardfork after the hardfork provided or set
* @param hardfork Hardfork name, optional if HF set
* @returns Block number or null if not available
* @deprecated Please use {@link Common.nextHardforkBlockBN} for large number support
*/
Common.prototype.nextHardforkBlock = function (hardfork) {
var block = this.nextHardforkBlockBN(hardfork);
return (0, ethereumjs_util_1.toType)(block, ethereumjs_util_1.TypeOutput.Number);
};
/**
* Returns the change block for the next hardfo