permissionless 0.2.10 → 0.2.11
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 +7 -0
- package/_cjs/actions/pimlico/getTokenQuotes.js +6 -0
- package/_cjs/actions/pimlico/getTokenQuotes.js.map +1 -1
- package/_cjs/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js +42 -1
- package/_cjs/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js.map +1 -1
- package/_cjs/utils/erc20AllowanceOverride.js +36 -0
- package/_cjs/utils/erc20AllowanceOverride.js.map +1 -0
- package/_cjs/utils/erc20BalanceOverride.js +26 -0
- package/_cjs/utils/erc20BalanceOverride.js.map +1 -0
- package/_cjs/utils/index.js +5 -1
- package/_cjs/utils/index.js.map +1 -1
- package/_esm/actions/pimlico/getTokenQuotes.js +6 -0
- package/_esm/actions/pimlico/getTokenQuotes.js.map +1 -1
- package/_esm/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js +43 -2
- package/_esm/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.js.map +1 -1
- package/_esm/utils/erc20AllowanceOverride.js +33 -0
- package/_esm/utils/erc20AllowanceOverride.js.map +1 -0
- package/_esm/utils/erc20BalanceOverride.js +23 -0
- package/_esm/utils/erc20BalanceOverride.js.map +1 -0
- package/_esm/utils/index.js +3 -1
- package/_esm/utils/index.js.map +1 -1
- package/_types/actions/pimlico/getTokenQuotes.d.ts +2 -0
- package/_types/actions/pimlico/getTokenQuotes.d.ts.map +1 -1
- package/_types/clients/decorators/smartAccount.d.ts +5 -0
- package/_types/clients/decorators/smartAccount.d.ts.map +1 -1
- package/_types/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.d.ts +5 -1
- package/_types/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.d.ts.map +1 -1
- package/_types/types/pimlico.d.ts +2 -0
- package/_types/types/pimlico.d.ts.map +1 -1
- package/_types/utils/erc20AllowanceOverride.d.ts +10 -0
- package/_types/utils/erc20AllowanceOverride.d.ts.map +1 -0
- package/_types/utils/erc20BalanceOverride.d.ts +9 -0
- package/_types/utils/erc20BalanceOverride.d.ts.map +1 -0
- package/_types/utils/index.d.ts +3 -1
- package/_types/utils/index.d.ts.map +1 -1
- package/actions/pimlico/getTokenQuotes.ts +8 -0
- package/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +88 -0
- package/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts +67 -1
- package/package.json +2 -2
- package/types/pimlico.ts +2 -0
- package/utils/erc20AllowanceOverride.test.ts +59 -0
- package/utils/erc20AllowanceOverride.ts +66 -0
- package/utils/erc20BalanceOverride.test.ts +57 -0
- package/utils/erc20BalanceOverride.ts +49 -0
- package/utils/index.ts +13 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# permissionless
|
|
2
2
|
|
|
3
|
+
## 0.2.11
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- bfc278b5cc3d8e6536d84005cc94e55e3c99eb9d: Added utils to create erc20 state overrides
|
|
8
|
+
- bfc278b5cc3d8e6536d84005cc94e55e3c99eb9d: Added balanceOverride to prepareUserOperationForErc20Paymaster
|
|
9
|
+
|
|
3
10
|
## 0.2.10
|
|
4
11
|
|
|
5
12
|
### Patch Changes
|
|
@@ -17,6 +17,12 @@ const getTokenQuotes = async (client, args) => {
|
|
|
17
17
|
});
|
|
18
18
|
return res.quotes.map((quote) => ({
|
|
19
19
|
...quote,
|
|
20
|
+
balanceSlot: quote.balanceSlot
|
|
21
|
+
? (0, viem_1.hexToBigInt)(quote.balanceSlot)
|
|
22
|
+
: undefined,
|
|
23
|
+
allowanceSlot: quote.allowanceSlot
|
|
24
|
+
? (0, viem_1.hexToBigInt)(quote.allowanceSlot)
|
|
25
|
+
: undefined,
|
|
20
26
|
postOpGas: (0, viem_1.hexToBigInt)(quote.postOpGas),
|
|
21
27
|
exchangeRate: (0, viem_1.hexToBigInt)(quote.exchangeRate),
|
|
22
28
|
exchangeRateNativeToUsd: (0, viem_1.hexToBigInt)(quote.exchangeRateNativeToUsd)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTokenQuotes.js","sourceRoot":"","sources":["../../../actions/pimlico/getTokenQuotes.ts"],"names":[],"mappings":";;;AAAA,+BAUa;
|
|
1
|
+
{"version":3,"file":"getTokenQuotes.js","sourceRoot":"","sources":["../../../actions/pimlico/getTokenQuotes.ts"],"names":[],"mappings":";;;AAAA,+BAUa;AA+BN,MAAM,cAAc,GAAG,KAAK,EAK/B,MAAyE,EACzE,IAAsD,EACrB,EAAE;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAA;IAElD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,yBAAkB,EAAE,CAAA;IAClC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE;YACJ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,iBAAiB;YACtB,IAAA,kBAAW,EAAC,OAAO,CAAC;SACvB;KACJ,CAAC,CAAA;IAEF,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9B,GAAG,KAAK;QACR,WAAW,EAAE,KAAK,CAAC,WAAW;YAC1B,CAAC,CAAC,IAAA,kBAAW,EAAC,KAAK,CAAC,WAAW,CAAC;YAChC,CAAC,CAAC,SAAS;QACf,aAAa,EAAE,KAAK,CAAC,aAAa;YAC9B,CAAC,CAAC,IAAA,kBAAW,EAAC,KAAK,CAAC,aAAa,CAAC;YAClC,CAAC,CAAC,SAAS;QACf,SAAS,EAAE,IAAA,kBAAW,EAAC,KAAK,CAAC,SAAS,CAAC;QACvC,YAAY,EAAE,IAAA,kBAAW,EAAC,KAAK,CAAC,YAAY,CAAC;QAC7C,uBAAuB,EAAE,IAAA,kBAAW,EAAC,KAAK,CAAC,uBAAuB,CAAC;KACtE,CAAC,CAAC,CAAA;AACP,CAAC,CAAA;AAnCY,QAAA,cAAc,kBAmC1B"}
|
|
@@ -7,7 +7,8 @@ const actions_1 = require("viem/actions");
|
|
|
7
7
|
const actions_2 = require("viem/actions");
|
|
8
8
|
const utils_1 = require("viem/utils");
|
|
9
9
|
const pimlico_1 = require("../../../actions/pimlico.js");
|
|
10
|
-
const
|
|
10
|
+
const utils_2 = require("../../../utils/index.js");
|
|
11
|
+
const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOverride = false, balanceSlot: _balanceSlot, allowanceSlot: _allowanceSlot } = {}) => async (client, parameters_) => {
|
|
11
12
|
const parameters = parameters_;
|
|
12
13
|
const account_ = client.account;
|
|
13
14
|
if (!account_)
|
|
@@ -37,6 +38,11 @@ const prepareUserOperationForErc20Paymaster = (pimlicoClient) => async (client,
|
|
|
37
38
|
chain: pimlicoClient.chain ?? client.chain ?? account.client.chain,
|
|
38
39
|
entryPointAddress: account.entryPoint.address
|
|
39
40
|
});
|
|
41
|
+
if (quotes.length === 0) {
|
|
42
|
+
throw new viem_1.RpcError(new Error("Quotes not found"), {
|
|
43
|
+
shortMessage: "client didn't return token quotes, check if the token is supported"
|
|
44
|
+
});
|
|
45
|
+
}
|
|
40
46
|
const { postOpGas, exchangeRate, paymaster: paymasterERC20Address } = quotes[0];
|
|
41
47
|
const callsWithDummyApproval = [
|
|
42
48
|
{
|
|
@@ -50,6 +56,41 @@ const prepareUserOperationForErc20Paymaster = (pimlicoClient) => async (client,
|
|
|
50
56
|
if (parameters.callData) {
|
|
51
57
|
throw new Error("parameter callData is not supported with prepareUserOperationForErc20Paymaster");
|
|
52
58
|
}
|
|
59
|
+
const allowanceSlot = _allowanceSlot ?? quotes[0].allowanceSlot;
|
|
60
|
+
const balanceSlot = _balanceSlot ?? quotes[0].balanceSlot;
|
|
61
|
+
const hasSlot = allowanceSlot && balanceSlot;
|
|
62
|
+
if (!hasSlot && balanceOverride) {
|
|
63
|
+
throw new Error(`balanceOverride is not supported for token ${token}, provide custom slot for balance & allowance overrides`);
|
|
64
|
+
}
|
|
65
|
+
const balanceStateOverride = balanceOverride && balanceSlot
|
|
66
|
+
? (0, utils_2.erc20BalanceOverride)({
|
|
67
|
+
token,
|
|
68
|
+
owner: account.address,
|
|
69
|
+
slot: balanceSlot
|
|
70
|
+
})[0]
|
|
71
|
+
: undefined;
|
|
72
|
+
const allowanceStateOverride = balanceOverride && allowanceSlot
|
|
73
|
+
? (0, utils_2.erc20AllowanceOverride)({
|
|
74
|
+
token,
|
|
75
|
+
owner: account.address,
|
|
76
|
+
spender: paymasterERC20Address,
|
|
77
|
+
slot: allowanceSlot
|
|
78
|
+
})[0]
|
|
79
|
+
: undefined;
|
|
80
|
+
parameters.stateOverride =
|
|
81
|
+
balanceOverride &&
|
|
82
|
+
balanceStateOverride &&
|
|
83
|
+
allowanceStateOverride
|
|
84
|
+
? (parameters.stateOverride ?? []).concat([
|
|
85
|
+
{
|
|
86
|
+
address: token,
|
|
87
|
+
stateDiff: [
|
|
88
|
+
...(allowanceStateOverride.stateDiff ?? []),
|
|
89
|
+
...(balanceStateOverride.stateDiff ?? [])
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
])
|
|
93
|
+
: parameters.stateOverride;
|
|
53
94
|
const userOperation = await (0, utils_1.getAction)(client, account_abstraction_1.prepareUserOperation, "prepareUserOperation")({
|
|
54
95
|
...parameters,
|
|
55
96
|
calls: callsWithDummyApproval
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.erc20AllowanceOverride = erc20AllowanceOverride;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
function erc20AllowanceOverride({ token, owner, spender, slot, amount = BigInt("0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") }) {
|
|
6
|
+
const smartAccountErc20AllowanceSlot = (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([
|
|
7
|
+
{
|
|
8
|
+
type: "address"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
type: "bytes32"
|
|
12
|
+
}
|
|
13
|
+
], [
|
|
14
|
+
spender,
|
|
15
|
+
(0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([
|
|
16
|
+
{
|
|
17
|
+
type: "address"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
type: "uint256"
|
|
21
|
+
}
|
|
22
|
+
], [owner, BigInt(slot)]))
|
|
23
|
+
]));
|
|
24
|
+
return [
|
|
25
|
+
{
|
|
26
|
+
address: token,
|
|
27
|
+
stateDiff: [
|
|
28
|
+
{
|
|
29
|
+
slot: smartAccountErc20AllowanceSlot,
|
|
30
|
+
value: (0, viem_1.toHex)(amount)
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=erc20AllowanceOverride.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20AllowanceOverride.js","sourceRoot":"","sources":["../../utils/erc20AllowanceOverride.ts"],"names":[],"mappings":";;AAgBA,wDAiDC;AAjED,+BAMa;AAUb,SAAgB,sBAAsB,CAAC,EACnC,KAAK,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,MAAM,GAAG,MAAM,CACX,oEAAoE,CACvE,EAC8B;IAC/B,MAAM,8BAA8B,GAAG,IAAA,gBAAS,EAC5C,IAAA,0BAAmB,EACf;QACI;YACI,IAAI,EAAE,SAAS;SAClB;QACD;YACI,IAAI,EAAE,SAAS;SAClB;KACJ,EACD;QACI,OAAO;QACP,IAAA,gBAAS,EACL,IAAA,0BAAmB,EACf;YACI;gBACI,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,IAAI,EAAE,SAAS;aAClB;SACJ,EACD,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CACxB,CACJ;KACJ,CACJ,CACJ,CAAA;IAED,OAAO;QACH;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE;gBACP;oBACI,IAAI,EAAE,8BAA8B;oBACpC,KAAK,EAAE,IAAA,YAAK,EAAC,MAAM,CAAC;iBACvB;aACJ;SACJ;KACJ,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.erc20BalanceOverride = erc20BalanceOverride;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
function erc20BalanceOverride({ token, owner, slot, balance = BigInt("0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") }) {
|
|
6
|
+
const smartAccountErc20BalanceSlot = (0, viem_1.keccak256)((0, viem_1.encodeAbiParameters)([
|
|
7
|
+
{
|
|
8
|
+
type: "address"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
type: "uint256"
|
|
12
|
+
}
|
|
13
|
+
], [owner, slot]));
|
|
14
|
+
return [
|
|
15
|
+
{
|
|
16
|
+
address: token,
|
|
17
|
+
stateDiff: [
|
|
18
|
+
{
|
|
19
|
+
slot: smartAccountErc20BalanceSlot,
|
|
20
|
+
value: (0, viem_1.toHex)(balance)
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=erc20BalanceOverride.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20BalanceOverride.js","sourceRoot":"","sources":["../../utils/erc20BalanceOverride.ts"],"names":[],"mappings":";;AAeA,oDAiCC;AAhDD,+BAMa;AASb,SAAgB,oBAAoB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAAO,GAAG,MAAM,CACZ,oEAAoE,CACvE,EAC4B;IAC7B,MAAM,4BAA4B,GAAG,IAAA,gBAAS,EAC1C,IAAA,0BAAmB,EACf;QACI;YACI,IAAI,EAAE,SAAS;SAClB;QACD;YACI,IAAI,EAAE,SAAS;SAClB;KACJ,EACD,CAAC,KAAK,EAAE,IAAI,CAAC,CAChB,CACJ,CAAA;IAED,OAAO;QACH;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE;gBACP;oBACI,IAAI,EAAE,4BAA4B;oBAClC,KAAK,EAAE,IAAA,YAAK,EAAC,OAAO,CAAC;iBACxB;aACJ;SACJ;KACJ,CAAA;AACL,CAAC"}
|
package/_cjs/utils/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.encode7579Calls = exports.encodeInstallModule = exports.decodeNonce = exports.encodeNonce = exports.getPackedUserOperation = exports.getAddressFromInitCodeOrPaymasterAndData = exports.isSmartAccountDeployed = exports.toOwner = exports.getRequiredPrefund = exports.deepHexlify = exports.transactionReceiptStatus = void 0;
|
|
3
|
+
exports.erc20BalanceOverride = exports.erc20AllowanceOverride = exports.encode7579Calls = exports.encodeInstallModule = exports.decodeNonce = exports.encodeNonce = exports.getPackedUserOperation = exports.getAddressFromInitCodeOrPaymasterAndData = exports.isSmartAccountDeployed = exports.toOwner = exports.getRequiredPrefund = exports.deepHexlify = exports.transactionReceiptStatus = void 0;
|
|
4
4
|
const deepHexlify_1 = require("./deepHexlify.js");
|
|
5
5
|
Object.defineProperty(exports, "deepHexlify", { enumerable: true, get: function () { return deepHexlify_1.deepHexlify; } });
|
|
6
6
|
Object.defineProperty(exports, "transactionReceiptStatus", { enumerable: true, get: function () { return deepHexlify_1.transactionReceiptStatus; } });
|
|
@@ -22,4 +22,8 @@ const getPackedUserOperation_1 = require("./getPackedUserOperation.js");
|
|
|
22
22
|
Object.defineProperty(exports, "getPackedUserOperation", { enumerable: true, get: function () { return getPackedUserOperation_1.getPackedUserOperation; } });
|
|
23
23
|
const encode7579Calls_1 = require("./encode7579Calls.js");
|
|
24
24
|
Object.defineProperty(exports, "encode7579Calls", { enumerable: true, get: function () { return encode7579Calls_1.encode7579Calls; } });
|
|
25
|
+
const erc20AllowanceOverride_1 = require("./erc20AllowanceOverride.js");
|
|
26
|
+
Object.defineProperty(exports, "erc20AllowanceOverride", { enumerable: true, get: function () { return erc20AllowanceOverride_1.erc20AllowanceOverride; } });
|
|
27
|
+
const erc20BalanceOverride_1 = require("./erc20BalanceOverride.js");
|
|
28
|
+
Object.defineProperty(exports, "erc20BalanceOverride", { enumerable: true, get: function () { return erc20BalanceOverride_1.erc20BalanceOverride; } });
|
|
25
29
|
//# sourceMappingURL=index.js.map
|
package/_cjs/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqE;AA8BjE,4FA9BK,yBAAW,OA8BL;AADX,yGA7BkB,sCAAwB,OA6BlB;AA5B5B,yGAAqG;AAkCjG,yHAlCK,mFAAwC,OAkCL;AAjC5C,6DAG6B;AA0BzB,mGA3BA,uCAAkB,OA2BA;AAzBtB,qEAAiE;AA4B7D,uGA5BK,+CAAsB,OA4BL;AA3B1B,uCAAmC;AAyB/B,wFAzBK,iBAAO,OAyBL;AAvBX,+CAA2C;AA6BvC,4FA7BK,yBAAW,OA6BL;AA5Bf,+CAA2C;AA2BvC,4FA3BK,yBAAW,OA2BL;AAzBf,+DAG8B;AAyB1B,oGA1BA,yCAAmB,OA0BA;AAxBvB,qEAAiE;AAoB7D,uGApBK,+CAAsB,OAoBL;AAlB1B,uDAA8E;AAwB1E,gGAxBgC,iCAAe,OAwBhC;AAvBnB,qEAGiC;AAqB7B,uGAtBA,+CAAsB,OAsBA;AApB1B,iEAG+B;AAkB3B,qGAnBA,2CAAoB,OAmBA"}
|
|
@@ -24,6 +24,12 @@ export const getTokenQuotes = async (client, args) => {
|
|
|
24
24
|
});
|
|
25
25
|
return res.quotes.map((quote) => ({
|
|
26
26
|
...quote,
|
|
27
|
+
balanceSlot: quote.balanceSlot
|
|
28
|
+
? hexToBigInt(quote.balanceSlot)
|
|
29
|
+
: undefined,
|
|
30
|
+
allowanceSlot: quote.allowanceSlot
|
|
31
|
+
? hexToBigInt(quote.allowanceSlot)
|
|
32
|
+
: undefined,
|
|
27
33
|
postOpGas: hexToBigInt(quote.postOpGas),
|
|
28
34
|
exchangeRate: hexToBigInt(quote.exchangeRate),
|
|
29
35
|
exchangeRateNativeToUsd: hexToBigInt(quote.exchangeRateNativeToUsd)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTokenQuotes.js","sourceRoot":"","sources":["../../../actions/pimlico/getTokenQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,kBAAkB,EAIlB,WAAW,EACX,WAAW,EACd,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"getTokenQuotes.js","sourceRoot":"","sources":["../../../actions/pimlico/getTokenQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,kBAAkB,EAIlB,WAAW,EACX,WAAW,EACd,MAAM,MAAM,CAAA;AAqBb;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAK/B,MAAyE,EACzE,IAAsD,EACrB,EAAE;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAA;IAElD,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,kBAAkB,EAAE,CAAA;IAClC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE;YACJ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YACvB,IAAI,CAAC,iBAAiB;YACtB,WAAW,CAAC,OAAO,CAAC;SACvB;KACJ,CAAC,CAAA;IAEF,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC9B,GAAG,KAAK;QACR,WAAW,EAAE,KAAK,CAAC,WAAW;YAC1B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC;YAChC,CAAC,CAAC,SAAS;QACf,aAAa,EAAE,KAAK,CAAC,aAAa;YAC9B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC;YAClC,CAAC,CAAC,SAAS;QACf,SAAS,EAAE,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,YAAY,EAAE,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC;QAC7C,uBAAuB,EAAE,WAAW,CAAC,KAAK,CAAC,uBAAuB,CAAC;KACtE,CAAC,CAAC,CAAA;AACP,CAAC,CAAA"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { encodeFunctionData, erc20Abi, getAddress, maxUint256 } from "viem";
|
|
1
|
+
import { RpcError, encodeFunctionData, erc20Abi, getAddress, maxUint256 } from "viem";
|
|
2
2
|
import { getPaymasterData as getPaymasterData_, prepareUserOperation } from "viem/account-abstraction";
|
|
3
3
|
import { getChainId as getChainId_ } from "viem/actions";
|
|
4
4
|
import { readContract } from "viem/actions";
|
|
5
5
|
import { getAction, parseAccount } from "viem/utils";
|
|
6
6
|
import { getTokenQuotes } from "../../../actions/pimlico.js";
|
|
7
|
-
|
|
7
|
+
import { erc20AllowanceOverride, erc20BalanceOverride } from "../../../utils/index.js";
|
|
8
|
+
export const prepareUserOperationForErc20Paymaster = (pimlicoClient, { balanceOverride = false, balanceSlot: _balanceSlot, allowanceSlot: _allowanceSlot } = {}) => async (client, parameters_) => {
|
|
8
9
|
const parameters = parameters_;
|
|
9
10
|
const account_ = client.account;
|
|
10
11
|
if (!account_)
|
|
@@ -37,6 +38,11 @@ export const prepareUserOperationForErc20Paymaster = (pimlicoClient) => async (c
|
|
|
37
38
|
chain: pimlicoClient.chain ?? client.chain ?? account.client.chain,
|
|
38
39
|
entryPointAddress: account.entryPoint.address
|
|
39
40
|
});
|
|
41
|
+
if (quotes.length === 0) {
|
|
42
|
+
throw new RpcError(new Error("Quotes not found"), {
|
|
43
|
+
shortMessage: "client didn't return token quotes, check if the token is supported"
|
|
44
|
+
});
|
|
45
|
+
}
|
|
40
46
|
const { postOpGas, exchangeRate, paymaster: paymasterERC20Address } = quotes[0];
|
|
41
47
|
const callsWithDummyApproval = [
|
|
42
48
|
{
|
|
@@ -53,6 +59,41 @@ export const prepareUserOperationForErc20Paymaster = (pimlicoClient) => async (c
|
|
|
53
59
|
////////////////////////////////////////////////////////////////////////////////
|
|
54
60
|
// Call prepareUserOperation
|
|
55
61
|
////////////////////////////////////////////////////////////////////////////////
|
|
62
|
+
const allowanceSlot = _allowanceSlot ?? quotes[0].allowanceSlot;
|
|
63
|
+
const balanceSlot = _balanceSlot ?? quotes[0].balanceSlot;
|
|
64
|
+
const hasSlot = allowanceSlot && balanceSlot;
|
|
65
|
+
if (!hasSlot && balanceOverride) {
|
|
66
|
+
throw new Error(`balanceOverride is not supported for token ${token}, provide custom slot for balance & allowance overrides`);
|
|
67
|
+
}
|
|
68
|
+
const balanceStateOverride = balanceOverride && balanceSlot
|
|
69
|
+
? erc20BalanceOverride({
|
|
70
|
+
token,
|
|
71
|
+
owner: account.address,
|
|
72
|
+
slot: balanceSlot
|
|
73
|
+
})[0]
|
|
74
|
+
: undefined;
|
|
75
|
+
const allowanceStateOverride = balanceOverride && allowanceSlot
|
|
76
|
+
? erc20AllowanceOverride({
|
|
77
|
+
token,
|
|
78
|
+
owner: account.address,
|
|
79
|
+
spender: paymasterERC20Address,
|
|
80
|
+
slot: allowanceSlot
|
|
81
|
+
})[0]
|
|
82
|
+
: undefined;
|
|
83
|
+
parameters.stateOverride =
|
|
84
|
+
balanceOverride &&
|
|
85
|
+
balanceStateOverride &&
|
|
86
|
+
allowanceStateOverride // allowanceSlot && balanceSlot is cuz of TypeScript :/
|
|
87
|
+
? (parameters.stateOverride ?? []).concat([
|
|
88
|
+
{
|
|
89
|
+
address: token,
|
|
90
|
+
stateDiff: [
|
|
91
|
+
...(allowanceStateOverride.stateDiff ?? []),
|
|
92
|
+
...(balanceStateOverride.stateDiff ?? [])
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
])
|
|
96
|
+
: parameters.stateOverride;
|
|
56
97
|
const userOperation = await getAction(client, prepareUserOperation, "prepareUserOperation")({
|
|
57
98
|
...parameters,
|
|
58
99
|
calls: callsWithDummyApproval
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"prepareUserOperationForErc20Paymaster.js","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { encodeAbiParameters, keccak256, toHex } from "viem";
|
|
2
|
+
export function erc20AllowanceOverride({ token, owner, spender, slot, amount = BigInt("0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") }) {
|
|
3
|
+
const smartAccountErc20AllowanceSlot = keccak256(encodeAbiParameters([
|
|
4
|
+
{
|
|
5
|
+
type: "address"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
type: "bytes32"
|
|
9
|
+
}
|
|
10
|
+
], [
|
|
11
|
+
spender,
|
|
12
|
+
keccak256(encodeAbiParameters([
|
|
13
|
+
{
|
|
14
|
+
type: "address"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
type: "uint256"
|
|
18
|
+
}
|
|
19
|
+
], [owner, BigInt(slot)]))
|
|
20
|
+
]));
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
address: token,
|
|
24
|
+
stateDiff: [
|
|
25
|
+
{
|
|
26
|
+
slot: smartAccountErc20AllowanceSlot,
|
|
27
|
+
value: toHex(amount)
|
|
28
|
+
}
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=erc20AllowanceOverride.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20AllowanceOverride.js","sourceRoot":"","sources":["../../utils/erc20AllowanceOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,mBAAmB,EACnB,SAAS,EACT,KAAK,EACR,MAAM,MAAM,CAAA;AAUb,MAAM,UAAU,sBAAsB,CAAC,EACnC,KAAK,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,MAAM,GAAG,MAAM,CACX,oEAAoE,CACvE,EAC8B;IAC/B,MAAM,8BAA8B,GAAG,SAAS,CAC5C,mBAAmB,CACf;QACI;YACI,IAAI,EAAE,SAAS;SAClB;QACD;YACI,IAAI,EAAE,SAAS;SAClB;KACJ,EACD;QACI,OAAO;QACP,SAAS,CACL,mBAAmB,CACf;YACI;gBACI,IAAI,EAAE,SAAS;aAClB;YACD;gBACI,IAAI,EAAE,SAAS;aAClB;SACJ,EACD,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CACxB,CACJ;KACJ,CACJ,CACJ,CAAA;IAED,OAAO;QACH;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE;gBACP;oBACI,IAAI,EAAE,8BAA8B;oBACpC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;iBACvB;aACJ;SACJ;KACJ,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { encodeAbiParameters, keccak256, toHex } from "viem";
|
|
2
|
+
export function erc20BalanceOverride({ token, owner, slot, balance = BigInt("0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") }) {
|
|
3
|
+
const smartAccountErc20BalanceSlot = keccak256(encodeAbiParameters([
|
|
4
|
+
{
|
|
5
|
+
type: "address"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
type: "uint256"
|
|
9
|
+
}
|
|
10
|
+
], [owner, slot]));
|
|
11
|
+
return [
|
|
12
|
+
{
|
|
13
|
+
address: token,
|
|
14
|
+
stateDiff: [
|
|
15
|
+
{
|
|
16
|
+
slot: smartAccountErc20BalanceSlot,
|
|
17
|
+
value: toHex(balance)
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=erc20BalanceOverride.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20BalanceOverride.js","sourceRoot":"","sources":["../../utils/erc20BalanceOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,mBAAmB,EACnB,SAAS,EACT,KAAK,EACR,MAAM,MAAM,CAAA;AASb,MAAM,UAAU,oBAAoB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAAO,GAAG,MAAM,CACZ,oEAAoE,CACvE,EAC4B;IAC7B,MAAM,4BAA4B,GAAG,SAAS,CAC1C,mBAAmB,CACf;QACI;YACI,IAAI,EAAE,SAAS;SAClB;QACD;YACI,IAAI,EAAE,SAAS;SAClB;KACJ,EACD,CAAC,KAAK,EAAE,IAAI,CAAC,CAChB,CACJ,CAAA;IAED,OAAO;QACH;YACI,OAAO,EAAE,KAAK;YACd,SAAS,EAAE;gBACP;oBACI,IAAI,EAAE,4BAA4B;oBAClC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;iBACxB;aACJ;SACJ;KACJ,CAAA;AACL,CAAC"}
|
package/_esm/utils/index.js
CHANGED
|
@@ -8,5 +8,7 @@ import { encodeNonce } from "./encodeNonce.js";
|
|
|
8
8
|
import { encodeInstallModule } from "./encodeInstallModule.js";
|
|
9
9
|
import { getPackedUserOperation } from "./getPackedUserOperation.js";
|
|
10
10
|
import { encode7579Calls } from "./encode7579Calls.js";
|
|
11
|
-
|
|
11
|
+
import { erc20AllowanceOverride } from "./erc20AllowanceOverride.js";
|
|
12
|
+
import { erc20BalanceOverride } from "./erc20BalanceOverride.js";
|
|
13
|
+
export { transactionReceiptStatus, deepHexlify, getRequiredPrefund, toOwner, isSmartAccountDeployed, getAddressFromInitCodeOrPaymasterAndData, getPackedUserOperation, encodeNonce, decodeNonce, encodeInstallModule, encode7579Calls, erc20AllowanceOverride, erc20BalanceOverride };
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
package/_esm/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EAEH,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAEH,mBAAmB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAA6B,eAAe,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EAEH,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EAEH,mBAAmB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAA6B,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAEH,sBAAsB,EACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAEH,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACH,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,OAAO,EAEP,sBAAsB,EACtB,wCAAwC,EACxC,sBAAsB,EACtB,WAAW,EACX,WAAW,EAEX,mBAAmB,EAEnB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EAGvB,CAAA"}
|
|
@@ -10,6 +10,8 @@ export type GetTokenQuotesReturnType = {
|
|
|
10
10
|
postOpGas: bigint;
|
|
11
11
|
exchangeRate: bigint;
|
|
12
12
|
exchangeRateNativeToUsd: bigint;
|
|
13
|
+
balanceSlot?: bigint;
|
|
14
|
+
allowanceSlot?: bigint;
|
|
13
15
|
}[];
|
|
14
16
|
/**
|
|
15
17
|
* Returns all related fields to calculate the potential cost of a userOperation in ERC-20 tokens.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTokenQuotes.d.ts","sourceRoot":"","sources":["../../../actions/pimlico/getTokenQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,KAAK,EAEV,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAGjB,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,MAAM,wBAAwB,CAChC,MAAM,SAAS,KAAK,GAAG,SAAS,EAChC,cAAc,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,IAC5D;IACA,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAA;CAC7B,GAAG,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAE7C,MAAM,MAAM,wBAAwB,GAAG;IACnC,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,uBAAuB,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"getTokenQuotes.d.ts","sourceRoot":"","sources":["../../../actions/pimlico/getTokenQuotes.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,KAAK,EAEV,KAAK,MAAM,EACX,KAAK,iBAAiB,EACtB,KAAK,SAAS,EAGjB,MAAM,MAAM,CAAA;AACb,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,MAAM,MAAM,wBAAwB,CAChC,MAAM,SAAS,KAAK,GAAG,SAAS,EAChC,cAAc,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,IAC5D;IACA,MAAM,EAAE,OAAO,EAAE,CAAA;IACjB,iBAAiB,EAAE,OAAO,CAAA;CAC7B,GAAG,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;AAE7C,MAAM,MAAM,wBAAwB,GAAG;IACnC,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,EAAE,OAAO,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB,EAAE,CAAA;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GACvB,MAAM,SAAS,KAAK,GAAG,SAAS,EAChC,UAAU,SAAS,SAAS,cAC5B,cAAc,SAAS,KAAK,GAAG,SAAS,8BAEhC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAG,SAAS,EAAE,gBAAgB,CAAC,QACnE,wBAAwB,CAAC,MAAM,EAAE,cAAc,CAAC,KACvD,OAAO,CAAC,wBAAwB,CA4BlC,CAAA"}
|
|
@@ -251,6 +251,11 @@ export declare function smartAccountActions(): <TChain extends Chain | undefined
|
|
|
251
251
|
};
|
|
252
252
|
extend?: object | undefined;
|
|
253
253
|
getAddress: () => Promise<import("viem").Address>;
|
|
254
|
+
decodeCalls?: ((data: import("viem").Hex) => Promise<readonly {
|
|
255
|
+
to: import("viem").Hex;
|
|
256
|
+
data?: import("viem").Hex | undefined;
|
|
257
|
+
value?: bigint | undefined;
|
|
258
|
+
}[]>) | undefined;
|
|
254
259
|
encodeCalls: (calls: readonly {
|
|
255
260
|
to: import("viem").Hex;
|
|
256
261
|
data?: import("viem").Hex | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smartAccount.d.ts","sourceRoot":"","sources":["../../../clients/decorators/smartAccount.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"smartAccount.d.ts","sourceRoot":"","sources":["../../../clients/decorators/smartAccount.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { type Chain, type Client, type Transport } from "viem";
|
|
2
2
|
import { type PrepareUserOperationParameters, type PrepareUserOperationRequest, type PrepareUserOperationReturnType, type SmartAccount } from "viem/account-abstraction";
|
|
3
|
-
export declare const prepareUserOperationForErc20Paymaster: (pimlicoClient: Client
|
|
3
|
+
export declare const prepareUserOperationForErc20Paymaster: (pimlicoClient: Client, { balanceOverride, balanceSlot: _balanceSlot, allowanceSlot: _allowanceSlot }?: {
|
|
4
|
+
balanceOverride?: boolean;
|
|
5
|
+
balanceSlot?: bigint;
|
|
6
|
+
allowanceSlot?: bigint;
|
|
7
|
+
}) => <account extends SmartAccount | undefined, const calls extends readonly unknown[], const request extends PrepareUserOperationRequest<account, accountOverride, calls>, accountOverride extends SmartAccount | undefined = undefined>(client: Client<Transport, Chain | undefined, account>, parameters_: PrepareUserOperationParameters<account, accountOverride, calls, request>) => Promise<PrepareUserOperationReturnType<account, accountOverride, calls, request>>;
|
|
4
8
|
//# sourceMappingURL=prepareUserOperationForErc20Paymaster.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepareUserOperationForErc20Paymaster.d.ts","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,KAAK,EACV,KAAK,MAAM,
|
|
1
|
+
{"version":3,"file":"prepareUserOperationForErc20Paymaster.d.ts","sourceRoot":"","sources":["../../../../experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,KAAK,EACV,KAAK,MAAM,EAGX,KAAK,SAAS,EAKjB,MAAM,MAAM,CAAA;AACb,OAAO,EAEH,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,YAAY,EAKpB,MAAM,0BAA0B,CAAA;AAOjC,eAAO,MAAM,qCAAqC,kBAE3B,MAAM,kFAKlB;IACC,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACzB,MAGD,OAAO,SAAS,YAAY,GAAG,SAAS,QAClC,KAAK,SAAS,SAAS,OAAO,EAAE,QAChC,OAAO,SAAS,2BAA2B,CAC7C,OAAO,EACP,eAAe,EACf,KAAK,CACR,EACD,eAAe,SAAS,YAAY,GAAG,SAAS,sBAExC,MAAM,CAAC,SAAS,EAAE,KAAK,GAAG,SAAS,EAAE,OAAO,CAAC,eACxC,8BAA8B,CACvC,OAAO,EACP,eAAe,EACf,KAAK,EACL,OAAO,CACV,KACF,OAAO,CACN,8BAA8B,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,OAAO,CAAC,CAmR3E,CAAA"}
|
|
@@ -25,6 +25,8 @@ type GetTokenQuotesWithBigIntAsHex = {
|
|
|
25
25
|
postOpGas: Hex;
|
|
26
26
|
exchangeRate: Hex;
|
|
27
27
|
exchangeRateNativeToUsd: Hex;
|
|
28
|
+
balanceSlot?: Hex;
|
|
29
|
+
allowanceSlot?: Hex;
|
|
28
30
|
}[];
|
|
29
31
|
};
|
|
30
32
|
export type PimlicoRpcSchema<entryPointVersion extends "0.6" | "0.7" = "0.6" | "0.7"> = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pimlico.d.ts","sourceRoot":"","sources":["../../types/pimlico.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAE7D,KAAK,2CAA2C,GAAG;IAC/C,IAAI,EAAE;QACF,YAAY,EAAE,GAAG,CAAA;QACjB,oBAAoB,EAAE,GAAG,CAAA;KAC5B,CAAA;IACD,QAAQ,EAAE;QACN,YAAY,EAAE,GAAG,CAAA;QACjB,oBAAoB,EAAE,GAAG,CAAA;KAC5B,CAAA;IACD,IAAI,EAAE;QACF,YAAY,EAAE,GAAG,CAAA;QACjB,oBAAoB,EAAE,GAAG,CAAA;KAC5B,CAAA;CACJ,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACrC,MAAM,EACA,WAAW,GACX,eAAe,GACf,WAAW,GACX,UAAU,GACV,UAAU,GACV,UAAU,GACV,QAAQ,CAAA;IACd,eAAe,EAAE,IAAI,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,KAAK,6BAA6B,GAAG;IACjC,MAAM,EAAE;QACJ,SAAS,EAAE,OAAO,CAAA;QAClB,KAAK,EAAE,OAAO,CAAA;QACd,SAAS,EAAE,GAAG,CAAA;QACd,YAAY,EAAE,GAAG,CAAA;QACjB,uBAAuB,EAAE,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"pimlico.d.ts","sourceRoot":"","sources":["../../types/pimlico.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Address, type StateOverride } from "viem";
|
|
2
|
+
export type Erc20AllowanceOverrideParameters = {
|
|
3
|
+
token: Address;
|
|
4
|
+
owner: Address;
|
|
5
|
+
spender: Address;
|
|
6
|
+
slot: bigint;
|
|
7
|
+
amount?: bigint;
|
|
8
|
+
};
|
|
9
|
+
export declare function erc20AllowanceOverride({ token, owner, spender, slot, amount }: Erc20AllowanceOverrideParameters): StateOverride;
|
|
10
|
+
//# sourceMappingURL=erc20AllowanceOverride.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20AllowanceOverride.d.ts","sourceRoot":"","sources":["../../utils/erc20AllowanceOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,aAAa,EAIrB,MAAM,MAAM,CAAA;AAEb,MAAM,MAAM,gCAAgC,GAAG;IAC3C,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAAgB,sBAAsB,CAAC,EACnC,KAAK,EACL,KAAK,EACL,OAAO,EACP,IAAI,EACJ,MAEC,EACJ,EAAE,gCAAgC,GAAG,aAAa,CAyClD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Address, type StateOverride } from "viem";
|
|
2
|
+
export type Erc20BalanceOverrideParameters = {
|
|
3
|
+
token: Address;
|
|
4
|
+
owner: Address;
|
|
5
|
+
slot: bigint;
|
|
6
|
+
balance?: bigint;
|
|
7
|
+
};
|
|
8
|
+
export declare function erc20BalanceOverride({ token, owner, slot, balance }: Erc20BalanceOverrideParameters): StateOverride;
|
|
9
|
+
//# sourceMappingURL=erc20BalanceOverride.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"erc20BalanceOverride.d.ts","sourceRoot":"","sources":["../../utils/erc20BalanceOverride.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,OAAO,EACZ,KAAK,aAAa,EAIrB,MAAM,MAAM,CAAA;AAEb,MAAM,MAAM,8BAA8B,GAAG;IACzC,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,oBAAoB,CAAC,EACjC,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAEC,EACJ,EAAE,8BAA8B,GAAG,aAAa,CA0BhD"}
|
package/_types/utils/index.d.ts
CHANGED
|
@@ -8,5 +8,7 @@ import { encodeNonce } from "./encodeNonce";
|
|
|
8
8
|
import { type EncodeInstallModuleParameters, encodeInstallModule } from "./encodeInstallModule";
|
|
9
9
|
import { getPackedUserOperation } from "./getPackedUserOperation";
|
|
10
10
|
import { type EncodeCallDataParams, encode7579Calls } from "./encode7579Calls";
|
|
11
|
-
|
|
11
|
+
import { type Erc20AllowanceOverrideParameters, erc20AllowanceOverride } from "./erc20AllowanceOverride";
|
|
12
|
+
import { type Erc20BalanceOverrideParameters, erc20BalanceOverride } from "./erc20BalanceOverride";
|
|
13
|
+
export { transactionReceiptStatus, deepHexlify, getRequiredPrefund, toOwner, type GetRequiredPrefundReturnType, isSmartAccountDeployed, getAddressFromInitCodeOrPaymasterAndData, getPackedUserOperation, encodeNonce, decodeNonce, type EncodeInstallModuleParameters, encodeInstallModule, type EncodeCallDataParams, encode7579Calls, erc20AllowanceOverride, erc20BalanceOverride, type Erc20AllowanceOverrideParameters, type Erc20BalanceOverrideParameters };
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EACH,KAAK,4BAA4B,EACjC,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EACH,KAAK,6BAA6B,EAClC,mBAAmB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,KAAK,oBAAoB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACrE,OAAO,EAAE,wCAAwC,EAAE,MAAM,4CAA4C,CAAA;AACrG,OAAO,EACH,KAAK,4BAA4B,EACjC,kBAAkB,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,OAAO,EACH,KAAK,6BAA6B,EAClC,mBAAmB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,OAAO,EAAE,KAAK,oBAAoB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EACH,KAAK,gCAAgC,EACrC,sBAAsB,EACzB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EACH,KAAK,8BAA8B,EACnC,oBAAoB,EACvB,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EACH,wBAAwB,EACxB,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,KAAK,4BAA4B,EACjC,sBAAsB,EACtB,wCAAwC,EACxC,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,KAAK,6BAA6B,EAClC,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,gCAAgC,EACrC,KAAK,8BAA8B,EACtC,CAAA"}
|
|
@@ -25,6 +25,8 @@ export type GetTokenQuotesReturnType = {
|
|
|
25
25
|
postOpGas: bigint
|
|
26
26
|
exchangeRate: bigint
|
|
27
27
|
exchangeRateNativeToUsd: bigint
|
|
28
|
+
balanceSlot?: bigint
|
|
29
|
+
allowanceSlot?: bigint
|
|
28
30
|
}[]
|
|
29
31
|
|
|
30
32
|
/**
|
|
@@ -62,6 +64,12 @@ export const getTokenQuotes = async <
|
|
|
62
64
|
|
|
63
65
|
return res.quotes.map((quote) => ({
|
|
64
66
|
...quote,
|
|
67
|
+
balanceSlot: quote.balanceSlot
|
|
68
|
+
? hexToBigInt(quote.balanceSlot)
|
|
69
|
+
: undefined,
|
|
70
|
+
allowanceSlot: quote.allowanceSlot
|
|
71
|
+
? hexToBigInt(quote.allowanceSlot)
|
|
72
|
+
: undefined,
|
|
65
73
|
postOpGas: hexToBigInt(quote.postOpGas),
|
|
66
74
|
exchangeRate: hexToBigInt(quote.exchangeRate),
|
|
67
75
|
exchangeRateNativeToUsd: hexToBigInt(quote.exchangeRateNativeToUsd)
|
|
@@ -191,5 +191,93 @@ describe.each(getCoreSmartAccounts())(
|
|
|
191
191
|
expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change
|
|
192
192
|
}
|
|
193
193
|
)
|
|
194
|
+
|
|
195
|
+
testWithRpc.skipIf(!supportsEntryPointV07)(
|
|
196
|
+
"prepareUserOperationForErc20Paymaster_v07",
|
|
197
|
+
async ({ rpc }) => {
|
|
198
|
+
const { anvilRpc } = rpc
|
|
199
|
+
|
|
200
|
+
const account = (
|
|
201
|
+
await getSmartAccountClient({
|
|
202
|
+
entryPoint: {
|
|
203
|
+
version: "0.7"
|
|
204
|
+
},
|
|
205
|
+
...rpc
|
|
206
|
+
})
|
|
207
|
+
).account
|
|
208
|
+
|
|
209
|
+
const publicClient = getPublicClient(anvilRpc)
|
|
210
|
+
|
|
211
|
+
const pimlicoClient = createPimlicoClient({
|
|
212
|
+
transport: http(rpc.paymasterRpc),
|
|
213
|
+
entryPoint: {
|
|
214
|
+
address: entryPoint07Address,
|
|
215
|
+
version: "0.7"
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
const smartAccountClient = createSmartAccountClient({
|
|
220
|
+
// @ts-ignore
|
|
221
|
+
client: getPublicClient(anvilRpc),
|
|
222
|
+
account,
|
|
223
|
+
paymaster: pimlicoClient,
|
|
224
|
+
chain: foundry,
|
|
225
|
+
userOperation: {
|
|
226
|
+
prepareUserOperation:
|
|
227
|
+
prepareUserOperationForErc20Paymaster(
|
|
228
|
+
pimlicoClient,
|
|
229
|
+
{
|
|
230
|
+
balanceOverride: true
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
},
|
|
234
|
+
bundlerTransport: http(rpc.altoRpc)
|
|
235
|
+
})
|
|
236
|
+
|
|
237
|
+
const INITIAL_TOKEN_BALANCE = parseEther("100")
|
|
238
|
+
const INTIAL_ETH_BALANCE = await publicClient.getBalance({
|
|
239
|
+
address: smartAccountClient.account.address
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
sudoMintTokens({
|
|
243
|
+
amount: INITIAL_TOKEN_BALANCE,
|
|
244
|
+
to: smartAccountClient.account.address,
|
|
245
|
+
anvilRpc
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
const opHash = await smartAccountClient.sendUserOperation({
|
|
249
|
+
calls: [
|
|
250
|
+
{
|
|
251
|
+
to: zeroAddress,
|
|
252
|
+
data: "0x",
|
|
253
|
+
value: 0n
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
paymasterContext: {
|
|
257
|
+
token: ERC20_ADDRESS
|
|
258
|
+
}
|
|
259
|
+
})
|
|
260
|
+
|
|
261
|
+
const receipt =
|
|
262
|
+
await smartAccountClient.waitForUserOperationReceipt({
|
|
263
|
+
hash: opHash
|
|
264
|
+
})
|
|
265
|
+
|
|
266
|
+
expect(receipt).toBeTruthy()
|
|
267
|
+
expect(receipt).toBeTruthy()
|
|
268
|
+
expect(receipt.success).toBeTruthy()
|
|
269
|
+
|
|
270
|
+
const FINAL_TOKEN_BALANCE = await tokenBalanceOf(
|
|
271
|
+
smartAccountClient.account.address,
|
|
272
|
+
rpc.anvilRpc
|
|
273
|
+
)
|
|
274
|
+
const FINAL_ETH_BALANCE = await publicClient.getBalance({
|
|
275
|
+
address: smartAccountClient.account.address
|
|
276
|
+
})
|
|
277
|
+
|
|
278
|
+
expect(FINAL_TOKEN_BALANCE).toBeLessThan(INITIAL_TOKEN_BALANCE) // Token balance should be deducted
|
|
279
|
+
expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change
|
|
280
|
+
}
|
|
281
|
+
)
|
|
194
282
|
}
|
|
195
283
|
)
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
type Chain,
|
|
4
4
|
type Client,
|
|
5
5
|
type ContractFunctionParameters,
|
|
6
|
+
RpcError,
|
|
6
7
|
type Transport,
|
|
7
8
|
encodeFunctionData,
|
|
8
9
|
erc20Abi,
|
|
@@ -24,9 +25,21 @@ import { getChainId as getChainId_ } from "viem/actions"
|
|
|
24
25
|
import { readContract } from "viem/actions"
|
|
25
26
|
import { getAction, parseAccount } from "viem/utils"
|
|
26
27
|
import { getTokenQuotes } from "../../../actions/pimlico"
|
|
28
|
+
import { erc20AllowanceOverride, erc20BalanceOverride } from "../../../utils"
|
|
27
29
|
|
|
28
30
|
export const prepareUserOperationForErc20Paymaster =
|
|
29
|
-
(
|
|
31
|
+
(
|
|
32
|
+
pimlicoClient: Client,
|
|
33
|
+
{
|
|
34
|
+
balanceOverride = false,
|
|
35
|
+
balanceSlot: _balanceSlot,
|
|
36
|
+
allowanceSlot: _allowanceSlot
|
|
37
|
+
}: {
|
|
38
|
+
balanceOverride?: boolean
|
|
39
|
+
balanceSlot?: bigint
|
|
40
|
+
allowanceSlot?: bigint
|
|
41
|
+
} = {}
|
|
42
|
+
) =>
|
|
30
43
|
async <
|
|
31
44
|
account extends SmartAccount | undefined,
|
|
32
45
|
const calls extends readonly unknown[],
|
|
@@ -95,6 +108,13 @@ export const prepareUserOperationForErc20Paymaster =
|
|
|
95
108
|
entryPointAddress: account.entryPoint.address
|
|
96
109
|
})
|
|
97
110
|
|
|
111
|
+
if (quotes.length === 0) {
|
|
112
|
+
throw new RpcError(new Error("Quotes not found"), {
|
|
113
|
+
shortMessage:
|
|
114
|
+
"client didn't return token quotes, check if the token is supported"
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
|
|
98
118
|
const {
|
|
99
119
|
postOpGas,
|
|
100
120
|
exchangeRate,
|
|
@@ -118,9 +138,55 @@ export const prepareUserOperationForErc20Paymaster =
|
|
|
118
138
|
}
|
|
119
139
|
|
|
120
140
|
////////////////////////////////////////////////////////////////////////////////
|
|
141
|
+
|
|
121
142
|
// Call prepareUserOperation
|
|
122
143
|
////////////////////////////////////////////////////////////////////////////////
|
|
123
144
|
|
|
145
|
+
const allowanceSlot = _allowanceSlot ?? quotes[0].allowanceSlot
|
|
146
|
+
const balanceSlot = _balanceSlot ?? quotes[0].balanceSlot
|
|
147
|
+
|
|
148
|
+
const hasSlot = allowanceSlot && balanceSlot
|
|
149
|
+
|
|
150
|
+
if (!hasSlot && balanceOverride) {
|
|
151
|
+
throw new Error(
|
|
152
|
+
`balanceOverride is not supported for token ${token}, provide custom slot for balance & allowance overrides`
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const balanceStateOverride =
|
|
157
|
+
balanceOverride && balanceSlot
|
|
158
|
+
? erc20BalanceOverride({
|
|
159
|
+
token,
|
|
160
|
+
owner: account.address,
|
|
161
|
+
slot: balanceSlot
|
|
162
|
+
})[0]
|
|
163
|
+
: undefined
|
|
164
|
+
|
|
165
|
+
const allowanceStateOverride =
|
|
166
|
+
balanceOverride && allowanceSlot
|
|
167
|
+
? erc20AllowanceOverride({
|
|
168
|
+
token,
|
|
169
|
+
owner: account.address,
|
|
170
|
+
spender: paymasterERC20Address,
|
|
171
|
+
slot: allowanceSlot
|
|
172
|
+
})[0]
|
|
173
|
+
: undefined
|
|
174
|
+
|
|
175
|
+
parameters.stateOverride =
|
|
176
|
+
balanceOverride &&
|
|
177
|
+
balanceStateOverride &&
|
|
178
|
+
allowanceStateOverride // allowanceSlot && balanceSlot is cuz of TypeScript :/
|
|
179
|
+
? (parameters.stateOverride ?? []).concat([
|
|
180
|
+
{
|
|
181
|
+
address: token,
|
|
182
|
+
stateDiff: [
|
|
183
|
+
...(allowanceStateOverride.stateDiff ?? []),
|
|
184
|
+
...(balanceStateOverride.stateDiff ?? [])
|
|
185
|
+
]
|
|
186
|
+
}
|
|
187
|
+
])
|
|
188
|
+
: parameters.stateOverride
|
|
189
|
+
|
|
124
190
|
const userOperation = await getAction(
|
|
125
191
|
client,
|
|
126
192
|
prepareUserOperation,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "permissionless",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.11",
|
|
4
4
|
"author": "Pimlico",
|
|
5
5
|
"homepage": "https://docs.pimlico.io/permissionless",
|
|
6
6
|
"repository": "github:pimlicolabs/permissionless.js",
|
|
@@ -77,6 +77,6 @@
|
|
|
77
77
|
}
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
|
-
"viem": "^2.21.
|
|
80
|
+
"viem": "^2.21.22"
|
|
81
81
|
}
|
|
82
82
|
}
|
package/types/pimlico.ts
CHANGED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { toHex } from "viem"
|
|
2
|
+
import { describe, expect, test } from "vitest"
|
|
3
|
+
import {
|
|
4
|
+
type Erc20AllowanceOverrideParameters,
|
|
5
|
+
erc20AllowanceOverride
|
|
6
|
+
} from "./erc20AllowanceOverride"
|
|
7
|
+
|
|
8
|
+
describe("erc20AllowanceOverride", () => {
|
|
9
|
+
test("should return the correct structure for valid inputs", () => {
|
|
10
|
+
const params = {
|
|
11
|
+
token: "0xTokenAddress",
|
|
12
|
+
owner: "0xOwnerAddress",
|
|
13
|
+
spender: "0xSpenderAddress",
|
|
14
|
+
slot: BigInt(1),
|
|
15
|
+
amount: BigInt(100)
|
|
16
|
+
} as const
|
|
17
|
+
|
|
18
|
+
const result = erc20AllowanceOverride(params)
|
|
19
|
+
|
|
20
|
+
expect(result).toEqual([
|
|
21
|
+
{
|
|
22
|
+
address: params.token,
|
|
23
|
+
stateDiff: [
|
|
24
|
+
{
|
|
25
|
+
slot: expect.any(String), // Slot will be a keccak256 hash
|
|
26
|
+
value: toHex(params.amount)
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
])
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
test("should use the default amount when none is provided", () => {
|
|
34
|
+
const params: Erc20AllowanceOverrideParameters = {
|
|
35
|
+
token: "0xTokenAddress",
|
|
36
|
+
owner: "0xOwnerAddress",
|
|
37
|
+
spender: "0xSpenderAddress",
|
|
38
|
+
slot: BigInt(1)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const result = erc20AllowanceOverride(params)
|
|
42
|
+
|
|
43
|
+
const expectedDefaultAmount = BigInt(
|
|
44
|
+
"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
expect(result).toEqual([
|
|
48
|
+
{
|
|
49
|
+
address: params.token,
|
|
50
|
+
stateDiff: [
|
|
51
|
+
{
|
|
52
|
+
slot: expect.any(String), // Slot will be a keccak256 hash
|
|
53
|
+
value: toHex(expectedDefaultAmount)
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
])
|
|
58
|
+
})
|
|
59
|
+
})
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Address,
|
|
3
|
+
type StateOverride,
|
|
4
|
+
encodeAbiParameters,
|
|
5
|
+
keccak256,
|
|
6
|
+
toHex
|
|
7
|
+
} from "viem"
|
|
8
|
+
|
|
9
|
+
export type Erc20AllowanceOverrideParameters = {
|
|
10
|
+
token: Address
|
|
11
|
+
owner: Address
|
|
12
|
+
spender: Address
|
|
13
|
+
slot: bigint
|
|
14
|
+
amount?: bigint
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function erc20AllowanceOverride({
|
|
18
|
+
token,
|
|
19
|
+
owner,
|
|
20
|
+
spender,
|
|
21
|
+
slot,
|
|
22
|
+
amount = BigInt(
|
|
23
|
+
"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
|
|
24
|
+
)
|
|
25
|
+
}: Erc20AllowanceOverrideParameters): StateOverride {
|
|
26
|
+
const smartAccountErc20AllowanceSlot = keccak256(
|
|
27
|
+
encodeAbiParameters(
|
|
28
|
+
[
|
|
29
|
+
{
|
|
30
|
+
type: "address"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
type: "bytes32"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
[
|
|
37
|
+
spender,
|
|
38
|
+
keccak256(
|
|
39
|
+
encodeAbiParameters(
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
type: "address"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
type: "uint256"
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
[owner, BigInt(slot)]
|
|
49
|
+
)
|
|
50
|
+
)
|
|
51
|
+
]
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
return [
|
|
56
|
+
{
|
|
57
|
+
address: token,
|
|
58
|
+
stateDiff: [
|
|
59
|
+
{
|
|
60
|
+
slot: smartAccountErc20AllowanceSlot,
|
|
61
|
+
value: toHex(amount)
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { toHex } from "viem"
|
|
2
|
+
import { describe, expect, test } from "vitest"
|
|
3
|
+
import {
|
|
4
|
+
type Erc20BalanceOverrideParameters,
|
|
5
|
+
erc20BalanceOverride
|
|
6
|
+
} from "./erc20BalanceOverride"
|
|
7
|
+
|
|
8
|
+
describe("erc20BalanceOverride", () => {
|
|
9
|
+
test("should return the correct structure for valid inputs", () => {
|
|
10
|
+
const params = {
|
|
11
|
+
token: "0xTokenAddress",
|
|
12
|
+
owner: "0xOwnerAddress",
|
|
13
|
+
slot: BigInt(1),
|
|
14
|
+
balance: BigInt(1000)
|
|
15
|
+
} as const
|
|
16
|
+
|
|
17
|
+
const result = erc20BalanceOverride(params)
|
|
18
|
+
|
|
19
|
+
expect(result).toEqual([
|
|
20
|
+
{
|
|
21
|
+
address: params.token,
|
|
22
|
+
stateDiff: [
|
|
23
|
+
{
|
|
24
|
+
slot: expect.any(String), // Slot will be a keccak256 hash
|
|
25
|
+
value: toHex(params.balance)
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
])
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
test("should use the default balance when none is provided", () => {
|
|
33
|
+
const params: Erc20BalanceOverrideParameters = {
|
|
34
|
+
token: "0xTokenAddress",
|
|
35
|
+
owner: "0xOwnerAddress",
|
|
36
|
+
slot: BigInt(1)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const result = erc20BalanceOverride(params)
|
|
40
|
+
|
|
41
|
+
const expectedDefaultBalance = BigInt(
|
|
42
|
+
"0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
expect(result).toEqual([
|
|
46
|
+
{
|
|
47
|
+
address: params.token,
|
|
48
|
+
stateDiff: [
|
|
49
|
+
{
|
|
50
|
+
slot: expect.any(String), // Slot will be a keccak256 hash
|
|
51
|
+
value: toHex(expectedDefaultBalance)
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
])
|
|
56
|
+
})
|
|
57
|
+
})
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import {
|
|
2
|
+
type Address,
|
|
3
|
+
type StateOverride,
|
|
4
|
+
encodeAbiParameters,
|
|
5
|
+
keccak256,
|
|
6
|
+
toHex
|
|
7
|
+
} from "viem"
|
|
8
|
+
|
|
9
|
+
export type Erc20BalanceOverrideParameters = {
|
|
10
|
+
token: Address
|
|
11
|
+
owner: Address
|
|
12
|
+
slot: bigint
|
|
13
|
+
balance?: bigint
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function erc20BalanceOverride({
|
|
17
|
+
token,
|
|
18
|
+
owner,
|
|
19
|
+
slot,
|
|
20
|
+
balance = BigInt(
|
|
21
|
+
"0x100000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
|
|
22
|
+
)
|
|
23
|
+
}: Erc20BalanceOverrideParameters): StateOverride {
|
|
24
|
+
const smartAccountErc20BalanceSlot = keccak256(
|
|
25
|
+
encodeAbiParameters(
|
|
26
|
+
[
|
|
27
|
+
{
|
|
28
|
+
type: "address"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: "uint256"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
[owner, slot]
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
return [
|
|
39
|
+
{
|
|
40
|
+
address: token,
|
|
41
|
+
stateDiff: [
|
|
42
|
+
{
|
|
43
|
+
slot: smartAccountErc20BalanceSlot,
|
|
44
|
+
value: toHex(balance)
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
package/utils/index.ts
CHANGED
|
@@ -17,6 +17,14 @@ import {
|
|
|
17
17
|
import { getPackedUserOperation } from "./getPackedUserOperation"
|
|
18
18
|
|
|
19
19
|
import { type EncodeCallDataParams, encode7579Calls } from "./encode7579Calls"
|
|
20
|
+
import {
|
|
21
|
+
type Erc20AllowanceOverrideParameters,
|
|
22
|
+
erc20AllowanceOverride
|
|
23
|
+
} from "./erc20AllowanceOverride"
|
|
24
|
+
import {
|
|
25
|
+
type Erc20BalanceOverrideParameters,
|
|
26
|
+
erc20BalanceOverride
|
|
27
|
+
} from "./erc20BalanceOverride"
|
|
20
28
|
|
|
21
29
|
export {
|
|
22
30
|
transactionReceiptStatus,
|
|
@@ -32,5 +40,9 @@ export {
|
|
|
32
40
|
type EncodeInstallModuleParameters,
|
|
33
41
|
encodeInstallModule,
|
|
34
42
|
type EncodeCallDataParams,
|
|
35
|
-
encode7579Calls
|
|
43
|
+
encode7579Calls,
|
|
44
|
+
erc20AllowanceOverride,
|
|
45
|
+
erc20BalanceOverride,
|
|
46
|
+
type Erc20AllowanceOverrideParameters,
|
|
47
|
+
type Erc20BalanceOverrideParameters
|
|
36
48
|
}
|