accesslist.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.accessListify = void 0;
  4. const index_js_1 = require("../address/index.js");
  5. const index_js_2 = require("../utils/index.js");
  6. function accessSetify(addr, storageKeys) {
  7. return {
  8. address: (0, index_js_1.getAddress)(addr),
  9. storageKeys: storageKeys.map((storageKey, index) => {
  10. (0, index_js_2.assertArgument)((0, index_js_2.isHexString)(storageKey, 32), "invalid slot", `storageKeys[${index}]`, storageKey);
  11. return storageKey.toLowerCase();
  12. })
  13. };
  14. }
  15. /**
  16. * Returns a [[AccessList]] from any ethers-supported access-list structure.
  17. */
  18. function accessListify(value) {
  19. if (Array.isArray(value)) {
  20. return value.map((set, index) => {
  21. if (Array.isArray(set)) {
  22. (0, index_js_2.assertArgument)(set.length === 2, "invalid slot set", `value[${index}]`, set);
  23. return accessSetify(set[0], set[1]);
  24. }
  25. (0, index_js_2.assertArgument)(set != null && typeof (set) === "object", "invalid address-slot set", "value", value);
  26. return accessSetify(set.address, set.storageKeys);
  27. });
  28. }
  29. (0, index_js_2.assertArgument)(value != null && typeof (value) === "object", "invalid access list", "value", value);
  30. const result = Object.keys(value).map((addr) => {
  31. const storageKeys = value[addr].reduce((accum, storageKey) => {
  32. accum[storageKey] = true;
  33. return accum;
  34. }, {});
  35. return accessSetify(addr, Object.keys(storageKeys).sort());
  36. });
  37. result.sort((a, b) => (a.address.localeCompare(b.address)));
  38. return result;
  39. }
  40. exports.accessListify = accessListify;
  41. //# sourceMappingURL=accesslist.js.map