@latticexyz/common 2.2.24-5dc8d9f220e3aa22d1db18685c5027dd73da6e7e → 2.2.24-6a0e2c810ee2fde712b53145fa45d958ea9b77ec
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +8 -3
- package/dist/internal.js.map +1 -1
- package/package.json +2 -2
package/dist/internal.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ type AltoOptions<transport extends Transport> = {
|
|
|
47
47
|
/** alto-compatible transport */
|
|
48
48
|
altoTransport: transport;
|
|
49
49
|
/** fallback transport for all other RPC methods */
|
|
50
|
-
fallbackDefaultTransport
|
|
50
|
+
fallbackDefaultTransport: Transport;
|
|
51
51
|
};
|
|
52
52
|
declare function alto<const altoTransport extends Transport>(transports?: AltoOptions<altoTransport>): altoTransport;
|
|
53
53
|
|
package/dist/internal.js
CHANGED
|
@@ -596,8 +596,9 @@ function getDefaultTransports(chain) {
|
|
|
596
596
|
import { http as http3 } from "viem";
|
|
597
597
|
function alto(transports) {
|
|
598
598
|
return (opts) => {
|
|
599
|
-
const { altoTransport } = transports ?? getDefaultTransports2(opts.chain);
|
|
599
|
+
const { altoTransport, fallbackDefaultTransport } = transports ?? getDefaultTransports2(opts.chain);
|
|
600
600
|
const { request: altoRequest, ...rest } = altoTransport(opts);
|
|
601
|
+
const { request: defaultRequest } = fallbackDefaultTransport(opts);
|
|
601
602
|
return {
|
|
602
603
|
...rest,
|
|
603
604
|
// TODO: type `request` so we don't have to cast
|
|
@@ -605,7 +606,7 @@ function alto(transports) {
|
|
|
605
606
|
if (req.method === "eth_estimateUserOperationGas") {
|
|
606
607
|
console.log("estimating user operation gas via alto", req);
|
|
607
608
|
return await estimateUserOperationGas({
|
|
608
|
-
request:
|
|
609
|
+
request: defaultRequest,
|
|
609
610
|
params: req.params
|
|
610
611
|
});
|
|
611
612
|
}
|
|
@@ -631,9 +632,13 @@ function getDefaultTransports2(chain) {
|
|
|
631
632
|
if (!altoTransport) {
|
|
632
633
|
throw new Error("Provided chain does not support alto");
|
|
633
634
|
}
|
|
635
|
+
const fallbackDefaultTransport = http3();
|
|
636
|
+
if (!fallbackDefaultTransport) {
|
|
637
|
+
throw new Error("Failed to create fallback http transport");
|
|
638
|
+
}
|
|
634
639
|
return {
|
|
635
640
|
altoTransport,
|
|
636
|
-
fallbackDefaultTransport
|
|
641
|
+
fallbackDefaultTransport
|
|
637
642
|
};
|
|
638
643
|
}
|
|
639
644
|
export {
|
package/dist/internal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/waitForTransactions.ts","../src/deploy/ensureContract.ts","../src/deploy/common.ts","../src/deploy/debug.ts","../src/deploy/ensureContractsDeployed.ts","../src/deploy/ensureDeployer.ts","../src/deploy/create2/deployment.json","../src/deploy/getDeployer.ts","../src/deploy/getContractAddress.ts","../src/transports/wiresaw.ts","../src/transports/methods/estimateUserOperationGas.ts","../src/transports/entryPointGasSimulations.ts","../src/transports/methods/getUserOperationReceipt.ts","../src/transports/chainTransport.ts","../src/transports/alto.ts"],"sourcesContent":["import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { debug } from \"./debug\";\nimport { waitForTransactionReceipt } from \"viem/actions\";\n\nexport async function waitForTransactions({\n client,\n hashes,\n debugLabel = \"transactions\",\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly hashes: readonly Hex[];\n readonly debugLabel?: string;\n}): Promise<void> {\n if (!hashes.length) return;\n\n debug(`waiting for ${debugLabel} to confirm`);\n // wait for each tx separately/serially, because parallelizing results in RPC errors\n for (const hash of hashes) {\n const receipt = await waitForTransactionReceipt(client, { hash });\n // TODO: handle user op failures?\n if (receipt.status === \"reverted\") {\n throw new Error(`Transaction reverted: ${hash}`);\n }\n }\n}\n","import { Client, Transport, Chain, Account, concatHex, getCreate2Address, Hex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport { contractSizeLimit, singletonSalt } from \"./common\";\nimport { debug } from \"./debug\";\nimport { sendTransaction } from \"../sendTransaction\";\n\nexport type Contract = {\n bytecode: Hex;\n deployedBytecodeSize?: number;\n debugLabel?: string;\n salt?: Hex;\n};\n\nexport async function ensureContract({\n client,\n deployerAddress,\n bytecode,\n deployedBytecodeSize,\n debugLabel = \"contract\",\n salt = singletonSalt,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n} & Contract): Promise<readonly Hex[]> {\n if (bytecode.includes(\"__$\")) {\n throw new Error(`Found unlinked public library in ${debugLabel} bytecode`);\n }\n\n const address = getCreate2Address({ from: deployerAddress, salt, bytecode });\n\n const contractCode = await getCode(client, { address, blockTag: \"pending\" });\n if (contractCode) {\n debug(\"found\", debugLabel, \"at\", address);\n return [];\n }\n\n if (deployedBytecodeSize != null) {\n if (deployedBytecodeSize === 0) {\n throw new Error(`Empty bytecode for ${debugLabel}`);\n }\n\n if (deployedBytecodeSize > contractSizeLimit) {\n console.warn(\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n } else if (deployedBytecodeSize > contractSizeLimit * 0.95) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is almost over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n }\n }\n\n debug(\"deploying\", debugLabel, \"at\", address);\n return [\n await sendTransaction(client, {\n chain: client.chain ?? null,\n to: deployerAddress,\n data: concatHex([salt, bytecode]),\n }),\n ];\n}\n","import { stringToHex } from \"viem\";\n\n// salt for deterministic deploys of singleton contracts\nexport const singletonSalt = stringToHex(\"\", { size: 32 });\n\n// https://eips.ethereum.org/EIPS/eip-170\nexport const contractSizeLimit = parseInt(\"6000\", 16);\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"deploy\");\nexport const error = parentDebug.extend(\"deploy\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { Contract, ensureContract } from \"./ensureContract\";\nimport { waitForTransactions } from \"../waitForTransactions\";\nimport { uniqueBy } from \"../utils/uniqueBy\";\n\nexport async function ensureContractsDeployed({\n client,\n deployerAddress,\n contracts,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n readonly contracts: readonly Contract[];\n}): Promise<readonly Hex[]> {\n // Deployments assume a deterministic deployer, so we only need to deploy the unique bytecode\n const uniqueContracts = uniqueBy(contracts, (contract) => contract.bytecode);\n\n const txs = (\n await Promise.all(uniqueContracts.map((contract) => ensureContract({ client, deployerAddress, ...contract })))\n ).flat();\n\n await waitForTransactions({\n client,\n hashes: txs,\n debugLabel: \"contract deploys\",\n });\n\n return txs;\n}\n","import { Account, Address, Chain, Client, Transport } from \"viem\";\nimport { getBalance, sendRawTransaction, sendTransaction, waitForTransactionReceipt } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\nimport { getDeployer } from \"./getDeployer\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function ensureDeployer(client: Client<Transport, Chain | undefined, Account>): Promise<Address> {\n const existingDeployer = await getDeployer(client);\n if (existingDeployer !== undefined) {\n return existingDeployer;\n }\n\n // There's not really a way to simulate a pre-EIP-155 (no chain ID) transaction,\n // so we have to attempt to create the deployer first and, if it fails, fall back\n // to a regular deploy.\n\n // Send gas to deployment signer\n const gasRequired = BigInt(deployment.gasLimit) * BigInt(deployment.gasPrice);\n const currentBalance = await getBalance(client, { address: `0x${deployment.signerAddress}` });\n const gasNeeded = gasRequired - currentBalance;\n if (gasNeeded > 0) {\n debug(\"sending gas for CREATE2 deployer to signer at\", deployment.signerAddress);\n const gasTx = await sendTransaction(client, {\n chain: client.chain ?? null,\n to: `0x${deployment.signerAddress}`,\n value: gasNeeded,\n });\n const gasReceipt = await waitForTransactionReceipt(client, { hash: gasTx });\n if (gasReceipt.status !== \"success\") {\n console.error(\"failed to send gas to deployer signer\", gasReceipt);\n throw new Error(\"failed to send gas to deployer signer\");\n }\n }\n\n // Deploy the deployer\n debug(\"deploying CREATE2 deployer at\", deployer);\n const deployTx = await sendRawTransaction(client, { serializedTransaction: `0x${deployment.transaction}` }).catch(\n (error) => {\n // Do a regular contract create if the presigned transaction doesn't work due to replay protection\n if (String(error).includes(\"only replay-protected (EIP-155) transactions allowed over RPC\")) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\n ⚠️ Your chain or RPC does not allow for non EIP-155 signed transactions, so your deploys will not be determinstic and contract addresses may change between deploys.\\n\\n We recommend running your chain's node with \\`--rpc.allow-unprotected-txs\\` to enable determinstic deployments.\\n`,\n );\n debug(\"deploying CREATE2 deployer\");\n return sendTransaction(client, {\n chain: client.chain ?? null,\n data: `0x${deployment.creationCode}`,\n });\n }\n throw error;\n },\n );\n\n const deployReceipt = await waitForTransactionReceipt(client, { hash: deployTx });\n if (!deployReceipt.contractAddress) {\n throw new Error(\"Deploy receipt did not have contract address, was the deployer not deployed?\");\n }\n\n if (deployReceipt.contractAddress !== deployer) {\n console.warn(\n `\\n ⚠️ CREATE2 deployer created at ${deployReceipt.contractAddress} does not match the CREATE2 determinstic deployer we expected (${deployer})`,\n );\n }\n\n return deployReceipt.contractAddress;\n}\n","{\n \"gasPrice\": 100000000000,\n \"gasLimit\": 100000,\n \"signerAddress\": \"3fab184622dc19b6109349b94811493bf2a45362\",\n \"transaction\": \"f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222\",\n \"address\": \"4e59b44847b379578588920ca78fbf26c0b4956c\",\n \"creationCode\": \"604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\"\n}\n","import { Address, Chain, Client, Transport, sliceHex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function getDeployer(client: Client<Transport, Chain | undefined>): Promise<Address | undefined> {\n const bytecode = await getCode(client, { address: deployer });\n if (bytecode) {\n debug(\"found deployer bytecode at\", deployer);\n // check if deployed bytecode is the same as the expected bytecode (minus 14-bytes creation code prefix)\n if (bytecode !== sliceHex(`0x${deployment.creationCode}`, 14)) {\n console.warn(\n `\\n ⚠️ Bytecode for deployer at ${deployer} did not match the expected CREATE2 bytecode. You may have unexpected results.\\n`,\n );\n }\n return deployer;\n }\n}\n","import { Hex, getCreate2Address } from \"viem\";\nimport { singletonSalt } from \"./common\";\n\nexport function getContractAddress({\n deployerAddress,\n bytecode,\n salt = singletonSalt,\n}: {\n readonly deployerAddress: Hex;\n readonly bytecode: Hex;\n readonly salt?: Hex;\n}): Hex {\n return getCreate2Address({ from: deployerAddress, bytecode, salt });\n}\n","import { Chain, EIP1193RequestFn, Hex, http, RpcTransactionReceipt, Transport } from \"viem\";\nimport { estimateUserOperationGas } from \"./methods/estimateUserOperationGas\";\nimport { getUserOperationReceipt } from \"./methods/getUserOperationReceipt\";\nimport { chainTransport } from \"./chainTransport\";\n\ntype WiresawSendUserOperationResult = {\n txHash: Hex;\n userOpHash: Hex;\n};\n\ntype WiresawOptions<transport extends Transport> = {\n /** wiresaw-compatible transport */\n wiresawTransport: transport;\n /** fallback transport for bundler RPC methods */\n fallbackBundlerTransport?: Transport;\n /** fallback transport for all other RPC methods */\n fallbackDefaultTransport?: Transport;\n};\n\nexport function wiresaw<const wiresawTransport extends Transport>(\n transports?: WiresawOptions<wiresawTransport>,\n): wiresawTransport {\n return ((opts) => {\n const { wiresawTransport, fallbackBundlerTransport, fallbackDefaultTransport } =\n transports ?? getDefaultTransports(opts.chain);\n\n const { request: wiresawRequest, ...rest } = wiresawTransport(opts);\n\n let chainId: Hex | null = null;\n const transactionHashes: { [userOpHash: Hex]: Hex } = {};\n const transactionReceipts: { [transactionHashes: Hex]: RpcTransactionReceipt } = {};\n\n return {\n ...rest,\n // TODO: type `request` so we don't have to cast\n async request(req): ReturnType<EIP1193RequestFn> {\n try {\n if (req.method === \"eth_chainId\") {\n if (chainId != null) return chainId;\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n return (chainId = await fallbackRequest(req));\n }\n return (chainId = await wiresawRequest(req));\n }\n\n if (req.method === \"eth_estimateGas\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_estimateGas\" });\n }\n\n if (req.method === \"eth_call\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_call\" });\n }\n\n if (req.method === \"eth_getTransactionCount\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_getTransactionCount\" });\n }\n\n if (req.method === \"eth_getTransactionReceipt\") {\n return await getTransactionReceipt((req.params as [Hex])[0]);\n }\n\n if (req.method === \"eth_sendUserOperation\") {\n const { userOpHash, txHash } = (await wiresawRequest({\n ...req,\n method: \"wiresaw_sendUserOperation\",\n })) as WiresawSendUserOperationResult;\n transactionHashes[userOpHash] = txHash;\n return userOpHash;\n }\n\n if (req.method === \"eth_getUserOperationReceipt\") {\n const userOpHash = (req.params as [Hex])[0];\n const knownTransactionHash = transactionHashes[userOpHash];\n if (!knownTransactionHash) {\n throw new Error(`eth_getUserOperationReceipt only supported for own user operations`);\n }\n const transactionReceipt = await getTransactionReceipt(knownTransactionHash);\n return transactionReceipt && getUserOperationReceipt(userOpHash, transactionReceipt);\n }\n\n if (req.method === \"eth_estimateUserOperationGas\") {\n return await estimateUserOperationGas({\n request: wiresawRequest,\n params: req.params as never,\n });\n }\n\n // Fallback to regular RPC for methods that don't require wiresaw\n if (\n req.method === \"eth_blockNumber\" ||\n req.method === \"eth_getBlockByNumber\" ||\n req.method === \"eth_maxPriorityFeePerGas\"\n ) {\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n return await fallbackRequest(req);\n }\n return await wiresawRequest(req);\n }\n\n return await wiresawRequest(req);\n } catch (e) {\n console.warn(\"[wiresaw] request failed\", e);\n const bundlerMethods = [\n \"eth_estimateUserOperationGas\",\n \"eth_sendUserOperation\",\n \"eth_getUserOperationReceipt\",\n ];\n if (bundlerMethods.includes(req.method)) {\n if (fallbackBundlerTransport) {\n const { request: fallbackRequest } = fallbackBundlerTransport(opts);\n console.warn(\"[wiresaw] falling back to bundler rpc\", req);\n return fallbackRequest(req);\n }\n }\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n console.warn(\"[wiresaw] falling back to eth rpc\", req);\n return fallbackRequest(req);\n }\n throw e;\n }\n\n async function getTransactionReceipt(hash: Hex): Promise<RpcTransactionReceipt | undefined> {\n // Return cached receipt if available\n if (transactionReceipts[hash]) return transactionReceipts[hash];\n\n // Fetch pending receipt\n const pendingReceipt = (await wiresawRequest({\n ...req,\n method: \"wiresaw_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (pendingReceipt) {\n transactionReceipts[hash] = pendingReceipt;\n return pendingReceipt;\n }\n\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n const receipt = (await fallbackRequest({\n ...req,\n method: \"eth_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (receipt) {\n transactionReceipts[hash] = receipt;\n return receipt;\n }\n }\n }\n },\n };\n }) as wiresawTransport;\n}\n\nfunction getDefaultTransports(chain?: Chain): WiresawOptions<Transport> {\n if (!chain) {\n throw new Error(\"No chain or transports provided\");\n }\n\n const wiresawTransport = chainTransport(chain.rpcUrls.wiresaw);\n if (!wiresawTransport) {\n throw new Error(\"Provided chain does not support wiresaw\");\n }\n\n const bundlerHttpUrl = chain.rpcUrls.bundler?.http[0];\n return {\n wiresawTransport,\n fallbackBundlerTransport: bundlerHttpUrl ? http(bundlerHttpUrl) : undefined,\n fallbackDefaultTransport: http(),\n };\n}\n","import {\n BundlerRpcSchema,\n decodeFunctionResult,\n DecodeFunctionResultReturnType,\n EIP1193RequestFn,\n encodeFunctionData,\n Hex,\n zeroAddress,\n} from \"viem\";\nimport { getRpcMethod } from \"../common\";\nimport {\n entryPoint07Address,\n formatUserOperation,\n formatUserOperationRequest,\n toPackedUserOperation,\n UserOperation,\n} from \"viem/account-abstraction\";\nimport { bigIntMax } from \"../../utils\";\nimport { entryPointGasSimulationsAbi, entryPointSimulationsDeployedBytecode } from \"../entryPointGasSimulations\";\n\ntype rpcMethod = getRpcMethod<BundlerRpcSchema, \"eth_estimateUserOperationGas\">;\n\ntype EstimateUserOperationGasOptions = {\n request: EIP1193RequestFn;\n params: rpcMethod[\"Parameters\"];\n};\n\nexport async function estimateUserOperationGas({\n request,\n params,\n}: EstimateUserOperationGasOptions): Promise<rpcMethod[\"ReturnType\"]> {\n const userOp = formatUserOperation(params[0]);\n const gasSimulation = await simulateGas({ userOp, request });\n const gasLimits = {\n verificationGasLimit: gasSimulation.verificationGas * 2n,\n callGasLimit: bigIntMax(gasSimulation.callGas * 2n, 9000n),\n paymasterVerificationGasLimit: gasSimulation.paymasterVerificationGas * 2n,\n paymasterPostOpGasLimit: gasSimulation.paymasterPostOpGas * 2n,\n preVerificationGas: 10_000_000n, // TODO: change this based on our alto config\n };\n\n return formatUserOperationRequest({\n ...gasLimits,\n });\n}\n\ntype SimulateGasOptions = {\n request: EIP1193RequestFn;\n userOp: UserOperation<\"0.7\">;\n};\n\ntype SimulateGasResult = DecodeFunctionResultReturnType<typeof entryPointGasSimulationsAbi>;\n\nasync function simulateGas({ request, userOp }: SimulateGasOptions): Promise<SimulateGasResult> {\n // Prepare user operation for simulation\n const simulationUserOp = {\n ...userOp,\n preVerificationGas: 0n,\n callGasLimit: 10_000_000n,\n verificationGasLimit: 10_000_000n,\n // https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117\n maxPriorityFeePerGas: userOp.maxFeePerGas,\n paymasterPostOpGasLimit: 2_000_000n,\n paymasterVerificationGasLimit: 5_000_000n,\n } satisfies UserOperation<\"0.7\">;\n\n const packedUserOp = toPackedUserOperation(simulationUserOp);\n const simulationData = encodeFunctionData({\n abi: entryPointGasSimulationsAbi,\n functionName: \"estimateGas\",\n args: [packedUserOp],\n });\n\n const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;\n const senderBalanceOverride = hasPaymaster ? {} : { [userOp.sender]: { balance: \"0xFFFFFFFFFFFFFFFFFFFF\" } };\n const simulationParams = [\n {\n to: entryPoint07Address,\n data: simulationData,\n },\n \"pending\",\n {\n [entryPoint07Address]: { code: entryPointSimulationsDeployedBytecode },\n ...senderBalanceOverride,\n },\n ];\n const encodedSimulationResult: Hex = await request({\n method: \"eth_call\",\n params: simulationParams,\n });\n\n return decodeFunctionResult({\n abi: entryPointGasSimulationsAbi,\n functionName: \"estimateGas\",\n data: encodedSimulationResult,\n });\n}\n","import type { Hex } from \"viem\";\n\nexport const entryPointGasSimulationsAbi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"initCode\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes32\",\n name: \"accountGasLimits\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"preVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"gasFees\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"paymasterAndData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct PackedUserOperation\",\n name: \"op\",\n type: \"tuple\",\n },\n ],\n name: \"estimateGas\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"verificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"callGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterPostOpGas\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct EntryPoint.GasInfo\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\n// Modified version of the EntryPointSimulations contract that does not apply for a penalty for unused gas\n// https://github.com/latticexyz/account-abstraction/blob/3954ce708580d23073f477682f78942b253de7fa/contracts/core/EntryPoint.sol#L46\nexport const entryPointSimulationsDeployedBytecode: Hex =\n // eslint-disable-next-line max-len\n \"0x6080604052600436106101625760003560e01c806370a08231116100c0578063b760faf911610074578063c23a5cea11610059578063c23a5cea146105c2578063dbed18e0146105e2578063fc7e286d1461060257600080fd5b8063b760faf91461059a578063bb9fe6bf146105ad57600080fd5b8063850aaf62116100a5578063850aaf621461053a578063957122ab1461055a5780639b249f691461057a57600080fd5b806370a08231146104d7578063765e827f1461051a57600080fd5b8063205c28781161011757806335567e1a116100fc57806335567e1a146102a05780633b6a3539146103355780635287ce121461038857600080fd5b8063205c28781461026057806322cdde4c1461028057600080fd5b80630396cb60116101485780630396cb60146101e75780630bd28e3b146101fa5780631b2e01b81461021a57600080fd5b806242dc531461017757806301ffc9a7146101b757600080fd5b3661017257610170336106d4565b005b600080fd5b34801561018357600080fd5b50610197610192366004613ebe565b6106f5565b604080519384526020840192909252908201526060015b60405180910390f35b3480156101c357600080fd5b506101d76101d2366004613f84565b6108ca565b60405190151581526020016101ae565b6101706101f5366004613fc6565b610a47565b34801561020657600080fd5b50610170610215366004614014565b610ddd565b34801561022657600080fd5b5061025261023536600461402f565b600160209081526000928352604080842090915290825290205481565b6040519081526020016101ae565b34801561026c57600080fd5b5061017061027b366004614064565b610e25565b34801561028c57600080fd5b5061025261029b366004614090565b610fcf565b3480156102ac57600080fd5b506102526102bb36600461402f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff8516845290915290819020549082901b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000161792915050565b34801561034157600080fd5b50610355610350366004614090565b611011565b6040516101ae91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561039457600080fd5b506104756103a33660046140cc565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff1660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046dffffffffffffffffffffffffffff16928101929092526f01000000000000000000000000000000810463ffffffff166060830152730100000000000000000000000000000000000000900465ffffffffffff16608082015290565b6040516101ae9190600060a082019050825182526020830151151560208301526dffffffffffffffffffffffffffff604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b3480156104e357600080fd5b506102526104f23660046140cc565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b34801561052657600080fd5b5061017061053536600461412e565b6110af565b34801561054657600080fd5b50610170610555366004614185565b61122c565b34801561056657600080fd5b506101706105753660046141da565b6112d1565b34801561058657600080fd5b5061017061059536600461425f565b611429565b6101706105a83660046140cc565b6106d4565b3480156105b957600080fd5b50610170611514565b3480156105ce57600080fd5b506101706105dd3660046140cc565b6116f4565b3480156105ee57600080fd5b506101706105fd36600461412e565b6119e1565b34801561060e57600080fd5b5061068a61061d3660046140cc565b6000602081905290815260409020805460019091015460ff81169061010081046dffffffffffffffffffffffffffff16906f01000000000000000000000000000000810463ffffffff1690730100000000000000000000000000000000000000900465ffffffffffff1685565b6040805195865293151560208601526dffffffffffffffffffffffffffff9092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a0016101ae565b60015b60058110156106e8576001016106d7565b6106f182611e8d565b5050565b6000806000805a905033301461076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c7900000000000000000060448201526064015b60405180910390fd5b8651606081015160a082015181016127100160405a603f0281610791576107916142a1565b0410156107c2577fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b8951600090156108635760006107df846000015160008e86611ee3565b9050806108615760006107f3610800611efb565b80519091501561085b57846000015173ffffffffffffffffffffffffffffffffffffffff168c602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20187602001518460405161085292919061433e565b60405180910390a35b60019250505b505b5a8403955060008a60800151870190506108b6828c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250611f27915050565b909d979c509a509598505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f60fc6b6e00000000000000000000000000000000000000000000000000000000148061095d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f915074d800000000000000000000000000000000000000000000000000000000145b806109a957507fffffffff0000000000000000000000000000000000000000000000000000000082167fcf28ef9700000000000000000000000000000000000000000000000000000000145b806109f557507fffffffff0000000000000000000000000000000000000000000000000000000082167f3e84f02100000000000000000000000000000000000000000000000000000000145b80610a4157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b33600090815260208190526040902063ffffffff8216610ac3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152606401610763565b600181015463ffffffff6f0100000000000000000000000000000090910481169083161015610b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152606401610763565b6001810154600090610b7690349061010090046dffffffffffffffffffffffffffff16614386565b905060008111610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152606401610763565b6dffffffffffffffffffffffffffff811115610c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152606401610763565b6040805160a08101825283548152600160208083018281526dffffffffffffffffffffffffffff86811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16730100000000000000000000000000000000000000027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff979094166f0100000000000000000000000000000002969096167fffffffffffffff00000000000000000000ffffffffffffffffffffffffffffff91909516610100027fffffffffffffffffffffffffffffffffff0000000000000000000000000000ff991515999099167fffffffffffffffffffffffffffffffffff00000000000000000000000000000090941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b33600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff851684529091528120805491610e1d83614399565b919050555050565b3360009081526020819052604090208054821115610e9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152606401610763565b8054610eac9083906143d1565b81556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610f59576040519150601f19603f3d011682016040523d82523d6000602084013e610f5e565b606091505b5050905080610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152606401610763565b50505050565b6000610fda82612118565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b61103c6040518060800160405280600081526020016000815260200160008152602001600081525090565b611044612131565b61104c613ba4565b6110776040518060800160405280600081526020016000815260200160008152602001600081525090565b61108084612172565b61108d6000858484612360565b505061109c60008584846125d3565b509150506110aa6001600255565b919050565b6110b7612131565b8160008167ffffffffffffffff8111156110d3576110d3613c56565b60405190808252806020026020018201604052801561110c57816020015b6110f9613ba4565b8152602001906001900390816110f15790505b50905060005b8281101561118557600082828151811061112e5761112e6143e4565b60200260200101519050600080611169848a8a87818110611151576111516143e4565b90506020028101906111639190614413565b85612a3c565b9150915061117a8483836000612a83565b505050600101611112565b506040516000907fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972908290a160005b8381101561120f57611203818888848181106111d2576111d26143e4565b90506020028101906111e49190614413565b8584815181106111f6576111f66143e4565b6020026020010151612cd8565b909101906001016111b4565b5061121a8482612d1a565b5050506112276001600255565b505050565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051611256929190614451565b600060405180830381855af49150503d8060008114611291576040519150601f19603f3d011682016040523d82523d6000602084013e611296565b606091505b509150915081816040517f99410554000000000000000000000000000000000000000000000000000000008152600401610763929190614461565b831580156112f4575073ffffffffffffffffffffffffffffffffffffffff83163b155b1561135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f41413230206163636f756e74206e6f74206465706c6f796564000000000000006044820152606401610763565b601481106113ed576000611372601482848661447c565b61137b916144a6565b60601c9050803b6000036113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f79656400000000006044820152606401610763565b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610763565b600061144a60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3684846040518363ffffffff1660e01b8152600401611484929190614537565b6020604051808303816000875af11580156114a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c7919061454b565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152909150602401610763565b336000908152602081905260408120600181015490916f0100000000000000000000000000000090910463ffffffff1690036115ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152606401610763565b600181015460ff1661161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152606401610763565b6001810154600090611645906f01000000000000000000000000000000900463ffffffff1642614568565b6001830180547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001673010000000000000000000000000000000000000065ffffffffffff84169081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046dffffffffffffffffffffffffffff1680611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152606401610763565b6001820154730100000000000000000000000000000000000000900465ffffffffffff1661180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152606401610763565b60018201544273010000000000000000000000000000000000000090910465ffffffffffff16111561189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152606401610763565b6001820180547fffffffffffffff000000000000000000000000000000000000000000000000ff1690556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611971576040519150601f19603f3d011682016040523d82523d6000602084013e611976565b606091505b5050905080610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152606401610763565b6119e9612131565b816000805b82811015611bdb5736868683818110611a0957611a096143e4565b9050602002810190611a1b919061458e565b9050366000611a2a83806145c2565b90925090506000611a4160408501602086016140cc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff821601611ae2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152606401610763565b73ffffffffffffffffffffffffffffffffffffffff811615611bbf5773ffffffffffffffffffffffffffffffffffffffff8116632dd811338484611b29604089018961462a565b6040518563ffffffff1660e01b8152600401611b4894939291906147df565b60006040518083038186803b158015611b6057600080fd5b505afa925050508015611b71575060015b611bbf576040517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610763565b611bc98287614386565b955050600190930192506119ee915050565b5060008167ffffffffffffffff811115611bf757611bf7613c56565b604051908082528060200260200182016040528015611c3057816020015b611c1d613ba4565b815260200190600190039081611c155790505b5090506000805b84811015611d0d5736888883818110611c5257611c526143e4565b9050602002810190611c64919061458e565b9050366000611c7383806145c2565b90925090506000611c8a60408501602086016140cc565b90508160005b81811015611cfb576000898981518110611cac57611cac6143e4565b60200260200101519050600080611ccf8b898987818110611151576111516143e4565b91509150611cdf84838389612a83565b8a611ce981614399565b9b505060019093019250611c90915050565b505060019094019350611c3792505050565b506040517fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f97290600090a150600080805b85811015611e485736898983818110611d5857611d586143e4565b9050602002810190611d6a919061458e565b9050611d7c60408201602083016140cc565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a2366000611dcb83806145c2565b90925090508060005b81811015611e3757611e1688858584818110611df257611df26143e4565b9050602002810190611e049190614413565b8b8b815181106111f6576111f66143e4565b611e209088614386565b965087611e2c81614399565b985050600101611dd4565b505060019093019250611d3d915050565b506040516000907f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d908290a2611e7e8682612d1a565b50505050506112276001600255565b6000611e998234612e61565b90508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040516116e891815260200190565b6000806000845160208601878987f195945050505050565b60603d82811115611f095750815b604051602082018101604052818152816000602083013e9392505050565b60008060005a865190915060009081611f3f82612ea1565b60e083015190915073ffffffffffffffffffffffffffffffffffffffff8116611f6b5782519350612058565b8093506000895111156120585760005a8984029850905060028c6002811115611f9657611f96614896565b14612052578173ffffffffffffffffffffffffffffffffffffffff16637c627b218560a001518e8d8c886040518663ffffffff1660e01b8152600401611fdf94939291906148c5565b600060405180830381600088803b158015611ff957600080fd5b5087f19350505050801561200b575060015b61205257600061201c610800611efb565b9050806040517fad7954bc0000000000000000000000000000000000000000000000000000000081526004016107639190614928565b5a900395505b5a60408b015190860398909801978289029750878110156120d45760028c600281111561208757612087614896565b036120aa578097506120988b612ed3565b6120a58b60008a8c612f2f565b612109565b7fdeadaa510000000000000000000000000000000000000000000000000000000060005260206000fd5b8781036120e18682612e61565b506000808e60028111156120f7576120f7614896565b1490506121068d828c8e612f2f565b50505b50505050505094509492505050565b600061212382612fb7565b805190602001209050919050565b600280540361216c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028055565b6122726040517fd69400000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f01000000000000000000000000000000000000000000000000000000000000006036820152600090603701604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905550565b3063957122ab612285604084018461462a565b61229260208601866140cc565b61229f60e087018761462a565b6040518663ffffffff1660e01b81526004016122bf95949392919061493b565b60006040518083038186803b1580156122d757600080fd5b505afa9250505080156122e8575060015b61235d576122f461498a565b806308c379a00361235157506123086149a6565b806123135750612353565b8051156106f1576000816040517f220266b600000000000000000000000000000000000000000000000000000000815260040161076392919061433e565b505b3d6000803e3d6000fd5b50565b60008060005a8551909150612375878261307c565b61237e87610fcf565b6020870152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff811115612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152606401610763565b60006124578460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b90506124668b8b8b84876131c7565b965061247a84600001518560200151613408565b6124e9578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a8603111561255e578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b60e084015160609073ffffffffffffffffffffffffffffffffffffffff161561259f5760005a90506125928d8d8d86613463565b985091505a900360408a01525b60408a018290528060608b015260a08b01355a90960395909501608090990189905250505094909352909590945092505050565b6000805a905060006125e6856060015190565b60405190915060009036826125fe60608b018b61462a565b915091506060600082600381111561261557843591505b507f72288ed1000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016127395760008c8c60200151604051602401612678929190614a4e565b604051602081830303815290604052638dd7712f60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090503073ffffffffffffffffffffffffffffffffffffffff166242dc53828e8b6040516024016126ef93929190614b34565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509250506127b0565b3073ffffffffffffffffffffffffffffffffffffffff166242dc5385858e8b60405160240161276b9493929190614b74565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505091505b60603073ffffffffffffffffffffffffffffffffffffffff16836040516127d79190614bab565b6000604051808303816000865af19150503d8060008114612814576040519150601f19603f3d011682016040523d82523d6000602084013e612819565b606091505b509097509050861561285f576000808280602001905181019061283c9190614bbd565b809350819450829e50505050818d6020018181525050808d606001818152505050505b50505050505080612a315760003d806020036128815760206000803e60005191505b507fdeaddead00000000000000000000000000000000000000000000000000000000810361291457886040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052600f908201527f41413935206f7574206f66206761730000000000000000000000000000000000606082015260800190565b7fdeadaa51000000000000000000000000000000000000000000000000000000008103612986575a61294690856143d1565b60208701819052608088015160009161295f9190614386565b604089015190915061297089612ed3565b61297d8960008385612f2f565b9550612a2f9050565b865180516020808a015192015173ffffffffffffffffffffffffffffffffffffffff90911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792906129da610800611efb565b6040516129e892919061433e565b60405180910390a35a6129fb90856143d1565b602087018190526080880151600091612a149190614386565b90506000612a2560028a8785611f27565b60608a0152965050505b505b505050949350505050565b600080612a6a6040518060800160405280600081526020016000815260200160008152602001600081525090565b612a7686868684612360565b9250925050935093915050565b600080612a8f856136ab565b915091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b3157856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526014908201527f41413234207369676e6174757265206572726f72000000000000000000000000606082015260800190565b8015612ba257856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b6000612bad856136ab565b9250905073ffffffffffffffffffffffffffffffffffffffff811615612c3857866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526014908201527f41413334207369676e6174757265206572726f72000000000000000000000000606082015260800190565b8115612ccf57866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560608201527f6500000000000000000000000000000000000000000000000000000000000000608082015260a00190565b50505050505050565b6000612d056040518060800160405280600081526020016000815260200160008152602001600081525090565b612d11858585846125d3565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152606401610763565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612df1576040519150601f19603f3d011682016040523d82523d6000602084013e612df6565b606091505b5050905080611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152606401610763565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548290612e95908590614386565b91829055509392505050565b61010081015161012082015160009190808203612ebf575092915050565b612ecb824883016136fe565b949350505050565b805180516020808401519281015160405190815273ffffffffffffffffffffffffffffffffffffffff90921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e0810151815160208088015193015160405173ffffffffffffffffffffffffffffffffffffffff9384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f91612fa99189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b6060813560208301356000612fd7612fd2604087018761462a565b613716565b90506000612feb612fd2606088018861462a565b9050608086013560a087013560c0880135600061300e612fd260e08c018c61462a565b6040805173ffffffffffffffffffffffffffffffffffffffff9a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b61308960208301836140cc565b73ffffffffffffffffffffffffffffffffffffffff168152602082810135908201526fffffffffffffffffffffffffffffffff6080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061310260e085018561462a565b909250905080156131ac576034811015613178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152606401610763565b6131828282613729565b60a0860152608085015273ffffffffffffffffffffffffffffffffffffffff1660e0840152610fc9565b600060e084018190526080840181905260a084015250505050565b82518051600091906131e688876131e160408b018b61462a565b61379a565b60e0820151600073ffffffffffffffffffffffffffffffffffffffff82166132445773ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205487811161323d57808803613240565b60005b9150505b60208801516040517f19822f7c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516916319822f7c9189916132a0918e91908790600401614beb565b60206040518083038160008887f1935050505080156132fa575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526132f791810190614c10565b60015b61333e578961330a610800611efb565b6040517f65c8fd4d000000000000000000000000000000000000000000000000000000008152600401610763929190614c29565b945073ffffffffffffffffffffffffffffffffffffffff82166133fb5773ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090208054808911156133f5578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832084821c808552925282208054849167ffffffffffffffff831691908561345583614399565b909155501495945050505050565b60606000805a855160e081015173ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604090208054939450919290919087811015613512578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b87810382600001819055506000846080015190508373ffffffffffffffffffffffffffffffffffffffff166352b7512c828d8d602001518d6040518563ffffffff1660e01b815260040161356893929190614beb565b60006040518083038160008887f1935050505080156135c757506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526135c49190810190614c76565b60015b61360b578b6135d7610800611efb565b6040517f65c8fd4d000000000000000000000000000000000000000000000000000000008152600401610763929190614d02565b9098509650805a87031115612109578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760608201527f61734c696d697400000000000000000000000000000000000000000000000000608082015260a00190565b600080826000036136c157506000928392509050565b60006136cc84613b26565b9050806040015165ffffffffffff164211806136f35750806020015165ffffffffffff1642105b905194909350915050565b600081831061370d578161370f565b825b9392505050565b6000604051828085833790209392505050565b6000808061373a601482868861447c565b613743916144a6565b60601c61375460246014878961447c565b61375d91614d4f565b60801c61376e60346024888a61447c565b61377791614d4f565b9194506fffffffffffffffffffffffffffffffff16925060801c90509250925092565b8015610fc95782515173ffffffffffffffffffffffffffffffffffffffff81163b1561382b57846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b600061384c60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516040015186866040518463ffffffff1660e01b815260040161388f929190614537565b60206040518083038160008887f11580156138ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138d3919061454b565b905073ffffffffffffffffffffffffffffffffffffffff811661395b57856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146139f857856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161076391815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b8073ffffffffffffffffffffffffffffffffffffffff163b600003613a8157856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161076391815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b6000613a90601482868861447c565b613a99916144a6565b60601c90508273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051613b1592919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003613b62575065ffffffffffff5b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff909316835260d09490941c602083015265ffffffffffff16928101929092525090565b6040518060a00160405280613c31604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810181811067ffffffffffffffff82111715613ca557613ca5613c56565b60405250565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715613cef57613cef613c56565b6040525050565b604051610140810167ffffffffffffffff81118282101715613d1a57613d1a613c56565b60405290565b600067ffffffffffffffff821115613d3a57613d3a613c56565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461235d57600080fd5b80356110aa81613d66565b60008183036101c0811215613da757600080fd5b604051613db381613c85565b80925061014080831215613dc657600080fd5b613dce613cf6565b9250613dd985613d88565b83526020850135602084015260408501356040840152606085013560608401526080850135608084015260a085013560a084015260c085013560c0840152613e2360e08601613d88565b60e084015261010085810135908401526101208086013590840152918152908301356020820152610160830135604082015261018083013560608201526101a090920135608090920191909152919050565b60008083601f840112613e8757600080fd5b50813567ffffffffffffffff811115613e9f57600080fd5b602083019150836020828501011115613eb757600080fd5b9250929050565b6000806000806102008587031215613ed557600080fd5b843567ffffffffffffffff80821115613eed57600080fd5b818701915087601f830112613f0157600080fd5b8135613f0c81613d20565b604051613f198282613cab565b8281528a6020848701011115613f2e57600080fd5b82602086016020830137600060208483010152809850505050613f548860208901613d93565b94506101e0870135915080821115613f6b57600080fd5b50613f7887828801613e75565b95989497509550505050565b600060208284031215613f9657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461370f57600080fd5b600060208284031215613fd857600080fd5b813563ffffffff8116811461370f57600080fd5b803577ffffffffffffffffffffffffffffffffffffffffffffffff811681146110aa57600080fd5b60006020828403121561402657600080fd5b61370f82613fec565b6000806040838503121561404257600080fd5b823561404d81613d66565b915061405b60208401613fec565b90509250929050565b6000806040838503121561407757600080fd5b823561408281613d66565b946020939093013593505050565b6000602082840312156140a257600080fd5b813567ffffffffffffffff8111156140b957600080fd5b8201610120818503121561370f57600080fd5b6000602082840312156140de57600080fd5b813561370f81613d66565b60008083601f8401126140fb57600080fd5b50813567ffffffffffffffff81111561411357600080fd5b6020830191508360208260051b8501011115613eb757600080fd5b60008060006040848603121561414357600080fd5b833567ffffffffffffffff81111561415a57600080fd5b614166868287016140e9565b909450925050602084013561417a81613d66565b809150509250925092565b60008060006040848603121561419a57600080fd5b83356141a581613d66565b9250602084013567ffffffffffffffff8111156141c157600080fd5b6141cd86828701613e75565b9497909650939450505050565b6000806000806000606086880312156141f257600080fd5b853567ffffffffffffffff8082111561420a57600080fd5b61421689838a01613e75565b90975095506020880135915061422b82613d66565b9093506040870135908082111561424157600080fd5b5061424e88828901613e75565b969995985093965092949392505050565b6000806020838503121561427257600080fd5b823567ffffffffffffffff81111561428957600080fd5b61429585828601613e75565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60005b838110156142eb5781810151838201526020016142d3565b50506000910152565b6000815180845261430c8160208601602086016142d0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b828152604060208201526000612ecb60408301846142f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a4157610a41614357565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143ca576143ca614357565b5060010190565b81810381811115610a4157610a41614357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261444757600080fd5b9190910192915050565b8183823760009101908152919050565b8215158152604060208201526000612ecb60408301846142f4565b6000808585111561448c57600080fd5b8386111561449957600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156144e65780818660140360031b1b83161692505b505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ecb6020830184866144ee565b60006020828403121561455d57600080fd5b815161370f81613d66565b65ffffffffffff81811683821601908082111561458757614587614357565b5092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261444757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126145f757600080fd5b83018035915067ffffffffffffffff82111561461257600080fd5b6020019150600581901b3603821315613eb757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261465f57600080fd5b83018035915067ffffffffffffffff82111561467a57600080fd5b602001915036819003821315613eb757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126146c457600080fd5b830160208101925035905067ffffffffffffffff8111156146e457600080fd5b803603821315613eb757600080fd5b600061012061471f8461470585613d88565b73ffffffffffffffffffffffffffffffffffffffff169052565b60208301356020850152614736604084018461468f565b82604087015261474983870182846144ee565b9250505061475a606084018461468f565b858303606087015261476d8382846144ee565b925050506080830135608085015260a083013560a085015260c083013560c085015261479c60e084018461468f565b85830360e08701526147af8382846144ee565b925050506101006147c28185018561468f565b868403838801526147d48482846144ee565b979650505050505050565b6040808252810184905260006060600586901b830181019083018783805b8981101561487f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087860301845282357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18c360301811261485d578283fd5b614869868d83016146f3565b95505060209384019392909201916001016147fd565b5050505082810360208401526147d48185876144ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000600386106148fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8582526080602083015261491560808301866142f4565b6040830194909452506060015292915050565b60208152600061370f60208301846142f4565b60608152600061494f6060830187896144ee565b73ffffffffffffffffffffffffffffffffffffffff86166020840152828103604084015261497e8185876144ee565b98975050505050505050565b600060033d11156149a35760046000803e5060005160e01c5b90565b600060443d10156149b45790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715614a0257505050505090565b8285019150815181811115614a1a5750505050505090565b843d8701016020828501011115614a345750505050505090565b614a4360208286010187613cab565b509095945050505050565b604081526000614a6160408301856146f3565b90508260208301529392505050565b8051805173ffffffffffffffffffffffffffffffffffffffff1683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e0810151614aef60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010081810151908401526101209081015190830152602081015161014083015260408101516101608301526060810151610180830152608001516101a090910152565b6000610200808352614b48818401876142f4565b9050614b576020840186614a70565b8281036101e0840152614b6a81856142f4565b9695505050505050565b6000610200808352614b8981840187896144ee565b9050614b986020840186614a70565b8281036101e08401526147d481856142f4565b600082516144478184602087016142d0565b600080600060608486031215614bd257600080fd5b8351925060208401519150604084015190509250925092565b606081526000614bfe60608301866146f3565b60208301949094525060400152919050565b600060208284031215614c2257600080fd5b5051919050565b82815260606020820152600d60608201527f4141323320726576657274656400000000000000000000000000000000000000608082015260a060408201526000612ecb60a08301846142f4565b60008060408385031215614c8957600080fd5b825167ffffffffffffffff811115614ca057600080fd5b8301601f81018513614cb157600080fd5b8051614cbc81613d20565b604051614cc98282613cab565b828152876020848601011115614cde57600080fd5b614cef8360208301602087016142d0565b6020969096015195979596505050505050565b82815260606020820152600d60608201527f4141333320726576657274656400000000000000000000000000000000000000608082015260a060408201526000612ecb60a08301846142f4565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156144e65760109490940360031b84901b169092169291505056fea2646970667358221220cd7965683afa94170eaa51ceebadcfd731e9b31f39f75621861d25875bde7f2a64736f6c63430008170033\";\n","import {\n Address,\n ExtractAbiItem,\n Hex,\n RpcTransactionReceipt,\n RpcUserOperationReceipt,\n decodeEventLog,\n encodeEventTopics,\n numberToHex,\n parseEventLogs,\n zeroAddress,\n} from \"viem\";\nimport { entryPoint07Abi } from \"viem/account-abstraction\";\n\nconst userOperationRevertReasonAbi = [\n entryPoint07Abi.find(\n (item): item is ExtractAbiItem<typeof entryPoint07Abi, \"UserOperationRevertReason\"> =>\n item.type === \"event\" && item.name === \"UserOperationRevertReason\",\n )!,\n] as const;\n\nconst userOperationEventTopic = encodeEventTopics({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n});\n\nexport function getUserOperationReceipt(userOpHash: Hex, receipt: RpcTransactionReceipt): RpcUserOperationReceipt {\n const userOperationRevertReasonTopicEvent = encodeEventTopics({\n abi: userOperationRevertReasonAbi,\n })[0];\n\n let entryPoint: Address = zeroAddress;\n let revertReason = undefined;\n\n let startIndex = -1;\n let endIndex = -1;\n receipt.logs.forEach((log, index) => {\n if (log?.topics[0] === userOperationEventTopic[0]) {\n // process UserOperationEvent\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. save as end of logs array\n endIndex = index;\n entryPoint = log.address;\n } else if (endIndex === -1) {\n // it's a different hash. remember it as beginning index, but only if we didn't find our end index yet.\n startIndex = index;\n }\n }\n\n if (log?.topics[0] === userOperationRevertReasonTopicEvent) {\n // process UserOperationRevertReason\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. capture revert reason.\n const decodedLog = decodeEventLog({\n abi: userOperationRevertReasonAbi,\n data: log.data,\n topics: log.topics,\n });\n\n revertReason = decodedLog.args.revertReason;\n }\n }\n });\n\n if (endIndex === -1) {\n throw new Error(\"fatal: no UserOperationEvent in logs\");\n }\n\n const logs = receipt.logs.slice(startIndex + 1, endIndex);\n\n const userOperationEvent = parseEventLogs({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n args: {\n userOpHash,\n },\n logs: receipt.logs,\n })[0]!;\n\n let paymaster: Address | undefined = userOperationEvent.args.paymaster;\n paymaster = paymaster === zeroAddress ? undefined : paymaster;\n\n return {\n userOpHash,\n entryPoint,\n sender: userOperationEvent.args.sender,\n nonce: numberToHex(userOperationEvent.args.nonce),\n paymaster,\n actualGasUsed: numberToHex(userOperationEvent.args.actualGasUsed),\n actualGasCost: numberToHex(userOperationEvent.args.actualGasCost),\n success: userOperationEvent.args.success,\n reason: revertReason,\n logs,\n receipt,\n };\n}\n","import { Chain, fallback, http, Transport, webSocket } from \"viem\";\n\nexport function chainTransport(rpcUrls: Chain[\"rpcUrls\"][string]): Transport | undefined {\n const webSocketUrl = rpcUrls?.webSocket?.[0];\n const httpUrl = rpcUrls?.http[0];\n\n if (webSocketUrl) {\n return httpUrl ? fallback([webSocket(webSocketUrl), http(httpUrl)]) : webSocket(webSocketUrl);\n }\n\n if (httpUrl) {\n return http(httpUrl);\n }\n}\n","import { Chain, EIP1193RequestFn, Hex, http, Transport } from \"viem\";\nimport { chainTransport } from \"./chainTransport\";\nimport { estimateUserOperationGas } from \"./methods/estimateUserOperationGas\";\n\ntype AltoSendUserOperationResultuest = {\n txHash: Hex;\n userOpHash: Hex;\n};\n\ntype AltoOptions<transport extends Transport> = {\n /** alto-compatible transport */\n altoTransport: transport;\n /** fallback transport for all other RPC methods */\n fallbackDefaultTransport?: Transport;\n};\n\nexport function alto<const altoTransport extends Transport>(transports?: AltoOptions<altoTransport>): altoTransport {\n return ((opts) => {\n const { altoTransport } = transports ?? getDefaultTransports(opts.chain);\n\n const { request: altoRequest, ...rest } = altoTransport(opts);\n\n return {\n ...rest,\n // TODO: type `request` so we don't have to cast\n async request(req): ReturnType<EIP1193RequestFn> {\n if (req.method === \"eth_estimateUserOperationGas\") {\n console.log(\"estimating user operation gas via alto\", req);\n return await estimateUserOperationGas({\n request: altoRequest,\n params: req.params as never,\n });\n }\n\n if (req.method === \"eth_sendUserOperation\") {\n console.log(\"sending user operation via pimlico_sendUserOperationNow\", req);\n const result = (await altoRequest({\n ...req,\n method: \"pimlico_sendUserOperationNow\",\n })) as AltoSendUserOperationResultuest;\n console.log(\"pimlico_sendUserOperationNow\", result);\n return result.userOpHash;\n }\n\n return await altoRequest(req);\n },\n };\n }) as altoTransport;\n}\n\nfunction getDefaultTransports(chain?: Chain): AltoOptions<Transport> {\n if (!chain) {\n throw new Error(\"No chain or transports provided\");\n }\n\n const altoTransport = chainTransport(chain.rpcUrls.alto);\n if (!altoTransport) {\n throw new Error(\"Provided chain does not support alto\");\n }\n\n return {\n altoTransport,\n fallbackDefaultTransport: http(),\n };\n}\n"],"mappings":"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","names":["debug","debug","sendTransaction","waitForTransactionReceipt","getCode","getCode","debug","deployer","debug","sendTransaction","waitForTransactionReceipt","error","getCreate2Address","getCreate2Address","http","zeroAddress","http","http","getDefaultTransports","http"]}
|
|
1
|
+
{"version":3,"sources":["../src/waitForTransactions.ts","../src/deploy/ensureContract.ts","../src/deploy/common.ts","../src/deploy/debug.ts","../src/deploy/ensureContractsDeployed.ts","../src/deploy/ensureDeployer.ts","../src/deploy/create2/deployment.json","../src/deploy/getDeployer.ts","../src/deploy/getContractAddress.ts","../src/transports/wiresaw.ts","../src/transports/methods/estimateUserOperationGas.ts","../src/transports/entryPointGasSimulations.ts","../src/transports/methods/getUserOperationReceipt.ts","../src/transports/chainTransport.ts","../src/transports/alto.ts"],"sourcesContent":["import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { debug } from \"./debug\";\nimport { waitForTransactionReceipt } from \"viem/actions\";\n\nexport async function waitForTransactions({\n client,\n hashes,\n debugLabel = \"transactions\",\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly hashes: readonly Hex[];\n readonly debugLabel?: string;\n}): Promise<void> {\n if (!hashes.length) return;\n\n debug(`waiting for ${debugLabel} to confirm`);\n // wait for each tx separately/serially, because parallelizing results in RPC errors\n for (const hash of hashes) {\n const receipt = await waitForTransactionReceipt(client, { hash });\n // TODO: handle user op failures?\n if (receipt.status === \"reverted\") {\n throw new Error(`Transaction reverted: ${hash}`);\n }\n }\n}\n","import { Client, Transport, Chain, Account, concatHex, getCreate2Address, Hex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport { contractSizeLimit, singletonSalt } from \"./common\";\nimport { debug } from \"./debug\";\nimport { sendTransaction } from \"../sendTransaction\";\n\nexport type Contract = {\n bytecode: Hex;\n deployedBytecodeSize?: number;\n debugLabel?: string;\n salt?: Hex;\n};\n\nexport async function ensureContract({\n client,\n deployerAddress,\n bytecode,\n deployedBytecodeSize,\n debugLabel = \"contract\",\n salt = singletonSalt,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n} & Contract): Promise<readonly Hex[]> {\n if (bytecode.includes(\"__$\")) {\n throw new Error(`Found unlinked public library in ${debugLabel} bytecode`);\n }\n\n const address = getCreate2Address({ from: deployerAddress, salt, bytecode });\n\n const contractCode = await getCode(client, { address, blockTag: \"pending\" });\n if (contractCode) {\n debug(\"found\", debugLabel, \"at\", address);\n return [];\n }\n\n if (deployedBytecodeSize != null) {\n if (deployedBytecodeSize === 0) {\n throw new Error(`Empty bytecode for ${debugLabel}`);\n }\n\n if (deployedBytecodeSize > contractSizeLimit) {\n console.warn(\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n } else if (deployedBytecodeSize > contractSizeLimit * 0.95) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\nBytecode for ${debugLabel} (${deployedBytecodeSize} bytes) is almost over the contract size limit (${contractSizeLimit} bytes). Run \\`forge build --sizes\\` for more info.\\n`,\n );\n }\n }\n\n debug(\"deploying\", debugLabel, \"at\", address);\n return [\n await sendTransaction(client, {\n chain: client.chain ?? null,\n to: deployerAddress,\n data: concatHex([salt, bytecode]),\n }),\n ];\n}\n","import { stringToHex } from \"viem\";\n\n// salt for deterministic deploys of singleton contracts\nexport const singletonSalt = stringToHex(\"\", { size: 32 });\n\n// https://eips.ethereum.org/EIPS/eip-170\nexport const contractSizeLimit = parseInt(\"6000\", 16);\n","import { debug as parentDebug } from \"../debug\";\n\nexport const debug = parentDebug.extend(\"deploy\");\nexport const error = parentDebug.extend(\"deploy\");\n\n// Pipe debug output to stdout instead of stderr\ndebug.log = console.debug.bind(console);\n\n// Pipe error output to stderr\nerror.log = console.error.bind(console);\n","import { Client, Transport, Chain, Account, Hex } from \"viem\";\nimport { Contract, ensureContract } from \"./ensureContract\";\nimport { waitForTransactions } from \"../waitForTransactions\";\nimport { uniqueBy } from \"../utils/uniqueBy\";\n\nexport async function ensureContractsDeployed({\n client,\n deployerAddress,\n contracts,\n}: {\n readonly client: Client<Transport, Chain | undefined, Account>;\n readonly deployerAddress: Hex;\n readonly contracts: readonly Contract[];\n}): Promise<readonly Hex[]> {\n // Deployments assume a deterministic deployer, so we only need to deploy the unique bytecode\n const uniqueContracts = uniqueBy(contracts, (contract) => contract.bytecode);\n\n const txs = (\n await Promise.all(uniqueContracts.map((contract) => ensureContract({ client, deployerAddress, ...contract })))\n ).flat();\n\n await waitForTransactions({\n client,\n hashes: txs,\n debugLabel: \"contract deploys\",\n });\n\n return txs;\n}\n","import { Account, Address, Chain, Client, Transport } from \"viem\";\nimport { getBalance, sendRawTransaction, sendTransaction, waitForTransactionReceipt } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\nimport { getDeployer } from \"./getDeployer\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function ensureDeployer(client: Client<Transport, Chain | undefined, Account>): Promise<Address> {\n const existingDeployer = await getDeployer(client);\n if (existingDeployer !== undefined) {\n return existingDeployer;\n }\n\n // There's not really a way to simulate a pre-EIP-155 (no chain ID) transaction,\n // so we have to attempt to create the deployer first and, if it fails, fall back\n // to a regular deploy.\n\n // Send gas to deployment signer\n const gasRequired = BigInt(deployment.gasLimit) * BigInt(deployment.gasPrice);\n const currentBalance = await getBalance(client, { address: `0x${deployment.signerAddress}` });\n const gasNeeded = gasRequired - currentBalance;\n if (gasNeeded > 0) {\n debug(\"sending gas for CREATE2 deployer to signer at\", deployment.signerAddress);\n const gasTx = await sendTransaction(client, {\n chain: client.chain ?? null,\n to: `0x${deployment.signerAddress}`,\n value: gasNeeded,\n });\n const gasReceipt = await waitForTransactionReceipt(client, { hash: gasTx });\n if (gasReceipt.status !== \"success\") {\n console.error(\"failed to send gas to deployer signer\", gasReceipt);\n throw new Error(\"failed to send gas to deployer signer\");\n }\n }\n\n // Deploy the deployer\n debug(\"deploying CREATE2 deployer at\", deployer);\n const deployTx = await sendRawTransaction(client, { serializedTransaction: `0x${deployment.transaction}` }).catch(\n (error) => {\n // Do a regular contract create if the presigned transaction doesn't work due to replay protection\n if (String(error).includes(\"only replay-protected (EIP-155) transactions allowed over RPC\")) {\n console.warn(\n // eslint-disable-next-line max-len\n `\\n ⚠️ Your chain or RPC does not allow for non EIP-155 signed transactions, so your deploys will not be determinstic and contract addresses may change between deploys.\\n\\n We recommend running your chain's node with \\`--rpc.allow-unprotected-txs\\` to enable determinstic deployments.\\n`,\n );\n debug(\"deploying CREATE2 deployer\");\n return sendTransaction(client, {\n chain: client.chain ?? null,\n data: `0x${deployment.creationCode}`,\n });\n }\n throw error;\n },\n );\n\n const deployReceipt = await waitForTransactionReceipt(client, { hash: deployTx });\n if (!deployReceipt.contractAddress) {\n throw new Error(\"Deploy receipt did not have contract address, was the deployer not deployed?\");\n }\n\n if (deployReceipt.contractAddress !== deployer) {\n console.warn(\n `\\n ⚠️ CREATE2 deployer created at ${deployReceipt.contractAddress} does not match the CREATE2 determinstic deployer we expected (${deployer})`,\n );\n }\n\n return deployReceipt.contractAddress;\n}\n","{\n \"gasPrice\": 100000000000,\n \"gasLimit\": 100000,\n \"signerAddress\": \"3fab184622dc19b6109349b94811493bf2a45362\",\n \"transaction\": \"f8a58085174876e800830186a08080b853604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf31ba02222222222222222222222222222222222222222222222222222222222222222a02222222222222222222222222222222222222222222222222222222222222222\",\n \"address\": \"4e59b44847b379578588920ca78fbf26c0b4956c\",\n \"creationCode\": \"604580600e600039806000f350fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3\"\n}\n","import { Address, Chain, Client, Transport, sliceHex } from \"viem\";\nimport { getCode } from \"viem/actions\";\nimport deployment from \"./create2/deployment.json\";\nimport { debug } from \"./debug\";\n\nconst deployer = `0x${deployment.address}` as const;\n\nexport async function getDeployer(client: Client<Transport, Chain | undefined>): Promise<Address | undefined> {\n const bytecode = await getCode(client, { address: deployer });\n if (bytecode) {\n debug(\"found deployer bytecode at\", deployer);\n // check if deployed bytecode is the same as the expected bytecode (minus 14-bytes creation code prefix)\n if (bytecode !== sliceHex(`0x${deployment.creationCode}`, 14)) {\n console.warn(\n `\\n ⚠️ Bytecode for deployer at ${deployer} did not match the expected CREATE2 bytecode. You may have unexpected results.\\n`,\n );\n }\n return deployer;\n }\n}\n","import { Hex, getCreate2Address } from \"viem\";\nimport { singletonSalt } from \"./common\";\n\nexport function getContractAddress({\n deployerAddress,\n bytecode,\n salt = singletonSalt,\n}: {\n readonly deployerAddress: Hex;\n readonly bytecode: Hex;\n readonly salt?: Hex;\n}): Hex {\n return getCreate2Address({ from: deployerAddress, bytecode, salt });\n}\n","import { Chain, EIP1193RequestFn, Hex, http, RpcTransactionReceipt, Transport } from \"viem\";\nimport { estimateUserOperationGas } from \"./methods/estimateUserOperationGas\";\nimport { getUserOperationReceipt } from \"./methods/getUserOperationReceipt\";\nimport { chainTransport } from \"./chainTransport\";\n\ntype WiresawSendUserOperationResult = {\n txHash: Hex;\n userOpHash: Hex;\n};\n\ntype WiresawOptions<transport extends Transport> = {\n /** wiresaw-compatible transport */\n wiresawTransport: transport;\n /** fallback transport for bundler RPC methods */\n fallbackBundlerTransport?: Transport;\n /** fallback transport for all other RPC methods */\n fallbackDefaultTransport?: Transport;\n};\n\nexport function wiresaw<const wiresawTransport extends Transport>(\n transports?: WiresawOptions<wiresawTransport>,\n): wiresawTransport {\n return ((opts) => {\n const { wiresawTransport, fallbackBundlerTransport, fallbackDefaultTransport } =\n transports ?? getDefaultTransports(opts.chain);\n\n const { request: wiresawRequest, ...rest } = wiresawTransport(opts);\n\n let chainId: Hex | null = null;\n const transactionHashes: { [userOpHash: Hex]: Hex } = {};\n const transactionReceipts: { [transactionHashes: Hex]: RpcTransactionReceipt } = {};\n\n return {\n ...rest,\n // TODO: type `request` so we don't have to cast\n async request(req): ReturnType<EIP1193RequestFn> {\n try {\n if (req.method === \"eth_chainId\") {\n if (chainId != null) return chainId;\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n return (chainId = await fallbackRequest(req));\n }\n return (chainId = await wiresawRequest(req));\n }\n\n if (req.method === \"eth_estimateGas\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_estimateGas\" });\n }\n\n if (req.method === \"eth_call\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_call\" });\n }\n\n if (req.method === \"eth_getTransactionCount\") {\n return await wiresawRequest({ ...req, method: \"wiresaw_getTransactionCount\" });\n }\n\n if (req.method === \"eth_getTransactionReceipt\") {\n return await getTransactionReceipt((req.params as [Hex])[0]);\n }\n\n if (req.method === \"eth_sendUserOperation\") {\n const { userOpHash, txHash } = (await wiresawRequest({\n ...req,\n method: \"wiresaw_sendUserOperation\",\n })) as WiresawSendUserOperationResult;\n transactionHashes[userOpHash] = txHash;\n return userOpHash;\n }\n\n if (req.method === \"eth_getUserOperationReceipt\") {\n const userOpHash = (req.params as [Hex])[0];\n const knownTransactionHash = transactionHashes[userOpHash];\n if (!knownTransactionHash) {\n throw new Error(`eth_getUserOperationReceipt only supported for own user operations`);\n }\n const transactionReceipt = await getTransactionReceipt(knownTransactionHash);\n return transactionReceipt && getUserOperationReceipt(userOpHash, transactionReceipt);\n }\n\n if (req.method === \"eth_estimateUserOperationGas\") {\n return await estimateUserOperationGas({\n request: wiresawRequest,\n params: req.params as never,\n });\n }\n\n // Fallback to regular RPC for methods that don't require wiresaw\n if (\n req.method === \"eth_blockNumber\" ||\n req.method === \"eth_getBlockByNumber\" ||\n req.method === \"eth_maxPriorityFeePerGas\"\n ) {\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n return await fallbackRequest(req);\n }\n return await wiresawRequest(req);\n }\n\n return await wiresawRequest(req);\n } catch (e) {\n console.warn(\"[wiresaw] request failed\", e);\n const bundlerMethods = [\n \"eth_estimateUserOperationGas\",\n \"eth_sendUserOperation\",\n \"eth_getUserOperationReceipt\",\n ];\n if (bundlerMethods.includes(req.method)) {\n if (fallbackBundlerTransport) {\n const { request: fallbackRequest } = fallbackBundlerTransport(opts);\n console.warn(\"[wiresaw] falling back to bundler rpc\", req);\n return fallbackRequest(req);\n }\n }\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n console.warn(\"[wiresaw] falling back to eth rpc\", req);\n return fallbackRequest(req);\n }\n throw e;\n }\n\n async function getTransactionReceipt(hash: Hex): Promise<RpcTransactionReceipt | undefined> {\n // Return cached receipt if available\n if (transactionReceipts[hash]) return transactionReceipts[hash];\n\n // Fetch pending receipt\n const pendingReceipt = (await wiresawRequest({\n ...req,\n method: \"wiresaw_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (pendingReceipt) {\n transactionReceipts[hash] = pendingReceipt;\n return pendingReceipt;\n }\n\n if (fallbackDefaultTransport) {\n const { request: fallbackRequest } = fallbackDefaultTransport(opts);\n const receipt = (await fallbackRequest({\n ...req,\n method: \"eth_getTransactionReceipt\",\n params: [hash],\n })) as RpcTransactionReceipt | undefined;\n if (receipt) {\n transactionReceipts[hash] = receipt;\n return receipt;\n }\n }\n }\n },\n };\n }) as wiresawTransport;\n}\n\nfunction getDefaultTransports(chain?: Chain): WiresawOptions<Transport> {\n if (!chain) {\n throw new Error(\"No chain or transports provided\");\n }\n\n const wiresawTransport = chainTransport(chain.rpcUrls.wiresaw);\n if (!wiresawTransport) {\n throw new Error(\"Provided chain does not support wiresaw\");\n }\n\n const bundlerHttpUrl = chain.rpcUrls.bundler?.http[0];\n return {\n wiresawTransport,\n fallbackBundlerTransport: bundlerHttpUrl ? http(bundlerHttpUrl) : undefined,\n fallbackDefaultTransport: http(),\n };\n}\n","import {\n BundlerRpcSchema,\n decodeFunctionResult,\n DecodeFunctionResultReturnType,\n EIP1193RequestFn,\n encodeFunctionData,\n Hex,\n zeroAddress,\n} from \"viem\";\nimport { getRpcMethod } from \"../common\";\nimport {\n entryPoint07Address,\n formatUserOperation,\n formatUserOperationRequest,\n toPackedUserOperation,\n UserOperation,\n} from \"viem/account-abstraction\";\nimport { bigIntMax } from \"../../utils\";\nimport { entryPointGasSimulationsAbi, entryPointSimulationsDeployedBytecode } from \"../entryPointGasSimulations\";\n\ntype rpcMethod = getRpcMethod<BundlerRpcSchema, \"eth_estimateUserOperationGas\">;\n\ntype EstimateUserOperationGasOptions = {\n request: EIP1193RequestFn;\n params: rpcMethod[\"Parameters\"];\n};\n\nexport async function estimateUserOperationGas({\n request,\n params,\n}: EstimateUserOperationGasOptions): Promise<rpcMethod[\"ReturnType\"]> {\n const userOp = formatUserOperation(params[0]);\n const gasSimulation = await simulateGas({ userOp, request });\n const gasLimits = {\n verificationGasLimit: gasSimulation.verificationGas * 2n,\n callGasLimit: bigIntMax(gasSimulation.callGas * 2n, 9000n),\n paymasterVerificationGasLimit: gasSimulation.paymasterVerificationGas * 2n,\n paymasterPostOpGasLimit: gasSimulation.paymasterPostOpGas * 2n,\n preVerificationGas: 10_000_000n, // TODO: change this based on our alto config\n };\n\n return formatUserOperationRequest({\n ...gasLimits,\n });\n}\n\ntype SimulateGasOptions = {\n request: EIP1193RequestFn;\n userOp: UserOperation<\"0.7\">;\n};\n\ntype SimulateGasResult = DecodeFunctionResultReturnType<typeof entryPointGasSimulationsAbi>;\n\nasync function simulateGas({ request, userOp }: SimulateGasOptions): Promise<SimulateGasResult> {\n // Prepare user operation for simulation\n const simulationUserOp = {\n ...userOp,\n preVerificationGas: 0n,\n callGasLimit: 10_000_000n,\n verificationGasLimit: 10_000_000n,\n // https://github.com/pimlicolabs/alto/blob/471998695e5ec75ef88dda3f8a534f47c24bcd1a/src/rpc/methods/eth_estimateUserOperationGas.ts#L117\n maxPriorityFeePerGas: userOp.maxFeePerGas,\n paymasterPostOpGasLimit: 2_000_000n,\n paymasterVerificationGasLimit: 5_000_000n,\n } satisfies UserOperation<\"0.7\">;\n\n const packedUserOp = toPackedUserOperation(simulationUserOp);\n const simulationData = encodeFunctionData({\n abi: entryPointGasSimulationsAbi,\n functionName: \"estimateGas\",\n args: [packedUserOp],\n });\n\n const hasPaymaster = userOp.paymaster != null && userOp.paymaster !== zeroAddress;\n const senderBalanceOverride = hasPaymaster ? {} : { [userOp.sender]: { balance: \"0xFFFFFFFFFFFFFFFFFFFF\" } };\n const simulationParams = [\n {\n to: entryPoint07Address,\n data: simulationData,\n },\n \"pending\",\n {\n [entryPoint07Address]: { code: entryPointSimulationsDeployedBytecode },\n ...senderBalanceOverride,\n },\n ];\n const encodedSimulationResult: Hex = await request({\n method: \"eth_call\",\n params: simulationParams,\n });\n\n return decodeFunctionResult({\n abi: entryPointGasSimulationsAbi,\n functionName: \"estimateGas\",\n data: encodedSimulationResult,\n });\n}\n","import type { Hex } from \"viem\";\n\nexport const entryPointGasSimulationsAbi = [\n {\n inputs: [\n {\n components: [\n {\n internalType: \"address\",\n name: \"sender\",\n type: \"address\",\n },\n {\n internalType: \"uint256\",\n name: \"nonce\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes\",\n name: \"initCode\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"callData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes32\",\n name: \"accountGasLimits\",\n type: \"bytes32\",\n },\n {\n internalType: \"uint256\",\n name: \"preVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"bytes32\",\n name: \"gasFees\",\n type: \"bytes32\",\n },\n {\n internalType: \"bytes\",\n name: \"paymasterAndData\",\n type: \"bytes\",\n },\n {\n internalType: \"bytes\",\n name: \"signature\",\n type: \"bytes\",\n },\n ],\n internalType: \"struct PackedUserOperation\",\n name: \"op\",\n type: \"tuple\",\n },\n ],\n name: \"estimateGas\",\n outputs: [\n {\n components: [\n {\n internalType: \"uint256\",\n name: \"verificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"callGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterVerificationGas\",\n type: \"uint256\",\n },\n {\n internalType: \"uint256\",\n name: \"paymasterPostOpGas\",\n type: \"uint256\",\n },\n ],\n internalType: \"struct EntryPoint.GasInfo\",\n name: \"\",\n type: \"tuple\",\n },\n ],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n] as const;\n\n// Modified version of the EntryPointSimulations contract that does not apply for a penalty for unused gas\n// https://github.com/latticexyz/account-abstraction/blob/3954ce708580d23073f477682f78942b253de7fa/contracts/core/EntryPoint.sol#L46\nexport const entryPointSimulationsDeployedBytecode: Hex =\n // eslint-disable-next-line max-len\n \"0x6080604052600436106101625760003560e01c806370a08231116100c0578063b760faf911610074578063c23a5cea11610059578063c23a5cea146105c2578063dbed18e0146105e2578063fc7e286d1461060257600080fd5b8063b760faf91461059a578063bb9fe6bf146105ad57600080fd5b8063850aaf62116100a5578063850aaf621461053a578063957122ab1461055a5780639b249f691461057a57600080fd5b806370a08231146104d7578063765e827f1461051a57600080fd5b8063205c28781161011757806335567e1a116100fc57806335567e1a146102a05780633b6a3539146103355780635287ce121461038857600080fd5b8063205c28781461026057806322cdde4c1461028057600080fd5b80630396cb60116101485780630396cb60146101e75780630bd28e3b146101fa5780631b2e01b81461021a57600080fd5b806242dc531461017757806301ffc9a7146101b757600080fd5b3661017257610170336106d4565b005b600080fd5b34801561018357600080fd5b50610197610192366004613ebe565b6106f5565b604080519384526020840192909252908201526060015b60405180910390f35b3480156101c357600080fd5b506101d76101d2366004613f84565b6108ca565b60405190151581526020016101ae565b6101706101f5366004613fc6565b610a47565b34801561020657600080fd5b50610170610215366004614014565b610ddd565b34801561022657600080fd5b5061025261023536600461402f565b600160209081526000928352604080842090915290825290205481565b6040519081526020016101ae565b34801561026c57600080fd5b5061017061027b366004614064565b610e25565b34801561028c57600080fd5b5061025261029b366004614090565b610fcf565b3480156102ac57600080fd5b506102526102bb36600461402f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff8516845290915290819020549082901b7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000161792915050565b34801561034157600080fd5b50610355610350366004614090565b611011565b6040516101ae91908151815260208083015190820152604080830151908201526060918201519181019190915260800190565b34801561039457600080fd5b506104756103a33660046140cc565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091525073ffffffffffffffffffffffffffffffffffffffff1660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046dffffffffffffffffffffffffffff16928101929092526f01000000000000000000000000000000810463ffffffff166060830152730100000000000000000000000000000000000000900465ffffffffffff16608082015290565b6040516101ae9190600060a082019050825182526020830151151560208301526dffffffffffffffffffffffffffff604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b3480156104e357600080fd5b506102526104f23660046140cc565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b34801561052657600080fd5b5061017061053536600461412e565b6110af565b34801561054657600080fd5b50610170610555366004614185565b61122c565b34801561056657600080fd5b506101706105753660046141da565b6112d1565b34801561058657600080fd5b5061017061059536600461425f565b611429565b6101706105a83660046140cc565b6106d4565b3480156105b957600080fd5b50610170611514565b3480156105ce57600080fd5b506101706105dd3660046140cc565b6116f4565b3480156105ee57600080fd5b506101706105fd36600461412e565b6119e1565b34801561060e57600080fd5b5061068a61061d3660046140cc565b6000602081905290815260409020805460019091015460ff81169061010081046dffffffffffffffffffffffffffff16906f01000000000000000000000000000000810463ffffffff1690730100000000000000000000000000000000000000900465ffffffffffff1685565b6040805195865293151560208601526dffffffffffffffffffffffffffff9092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a0016101ae565b60015b60058110156106e8576001016106d7565b6106f182611e8d565b5050565b6000806000805a905033301461076c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c7900000000000000000060448201526064015b60405180910390fd5b8651606081015160a082015181016127100160405a603f0281610791576107916142a1565b0410156107c2577fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b8951600090156108635760006107df846000015160008e86611ee3565b9050806108615760006107f3610800611efb565b80519091501561085b57846000015173ffffffffffffffffffffffffffffffffffffffff168c602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20187602001518460405161085292919061433e565b60405180910390a35b60019250505b505b5a8403955060008a60800151870190506108b6828c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250611f27915050565b909d979c509a509598505050505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f60fc6b6e00000000000000000000000000000000000000000000000000000000148061095d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f915074d800000000000000000000000000000000000000000000000000000000145b806109a957507fffffffff0000000000000000000000000000000000000000000000000000000082167fcf28ef9700000000000000000000000000000000000000000000000000000000145b806109f557507fffffffff0000000000000000000000000000000000000000000000000000000082167f3e84f02100000000000000000000000000000000000000000000000000000000145b80610a4157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b33600090815260208190526040902063ffffffff8216610ac3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152606401610763565b600181015463ffffffff6f0100000000000000000000000000000090910481169083161015610b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152606401610763565b6001810154600090610b7690349061010090046dffffffffffffffffffffffffffff16614386565b905060008111610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152606401610763565b6dffffffffffffffffffffffffffff811115610c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152606401610763565b6040805160a08101825283548152600160208083018281526dffffffffffffffffffffffffffff86811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16730100000000000000000000000000000000000000027fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff979094166f0100000000000000000000000000000002969096167fffffffffffffff00000000000000000000ffffffffffffffffffffffffffffff91909516610100027fffffffffffffffffffffffffffffffffff0000000000000000000000000000ff991515999099167fffffffffffffffffffffffffffffffffff00000000000000000000000000000090941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b33600090815260016020908152604080832077ffffffffffffffffffffffffffffffffffffffffffffffff851684529091528120805491610e1d83614399565b919050555050565b3360009081526020819052604090208054821115610e9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152606401610763565b8054610eac9083906143d1565b81556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168360405160006040518083038185875af1925050503d8060008114610f59576040519150601f19603f3d011682016040523d82523d6000602084013e610f5e565b606091505b5050905080610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152606401610763565b50505050565b6000610fda82612118565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b61103c6040518060800160405280600081526020016000815260200160008152602001600081525090565b611044612131565b61104c613ba4565b6110776040518060800160405280600081526020016000815260200160008152602001600081525090565b61108084612172565b61108d6000858484612360565b505061109c60008584846125d3565b509150506110aa6001600255565b919050565b6110b7612131565b8160008167ffffffffffffffff8111156110d3576110d3613c56565b60405190808252806020026020018201604052801561110c57816020015b6110f9613ba4565b8152602001906001900390816110f15790505b50905060005b8281101561118557600082828151811061112e5761112e6143e4565b60200260200101519050600080611169848a8a87818110611151576111516143e4565b90506020028101906111639190614413565b85612a3c565b9150915061117a8483836000612a83565b505050600101611112565b506040516000907fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972908290a160005b8381101561120f57611203818888848181106111d2576111d26143e4565b90506020028101906111e49190614413565b8584815181106111f6576111f66143e4565b6020026020010151612cd8565b909101906001016111b4565b5061121a8482612d1a565b5050506112276001600255565b505050565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051611256929190614451565b600060405180830381855af49150503d8060008114611291576040519150601f19603f3d011682016040523d82523d6000602084013e611296565b606091505b509150915081816040517f99410554000000000000000000000000000000000000000000000000000000008152600401610763929190614461565b831580156112f4575073ffffffffffffffffffffffffffffffffffffffff83163b155b1561135b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f41413230206163636f756e74206e6f74206465706c6f796564000000000000006044820152606401610763565b601481106113ed576000611372601482848661447c565b61137b916144a6565b60601c9050803b6000036113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f79656400000000006044820152606401610763565b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260006024820152604401610763565b600061144a60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3684846040518363ffffffff1660e01b8152600401611484929190614537565b6020604051808303816000875af11580156114a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c7919061454b565b6040517f6ca7b80600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152909150602401610763565b336000908152602081905260408120600181015490916f0100000000000000000000000000000090910463ffffffff1690036115ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152606401610763565b600181015460ff1661161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152606401610763565b6001810154600090611645906f01000000000000000000000000000000900463ffffffff1642614568565b6001830180547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001673010000000000000000000000000000000000000065ffffffffffff84169081027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046dffffffffffffffffffffffffffff1680611784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152606401610763565b6001820154730100000000000000000000000000000000000000900465ffffffffffff1661180e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152606401610763565b60018201544273010000000000000000000000000000000000000090910465ffffffffffff16111561189c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152606401610763565b6001820180547fffffffffffffff000000000000000000000000000000000000000000000000ff1690556040805173ffffffffffffffffffffffffffffffffffffffff851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a260008373ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611971576040519150601f19603f3d011682016040523d82523d6000602084013e611976565b606091505b5050905080610fc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152606401610763565b6119e9612131565b816000805b82811015611bdb5736868683818110611a0957611a096143e4565b9050602002810190611a1b919061458e565b9050366000611a2a83806145c2565b90925090506000611a4160408501602086016140cc565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff821601611ae2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152606401610763565b73ffffffffffffffffffffffffffffffffffffffff811615611bbf5773ffffffffffffffffffffffffffffffffffffffff8116632dd811338484611b29604089018961462a565b6040518563ffffffff1660e01b8152600401611b4894939291906147df565b60006040518083038186803b158015611b6057600080fd5b505afa925050508015611b71575060015b611bbf576040517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610763565b611bc98287614386565b955050600190930192506119ee915050565b5060008167ffffffffffffffff811115611bf757611bf7613c56565b604051908082528060200260200182016040528015611c3057816020015b611c1d613ba4565b815260200190600190039081611c155790505b5090506000805b84811015611d0d5736888883818110611c5257611c526143e4565b9050602002810190611c64919061458e565b9050366000611c7383806145c2565b90925090506000611c8a60408501602086016140cc565b90508160005b81811015611cfb576000898981518110611cac57611cac6143e4565b60200260200101519050600080611ccf8b898987818110611151576111516143e4565b91509150611cdf84838389612a83565b8a611ce981614399565b9b505060019093019250611c90915050565b505060019094019350611c3792505050565b506040517fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f97290600090a150600080805b85811015611e485736898983818110611d5857611d586143e4565b9050602002810190611d6a919061458e565b9050611d7c60408201602083016140cc565b73ffffffffffffffffffffffffffffffffffffffff167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a2366000611dcb83806145c2565b90925090508060005b81811015611e3757611e1688858584818110611df257611df26143e4565b9050602002810190611e049190614413565b8b8b815181106111f6576111f66143e4565b611e209088614386565b965087611e2c81614399565b985050600101611dd4565b505060019093019250611d3d915050565b506040516000907f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d908290a2611e7e8682612d1a565b50505050506112276001600255565b6000611e998234612e61565b90508173ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4826040516116e891815260200190565b6000806000845160208601878987f195945050505050565b60603d82811115611f095750815b604051602082018101604052818152816000602083013e9392505050565b60008060005a865190915060009081611f3f82612ea1565b60e083015190915073ffffffffffffffffffffffffffffffffffffffff8116611f6b5782519350612058565b8093506000895111156120585760005a8984029850905060028c6002811115611f9657611f96614896565b14612052578173ffffffffffffffffffffffffffffffffffffffff16637c627b218560a001518e8d8c886040518663ffffffff1660e01b8152600401611fdf94939291906148c5565b600060405180830381600088803b158015611ff957600080fd5b5087f19350505050801561200b575060015b61205257600061201c610800611efb565b9050806040517fad7954bc0000000000000000000000000000000000000000000000000000000081526004016107639190614928565b5a900395505b5a60408b015190860398909801978289029750878110156120d45760028c600281111561208757612087614896565b036120aa578097506120988b612ed3565b6120a58b60008a8c612f2f565b612109565b7fdeadaa510000000000000000000000000000000000000000000000000000000060005260206000fd5b8781036120e18682612e61565b506000808e60028111156120f7576120f7614896565b1490506121068d828c8e612f2f565b50505b50505050505094509492505050565b600061212382612fb7565b805190602001209050919050565b600280540361216c576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028055565b6122726040517fd69400000000000000000000000000000000000000000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003060601b1660228201527f01000000000000000000000000000000000000000000000000000000000000006036820152600090603701604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90921691909117905550565b3063957122ab612285604084018461462a565b61229260208601866140cc565b61229f60e087018761462a565b6040518663ffffffff1660e01b81526004016122bf95949392919061493b565b60006040518083038186803b1580156122d757600080fd5b505afa9250505080156122e8575060015b61235d576122f461498a565b806308c379a00361235157506123086149a6565b806123135750612353565b8051156106f1576000816040517f220266b600000000000000000000000000000000000000000000000000000000815260040161076392919061433e565b505b3d6000803e3d6000fd5b50565b60008060005a8551909150612375878261307c565b61237e87610fcf565b6020870152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff811115612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152606401610763565b60006124578460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b90506124668b8b8b84876131c7565b965061247a84600001518560200151613408565b6124e9578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a8603111561255e578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b60e084015160609073ffffffffffffffffffffffffffffffffffffffff161561259f5760005a90506125928d8d8d86613463565b985091505a900360408a01525b60408a018290528060608b015260a08b01355a90960395909501608090990189905250505094909352909590945092505050565b6000805a905060006125e6856060015190565b60405190915060009036826125fe60608b018b61462a565b915091506060600082600381111561261557843591505b507f72288ed1000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008216016127395760008c8c60200151604051602401612678929190614a4e565b604051602081830303815290604052638dd7712f60e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090503073ffffffffffffffffffffffffffffffffffffffff166242dc53828e8b6040516024016126ef93929190614b34565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509250506127b0565b3073ffffffffffffffffffffffffffffffffffffffff166242dc5385858e8b60405160240161276b9493929190614b74565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505091505b60603073ffffffffffffffffffffffffffffffffffffffff16836040516127d79190614bab565b6000604051808303816000865af19150503d8060008114612814576040519150601f19603f3d011682016040523d82523d6000602084013e612819565b606091505b509097509050861561285f576000808280602001905181019061283c9190614bbd565b809350819450829e50505050818d6020018181525050808d606001818152505050505b50505050505080612a315760003d806020036128815760206000803e60005191505b507fdeaddead00000000000000000000000000000000000000000000000000000000810361291457886040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052600f908201527f41413935206f7574206f66206761730000000000000000000000000000000000606082015260800190565b7fdeadaa51000000000000000000000000000000000000000000000000000000008103612986575a61294690856143d1565b60208701819052608088015160009161295f9190614386565b604089015190915061297089612ed3565b61297d8960008385612f2f565b9550612a2f9050565b865180516020808a015192015173ffffffffffffffffffffffffffffffffffffffff90911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792906129da610800611efb565b6040516129e892919061433e565b60405180910390a35a6129fb90856143d1565b602087018190526080880151600091612a149190614386565b90506000612a2560028a8785611f27565b60608a0152965050505b505b505050949350505050565b600080612a6a6040518060800160405280600081526020016000815260200160008152602001600081525090565b612a7686868684612360565b9250925050935093915050565b600080612a8f856136ab565b915091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b3157856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526014908201527f41413234207369676e6174757265206572726f72000000000000000000000000606082015260800190565b8015612ba257856040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b6000612bad856136ab565b9250905073ffffffffffffffffffffffffffffffffffffffff811615612c3857866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526014908201527f41413334207369676e6174757265206572726f72000000000000000000000000606082015260800190565b8115612ccf57866040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560608201527f6500000000000000000000000000000000000000000000000000000000000000608082015260a00190565b50505050505050565b6000612d056040518060800160405280600081526020016000815260200160008152602001600081525090565b612d11858585846125d3565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216612d97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152606401610763565b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114612df1576040519150601f19603f3d011682016040523d82523d6000602084013e612df6565b606091505b5050905080611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152606401610763565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040812080548290612e95908590614386565b91829055509392505050565b61010081015161012082015160009190808203612ebf575092915050565b612ecb824883016136fe565b949350505050565b805180516020808401519281015160405190815273ffffffffffffffffffffffffffffffffffffffff90921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e0810151815160208088015193015160405173ffffffffffffffffffffffffffffffffffffffff9384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f91612fa99189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b6060813560208301356000612fd7612fd2604087018761462a565b613716565b90506000612feb612fd2606088018861462a565b9050608086013560a087013560c0880135600061300e612fd260e08c018c61462a565b6040805173ffffffffffffffffffffffffffffffffffffffff9a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b61308960208301836140cc565b73ffffffffffffffffffffffffffffffffffffffff168152602082810135908201526fffffffffffffffffffffffffffffffff6080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061310260e085018561462a565b909250905080156131ac576034811015613178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152606401610763565b6131828282613729565b60a0860152608085015273ffffffffffffffffffffffffffffffffffffffff1660e0840152610fc9565b600060e084018190526080840181905260a084015250505050565b82518051600091906131e688876131e160408b018b61462a565b61379a565b60e0820151600073ffffffffffffffffffffffffffffffffffffffff82166132445773ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205487811161323d57808803613240565b60005b9150505b60208801516040517f19822f7c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516916319822f7c9189916132a0918e91908790600401614beb565b60206040518083038160008887f1935050505080156132fa575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526132f791810190614c10565b60015b61333e578961330a610800611efb565b6040517f65c8fd4d000000000000000000000000000000000000000000000000000000008152600401610763929190614c29565b945073ffffffffffffffffffffffffffffffffffffffff82166133fb5773ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090208054808911156133f5578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020908152604080832084821c808552925282208054849167ffffffffffffffff831691908561345583614399565b909155501495945050505050565b60606000805a855160e081015173ffffffffffffffffffffffffffffffffffffffff811660009081526020819052604090208054939450919290919087811015613512578a6040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b87810382600001819055506000846080015190508373ffffffffffffffffffffffffffffffffffffffff166352b7512c828d8d602001518d6040518563ffffffff1660e01b815260040161356893929190614beb565b60006040518083038160008887f1935050505080156135c757506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526135c49190810190614c76565b60015b61360b578b6135d7610800611efb565b6040517f65c8fd4d000000000000000000000000000000000000000000000000000000008152600401610763929190614d02565b9098509650805a87031115612109578b6040517f220266b60000000000000000000000000000000000000000000000000000000081526004016107639181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760608201527f61734c696d697400000000000000000000000000000000000000000000000000608082015260a00190565b600080826000036136c157506000928392509050565b60006136cc84613b26565b9050806040015165ffffffffffff164211806136f35750806020015165ffffffffffff1642105b905194909350915050565b600081831061370d578161370f565b825b9392505050565b6000604051828085833790209392505050565b6000808061373a601482868861447c565b613743916144a6565b60601c61375460246014878961447c565b61375d91614d4f565b60801c61376e60346024888a61447c565b61377791614d4f565b9194506fffffffffffffffffffffffffffffffff16925060801c90509250925092565b8015610fc95782515173ffffffffffffffffffffffffffffffffffffffff81163b1561382b57846040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b600061384c60065473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1663570e1a3686600001516040015186866040518463ffffffff1660e01b815260040161388f929190614537565b60206040518083038160008887f11580156138ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138d3919061454b565b905073ffffffffffffffffffffffffffffffffffffffff811661395b57856040517f220266b6000000000000000000000000000000000000000000000000000000008152600401610763918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b8173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146139f857856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161076391815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b8073ffffffffffffffffffffffffffffffffffffffff163b600003613a8157856040517f220266b600000000000000000000000000000000000000000000000000000000815260040161076391815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b6000613a90601482868861447c565b613a99916144a6565b60601c90508273ffffffffffffffffffffffffffffffffffffffff1686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051613b1592919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003613b62575065ffffffffffff5b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff909316835260d09490941c602083015265ffffffffffff16928101929092525090565b6040518060a00160405280613c31604051806101400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810181811067ffffffffffffffff82111715613ca557613ca5613c56565b60405250565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715613cef57613cef613c56565b6040525050565b604051610140810167ffffffffffffffff81118282101715613d1a57613d1a613c56565b60405290565b600067ffffffffffffffff821115613d3a57613d3a613c56565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b73ffffffffffffffffffffffffffffffffffffffff8116811461235d57600080fd5b80356110aa81613d66565b60008183036101c0811215613da757600080fd5b604051613db381613c85565b80925061014080831215613dc657600080fd5b613dce613cf6565b9250613dd985613d88565b83526020850135602084015260408501356040840152606085013560608401526080850135608084015260a085013560a084015260c085013560c0840152613e2360e08601613d88565b60e084015261010085810135908401526101208086013590840152918152908301356020820152610160830135604082015261018083013560608201526101a090920135608090920191909152919050565b60008083601f840112613e8757600080fd5b50813567ffffffffffffffff811115613e9f57600080fd5b602083019150836020828501011115613eb757600080fd5b9250929050565b6000806000806102008587031215613ed557600080fd5b843567ffffffffffffffff80821115613eed57600080fd5b818701915087601f830112613f0157600080fd5b8135613f0c81613d20565b604051613f198282613cab565b8281528a6020848701011115613f2e57600080fd5b82602086016020830137600060208483010152809850505050613f548860208901613d93565b94506101e0870135915080821115613f6b57600080fd5b50613f7887828801613e75565b95989497509550505050565b600060208284031215613f9657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461370f57600080fd5b600060208284031215613fd857600080fd5b813563ffffffff8116811461370f57600080fd5b803577ffffffffffffffffffffffffffffffffffffffffffffffff811681146110aa57600080fd5b60006020828403121561402657600080fd5b61370f82613fec565b6000806040838503121561404257600080fd5b823561404d81613d66565b915061405b60208401613fec565b90509250929050565b6000806040838503121561407757600080fd5b823561408281613d66565b946020939093013593505050565b6000602082840312156140a257600080fd5b813567ffffffffffffffff8111156140b957600080fd5b8201610120818503121561370f57600080fd5b6000602082840312156140de57600080fd5b813561370f81613d66565b60008083601f8401126140fb57600080fd5b50813567ffffffffffffffff81111561411357600080fd5b6020830191508360208260051b8501011115613eb757600080fd5b60008060006040848603121561414357600080fd5b833567ffffffffffffffff81111561415a57600080fd5b614166868287016140e9565b909450925050602084013561417a81613d66565b809150509250925092565b60008060006040848603121561419a57600080fd5b83356141a581613d66565b9250602084013567ffffffffffffffff8111156141c157600080fd5b6141cd86828701613e75565b9497909650939450505050565b6000806000806000606086880312156141f257600080fd5b853567ffffffffffffffff8082111561420a57600080fd5b61421689838a01613e75565b90975095506020880135915061422b82613d66565b9093506040870135908082111561424157600080fd5b5061424e88828901613e75565b969995985093965092949392505050565b6000806020838503121561427257600080fd5b823567ffffffffffffffff81111561428957600080fd5b61429585828601613e75565b90969095509350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60005b838110156142eb5781810151838201526020016142d3565b50506000910152565b6000815180845261430c8160208601602086016142d0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b828152604060208201526000612ecb60408301846142f4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610a4157610a41614357565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036143ca576143ca614357565b5060010190565b81810381811115610a4157610a41614357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee183360301811261444757600080fd5b9190910192915050565b8183823760009101908152919050565b8215158152604060208201526000612ecb60408301846142f4565b6000808585111561448c57600080fd5b8386111561449957600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081358181169160148510156144e65780818660140360031b1b83161692505b505092915050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b602081526000612ecb6020830184866144ee565b60006020828403121561455d57600080fd5b815161370f81613d66565b65ffffffffffff81811683821601908082111561458757614587614357565b5092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261444757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126145f757600080fd5b83018035915067ffffffffffffffff82111561461257600080fd5b6020019150600581901b3603821315613eb757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261465f57600080fd5b83018035915067ffffffffffffffff82111561467a57600080fd5b602001915036819003821315613eb757600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126146c457600080fd5b830160208101925035905067ffffffffffffffff8111156146e457600080fd5b803603821315613eb757600080fd5b600061012061471f8461470585613d88565b73ffffffffffffffffffffffffffffffffffffffff169052565b60208301356020850152614736604084018461468f565b82604087015261474983870182846144ee565b9250505061475a606084018461468f565b858303606087015261476d8382846144ee565b925050506080830135608085015260a083013560a085015260c083013560c085015261479c60e084018461468f565b85830360e08701526147af8382846144ee565b925050506101006147c28185018561468f565b868403838801526147d48482846144ee565b979650505050505050565b6040808252810184905260006060600586901b830181019083018783805b8981101561487f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087860301845282357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18c360301811261485d578283fd5b614869868d83016146f3565b95505060209384019392909201916001016147fd565b5050505082810360208401526147d48185876144ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000600386106148fe577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8582526080602083015261491560808301866142f4565b6040830194909452506060015292915050565b60208152600061370f60208301846142f4565b60608152600061494f6060830187896144ee565b73ffffffffffffffffffffffffffffffffffffffff86166020840152828103604084015261497e8185876144ee565b98975050505050505050565b600060033d11156149a35760046000803e5060005160e01c5b90565b600060443d10156149b45790565b6040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc803d016004833e81513d67ffffffffffffffff8160248401118184111715614a0257505050505090565b8285019150815181811115614a1a5750505050505090565b843d8701016020828501011115614a345750505050505090565b614a4360208286010187613cab565b509095945050505050565b604081526000614a6160408301856146f3565b90508260208301529392505050565b8051805173ffffffffffffffffffffffffffffffffffffffff1683526020810151602084015260408101516040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e0810151614aef60e085018273ffffffffffffffffffffffffffffffffffffffff169052565b5061010081810151908401526101209081015190830152602081015161014083015260408101516101608301526060810151610180830152608001516101a090910152565b6000610200808352614b48818401876142f4565b9050614b576020840186614a70565b8281036101e0840152614b6a81856142f4565b9695505050505050565b6000610200808352614b8981840187896144ee565b9050614b986020840186614a70565b8281036101e08401526147d481856142f4565b600082516144478184602087016142d0565b600080600060608486031215614bd257600080fd5b8351925060208401519150604084015190509250925092565b606081526000614bfe60608301866146f3565b60208301949094525060400152919050565b600060208284031215614c2257600080fd5b5051919050565b82815260606020820152600d60608201527f4141323320726576657274656400000000000000000000000000000000000000608082015260a060408201526000612ecb60a08301846142f4565b60008060408385031215614c8957600080fd5b825167ffffffffffffffff811115614ca057600080fd5b8301601f81018513614cb157600080fd5b8051614cbc81613d20565b604051614cc98282613cab565b828152876020848601011115614cde57600080fd5b614cef8360208301602087016142d0565b6020969096015195979596505050505050565b82815260606020820152600d60608201527f4141333320726576657274656400000000000000000000000000000000000000608082015260a060408201526000612ecb60a08301846142f4565b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000081358181169160108510156144e65760109490940360031b84901b169092169291505056fea2646970667358221220cd7965683afa94170eaa51ceebadcfd731e9b31f39f75621861d25875bde7f2a64736f6c63430008170033\";\n","import {\n Address,\n ExtractAbiItem,\n Hex,\n RpcTransactionReceipt,\n RpcUserOperationReceipt,\n decodeEventLog,\n encodeEventTopics,\n numberToHex,\n parseEventLogs,\n zeroAddress,\n} from \"viem\";\nimport { entryPoint07Abi } from \"viem/account-abstraction\";\n\nconst userOperationRevertReasonAbi = [\n entryPoint07Abi.find(\n (item): item is ExtractAbiItem<typeof entryPoint07Abi, \"UserOperationRevertReason\"> =>\n item.type === \"event\" && item.name === \"UserOperationRevertReason\",\n )!,\n] as const;\n\nconst userOperationEventTopic = encodeEventTopics({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n});\n\nexport function getUserOperationReceipt(userOpHash: Hex, receipt: RpcTransactionReceipt): RpcUserOperationReceipt {\n const userOperationRevertReasonTopicEvent = encodeEventTopics({\n abi: userOperationRevertReasonAbi,\n })[0];\n\n let entryPoint: Address = zeroAddress;\n let revertReason = undefined;\n\n let startIndex = -1;\n let endIndex = -1;\n receipt.logs.forEach((log, index) => {\n if (log?.topics[0] === userOperationEventTopic[0]) {\n // process UserOperationEvent\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. save as end of logs array\n endIndex = index;\n entryPoint = log.address;\n } else if (endIndex === -1) {\n // it's a different hash. remember it as beginning index, but only if we didn't find our end index yet.\n startIndex = index;\n }\n }\n\n if (log?.topics[0] === userOperationRevertReasonTopicEvent) {\n // process UserOperationRevertReason\n if (log.topics[1] === userOpHash) {\n // it's our userOpHash. capture revert reason.\n const decodedLog = decodeEventLog({\n abi: userOperationRevertReasonAbi,\n data: log.data,\n topics: log.topics,\n });\n\n revertReason = decodedLog.args.revertReason;\n }\n }\n });\n\n if (endIndex === -1) {\n throw new Error(\"fatal: no UserOperationEvent in logs\");\n }\n\n const logs = receipt.logs.slice(startIndex + 1, endIndex);\n\n const userOperationEvent = parseEventLogs({\n abi: entryPoint07Abi,\n eventName: \"UserOperationEvent\",\n args: {\n userOpHash,\n },\n logs: receipt.logs,\n })[0]!;\n\n let paymaster: Address | undefined = userOperationEvent.args.paymaster;\n paymaster = paymaster === zeroAddress ? undefined : paymaster;\n\n return {\n userOpHash,\n entryPoint,\n sender: userOperationEvent.args.sender,\n nonce: numberToHex(userOperationEvent.args.nonce),\n paymaster,\n actualGasUsed: numberToHex(userOperationEvent.args.actualGasUsed),\n actualGasCost: numberToHex(userOperationEvent.args.actualGasCost),\n success: userOperationEvent.args.success,\n reason: revertReason,\n logs,\n receipt,\n };\n}\n","import { Chain, fallback, http, Transport, webSocket } from \"viem\";\n\nexport function chainTransport(rpcUrls: Chain[\"rpcUrls\"][string]): Transport | undefined {\n const webSocketUrl = rpcUrls?.webSocket?.[0];\n const httpUrl = rpcUrls?.http[0];\n\n if (webSocketUrl) {\n return httpUrl ? fallback([webSocket(webSocketUrl), http(httpUrl)]) : webSocket(webSocketUrl);\n }\n\n if (httpUrl) {\n return http(httpUrl);\n }\n}\n","import { Chain, EIP1193RequestFn, Hex, http, Transport } from \"viem\";\nimport { chainTransport } from \"./chainTransport\";\nimport { estimateUserOperationGas } from \"./methods/estimateUserOperationGas\";\n\ntype AltoSendUserOperationResultuest = {\n txHash: Hex;\n userOpHash: Hex;\n};\n\ntype AltoOptions<transport extends Transport> = {\n /** alto-compatible transport */\n altoTransport: transport;\n /** fallback transport for all other RPC methods */\n fallbackDefaultTransport: Transport;\n};\n\nexport function alto<const altoTransport extends Transport>(transports?: AltoOptions<altoTransport>): altoTransport {\n return ((opts) => {\n const { altoTransport, fallbackDefaultTransport } = transports ?? getDefaultTransports(opts.chain);\n\n const { request: altoRequest, ...rest } = altoTransport(opts);\n const { request: defaultRequest } = fallbackDefaultTransport(opts);\n\n return {\n ...rest,\n // TODO: type `request` so we don't have to cast\n async request(req): ReturnType<EIP1193RequestFn> {\n if (req.method === \"eth_estimateUserOperationGas\") {\n console.log(\"estimating user operation gas via alto\", req);\n return await estimateUserOperationGas({\n request: defaultRequest,\n params: req.params as never,\n });\n }\n\n if (req.method === \"eth_sendUserOperation\") {\n console.log(\"sending user operation via pimlico_sendUserOperationNow\", req);\n const result = (await altoRequest({\n ...req,\n method: \"pimlico_sendUserOperationNow\",\n })) as AltoSendUserOperationResultuest;\n console.log(\"pimlico_sendUserOperationNow\", result);\n return result.userOpHash;\n }\n\n return await altoRequest(req);\n },\n };\n }) as altoTransport;\n}\n\nfunction getDefaultTransports(chain?: Chain): AltoOptions<Transport> {\n if (!chain) {\n throw new Error(\"No chain or transports provided\");\n }\n\n const altoTransport = chainTransport(chain.rpcUrls.alto);\n if (!altoTransport) {\n throw new Error(\"Provided chain does not support alto\");\n }\n const fallbackDefaultTransport = http();\n if (!fallbackDefaultTransport) {\n throw new Error(\"Failed to create fallback http transport\");\n }\n\n return {\n altoTransport,\n fallbackDefaultTransport,\n };\n}\n"],"mappings":"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","names":["debug","debug","sendTransaction","waitForTransactionReceipt","getCode","getCode","debug","deployer","debug","sendTransaction","waitForTransactionReceipt","error","getCreate2Address","getCreate2Address","http","zeroAddress","http","http","getDefaultTransports","http"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@latticexyz/common",
|
|
3
|
-
"version": "2.2.24-
|
|
3
|
+
"version": "2.2.24-6a0e2c810ee2fde712b53145fa45d958ea9b77ec",
|
|
4
4
|
"description": "Common low level logic shared between packages",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"p-retry": "^5.1.2",
|
|
70
70
|
"prettier": "3.2.5",
|
|
71
71
|
"prettier-plugin-solidity": "1.3.1",
|
|
72
|
-
"@latticexyz/schema-type": "2.2.24-
|
|
72
|
+
"@latticexyz/schema-type": "2.2.24-6a0e2c810ee2fde712b53145fa45d958ea9b77ec"
|
|
73
73
|
},
|
|
74
74
|
"devDependencies": {
|
|
75
75
|
"@types/debug": "^4.1.7",
|