Viewing File: /home/ubuntu/misabloom-frontend-base/node_modules/@ethereumjs/tx/dist.browser/util.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccessLists = exports.checkMaxInitCodeSize = void 0;
var ethereumjs_util_1 = require("ethereumjs-util");
var types_1 = require("./types");
function checkMaxInitCodeSize(common, length) {
if (length > common.param('vm', 'maxInitCodeSize')) {
throw new Error("the initcode size of this transaction is too large: it is ".concat(length, " while the max is ").concat(common.param('vm', 'maxInitCodeSize')));
}
}
exports.checkMaxInitCodeSize = checkMaxInitCodeSize;
var AccessLists = /** @class */ (function () {
function AccessLists() {
}
AccessLists.getAccessListData = function (accessList) {
var AccessListJSON;
var bufferAccessList;
if (accessList && (0, types_1.isAccessList)(accessList)) {
AccessListJSON = accessList;
var newAccessList = [];
for (var i = 0; i < accessList.length; i++) {
var item = accessList[i];
var addressBuffer = (0, ethereumjs_util_1.toBuffer)(item.address);
var storageItems = [];
for (var index = 0; index < item.storageKeys.length; index++) {
storageItems.push((0, ethereumjs_util_1.toBuffer)(item.storageKeys[index]));
}
newAccessList.push([addressBuffer, storageItems]);
}
bufferAccessList = newAccessList;
}
else {
bufferAccessList = accessList !== null && accessList !== void 0 ? accessList : [];
// build the JSON
var json = [];
for (var i = 0; i < bufferAccessList.length; i++) {
var data = bufferAccessList[i];
var address = (0, ethereumjs_util_1.bufferToHex)(data[0]);
var storageKeys = [];
for (var item = 0; item < data[1].length; item++) {
storageKeys.push((0, ethereumjs_util_1.bufferToHex)(data[1][item]));
}
var jsonItem = {
address: address,
storageKeys: storageKeys,
};
json.push(jsonItem);
}
AccessListJSON = json;
}
return {
AccessListJSON: AccessListJSON,
accessList: bufferAccessList,
};
};
AccessLists.verifyAccessList = function (accessList) {
for (var key = 0; key < accessList.length; key++) {
var accessListItem = accessList[key];
var address = accessListItem[0];
var storageSlots = accessListItem[1];
if (accessListItem[2] !== undefined) {
throw new Error('Access list item cannot have 3 elements. It can only have an address, and an array of storage slots.');
}
if (address.length != 20) {
throw new Error('Invalid EIP-2930 transaction: address length should be 20 bytes');
}
for (var storageSlot = 0; storageSlot < storageSlots.length; storageSlot++) {
if (storageSlots[storageSlot].length != 32) {
throw new Error('Invalid EIP-2930 transaction: storage slot length should be 32 bytes');
}
}
}
};
AccessLists.getAccessListJSON = function (accessList) {
var accessListJSON = [];
for (var index = 0; index < accessList.length; index++) {
var item = accessList[index];
var JSONItem = {
address: '0x' + (0, ethereumjs_util_1.setLengthLeft)(item[0], 20).toString('hex'),
storageKeys: [],
};
var storageSlots = item[1];
for (var slot = 0; slot < storageSlots.length; slot++) {
var storageSlot = storageSlots[slot];
JSONItem.storageKeys.push('0x' + (0, ethereumjs_util_1.setLengthLeft)(storageSlot, 32).toString('hex'));
}
accessListJSON.push(JSONItem);
}
return accessListJSON;
};
AccessLists.getDataFeeEIP2930 = function (accessList, common) {
var accessListStorageKeyCost = common.param('gasPrices', 'accessListStorageKeyCost');
var accessListAddressCost = common.param('gasPrices', 'accessListAddressCost');
var slots = 0;
for (var index = 0; index < accessList.length; index++) {
var item = accessList[index];
var storageSlots = item[1];
slots += storageSlots.length;
}
var addresses = accessList.length;
return addresses * accessListAddressCost + slots * accessListStorageKeyCost;
};
return AccessLists;
}());
exports.AccessLists = AccessLists;
//# sourceMappingURL=util.js.map
Back to Directory
File Manager