@alchemy/aa-core
Version:
viem based SDK that enables interactions with ERC-4337 Smart Accounts. ABIs are based off the definitions generated in @account-abstraction/contracts
52 lines • 2.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.serializeStateOverride = void 0;
const viem_1 = require("viem");
function serializeStateMapping(stateMapping) {
if (!stateMapping || stateMapping.length === 0)
return undefined;
return stateMapping.reduce((acc, { slot, value }) => {
validateBytes32HexLength(slot);
validateBytes32HexLength(value);
acc[slot] = value;
return acc;
}, {});
}
function validateBytes32HexLength(value) {
if (value.length !== 66) {
throw new Error(`Hex is expected to be 66 hex long, but is ${value.length} hex long.`);
}
}
function serializeAccountStateOverride(parameters) {
const { balance, nonce, state, stateDiff, code } = parameters;
const rpcAccountStateOverride = {};
if (code !== undefined)
rpcAccountStateOverride.code = code;
if (balance !== undefined)
rpcAccountStateOverride.balance = (0, viem_1.numberToHex)(balance);
if (nonce !== undefined)
rpcAccountStateOverride.nonce = (0, viem_1.numberToHex)(nonce);
if (state !== undefined)
rpcAccountStateOverride.state = serializeStateMapping(state);
if (stateDiff !== undefined) {
if (rpcAccountStateOverride.state)
throw new viem_1.StateAssignmentConflictError();
rpcAccountStateOverride.stateDiff = serializeStateMapping(stateDiff);
}
return rpcAccountStateOverride;
}
function serializeStateOverride(parameters) {
if (!parameters)
return undefined;
const rpcStateOverride = {};
for (const { address, ...accountState } of parameters) {
if (!(0, viem_1.isAddress)(address, { strict: false }))
throw new viem_1.InvalidAddressError({ address });
if (rpcStateOverride[address])
throw new viem_1.AccountStateConflictError({ address: address });
rpcStateOverride[address] = serializeAccountStateOverride(accountState);
}
return rpcStateOverride;
}
exports.serializeStateOverride = serializeStateOverride;
//# sourceMappingURL=stateOverride.js.map