UNPKG

ox

Version:

Ethereum Standard Library

105 lines 3.38 kB
import * as Address from './Address.js'; import * as Errors from './Errors.js'; import * as Hex from './Hex.js'; /** * Converts a list of Access List tuples into a object-formatted list. * * @example * ```ts twoslash * import { AccessList } from 'ox' * * const accessList = AccessList.fromTupleList([ * [ * '0x0000000000000000000000000000000000000000', * [ * '0x0000000000000000000000000000000000000000000000000000000000000001', * '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe' * ] * ] * ]) * // @log: [ * // @log: { * // @log: address: '0x0000000000000000000000000000000000000000', * // @log: storageKeys: [ * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001', * // @log: '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe', * // @log: ], * // @log: }, * // @log: ] * ``` * * @param accessList - List of tuples. * @returns Access list. */ export function fromTupleList(accessList) { const list = []; for (let i = 0; i < accessList.length; i++) { const [address, storageKeys] = accessList[i]; if (address) Address.assert(address, { strict: false }); for (let j = 0; j < storageKeys.length; j++) if (Hex.size(storageKeys[j]) !== 32) throw new InvalidStorageKeySizeError({ storageKey: storageKeys[j], }); list.push({ address: address, storageKeys, }); } return list; } /** * Converts a structured Access List into a list of tuples. * * @example * ```ts twoslash * import { AccessList } from 'ox' * * const accessList = AccessList.toTupleList([ * { * address: '0x0000000000000000000000000000000000000000', * storageKeys: [ * '0x0000000000000000000000000000000000000000000000000000000000000001', * '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe' * ] * } * ]) * // @log: [ * // @log: [ * // @log: '0x0000000000000000000000000000000000000000', * // @log: [ * // @log: '0x0000000000000000000000000000000000000000000000000000000000000001', * // @log: '0x60fdd29ff912ce880cd3edaf9f932dc61d3dae823ea77e0323f94adb9f6a72fe', * // @log: ], * // @log: ], * // @log: ] * ``` * * @param accessList - Access list. * @returns List of tuples. */ export function toTupleList(accessList) { if (!accessList || accessList.length === 0) return []; const tuple = []; for (const { address, storageKeys } of accessList) { for (let j = 0; j < storageKeys.length; j++) if (Hex.size(storageKeys[j]) !== 32) throw new InvalidStorageKeySizeError({ storageKey: storageKeys[j], }); if (address) Address.assert(address, { strict: false }); tuple.push([address, storageKeys]); } return tuple; } /** Thrown when the size of a storage key is invalid. */ export class InvalidStorageKeySizeError extends Errors.BaseError { name = 'AccessList.InvalidStorageKeySizeError'; constructor({ storageKey }) { super(`Size for storage key "${storageKey}" is invalid. Expected 32 bytes. Got ${Hex.size(storageKey)} bytes.`); } } //# sourceMappingURL=AccessList.js.map