permissionless 0.2.32 → 0.2.33
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 +6 -0
- package/_cjs/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js +7 -6
- package/_cjs/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js.map +1 -1
- package/_esm/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js +7 -6
- package/_esm/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js.map +1 -1
- package/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +258 -0
- package/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts +9 -9
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -45,6 +45,10 @@ const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOverride
|
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
const { postOpGas, exchangeRate, paymaster: paymasterERC20Address } = quotes[0];
|
|
48
|
+
let calls = parameters.calls;
|
|
49
|
+
if (parameters.callData && account.decodeCalls) {
|
|
50
|
+
calls = await account.decodeCalls(parameters.callData);
|
|
51
|
+
}
|
|
48
52
|
const callsWithDummyApproval = [
|
|
49
53
|
{
|
|
50
54
|
abi: viem_1.erc20Abi,
|
|
@@ -52,11 +56,8 @@ const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOverride
|
|
|
52
56
|
args: [paymasterERC20Address, viem_1.maxUint256],
|
|
53
57
|
to: paymasterContext.token
|
|
54
58
|
},
|
|
55
|
-
...(
|
|
59
|
+
...(calls ? calls : [])
|
|
56
60
|
];
|
|
57
|
-
if (parameters.callData) {
|
|
58
|
-
throw new Error("parameter callData is not supported with prepareUserOperationForErc20Paymaster");
|
|
59
|
-
}
|
|
60
61
|
const allowanceSlot = _allowanceSlot ?? quotes[0].allowanceSlot;
|
|
61
62
|
const balanceSlot = _balanceSlot ?? quotes[0].balanceSlot;
|
|
62
63
|
const hasAllowanceSlot = allowanceSlot !== undefined;
|
|
@@ -129,7 +130,7 @@ const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOverride
|
|
|
129
130
|
});
|
|
130
131
|
const hasSufficientApproval = allowance >= maxCostInToken;
|
|
131
132
|
const finalCalls = hasSufficientApproval
|
|
132
|
-
?
|
|
133
|
+
? (calls ?? [])
|
|
133
134
|
: [
|
|
134
135
|
{
|
|
135
136
|
abi: viem_1.erc20Abi,
|
|
@@ -137,7 +138,7 @@ const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOverride
|
|
|
137
138
|
args: [paymasterERC20Address, maxCostInToken],
|
|
138
139
|
to: paymasterContext.token
|
|
139
140
|
},
|
|
140
|
-
...
|
|
141
|
+
...(calls ?? [])
|
|
141
142
|
];
|
|
142
143
|
userOperation.callData = await account.encodeCalls(finalCalls.map((call_) => {
|
|
143
144
|
const call = call_;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":";;;AAAA,+BAYa;AACb,kEAWiC;AACjC,0CAAwD;AACxD,0CAA2C;AAC3C,sCAAoD;AACpD,4DAA4D;AAC5D,wFAAiF;AACjF,oFAA6E;AAEtE,MAAM,qCAAqC,GAC9C,CACI,aAAqB,EACrB,EACI,eAAe,GAAG,KAAK,EACvB,WAAW,EAAE,YAAY,EACzB,aAAa,EAAE,cAAc,KAK7B,EAAE,EACR,EAAE,CACJ,KAAK,EAUD,MAAqD,EACrD,WAKC,EAGH,EAAE;IACA,MAAM,UAAU,GAAG,WAA6C,CAAA;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAA;IAE/B,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAA;IAEtC,MAAM,aAAa,GAAG,MAAkC,CAAA;IAExD,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB;QAChD,CAAC,CAAC,UAAU,CAAC,gBAAgB;QAC7B,CAAC,CAAC,aAAa,EAAE,gBAAgB,CAAA;IAErC,IACI,OAAO,gBAAgB,KAAK,QAAQ;QACpC,gBAAgB,KAAK,IAAI;QACzB,OAAO,IAAI,gBAAgB;QAC3B,OAAO,gBAAgB,CAAC,KAAK,KAAK,QAAQ,EAC5C,CAAC;QAKC,MAAM,KAAK,GAAG,IAAA,iBAAU,EAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEhD,IAAI,OAA2B,CAAA;QAC/B,KAAK,UAAU,UAAU;YACrB,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAC3B,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;YACxC,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAS,EAC5B,MAAM,EACN,oBAAW,EACX,YAAY,CACf,CAAC,EAAE,CAAC,CAAA;YACL,OAAO,GAAG,QAAQ,CAAA;YAClB,OAAO,OAAO,CAAA;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAS,EAC1B,aAAa,EACb,2BAAc,EACd,gBAAgB,CACnB,CAAC;YACE,MAAM,EAAE,CAAC,KAAK,CAAC;YACf,KAAK,EACD,aAAa,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK;YAC/D,iBAAiB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO;SAChD,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,eAAQ,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE;gBAC9C,YAAY,EACR,oEAAoE;aAC3E,CAAC,CAAA;QACN,CAAC;QAED,MAAM,EACF,SAAS,EACT,YAAY,EACZ,SAAS,EAAE,qBAAqB,EACnC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,MAAM,sBAAsB,GAAG;YAC3B;gBACI,GAAG,EAAE,eAAQ;gBACb,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,CAAC,qBAAqB,EAAE,iBAAU,CAAC;gBACzC,EAAE,EAAE,gBAAgB,CAAC,KAAK;aAC7B;YACD,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":";;;AAAA,+BAYa;AACb,kEAWiC;AACjC,0CAAwD;AACxD,0CAA2C;AAC3C,sCAAoD;AACpD,4DAA4D;AAC5D,wFAAiF;AACjF,oFAA6E;AAEtE,MAAM,qCAAqC,GAC9C,CACI,aAAqB,EACrB,EACI,eAAe,GAAG,KAAK,EACvB,WAAW,EAAE,YAAY,EACzB,aAAa,EAAE,cAAc,KAK7B,EAAE,EACR,EAAE,CACJ,KAAK,EAUD,MAAqD,EACrD,WAKC,EAGH,EAAE;IACA,MAAM,UAAU,GAAG,WAA6C,CAAA;IAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAA;IAE/B,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;IACnD,MAAM,OAAO,GAAG,IAAA,oBAAY,EAAC,QAAQ,CAAC,CAAA;IAEtC,MAAM,aAAa,GAAG,MAAkC,CAAA;IAExD,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB;QAChD,CAAC,CAAC,UAAU,CAAC,gBAAgB;QAC7B,CAAC,CAAC,aAAa,EAAE,gBAAgB,CAAA;IAErC,IACI,OAAO,gBAAgB,KAAK,QAAQ;QACpC,gBAAgB,KAAK,IAAI;QACzB,OAAO,IAAI,gBAAgB;QAC3B,OAAO,gBAAgB,CAAC,KAAK,KAAK,QAAQ,EAC5C,CAAC;QAKC,MAAM,KAAK,GAAG,IAAA,iBAAU,EAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAEhD,IAAI,OAA2B,CAAA;QAC/B,KAAK,UAAU,UAAU;YACrB,IAAI,OAAO;gBAAE,OAAO,OAAO,CAAA;YAC3B,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;YACxC,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAS,EAC5B,MAAM,EACN,oBAAW,EACX,YAAY,CACf,CAAC,EAAE,CAAC,CAAA;YACL,OAAO,GAAG,QAAQ,CAAA;YAClB,OAAO,OAAO,CAAA;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAA,iBAAS,EAC1B,aAAa,EACb,2BAAc,EACd,gBAAgB,CACnB,CAAC;YACE,MAAM,EAAE,CAAC,KAAK,CAAC;YACf,KAAK,EACD,aAAa,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK;YAC/D,iBAAiB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO;SAChD,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,eAAQ,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,EAAE;gBAC9C,YAAY,EACR,oEAAoE;aAC3E,CAAC,CAAA;QACN,CAAC;QAED,MAAM,EACF,SAAS,EACT,YAAY,EACZ,SAAS,EAAE,qBAAqB,EACnC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAEb,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;QAE5B,IAAI,UAAU,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YAC7C,KAAK,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QAC1D,CAAC;QAED,MAAM,sBAAsB,GAAG;YAC3B;gBACI,GAAG,EAAE,eAAQ;gBACb,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,CAAC,qBAAqB,EAAE,iBAAU,CAAC;gBACzC,EAAE,EAAE,gBAAgB,CAAC,KAAK;aAC7B;YACD,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1B,CAAA;QAMD,MAAM,aAAa,GAAG,cAAc,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;QAC/D,MAAM,WAAW,GAAG,YAAY,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;QAEzD,MAAM,gBAAgB,GAAG,aAAa,KAAK,SAAS,CAAA;QACpD,MAAM,cAAc,GAAG,WAAW,KAAK,SAAS,CAAA;QAEhD,MAAM,OAAO,GAAG,gBAAgB,IAAI,cAAc,CAAA;QAElD,IAAI,CAAC,OAAO,IAAI,eAAe,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACX,8CAA8C,KAAK,yDAAyD,CAC/G,CAAA;QACL,CAAC;QAED,MAAM,oBAAoB,GACtB,eAAe,IAAI,cAAc;YAC7B,CAAC,CAAC,IAAA,8CAAoB,EAAC;gBACjB,KAAK;gBACL,KAAK,EAAE,OAAO,CAAC,OAAO;gBACtB,IAAI,EAAE,WAAW;aACpB,CAAC,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,SAAS,CAAA;QAEnB,MAAM,sBAAsB,GACxB,eAAe,IAAI,gBAAgB;YAC/B,CAAC,CAAC,IAAA,kDAAsB,EAAC;gBACnB,KAAK;gBACL,KAAK,EAAE,OAAO,CAAC,OAAO;gBACtB,OAAO,EAAE,qBAAqB;gBAC9B,IAAI,EAAE,aAAa;aACtB,CAAC,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,SAAS,CAAA;QAEnB,UAAU,CAAC,aAAa;YACpB,eAAe;gBACf,oBAAoB;gBACpB,sBAAsB;gBAClB,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpC;wBACI,OAAO,EAAE,KAAK;wBACd,SAAS,EAAE;4BACP,GAAG,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC;4BAC3C,GAAG,CAAC,oBAAoB,CAAC,SAAS,IAAI,EAAE,CAAC;yBAC5C;qBACJ;iBACJ,CAAC;gBACJ,CAAC,CAAC,UAAU,CAAC,aAAa,CAAA;QAElC,MAAM,aAAa,GAAG,MAAM,IAAA,iBAAS,EACjC,MAAM,EACN,0CAAoB,EACpB,sBAAsB,CACzB,CAAC;YACE,GAAG,UAAU;YACb,SAAS,EAAE;gBACP,gBAAgB,EAAE,CACd,IAAgC,EACG,EAAE;oBACrC,MAAM,SAAS,GACX,UAAU,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS,CAAA;oBAEpD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;wBAChC,MAAM,EAAE,oBAAoB,EAAE,GAAG,SAAS,CAAA;wBAE1C,IAAI,oBAAoB,EAAE,CAAC;4BACvB,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAA;wBACrC,CAAC;oBACL,CAAC;oBAED,OAAO,IAAA,iBAAS,EACZ,aAAa,EACb,sCAAiB,EACjB,kBAAkB,CACrB,CAAC,IAAI,CAAC,CAAA;gBACX,CAAC;aACJ;YACD,KAAK,EAAE,sBAAsB;SACa,CAAC,CAAA;QAM/C,MAAM,YAAY,GAAG,aAAa,CAAC,YAAY,CAAA;QAE/C,MAAM,mBAAmB,GACrB,aAAa,CAAC,kBAAkB;YAChC,aAAa,CAAC,YAAY;YAC1B,aAAa,CAAC,oBAAoB;YAClC,CAAC,aAAa,CAAC,uBAAuB,IAAI,EAAE,CAAC;YAC7C,CAAC,aAAa,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAA;QAEvD,MAAM,oBAAoB,GAAG,mBAAmB,GAAG,YAAY,CAAA;QAG/D,MAAM,cAAc,GAChB,CAAC,CAAC,oBAAoB,GAAG,SAAS,GAAG,YAAY,CAAC;YAC9C,YAAY,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,CAAA;QAOhB,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAA;QAEnC,MAAM,SAAS,GAAG,MAAM,IAAA,iBAAS,EAC7B,YAAY,EACZ,sBAAY,EACZ,cAAc,CACjB,CAAC;YACE,GAAG,EAAE,eAAQ;YACb,YAAY,EAAE,WAAW;YACzB,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,qBAAqB,CAAC;YAC9C,OAAO,EAAE,KAAK;SACjB,CAAC,CAAA;QAEF,MAAM,qBAAqB,GAAG,SAAS,IAAI,cAAc,CAAA;QAEzD,MAAM,UAAU,GAAG,qBAAqB;YACpC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACf,CAAC,CAAC;gBACI;oBACI,GAAG,EAAE,eAAQ;oBACb,YAAY,EAAE,SAAS;oBACvB,IAAI,EAAE,CAAC,qBAAqB,EAAE,cAAc,CAAC;oBAC7C,EAAE,EAAE,gBAAgB,CAAC,KAAK;iBAC7B;gBACD,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;aACnB,CAAA;QAEP,aAAa,CAAC,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAC9C,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACrB,MAAM,IAAI,GAAG,KASL,CAAA;YACR,IAAI,KAAK,IAAI,IAAI;gBACb,OAAO;oBACH,IAAI,EAAE,IAAA,yBAAkB,EAAC,IAAI,CAAC;oBAC9B,EAAE,EAAE,IAAI,CAAC,EAAE;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK;iBACpB,CAAA;YACL,OAAO,IAAI,CAAA;QACf,CAAC,CAAC,CACL,CAAA;QACD,UAAU,CAAC,KAAK,GAAG,UAAU,CAAA;QAM7B,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,aAAa,EAAE,SAAS,CAAA;QAClE,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,GAAG,EAAE;YAE/B,IAAI,SAAS,KAAK,IAAI;gBAClB,OAAO;oBACH,gBAAgB,EAAE,CAAC,UAAe,EAAE,EAAE,CAClC,IAAA,iBAAS,EACL,aAAa,EACb,sCAAiB,EACjB,kBAAkB,CACrB,CAAC,UAAU,CAAC;iBACpB,CAAA;YAGL,IACI,OAAO,SAAS,KAAK,QAAQ;gBAC7B,SAAS,CAAC,gBAAgB,EAC5B,CAAC;gBACC,MAAM,EAAE,gBAAgB,EAAE,GAAG,SAAS,CAAA;gBACtC,OAAO;oBACH,gBAAgB;iBACnB,CAAA;YACL,CAAC;YAED,MAAM,IAAI,KAAK,CACX,6DAA6D,CAChE,CAAA;QACL,CAAC,CAAC,EAAE,CAAA;QAMJ,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC;YACzC,OAAO,EAAE,MAAM,UAAU,EAAE;YAC3B,iBAAiB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO;YAC7C,OAAO,EAAE,gBAAgB;YACzB,GAAI,aAA+B;SACtC,CAAC,CAAA;QAEF,OAAO;YACH,GAAG,aAAa;YAChB,GAAG,aAAa;SAMnB,CAAA;IACL,CAAC;IAED,OAAO,CAAC,MAAM,IAAA,iBAAS,EACnB,MAAM,EACN,0CAAoB,EACpB,sBAAsB,CACzB,CAAC,UAAU,CAAC,CAKZ,CAAA;AACL,CAAC,CAAA;AA9UQ,QAAA,qCAAqC,yCA8U7C"}
|
|
@@ -45,6 +45,10 @@ export const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOv
|
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
const { postOpGas, exchangeRate, paymaster: paymasterERC20Address } = quotes[0];
|
|
48
|
+
let calls = parameters.calls;
|
|
49
|
+
if (parameters.callData && account.decodeCalls) {
|
|
50
|
+
calls = await account.decodeCalls(parameters.callData);
|
|
51
|
+
}
|
|
48
52
|
const callsWithDummyApproval = [
|
|
49
53
|
{
|
|
50
54
|
abi: erc20Abi,
|
|
@@ -52,11 +56,8 @@ export const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOv
|
|
|
52
56
|
args: [paymasterERC20Address, maxUint256], // dummy approval to ensure simulation passes
|
|
53
57
|
to: paymasterContext.token
|
|
54
58
|
},
|
|
55
|
-
...(
|
|
59
|
+
...(calls ? calls : [])
|
|
56
60
|
];
|
|
57
|
-
if (parameters.callData) {
|
|
58
|
-
throw new Error("parameter callData is not supported with prepareUserOperationForErc20Paymaster");
|
|
59
|
-
}
|
|
60
61
|
////////////////////////////////////////////////////////////////////////////////
|
|
61
62
|
// Call prepareUserOperation
|
|
62
63
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -140,7 +141,7 @@ export const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOv
|
|
|
140
141
|
});
|
|
141
142
|
const hasSufficientApproval = allowance >= maxCostInToken;
|
|
142
143
|
const finalCalls = hasSufficientApproval
|
|
143
|
-
?
|
|
144
|
+
? (calls ?? [])
|
|
144
145
|
: [
|
|
145
146
|
{
|
|
146
147
|
abi: erc20Abi,
|
|
@@ -148,7 +149,7 @@ export const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOv
|
|
|
148
149
|
args: [paymasterERC20Address, maxCostInToken],
|
|
149
150
|
to: paymasterContext.token
|
|
150
151
|
},
|
|
151
|
-
...
|
|
152
|
+
...(calls ?? [])
|
|
152
153
|
];
|
|
153
154
|
userOperation.callData = await account.encodeCalls(finalCalls.map((call_) => {
|
|
154
155
|
const call = call_;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":"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"}
|
|
@@ -284,5 +284,263 @@ describe.each(getCoreSmartAccounts())(
|
|
|
284
284
|
expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change
|
|
285
285
|
}
|
|
286
286
|
)
|
|
287
|
+
|
|
288
|
+
testWithRpc.skipIf(!supportsEntryPointV06)(
|
|
289
|
+
"prepareUserOperationForErc20Paymaster_v06",
|
|
290
|
+
async ({ rpc }) => {
|
|
291
|
+
const { anvilRpc } = rpc
|
|
292
|
+
|
|
293
|
+
const account = (
|
|
294
|
+
await getSmartAccountClient({
|
|
295
|
+
entryPoint: {
|
|
296
|
+
version: "0.6"
|
|
297
|
+
},
|
|
298
|
+
...rpc
|
|
299
|
+
})
|
|
300
|
+
).account
|
|
301
|
+
|
|
302
|
+
const pimlicoClient = createPimlicoClient({
|
|
303
|
+
transport: http(rpc.paymasterRpc),
|
|
304
|
+
entryPoint: {
|
|
305
|
+
address: entryPoint06Address,
|
|
306
|
+
version: "0.6"
|
|
307
|
+
}
|
|
308
|
+
})
|
|
309
|
+
|
|
310
|
+
const publicClient = getPublicClient(anvilRpc)
|
|
311
|
+
|
|
312
|
+
const smartAccountClient = createSmartAccountClient({
|
|
313
|
+
// @ts-ignore
|
|
314
|
+
client: getPublicClient(anvilRpc),
|
|
315
|
+
account,
|
|
316
|
+
paymaster: pimlicoClient,
|
|
317
|
+
chain: foundry,
|
|
318
|
+
userOperation: {
|
|
319
|
+
prepareUserOperation:
|
|
320
|
+
prepareUserOperationForErc20Paymaster(pimlicoClient)
|
|
321
|
+
},
|
|
322
|
+
bundlerTransport: http(rpc.altoRpc)
|
|
323
|
+
})
|
|
324
|
+
|
|
325
|
+
const INITIAL_TOKEN_BALANCE = parseEther("100")
|
|
326
|
+
const INTIAL_ETH_BALANCE = await publicClient.getBalance({
|
|
327
|
+
address: smartAccountClient.account.address
|
|
328
|
+
})
|
|
329
|
+
|
|
330
|
+
sudoMintTokens({
|
|
331
|
+
amount: INITIAL_TOKEN_BALANCE,
|
|
332
|
+
to: smartAccountClient.account.address,
|
|
333
|
+
anvilRpc
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
const opHash = await smartAccountClient.sendUserOperation({
|
|
337
|
+
callData: await smartAccountClient.account.encodeCalls([
|
|
338
|
+
{
|
|
339
|
+
to: zeroAddress,
|
|
340
|
+
data: "0x",
|
|
341
|
+
value: 0n
|
|
342
|
+
}
|
|
343
|
+
]),
|
|
344
|
+
paymasterContext: {
|
|
345
|
+
token: ERC20_ADDRESS
|
|
346
|
+
}
|
|
347
|
+
})
|
|
348
|
+
|
|
349
|
+
const receipt =
|
|
350
|
+
await smartAccountClient.waitForUserOperationReceipt({
|
|
351
|
+
hash: opHash
|
|
352
|
+
})
|
|
353
|
+
|
|
354
|
+
expect(receipt).toBeTruthy()
|
|
355
|
+
expect(receipt).toBeTruthy()
|
|
356
|
+
|
|
357
|
+
if (name !== "Kernel 0.2.1") {
|
|
358
|
+
expect(receipt.success).toBeTruthy()
|
|
359
|
+
const FINAL_TOKEN_BALANCE = await tokenBalanceOf(
|
|
360
|
+
smartAccountClient.account.address,
|
|
361
|
+
rpc.anvilRpc
|
|
362
|
+
)
|
|
363
|
+
const FINAL_ETH_BALANCE = await publicClient.getBalance({
|
|
364
|
+
address: smartAccountClient.account.address
|
|
365
|
+
})
|
|
366
|
+
|
|
367
|
+
expect(FINAL_TOKEN_BALANCE).toBeLessThan(
|
|
368
|
+
INITIAL_TOKEN_BALANCE
|
|
369
|
+
) // Token balance should be deducted
|
|
370
|
+
expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
testWithRpc.skipIf(!supportsEntryPointV07)(
|
|
376
|
+
"prepareUserOperationForErc20Paymaster_v07",
|
|
377
|
+
async ({ rpc }) => {
|
|
378
|
+
const { anvilRpc } = rpc
|
|
379
|
+
|
|
380
|
+
const account = (
|
|
381
|
+
await getSmartAccountClient({
|
|
382
|
+
entryPoint: {
|
|
383
|
+
version: "0.7"
|
|
384
|
+
},
|
|
385
|
+
...rpc
|
|
386
|
+
})
|
|
387
|
+
).account
|
|
388
|
+
|
|
389
|
+
const publicClient = getPublicClient(anvilRpc)
|
|
390
|
+
|
|
391
|
+
const pimlicoClient = createPimlicoClient({
|
|
392
|
+
transport: http(rpc.paymasterRpc),
|
|
393
|
+
entryPoint: {
|
|
394
|
+
address: entryPoint07Address,
|
|
395
|
+
version: "0.7"
|
|
396
|
+
}
|
|
397
|
+
})
|
|
398
|
+
|
|
399
|
+
const smartAccountClient = createSmartAccountClient({
|
|
400
|
+
// @ts-ignore
|
|
401
|
+
client: getPublicClient(anvilRpc),
|
|
402
|
+
account,
|
|
403
|
+
paymaster: pimlicoClient,
|
|
404
|
+
chain: foundry,
|
|
405
|
+
userOperation: {
|
|
406
|
+
prepareUserOperation:
|
|
407
|
+
prepareUserOperationForErc20Paymaster(pimlicoClient)
|
|
408
|
+
},
|
|
409
|
+
bundlerTransport: http(rpc.altoRpc)
|
|
410
|
+
})
|
|
411
|
+
|
|
412
|
+
const INITIAL_TOKEN_BALANCE = parseEther("100")
|
|
413
|
+
const INTIAL_ETH_BALANCE = await publicClient.getBalance({
|
|
414
|
+
address: smartAccountClient.account.address
|
|
415
|
+
})
|
|
416
|
+
|
|
417
|
+
sudoMintTokens({
|
|
418
|
+
amount: INITIAL_TOKEN_BALANCE,
|
|
419
|
+
to: smartAccountClient.account.address,
|
|
420
|
+
anvilRpc
|
|
421
|
+
})
|
|
422
|
+
|
|
423
|
+
const opHash = await smartAccountClient.sendUserOperation({
|
|
424
|
+
callData: await smartAccountClient.account.encodeCalls([
|
|
425
|
+
{
|
|
426
|
+
to: zeroAddress,
|
|
427
|
+
data: "0x",
|
|
428
|
+
value: 0n
|
|
429
|
+
}
|
|
430
|
+
]),
|
|
431
|
+
paymasterContext: {
|
|
432
|
+
token: ERC20_ADDRESS
|
|
433
|
+
}
|
|
434
|
+
})
|
|
435
|
+
|
|
436
|
+
const receipt =
|
|
437
|
+
await smartAccountClient.waitForUserOperationReceipt({
|
|
438
|
+
hash: opHash
|
|
439
|
+
})
|
|
440
|
+
|
|
441
|
+
expect(receipt).toBeTruthy()
|
|
442
|
+
expect(receipt).toBeTruthy()
|
|
443
|
+
expect(receipt.success).toBeTruthy()
|
|
444
|
+
|
|
445
|
+
const FINAL_TOKEN_BALANCE = await tokenBalanceOf(
|
|
446
|
+
smartAccountClient.account.address,
|
|
447
|
+
rpc.anvilRpc
|
|
448
|
+
)
|
|
449
|
+
const FINAL_ETH_BALANCE = await publicClient.getBalance({
|
|
450
|
+
address: smartAccountClient.account.address
|
|
451
|
+
})
|
|
452
|
+
|
|
453
|
+
expect(FINAL_TOKEN_BALANCE).toBeLessThan(INITIAL_TOKEN_BALANCE) // Token balance should be deducted
|
|
454
|
+
expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change
|
|
455
|
+
}
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
testWithRpc.skipIf(!supportsEntryPointV07)(
|
|
459
|
+
"prepareUserOperationForErc20Paymaster_v07 (balanceOverride enabled)",
|
|
460
|
+
async ({ rpc }) => {
|
|
461
|
+
const { anvilRpc } = rpc
|
|
462
|
+
|
|
463
|
+
const account = (
|
|
464
|
+
await getSmartAccountClient({
|
|
465
|
+
entryPoint: {
|
|
466
|
+
version: "0.7"
|
|
467
|
+
},
|
|
468
|
+
...rpc
|
|
469
|
+
})
|
|
470
|
+
).account
|
|
471
|
+
|
|
472
|
+
const publicClient = getPublicClient(anvilRpc)
|
|
473
|
+
|
|
474
|
+
const pimlicoClient = createPimlicoClient({
|
|
475
|
+
transport: http(rpc.paymasterRpc),
|
|
476
|
+
entryPoint: {
|
|
477
|
+
address: entryPoint07Address,
|
|
478
|
+
version: "0.7"
|
|
479
|
+
}
|
|
480
|
+
})
|
|
481
|
+
|
|
482
|
+
const smartAccountClient = createSmartAccountClient({
|
|
483
|
+
// @ts-ignore
|
|
484
|
+
client: getPublicClient(anvilRpc),
|
|
485
|
+
account,
|
|
486
|
+
paymaster: pimlicoClient,
|
|
487
|
+
chain: foundry,
|
|
488
|
+
userOperation: {
|
|
489
|
+
prepareUserOperation:
|
|
490
|
+
prepareUserOperationForErc20Paymaster(
|
|
491
|
+
pimlicoClient,
|
|
492
|
+
{
|
|
493
|
+
balanceOverride: true
|
|
494
|
+
}
|
|
495
|
+
)
|
|
496
|
+
},
|
|
497
|
+
bundlerTransport: http(rpc.altoRpc)
|
|
498
|
+
})
|
|
499
|
+
|
|
500
|
+
const INITIAL_TOKEN_BALANCE = parseEther("100")
|
|
501
|
+
const INTIAL_ETH_BALANCE = await publicClient.getBalance({
|
|
502
|
+
address: smartAccountClient.account.address
|
|
503
|
+
})
|
|
504
|
+
|
|
505
|
+
sudoMintTokens({
|
|
506
|
+
amount: INITIAL_TOKEN_BALANCE,
|
|
507
|
+
to: smartAccountClient.account.address,
|
|
508
|
+
anvilRpc
|
|
509
|
+
})
|
|
510
|
+
|
|
511
|
+
const opHash = await smartAccountClient.sendUserOperation({
|
|
512
|
+
callData: await smartAccountClient.account.encodeCalls([
|
|
513
|
+
{
|
|
514
|
+
to: zeroAddress,
|
|
515
|
+
data: "0x",
|
|
516
|
+
value: 0n
|
|
517
|
+
}
|
|
518
|
+
]),
|
|
519
|
+
paymasterContext: {
|
|
520
|
+
token: ERC20_ADDRESS
|
|
521
|
+
}
|
|
522
|
+
})
|
|
523
|
+
|
|
524
|
+
const receipt =
|
|
525
|
+
await smartAccountClient.waitForUserOperationReceipt({
|
|
526
|
+
hash: opHash
|
|
527
|
+
})
|
|
528
|
+
|
|
529
|
+
expect(receipt).toBeTruthy()
|
|
530
|
+
expect(receipt).toBeTruthy()
|
|
531
|
+
expect(receipt.success).toBeTruthy()
|
|
532
|
+
|
|
533
|
+
const FINAL_TOKEN_BALANCE = await tokenBalanceOf(
|
|
534
|
+
smartAccountClient.account.address,
|
|
535
|
+
rpc.anvilRpc
|
|
536
|
+
)
|
|
537
|
+
const FINAL_ETH_BALANCE = await publicClient.getBalance({
|
|
538
|
+
address: smartAccountClient.account.address
|
|
539
|
+
})
|
|
540
|
+
|
|
541
|
+
expect(FINAL_TOKEN_BALANCE).toBeLessThan(INITIAL_TOKEN_BALANCE) // Token balance should be deducted
|
|
542
|
+
expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change
|
|
543
|
+
}
|
|
544
|
+
)
|
|
287
545
|
}
|
|
288
546
|
)
|
|
@@ -124,6 +124,12 @@ export const prepareUserOperationForErc20Paymaster =
|
|
|
124
124
|
paymaster: paymasterERC20Address
|
|
125
125
|
} = quotes[0]
|
|
126
126
|
|
|
127
|
+
let calls = parameters.calls
|
|
128
|
+
|
|
129
|
+
if (parameters.callData && account.decodeCalls) {
|
|
130
|
+
calls = await account.decodeCalls(parameters.callData)
|
|
131
|
+
}
|
|
132
|
+
|
|
127
133
|
const callsWithDummyApproval = [
|
|
128
134
|
{
|
|
129
135
|
abi: erc20Abi,
|
|
@@ -131,15 +137,9 @@ export const prepareUserOperationForErc20Paymaster =
|
|
|
131
137
|
args: [paymasterERC20Address, maxUint256], // dummy approval to ensure simulation passes
|
|
132
138
|
to: paymasterContext.token
|
|
133
139
|
},
|
|
134
|
-
...(
|
|
140
|
+
...(calls ? calls : [])
|
|
135
141
|
]
|
|
136
142
|
|
|
137
|
-
if (parameters.callData) {
|
|
138
|
-
throw new Error(
|
|
139
|
-
"parameter callData is not supported with prepareUserOperationForErc20Paymaster"
|
|
140
|
-
)
|
|
141
|
-
}
|
|
142
|
-
|
|
143
143
|
////////////////////////////////////////////////////////////////////////////////
|
|
144
144
|
// Call prepareUserOperation
|
|
145
145
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -265,7 +265,7 @@ export const prepareUserOperationForErc20Paymaster =
|
|
|
265
265
|
const hasSufficientApproval = allowance >= maxCostInToken
|
|
266
266
|
|
|
267
267
|
const finalCalls = hasSufficientApproval
|
|
268
|
-
?
|
|
268
|
+
? (calls ?? [])
|
|
269
269
|
: [
|
|
270
270
|
{
|
|
271
271
|
abi: erc20Abi,
|
|
@@ -273,7 +273,7 @@ export const prepareUserOperationForErc20Paymaster =
|
|
|
273
273
|
args: [paymasterERC20Address, maxCostInToken],
|
|
274
274
|
to: paymasterContext.token
|
|
275
275
|
},
|
|
276
|
-
...
|
|
276
|
+
...(calls ?? [])
|
|
277
277
|
]
|
|
278
278
|
|
|
279
279
|
userOperation.callData = await account.encodeCalls(
|