ox
Version:
Ethereum Standard Library
63 lines • 2.25 kB
JavaScript
import * as Quantity from '../core/internal/quantity.js';
/**
* Converts an {@link ox#UserOperationGas.Rpc} to an {@link ox#UserOperationGas.UserOperationGas}.
*
* @example
* ```ts twoslash
* import { UserOperationGas } from 'ox/erc4337'
*
* const userOperationGas = UserOperationGas.fromRpc({
* callGasLimit: '0x69420',
* preVerificationGas: '0x69420',
* verificationGasLimit: '0x69420'
* })
* ```
*
* @param rpc - The RPC user operation gas to convert.
* @returns An instantiated {@link ox#UserOperationGas.UserOperationGas}.
*/
export function fromRpc(rpc) {
const gas = rpc;
return {
...gas,
callGasLimit: BigInt(gas.callGasLimit),
preVerificationGas: BigInt(gas.preVerificationGas),
verificationGasLimit: BigInt(gas.verificationGasLimit),
...(gas.paymasterVerificationGasLimit && {
paymasterVerificationGasLimit: BigInt(gas.paymasterVerificationGasLimit),
}),
...(gas.paymasterPostOpGasLimit && {
paymasterPostOpGasLimit: BigInt(gas.paymasterPostOpGasLimit),
}),
};
}
/**
* Converts a {@link ox#UserOperationGas.UserOperationGas} to a {@link ox#UserOperationGas.Rpc}.
*
* @example
* ```ts twoslash
* import { UserOperationGas } from 'ox/erc4337'
*
* const userOperationGas = UserOperationGas.toRpc({
* callGasLimit: 300_000n,
* preVerificationGas: 100_000n,
* verificationGasLimit: 100_000n
* })
* ```
*
* @param userOperationGas - The user operation gas to convert.
* @returns An RPC-formatted user operation gas.
*/
export function toRpc(userOperationGas) {
const gas = userOperationGas;
const rpc = {};
rpc.callGasLimit = Quantity.fromNumberish(gas.callGasLimit);
rpc.preVerificationGas = Quantity.fromNumberish(gas.preVerificationGas);
rpc.verificationGasLimit = Quantity.fromNumberish(gas.verificationGasLimit);
if (gas.paymasterVerificationGasLimit !== undefined)
rpc.paymasterVerificationGasLimit = Quantity.fromNumberish(gas.paymasterVerificationGasLimit);
if (gas.paymasterPostOpGasLimit !== undefined)
rpc.paymasterPostOpGasLimit = Quantity.fromNumberish(gas.paymasterPostOpGasLimit);
return rpc;
}
//# sourceMappingURL=UserOperationGas.js.map