@pimlico/mock-paymaster 0.0.5 → 0.0.7
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/CHANGELOG.md +12 -0
- package/_cjs/helpers/erc20-utils.js +6 -17
- package/_cjs/helpers/erc20-utils.js.map +1 -1
- package/_cjs/helpers/schema.js +7 -7
- package/_cjs/helpers/schema.js.map +1 -1
- package/_cjs/index.js +5 -6
- package/_cjs/index.js.map +1 -1
- package/_cjs/relay.js +15 -7
- package/_cjs/relay.js.map +1 -1
- package/_cjs/setup.js +118 -0
- package/_cjs/setup.js.map +1 -0
- package/_cjs/singletonPaymasters.js +1 -64
- package/_cjs/singletonPaymasters.js.map +1 -1
- package/_esm/helpers/erc20-utils.js +4 -14
- package/_esm/helpers/erc20-utils.js.map +1 -1
- package/_esm/helpers/schema.js +7 -7
- package/_esm/helpers/schema.js.map +1 -1
- package/_esm/index.js +3 -5
- package/_esm/index.js.map +1 -1
- package/_esm/relay.js +21 -9
- package/_esm/relay.js.map +1 -1
- package/_esm/setup.js +120 -0
- package/_esm/setup.js.map +1 -0
- package/_esm/singletonPaymasters.js +3 -70
- package/_esm/singletonPaymasters.js.map +1 -1
- package/_types/helpers/erc20-utils.d.ts +2 -1
- package/_types/helpers/erc20-utils.d.ts.map +1 -1
- package/_types/helpers/schema.d.ts +569 -569
- package/_types/helpers/schema.d.ts.map +1 -1
- package/_types/index.d.ts +1 -2
- package/_types/index.d.ts.map +1 -1
- package/_types/relay.d.ts.map +1 -1
- package/_types/setup.d.ts +11 -0
- package/_types/setup.d.ts.map +1 -0
- package/_types/singletonPaymasters.d.ts +1 -5
- package/_types/singletonPaymasters.d.ts.map +1 -1
- package/helpers/erc20-utils.ts +4 -17
- package/helpers/schema.ts +7 -7
- package/index.ts +3 -9
- package/package.json +5 -10
- package/relay.ts +26 -14
- package/setup.ts +163 -0
- package/singletonPaymasters.ts +3 -94
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../helpers/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,KAAK,KAAK,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAA;AAE/C,oBAAY,gBAAgB;IACxB,aAAa,SAAS;IACtB,mBAAmB,SAAS;IAC5B,qBAAqB,SAAS;CACjC;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBAC/B,GAAG,CAAC,EAAE,MAAM;CAO3B;AAED,qBAAa,QAAS,SAAQ,KAAK;IAI3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO;gBAFtB,GAAG,EAAE,MAAM,EACF,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,IAAI,GAAE,OAAmB;CAIzC;AAKD,eAAO,MAAM,aAAa,kDAGc,CAAA;AAExC,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../helpers/schema.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,KAAK,KAAK,IAAI,QAAQ,EAAE,MAAM,KAAK,CAAA;AAE/C,oBAAY,gBAAgB;IACxB,aAAa,SAAS;IACtB,mBAAmB,SAAS;IAC5B,qBAAqB,SAAS;CACjC;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBAC/B,GAAG,CAAC,EAAE,MAAM;CAO3B;AAED,qBAAa,QAAS,SAAQ,KAAK;IAI3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO;gBAFtB,GAAG,EAAE,MAAM,EACF,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,IAAI,GAAE,OAAmB;CAIzC;AAKD,eAAO,MAAM,aAAa,kDAGc,CAAA;AAExC,eAAO,MAAM,eAAe,qLAiBN,CAAA;AAEtB,eAAO,MAAM,aAAa,kDAGuB,CAAA;AAuBjD,QAAA,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0B9B,CAAA;AAEN,QAAA,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyC9B,CAAA;AAEN,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAMnB,CAAA;AAEb,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;EAOb,CAAA;AAEb,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DAG7C,CAAA;AA8FF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAYzB,CAAA;AAEN,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAYzC,CAAA;AAEN,eAAO,MAAM,2BAA2B;;;;;;iPAMtC,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAC7E,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAC7E,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC,CAAA"}
|
package/_types/index.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { erc20Address, sudoMintTokens } from "./helpers/erc20-utils.js";
|
|
2
1
|
export declare const paymaster: import("prool").DefineInstanceReturnType<{}, {
|
|
3
2
|
anvilRpc: string;
|
|
4
3
|
port: number;
|
|
5
4
|
altoRpc: string;
|
|
6
5
|
host?: string;
|
|
7
6
|
}>;
|
|
8
|
-
export { erc20Address, sudoMintTokens };
|
|
7
|
+
export { erc20Address, sudoMintTokens } from "./helpers/erc20-utils.js";
|
|
9
8
|
//# sourceMappingURL=index.d.ts.map
|
package/_types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,SAAS;cAMH,MAAM;UAAQ,MAAM;aAAW,MAAM;WAAS,MAAM;EA6CtE,CAAA;AAED,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA"}
|
package/_types/relay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../relay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAEH,KAAK,OAAO,EACZ,KAAK,OAAO,EAEZ,KAAK,KAAK,EAGV,KAAK,SAAS,EACd,KAAK,YAAY,EAGpB,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../relay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC3D,OAAO,EAEH,KAAK,OAAO,EACZ,KAAK,OAAO,EAEZ,KAAK,KAAK,EAGV,KAAK,SAAS,EACd,KAAK,YAAY,EAGpB,MAAM,MAAM,CAAA;AAuVb,eAAO,MAAM,gBAAgB,GAAI,wCAI9B;IACC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;CAC3D,MACiB,SAAS,cAAc,EAAE,QAAQ,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgD9D,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Address } from "viem";
|
|
2
|
+
export declare const deployPaymasters: ({ anvilRpc, paymasterSigner }: {
|
|
3
|
+
anvilRpc: string;
|
|
4
|
+
paymasterSigner: Address;
|
|
5
|
+
}) => Promise<void>;
|
|
6
|
+
export declare const deployErc20Token: (anvilRpc: string) => Promise<void>;
|
|
7
|
+
export declare const setup: ({ anvilRpc, paymasterSigner }: {
|
|
8
|
+
anvilRpc: string;
|
|
9
|
+
paymasterSigner: Address;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAmC,MAAM,MAAM,CAAA;AAuBpE,eAAO,MAAM,gBAAgB,GAAU,+BAGpC;IACC,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,OAAO,CAAA;CAC3B,kBA0GA,CAAA;AAED,eAAO,MAAM,gBAAgB,GAAU,UAAU,MAAM,kBAWtD,CAAA;AAED,eAAO,MAAM,KAAK,GAAU,+BAGzB;IACC,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,EAAE,OAAO,CAAA;CAC3B,kBAMA,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Account, type Address, type Chain, type Hex, type PublicClient, type Transport, type WalletClient } from "viem";
|
|
2
2
|
import { type UserOperation } from "viem/account-abstraction";
|
|
3
|
-
import {
|
|
3
|
+
import type { PaymasterMode } from "./helpers/utils.js";
|
|
4
4
|
export declare const getDummyPaymasterData: ({ is06, paymaster, paymasterMode }: {
|
|
5
5
|
is06: boolean;
|
|
6
6
|
paymaster: Address;
|
|
@@ -26,8 +26,4 @@ export declare const getSignedPaymasterData: ({ publicClient, signer, userOp, pa
|
|
|
26
26
|
paymasterData: `0x${string}`;
|
|
27
27
|
paymasterAndData?: undefined;
|
|
28
28
|
}>;
|
|
29
|
-
export declare const deployPaymasters: ({ anvilRpc, paymasterSigner }: {
|
|
30
|
-
anvilRpc: string;
|
|
31
|
-
paymasterSigner: Address;
|
|
32
|
-
}) => Promise<void>;
|
|
33
29
|
//# sourceMappingURL=singletonPaymasters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singletonPaymasters.d.ts","sourceRoot":"","sources":["../singletonPaymasters.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"singletonPaymasters.d.ts","sourceRoot":"","sources":["../singletonPaymasters.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,GAAG,EACR,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,YAAY,EAKpB,MAAM,MAAM,CAAA;AACb,OAAO,EACH,KAAK,aAAa,EAErB,MAAM,0BAA0B,CAAA;AAMjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,eAAO,MAAM,qBAAqB,GAAI,oCAInC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,aAAa,CAAA;CAAE,KAChE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,GAAG,CAAA;CAAE,GAC1C;IAAE,gBAAgB,EAAE,GAAG,CAAA;CAoE5B,CAAA;AAED,eAAO,MAAM,sBAAsB,GAAU,4DAM1C;IACC,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,CAAA;IAC/C,MAAM,EAAE,aAAa,CAAA;IACrB,SAAS,EAAE,OAAO,CAAA;IAClB,aAAa,EAAE,aAAa,CAAA;CAC/B;;;;;;;;EAqHA,CAAA"}
|
package/helpers/erc20-utils.ts
CHANGED
|
@@ -19,12 +19,12 @@ import {
|
|
|
19
19
|
import { privateKeyToAccount } from "viem/accounts"
|
|
20
20
|
import { getChain, getPublicClient } from "./utils.js"
|
|
21
21
|
|
|
22
|
-
const erc20Bytecode = concat([
|
|
22
|
+
export const erc20Bytecode = concat([
|
|
23
23
|
"0x60a060405234801561001057600080fd5b50604051610ff0380380610ff083398101604081905261002f9161022c565b6040518060400160405280600981526020016805465737445524332360bc1b8152506040518060400160405280600381526020016205432360ec1b815250816003908161007c919061034d565b506004610089828261034d565b5050506100a63369d3c21bcecceda10000006100b160201b60201c565b60ff166080526104a3565b6001600160a01b0382166100e457600060405163ec442f0560e01b81526004016100db9190610430565b60405180910390fd5b6100f0600083836100f4565b5050565b6001600160a01b03831661011f5780600260008282546101149190610454565b9091555061017e9050565b6001600160a01b0383166000908152602081905260409020548181101561015f5783818360405163391434e360e21b81526004016100db9392919061046d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661019a576002805482900390556101b9565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101fc9190610495565b60405180910390a3505050565b60ff8116811461021857600080fd5b50565b805161022681610209565b92915050565b60006020828403121561024157610241600080fd5b600061024d848461021b565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061029557607f821691505b6020821081036102a7576102a761026b565b50919050565b60006102266102b98381565b90565b6102c5836102ad565b815460001960089490940293841b1916921b91909117905550565b60006102ed8184846102bc565b505050565b818110156100f0576103056000826102e0565b6001016102f2565b601f8211156102ed576000818152602090206020601f850104810160208510156103345750805b6103466020601f8601048301826102f2565b5050505050565b81516001600160401b0381111561036657610366610255565b6103708254610281565b61037b82828561030d565b6020601f8311600181146103af57600084156103975750858201515b600019600886021c1981166002860217865550610408565b600085815260208120601f198616915b828110156103df57888501518255602094850194600190920191016103bf565b868310156103fb5784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60006001600160a01b038216610226565b61042a81610410565b82525050565b602081016102268284610421565b634e487b7160e01b600052601160045260246000fd5b808201808211156102265761022661043e565b8061042a565b6060810161047b8286610421565b6104886020830185610467565b61024d6040830184610467565b602081016102268284610467565b608051610b326104be60003960006101650152610b326000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063313ce56711610081578063a9059cbb1161005b578063a9059cbb146101cf578063dd62ed3e146101e2578063fb4dcefa1461022857600080fd5b8063313ce5671461016357806370a082311461019157806395d89b41146101c757600080fd5b806318160ddd116100b257806318160ddd1461012c57806323b872dd1461013d5780632d688ca81461015057600080fd5b806305ea5c22146100d957806306fdde03146100ee578063095ea7b31461010c575b600080fd5b6100ec6100e7366004610868565b61023b565b005b6100f661024b565b604051610103919061092c565b60405180910390f35b61011f61011a366004610944565b6102dd565b604051610103919061098b565b6002545b604051610103919061099f565b61011f61014b366004610868565b6102f7565b6100ec61015e366004610944565b61031b565b7f000000000000000000000000000000000000000000000000000000000000000060405161010391906109b6565b61013061019f3660046109c4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100f6610329565b61011f6101dd366004610944565b610338565b6101306101f03660046109ed565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6100ec6102363660046109ed565b610346565b61024683838361037c565b505050565b60606003805461025a90610a4f565b80601f016020809104026020016040519081016040528092919081815260200182805461028690610a4f565b80156102d35780601f106102a8576101008083540402835291602001916102d3565b820191906000526020600020905b8154815290600101906020018083116102b657829003601f168201915b5050505050905090565b6000336102eb81858561037c565b60019150505b92915050565b600033610305858285610389565b610310858585610441565b506001949350505050565b61032582826104ec565b5050565b60606004805461025a90610a4f565b6000336102eb818585610441565b61032582826103778573ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610441565b6102468383836001610548565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461043b578181101561042c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161042393929190610a84565b60405180910390fd5b61043b84848484036000610548565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166104915760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b73ffffffffffffffffffffffffffffffffffffffff82166104e15760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b61024683838361068e565b73ffffffffffffffffffffffffffffffffffffffff821661053c5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b6103256000838361068e565b73ffffffffffffffffffffffffffffffffffffffff84166105985760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b73ffffffffffffffffffffffffffffffffffffffff83166105e85760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561043b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610680919061099f565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166106c65780600260008282546106bb9190610ae9565b909155506107589050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561072c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161042393929190610a84565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610781576002805482900390556107ad565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161080a919061099f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff82166102f1565b61083e81610817565b811461084957600080fd5b50565b80356102f181610835565b8061083e565b80356102f181610857565b60008060006060848603121561088057610880600080fd5b600061088c868661084c565b935050602061089d8682870161084c565b92505060406108ae8682870161085d565b9150509250925092565b60005b838110156108d35781810151838201526020016108bb565b50506000910152565b60006108e6825190565b8084526020840193506108fd8185602086016108b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b6020808252810161093d81846108dc565b9392505050565b6000806040838503121561095a5761095a600080fd5b6000610966858561084c565b92505060206109778582860161085d565b9150509250929050565b8015155b82525050565b602081016102f18284610981565b80610985565b602081016102f18284610999565b60ff8116610985565b602081016102f182846109ad565b6000602082840312156109d9576109d9600080fd5b60006109e5848461084c565b949350505050565b60008060408385031215610a0357610a03600080fd5b6000610a0f858561084c565b92505060206109778582860161084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600281046001821680610a6357607f821691505b602082108103610a7557610a75610a20565b50919050565b61098581610817565b60608101610a928286610a7b565b610a9f6020830185610999565b6109e56040830184610999565b602081016102f18284610a7b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156102f1576102f1610aba56fea2646970667358221220d40f68e247510ec8b7876d327ac47b949de248d0626aaf2670151c5e84ee6b4a64736f6c634300081a0033",
|
|
24
24
|
pad(toHex(18n)) // constructor args (token_decimals)
|
|
25
25
|
])
|
|
26
26
|
|
|
27
|
-
const create2Salt =
|
|
27
|
+
export const create2Salt =
|
|
28
28
|
"0x0000000000000000000000000000000000000000000000000000000000000000"
|
|
29
29
|
|
|
30
30
|
export const getPaymasterUtilityWallet = async (
|
|
@@ -38,8 +38,8 @@ export const getPaymasterUtilityWallet = async (
|
|
|
38
38
|
const publicClient = await getPublicClient(anvilRpc)
|
|
39
39
|
const balance = await publicClient.getBalance({ address: account.address })
|
|
40
40
|
|
|
41
|
-
//
|
|
42
|
-
if (balance
|
|
41
|
+
// Ensure paymaster deployer has enough balance
|
|
42
|
+
if (balance < parseEther("1000")) {
|
|
43
43
|
// Create test client for setting balance
|
|
44
44
|
const testClient = createTestClient({
|
|
45
45
|
mode: "anvil",
|
|
@@ -62,19 +62,6 @@ export const getPaymasterUtilityWallet = async (
|
|
|
62
62
|
return walletClient
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
export const deployErc20Token = async (anvilRpc: string) => {
|
|
66
|
-
const publicClient = await getPublicClient(anvilRpc)
|
|
67
|
-
|
|
68
|
-
if ((await publicClient.getCode({ address: erc20Address })) === undefined) {
|
|
69
|
-
const walletClient = await getPaymasterUtilityWallet(anvilRpc)
|
|
70
|
-
|
|
71
|
-
await walletClient.sendTransaction({
|
|
72
|
-
to: "0x4e59b44847b379578588920ca78fbf26c0b4956c",
|
|
73
|
-
data: concat([create2Salt, erc20Bytecode])
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
65
|
export const tokenBalanceOf = async (holder: Address, anvilRpc: string) => {
|
|
79
66
|
const publicClient = await getPublicClient(anvilRpc)
|
|
80
67
|
|
package/helpers/schema.ts
CHANGED
|
@@ -53,7 +53,7 @@ export const hexNumberSchema = z
|
|
|
53
53
|
})
|
|
54
54
|
}
|
|
55
55
|
})
|
|
56
|
-
.transform(
|
|
56
|
+
.transform(BigInt)
|
|
57
57
|
|
|
58
58
|
export const hexDataSchema = z
|
|
59
59
|
.string()
|
|
@@ -63,21 +63,21 @@ export const hexDataSchema = z
|
|
|
63
63
|
const signedAuthorizationSchema = z.union([
|
|
64
64
|
z.object({
|
|
65
65
|
contractAddress: addressSchema,
|
|
66
|
-
chainId: hexNumberSchema.transform(
|
|
67
|
-
nonce: hexNumberSchema.transform(
|
|
66
|
+
chainId: hexNumberSchema.transform(Number),
|
|
67
|
+
nonce: hexNumberSchema.transform(Number),
|
|
68
68
|
r: hexDataSchema.transform((val) => val as Hex),
|
|
69
69
|
s: hexDataSchema.transform((val) => val as Hex),
|
|
70
70
|
v: hexNumberSchema.optional(),
|
|
71
|
-
yParity: hexNumberSchema.transform(
|
|
71
|
+
yParity: hexNumberSchema.transform(Number)
|
|
72
72
|
}),
|
|
73
73
|
z.object({
|
|
74
74
|
address: addressSchema,
|
|
75
|
-
chainId: hexNumberSchema.transform(
|
|
76
|
-
nonce: hexNumberSchema.transform(
|
|
75
|
+
chainId: hexNumberSchema.transform(Number),
|
|
76
|
+
nonce: hexNumberSchema.transform(Number),
|
|
77
77
|
r: hexDataSchema.transform((val) => val as Hex),
|
|
78
78
|
s: hexDataSchema.transform((val) => val as Hex),
|
|
79
79
|
v: hexNumberSchema.optional(),
|
|
80
|
-
yParity: hexNumberSchema.transform(
|
|
80
|
+
yParity: hexNumberSchema.transform(Number)
|
|
81
81
|
})
|
|
82
82
|
])
|
|
83
83
|
|
package/index.ts
CHANGED
|
@@ -3,14 +3,9 @@ import Fastify from "fastify"
|
|
|
3
3
|
import { defineInstance } from "prool"
|
|
4
4
|
import { http, createWalletClient } from "viem"
|
|
5
5
|
import { privateKeyToAccount } from "viem/accounts"
|
|
6
|
-
import {
|
|
7
|
-
deployErc20Token,
|
|
8
|
-
erc20Address,
|
|
9
|
-
sudoMintTokens
|
|
10
|
-
} from "./helpers/erc20-utils.js"
|
|
11
6
|
import { getChain } from "./helpers/utils.js"
|
|
12
7
|
import { createRpcHandler } from "./relay.js"
|
|
13
|
-
import {
|
|
8
|
+
import { setup } from "./setup.js"
|
|
14
9
|
|
|
15
10
|
export const paymaster = defineInstance(
|
|
16
11
|
({
|
|
@@ -35,11 +30,10 @@ export const paymaster = defineInstance(
|
|
|
35
30
|
transport: http(anvilRpc)
|
|
36
31
|
})
|
|
37
32
|
|
|
38
|
-
await
|
|
33
|
+
await setup({
|
|
39
34
|
anvilRpc,
|
|
40
35
|
paymasterSigner: paymasterSigner.account.address
|
|
41
36
|
})
|
|
42
|
-
await deployErc20Token(anvilRpc)
|
|
43
37
|
|
|
44
38
|
app.register(cors, {
|
|
45
39
|
origin: "*",
|
|
@@ -66,4 +60,4 @@ export const paymaster = defineInstance(
|
|
|
66
60
|
}
|
|
67
61
|
)
|
|
68
62
|
|
|
69
|
-
export { erc20Address, sudoMintTokens }
|
|
63
|
+
export { erc20Address, sudoMintTokens } from "./helpers/erc20-utils.js"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pimlico/mock-paymaster",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"author": "Pimlico",
|
|
5
5
|
"homepage": "https://docs.pimlico.io/permissionless",
|
|
6
6
|
"repository": "github:pimlicolabs/permissionless.js",
|
|
@@ -11,13 +11,7 @@
|
|
|
11
11
|
"type": "module",
|
|
12
12
|
"sideEffects": false,
|
|
13
13
|
"description": "A utility library that allows you to create a mock-paymaster instance with Prool",
|
|
14
|
-
"keywords": [
|
|
15
|
-
"ethereum",
|
|
16
|
-
"erc-4337",
|
|
17
|
-
"eip-4337",
|
|
18
|
-
"paymaster",
|
|
19
|
-
"prool"
|
|
20
|
-
],
|
|
14
|
+
"keywords": ["ethereum", "erc-4337", "eip-4337", "paymaster", "prool"],
|
|
21
15
|
"license": "MIT",
|
|
22
16
|
"exports": {
|
|
23
17
|
".": {
|
|
@@ -28,11 +22,12 @@
|
|
|
28
22
|
},
|
|
29
23
|
"peerDependencies": {
|
|
30
24
|
"viem": "^2.28.1",
|
|
31
|
-
"prool": "^0.0.
|
|
25
|
+
"prool": "^0.0.25"
|
|
32
26
|
},
|
|
33
27
|
"dependencies": {
|
|
34
28
|
"@fastify/cors": "^8.5.0",
|
|
35
29
|
"fastify": "^4.28.1",
|
|
36
|
-
"zod": "^3.24.2"
|
|
30
|
+
"zod": "^3.24.2",
|
|
31
|
+
"zod-validation-error": "^1.3.0"
|
|
37
32
|
}
|
|
38
33
|
}
|
package/relay.ts
CHANGED
|
@@ -175,7 +175,7 @@ const handleMethod = async ({
|
|
|
175
175
|
getSingletonPaymaster08Address(paymasterSigner.account.address)
|
|
176
176
|
]
|
|
177
177
|
|
|
178
|
-
const epToPaymaster: Record
|
|
178
|
+
const epToPaymaster: Record<Address, Address> = {
|
|
179
179
|
[entryPoint06Address]: paymaster06,
|
|
180
180
|
[entryPoint07Address]: paymaster07,
|
|
181
181
|
[entryPoint08Address]: paymaster08
|
|
@@ -287,15 +287,6 @@ const handleMethod = async ({
|
|
|
287
287
|
]
|
|
288
288
|
}
|
|
289
289
|
|
|
290
|
-
if (parsedBody.method === "pimlico_getUserOperationGasPrice") {
|
|
291
|
-
return await bundlerClient.request({
|
|
292
|
-
// @ts-ignore
|
|
293
|
-
method: "pimlico_getUserOperationGasPrice",
|
|
294
|
-
// @ts-ignore
|
|
295
|
-
params: []
|
|
296
|
-
})
|
|
297
|
-
}
|
|
298
|
-
|
|
299
290
|
if (parsedBody.method === "pimlico_getTokenQuotes") {
|
|
300
291
|
const params = pimlicoGetTokenQuotesSchema.safeParse(parsedBody.params)
|
|
301
292
|
|
|
@@ -337,10 +328,31 @@ const handleMethod = async ({
|
|
|
337
328
|
}
|
|
338
329
|
}
|
|
339
330
|
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
331
|
+
// If boosted userOp, forward to bundler's boost_sendUserOperation method.
|
|
332
|
+
if (parsedBody.method === "eth_sendUserOperation") {
|
|
333
|
+
const userOp = parsedBody.params[0] as any
|
|
334
|
+
|
|
335
|
+
const isBoosted =
|
|
336
|
+
userOp.maxFeePerGas === "0x0" &&
|
|
337
|
+
userOp.maxPriorityFeePerGas === "0x0"
|
|
338
|
+
|
|
339
|
+
if (isBoosted) {
|
|
340
|
+
return await bundlerClient.request({
|
|
341
|
+
// @ts-ignore
|
|
342
|
+
method: "boost_sendUserOperation",
|
|
343
|
+
// @ts-ignore
|
|
344
|
+
params: parsedBody.params
|
|
345
|
+
})
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Forward all other requests to the bundler
|
|
350
|
+
return await bundlerClient.request({
|
|
351
|
+
// @ts-ignore
|
|
352
|
+
method: parsedBody.method,
|
|
353
|
+
// @ts-ignore
|
|
354
|
+
params: parsedBody.params ?? []
|
|
355
|
+
})
|
|
344
356
|
}
|
|
345
357
|
|
|
346
358
|
export const createRpcHandler = ({
|
package/setup.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { type Address, concat, getContract, parseEther } from "viem"
|
|
2
|
+
import {
|
|
3
|
+
constants,
|
|
4
|
+
getSingletonPaymaster06Address,
|
|
5
|
+
getSingletonPaymaster06InitCode,
|
|
6
|
+
getSingletonPaymaster07Address,
|
|
7
|
+
getSingletonPaymaster07InitCode,
|
|
8
|
+
getSingletonPaymaster08Address,
|
|
9
|
+
getSingletonPaymaster08InitCode
|
|
10
|
+
} from "./constants.js"
|
|
11
|
+
import {
|
|
12
|
+
singletonPaymaster06Abi,
|
|
13
|
+
singletonPaymaster07Abi,
|
|
14
|
+
singletonPaymaster08Abi
|
|
15
|
+
} from "./helpers/abi.js"
|
|
16
|
+
import {
|
|
17
|
+
create2Salt,
|
|
18
|
+
erc20Address,
|
|
19
|
+
erc20Bytecode,
|
|
20
|
+
getPaymasterUtilityWallet
|
|
21
|
+
} from "./helpers/erc20-utils.js"
|
|
22
|
+
import { getPublicClient } from "./helpers/utils.js"
|
|
23
|
+
|
|
24
|
+
export const deployPaymasters = async ({
|
|
25
|
+
anvilRpc,
|
|
26
|
+
paymasterSigner
|
|
27
|
+
}: {
|
|
28
|
+
anvilRpc: string
|
|
29
|
+
paymasterSigner: Address
|
|
30
|
+
}) => {
|
|
31
|
+
const walletClient = await getPaymasterUtilityWallet(anvilRpc)
|
|
32
|
+
const publicClient = await getPublicClient(anvilRpc)
|
|
33
|
+
|
|
34
|
+
let nonce = await publicClient.getTransactionCount({
|
|
35
|
+
address: walletClient.account.address
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
const paymaster06Address = getSingletonPaymaster06Address(paymasterSigner)
|
|
39
|
+
const paymaster07Address = getSingletonPaymaster07Address(paymasterSigner)
|
|
40
|
+
const paymaster08Address = getSingletonPaymaster08Address(paymasterSigner)
|
|
41
|
+
|
|
42
|
+
// Deploy singleton paymaster 06 if not already deployed.
|
|
43
|
+
const paymaster06Code = await publicClient.getCode({
|
|
44
|
+
address: paymaster06Address
|
|
45
|
+
})
|
|
46
|
+
if (!paymaster06Code) {
|
|
47
|
+
const hash = await walletClient.sendTransaction({
|
|
48
|
+
to: constants.deterministicDeployer,
|
|
49
|
+
data: concat([
|
|
50
|
+
constants.create2Salt,
|
|
51
|
+
getSingletonPaymaster06InitCode(paymasterSigner)
|
|
52
|
+
]),
|
|
53
|
+
nonce: nonce++
|
|
54
|
+
})
|
|
55
|
+
await publicClient.waitForTransactionReceipt({ hash })
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Deploy singleton paymaster 07 if not already deployed.
|
|
59
|
+
const paymaster07Code = await publicClient.getCode({
|
|
60
|
+
address: paymaster07Address
|
|
61
|
+
})
|
|
62
|
+
if (!paymaster07Code) {
|
|
63
|
+
const hash = await walletClient.sendTransaction({
|
|
64
|
+
to: constants.deterministicDeployer,
|
|
65
|
+
data: concat([
|
|
66
|
+
constants.create2Salt,
|
|
67
|
+
getSingletonPaymaster07InitCode(paymasterSigner)
|
|
68
|
+
]),
|
|
69
|
+
nonce: nonce++
|
|
70
|
+
})
|
|
71
|
+
await publicClient.waitForTransactionReceipt({ hash })
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Deploy singleton paymaster 08 if not already deployed.
|
|
75
|
+
const paymaster08Code = await publicClient.getCode({
|
|
76
|
+
address: paymaster08Address
|
|
77
|
+
})
|
|
78
|
+
if (!paymaster08Code) {
|
|
79
|
+
const hash = await walletClient.sendTransaction({
|
|
80
|
+
to: constants.deterministicDeployer,
|
|
81
|
+
data: concat([
|
|
82
|
+
constants.create2Salt,
|
|
83
|
+
getSingletonPaymaster08InitCode(paymasterSigner)
|
|
84
|
+
]),
|
|
85
|
+
nonce: nonce++
|
|
86
|
+
})
|
|
87
|
+
await publicClient.waitForTransactionReceipt({ hash })
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const depositAmount = parseEther("50")
|
|
91
|
+
|
|
92
|
+
// Initialize contract instances and fund if needed.
|
|
93
|
+
// Only check deposit balance if the contract was already deployed.
|
|
94
|
+
|
|
95
|
+
// Fund paymaster 06 if balance is less than deposit amount.
|
|
96
|
+
const singletonPaymaster06 = getContract({
|
|
97
|
+
address: paymaster06Address,
|
|
98
|
+
abi: singletonPaymaster06Abi,
|
|
99
|
+
client: walletClient
|
|
100
|
+
})
|
|
101
|
+
const deposit06 = await singletonPaymaster06.read.getDeposit()
|
|
102
|
+
if (deposit06 < depositAmount) {
|
|
103
|
+
await singletonPaymaster06.write.deposit({
|
|
104
|
+
value: depositAmount,
|
|
105
|
+
nonce: nonce++
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Fund paymaster 07 if balance is less than deposit amount.
|
|
110
|
+
const singletonPaymaster07 = getContract({
|
|
111
|
+
address: paymaster07Address,
|
|
112
|
+
abi: singletonPaymaster07Abi,
|
|
113
|
+
client: walletClient
|
|
114
|
+
})
|
|
115
|
+
const deposit07 = await singletonPaymaster07.read.getDeposit()
|
|
116
|
+
if (deposit07 < depositAmount) {
|
|
117
|
+
await singletonPaymaster07.write.deposit({
|
|
118
|
+
value: depositAmount,
|
|
119
|
+
nonce: nonce++
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Fund paymaster 08 if balance is less than deposit amount.
|
|
124
|
+
const singletonPaymaster08 = getContract({
|
|
125
|
+
address: paymaster08Address,
|
|
126
|
+
abi: singletonPaymaster08Abi,
|
|
127
|
+
client: walletClient
|
|
128
|
+
})
|
|
129
|
+
const deposit08 = await singletonPaymaster08.read.getDeposit()
|
|
130
|
+
if (deposit08 < depositAmount) {
|
|
131
|
+
await singletonPaymaster08.write.deposit({
|
|
132
|
+
value: depositAmount,
|
|
133
|
+
nonce: nonce++
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export const deployErc20Token = async (anvilRpc: string) => {
|
|
139
|
+
const publicClient = await getPublicClient(anvilRpc)
|
|
140
|
+
|
|
141
|
+
if ((await publicClient.getCode({ address: erc20Address })) === undefined) {
|
|
142
|
+
const walletClient = await getPaymasterUtilityWallet(anvilRpc)
|
|
143
|
+
|
|
144
|
+
await walletClient.sendTransaction({
|
|
145
|
+
to: "0x4e59b44847b379578588920ca78fbf26c0b4956c",
|
|
146
|
+
data: concat([create2Salt, erc20Bytecode])
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export const setup = async ({
|
|
152
|
+
anvilRpc,
|
|
153
|
+
paymasterSigner
|
|
154
|
+
}: {
|
|
155
|
+
anvilRpc: string
|
|
156
|
+
paymasterSigner: Address
|
|
157
|
+
}) => {
|
|
158
|
+
await deployPaymasters({
|
|
159
|
+
anvilRpc,
|
|
160
|
+
paymasterSigner
|
|
161
|
+
})
|
|
162
|
+
await deployErc20Token(anvilRpc)
|
|
163
|
+
}
|
package/singletonPaymasters.ts
CHANGED
|
@@ -9,29 +9,18 @@ import {
|
|
|
9
9
|
concat,
|
|
10
10
|
encodePacked,
|
|
11
11
|
getContract,
|
|
12
|
-
parseEther,
|
|
13
12
|
toBytes
|
|
14
13
|
} from "viem"
|
|
15
14
|
import {
|
|
16
15
|
type UserOperation,
|
|
17
16
|
toPackedUserOperation
|
|
18
17
|
} from "viem/account-abstraction"
|
|
19
|
-
import {
|
|
20
|
-
constants,
|
|
21
|
-
getSingletonPaymaster06Address,
|
|
22
|
-
getSingletonPaymaster06InitCode,
|
|
23
|
-
getSingletonPaymaster07Address,
|
|
24
|
-
getSingletonPaymaster07InitCode,
|
|
25
|
-
getSingletonPaymaster08Address,
|
|
26
|
-
getSingletonPaymaster08InitCode
|
|
27
|
-
} from "./constants.js"
|
|
18
|
+
import { constants } from "./constants.js"
|
|
28
19
|
import {
|
|
29
20
|
singletonPaymaster06Abi,
|
|
30
|
-
singletonPaymaster07Abi
|
|
31
|
-
singletonPaymaster08Abi
|
|
21
|
+
singletonPaymaster07Abi
|
|
32
22
|
} from "./helpers/abi.js"
|
|
33
|
-
import {
|
|
34
|
-
import { type PaymasterMode, getPublicClient } from "./helpers/utils.js"
|
|
23
|
+
import type { PaymasterMode } from "./helpers/utils.js"
|
|
35
24
|
|
|
36
25
|
export const getDummyPaymasterData = ({
|
|
37
26
|
is06,
|
|
@@ -239,83 +228,3 @@ export const getSignedPaymasterData = async ({
|
|
|
239
228
|
paymasterData
|
|
240
229
|
}
|
|
241
230
|
}
|
|
242
|
-
|
|
243
|
-
export const deployPaymasters = async ({
|
|
244
|
-
anvilRpc,
|
|
245
|
-
paymasterSigner
|
|
246
|
-
}: {
|
|
247
|
-
anvilRpc: string
|
|
248
|
-
paymasterSigner: Address
|
|
249
|
-
}) => {
|
|
250
|
-
const walletClient = await getPaymasterUtilityWallet(anvilRpc)
|
|
251
|
-
const publicClient = await getPublicClient(anvilRpc)
|
|
252
|
-
|
|
253
|
-
let nonce = await publicClient.getTransactionCount({
|
|
254
|
-
address: walletClient.account.address
|
|
255
|
-
})
|
|
256
|
-
|
|
257
|
-
// Deploy singleton paymaster 06.
|
|
258
|
-
await walletClient.sendTransaction({
|
|
259
|
-
to: constants.deterministicDeployer,
|
|
260
|
-
data: concat([
|
|
261
|
-
constants.create2Salt,
|
|
262
|
-
getSingletonPaymaster06InitCode(paymasterSigner)
|
|
263
|
-
]),
|
|
264
|
-
nonce: nonce++
|
|
265
|
-
})
|
|
266
|
-
|
|
267
|
-
// Deploy singleton paymaster 07.
|
|
268
|
-
await walletClient.sendTransaction({
|
|
269
|
-
to: constants.deterministicDeployer,
|
|
270
|
-
data: concat([
|
|
271
|
-
constants.create2Salt,
|
|
272
|
-
getSingletonPaymaster07InitCode(paymasterSigner)
|
|
273
|
-
]),
|
|
274
|
-
nonce: nonce++
|
|
275
|
-
})
|
|
276
|
-
|
|
277
|
-
// Deploy singleton paymaster 08.
|
|
278
|
-
await walletClient.sendTransaction({
|
|
279
|
-
to: constants.deterministicDeployer,
|
|
280
|
-
data: concat([
|
|
281
|
-
constants.create2Salt,
|
|
282
|
-
getSingletonPaymaster08InitCode(paymasterSigner)
|
|
283
|
-
]),
|
|
284
|
-
nonce: nonce++
|
|
285
|
-
})
|
|
286
|
-
|
|
287
|
-
// Initialize contract instances.
|
|
288
|
-
const [singletonPaymaster06, singletonPaymaster07, singletonPaymaster08] = [
|
|
289
|
-
getContract({
|
|
290
|
-
address: getSingletonPaymaster06Address(paymasterSigner),
|
|
291
|
-
abi: singletonPaymaster06Abi,
|
|
292
|
-
client: walletClient
|
|
293
|
-
}),
|
|
294
|
-
getContract({
|
|
295
|
-
address: getSingletonPaymaster07Address(paymasterSigner),
|
|
296
|
-
abi: singletonPaymaster07Abi,
|
|
297
|
-
client: walletClient
|
|
298
|
-
}),
|
|
299
|
-
getContract({
|
|
300
|
-
address: getSingletonPaymaster08Address(paymasterSigner),
|
|
301
|
-
abi: singletonPaymaster08Abi,
|
|
302
|
-
client: walletClient
|
|
303
|
-
})
|
|
304
|
-
]
|
|
305
|
-
|
|
306
|
-
// Fund the paymasters.
|
|
307
|
-
await singletonPaymaster06.write.deposit({
|
|
308
|
-
value: parseEther("50"),
|
|
309
|
-
nonce: nonce++
|
|
310
|
-
})
|
|
311
|
-
|
|
312
|
-
await singletonPaymaster07.write.deposit({
|
|
313
|
-
value: parseEther("50"),
|
|
314
|
-
nonce: nonce++
|
|
315
|
-
})
|
|
316
|
-
|
|
317
|
-
await singletonPaymaster08.write.deposit({
|
|
318
|
-
value: parseEther("50"),
|
|
319
|
-
nonce: nonce++
|
|
320
|
-
})
|
|
321
|
-
}
|