From bc4464c4bd8d7f071b36a7f21c8c09cd9b4b9ce4 Mon Sep 17 00:00:00 2001 From: Monte Lai Date: Fri, 16 Feb 2024 18:36:24 +0800 Subject: [PATCH 1/3] feat: update patch useroperation to return optional gas limit values --- docs/diagrams/user_operation_signing.puml | 3 +++ docs/evm_methods_userOp.md | 14 +++++++++++++- src/eth/erc4337/types.ts | 5 ++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/docs/diagrams/user_operation_signing.puml b/docs/diagrams/user_operation_signing.puml index 9987446cf..cad269575 100644 --- a/docs/diagrams/user_operation_signing.puml +++ b/docs/diagrams/user_operation_signing.puml @@ -77,6 +77,9 @@ MetaMask -> Snap ++: ""patchUserOperation({""\n\ Snap --> MetaMask --: ""{""\n\ "" paymasterAndData?,""\n\ +"" callGasLimit?,""\n\ +"" verificationGasLimit?,""\n\ +"" preVerificationGas?,""\n\ ""}"" MetaMask -> MetaMask: Update ""paymasterAndData"" and\n\ diff --git a/docs/evm_methods_userOp.md b/docs/evm_methods_userOp.md index 5f766d891..70ab95a0c 100644 --- a/docs/evm_methods_userOp.md +++ b/docs/evm_methods_userOp.md @@ -150,6 +150,15 @@ Patch _some_ allowed properties of an UserOperation. - `paymasterAndData` - Type: `string` - Pattern: `^0x[0-9a-f]*$` + - `callGasLimit` (optional) + - Type: `string` + - Pattern: `^0x[0-9a-f]*$` + - `preverificationGas` (optional) + - Type: `string` + - Pattern: `^0x[0-9a-f]*$` + - `verificationGasLimit` (optional) + - Type: `string` + - Pattern: `^0x[0-9a-f]*$` ### Example @@ -180,7 +189,10 @@ Patch _some_ allowed properties of an UserOperation. ```json { - "paymasterAndData": "0x952514d7cBCB495EACeB86e02154921401dB0Cd9dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000779b3fbb00000000000000006565b267000000000000000000000000000000000000000029195b31a9b1c6ccdeff53e359ebbcd5f075a93c1aaed93302e5fde5faf8047028b296b8a3fa4e22b063af5069ae9f656736ffda0ee090c0311155722b905f781b" + "paymasterAndData": "0x952514d7cBCB495EACeB86e02154921401dB0Cd9dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000779b3fbb00000000000000006565b267000000000000000000000000000000000000000029195b31a9b1c6ccdeff53e359ebbcd5f075a93c1aaed93302e5fde5faf8047028b296b8a3fa4e22b063af5069ae9f656736ffda0ee090c0311155722b905f781b", + "callGasLimit": "0x58a83", + "verificationGasLimit": "0xe8c4", + "preVerificationGas": "0xc57c" } ``` diff --git a/src/eth/erc4337/types.ts b/src/eth/erc4337/types.ts index 4bd3f3c59..95437dc81 100644 --- a/src/eth/erc4337/types.ts +++ b/src/eth/erc4337/types.ts @@ -1,4 +1,4 @@ -import { string, type Infer } from 'superstruct'; +import { optional, string, type Infer } from 'superstruct'; import { exactOptional, object } from '../../superstruct'; import { EthAddressStruct, EthBytesStruct, EthUint256Struct } from '../types'; @@ -66,6 +66,9 @@ export type EthBaseUserOperation = Infer; export const EthUserOperationPatchStruct = object({ paymasterAndData: EthBytesStruct, + callDataLimit: optional(EthUint256Struct), + verificationGasLimit: optional(EthUint256Struct), + preVerificationGas: optional(EthUint256Struct), }); export type EthUserOperationPatch = Infer; From e01172ef219deb5103d76bc57cef2351357d09c4 Mon Sep 17 00:00:00 2001 From: Monte Lai Date: Tue, 20 Feb 2024 17:22:26 +0800 Subject: [PATCH 2/3] fix: pattern for gas --- docs/evm_methods_userOp.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/evm_methods_userOp.md b/docs/evm_methods_userOp.md index 70ab95a0c..9219336b1 100644 --- a/docs/evm_methods_userOp.md +++ b/docs/evm_methods_userOp.md @@ -152,13 +152,13 @@ Patch _some_ allowed properties of an UserOperation. - Pattern: `^0x[0-9a-f]*$` - `callGasLimit` (optional) - Type: `string` - - Pattern: `^0x[0-9a-f]*$` - - `preverificationGas` (optional) + - Pattern: `^0x([1-9a-f][0-9a-f]*|0)$` + - `preVerificationGas` (optional) - Type: `string` - - Pattern: `^0x[0-9a-f]*$` + - Pattern: `^0x([1-9a-f][0-9a-f]*|0)$` - `verificationGasLimit` (optional) - Type: `string` - - Pattern: `^0x[0-9a-f]*$` + - Pattern: `^0x([1-9a-f][0-9a-f]*|0)$` ### Example From 6392c43956b2b40a1fb37d5441e4b2607a959b63 Mon Sep 17 00:00:00 2001 From: Monte Lai Date: Tue, 20 Feb 2024 17:22:33 +0800 Subject: [PATCH 3/3] fix: use exactOptional --- src/eth/erc4337/types.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/eth/erc4337/types.ts b/src/eth/erc4337/types.ts index 95437dc81..75afdc037 100644 --- a/src/eth/erc4337/types.ts +++ b/src/eth/erc4337/types.ts @@ -1,4 +1,4 @@ -import { optional, string, type Infer } from 'superstruct'; +import { string, type Infer } from 'superstruct'; import { exactOptional, object } from '../../superstruct'; import { EthAddressStruct, EthBytesStruct, EthUint256Struct } from '../types'; @@ -66,9 +66,9 @@ export type EthBaseUserOperation = Infer; export const EthUserOperationPatchStruct = object({ paymasterAndData: EthBytesStruct, - callDataLimit: optional(EthUint256Struct), - verificationGasLimit: optional(EthUint256Struct), - preVerificationGas: optional(EthUint256Struct), + callGasLimit: exactOptional(EthUint256Struct), + verificationGasLimit: exactOptional(EthUint256Struct), + preVerificationGas: exactOptional(EthUint256Struct), }); export type EthUserOperationPatch = Infer;