viem-tx-sim 0.1.1 → 0.2.1

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.
Files changed (39) hide show
  1. package/README.md +115 -34
  2. package/contracts/TxSimulator.sol +83 -20
  3. package/dist/generated/txSimulatorBytecode.d.ts +1 -1
  4. package/dist/generated/txSimulatorBytecode.d.ts.map +1 -1
  5. package/dist/generated/txSimulatorBytecode.js +1 -1
  6. package/dist/generated/txSimulatorBytecode.js.map +1 -1
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/internal/queryDiscovery.d.ts +8 -0
  10. package/dist/internal/queryDiscovery.d.ts.map +1 -0
  11. package/dist/internal/queryDiscovery.js +38 -0
  12. package/dist/internal/queryDiscovery.js.map +1 -0
  13. package/dist/internal/requirements.d.ts +2 -1
  14. package/dist/internal/requirements.d.ts.map +1 -1
  15. package/dist/internal/requirements.js +23 -9
  16. package/dist/internal/requirements.js.map +1 -1
  17. package/dist/internal/simulator.d.ts +19 -3
  18. package/dist/internal/simulator.d.ts.map +1 -1
  19. package/dist/internal/simulator.js +12 -16
  20. package/dist/internal/simulator.js.map +1 -1
  21. package/dist/internal/slots.d.ts +4 -2
  22. package/dist/internal/slots.d.ts.map +1 -1
  23. package/dist/internal/slots.js +4 -2
  24. package/dist/internal/slots.js.map +1 -1
  25. package/dist/txSimulator.d.ts +64 -40
  26. package/dist/txSimulator.d.ts.map +1 -1
  27. package/dist/txSimulator.js +68 -16
  28. package/dist/txSimulator.js.map +1 -1
  29. package/dist/types.d.ts +59 -16
  30. package/dist/types.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/generated/txSimulatorBytecode.ts +1 -1
  33. package/src/index.ts +4 -1
  34. package/src/internal/queryDiscovery.ts +49 -0
  35. package/src/internal/requirements.ts +23 -9
  36. package/src/internal/simulator.ts +28 -24
  37. package/src/internal/slots.ts +5 -2
  38. package/src/txSimulator.ts +164 -63
  39. package/src/types.ts +63 -17
@@ -1 +1 @@
1
- {"version":3,"file":"txSimulator.js","sourceRoot":"","sources":["../src/txSimulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"txSimulator.js","sourceRoot":"","sources":["../src/txSimulator.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -8,6 +8,35 @@ export type SimulatedCall = {
8
8
  /** Native value to send with this call; omitted means zero. */
9
9
  value?: bigint;
10
10
  };
11
+ /** One balance to observe during simulation. `asset` is `"native"` or an ERC-20 address. */
12
+ export type BalanceQuery = {
13
+ asset: "native" | Address;
14
+ /** Account whose balance is observed; this can be any address, not just `from`. */
15
+ account: Address;
16
+ };
17
+ /** Protocol-level native balance to set before simulating; no slot discovery needed. */
18
+ export type NativeBalanceOverride = {
19
+ /** Account to fund: `from` or any other address such as a plugin or router. */
20
+ account: Address;
21
+ /** Balance in wei to set. */
22
+ amount: bigint;
23
+ };
24
+ /**
25
+ * Balance observation for one query. `before` is after `tokenSlotOverrides` are applied, so deltas
26
+ * describe simulated changes under the supplied state assumptions.
27
+ */
28
+ export type BalanceDelta = {
29
+ asset: "native" | Address;
30
+ account: Address;
31
+ before: bigint;
32
+ after: bigint;
33
+ delta: bigint;
34
+ /**
35
+ * Signed change per call, index-aligned with `calls`. Sums to `delta`; on a
36
+ * revert, entries from the failing call onward are 0n.
37
+ */
38
+ byCall: readonly bigint[];
39
+ };
11
40
  /** Structured event emitted before and after each RPC call when debug logging is enabled. */
12
41
  export type SimulationDebugEvent = {
13
42
  /** Lifecycle phase for the RPC operation. */
@@ -45,7 +74,7 @@ type SimulationOptions = {
45
74
  export type TokenSlotOverride = {
46
75
  /** Token contract whose storage should be overridden. */
47
76
  token: Address;
48
- /** Storage slot to write. Usually prepared by `prepareBalanceOverrides` or `prepareAllowanceOverrides`. */
77
+ /** Storage slot to write. Usually prepared by `tokenOverrides.forBalances` or `tokenOverrides.forAllowances`. */
49
78
  slot: Hex;
50
79
  /** Value written to the slot. Must be below uint256 max. */
51
80
  amount: bigint;
@@ -88,26 +117,43 @@ export type SimulateArgs = SimulationOptions & {
88
117
  from: Address;
89
118
  /** One call or an ERC-5792-style sequential batch. Must contain at least one call. */
90
119
  calls: readonly SimulatedCall[];
91
- /** Storage-slot overrides applied before simulating. Usually from override preparation. */
120
+ /** Balances to observe. Use `[]` to execute without balance observations. */
121
+ balanceQueries: readonly BalanceQuery[];
122
+ /**
123
+ * Storage-slot overrides applied before simulating. Query the tokens you forge if you want to
124
+ * observe them.
125
+ */
92
126
  tokenSlotOverrides?: readonly TokenSlotOverride[];
127
+ /**
128
+ * Native balance overrides applied before simulating. Duplicate accounts use the last amount.
129
+ * Query forged accounts if you want to observe them.
130
+ */
131
+ nativeBalanceOverrides?: readonly NativeBalanceOverride[];
93
132
  /** Additional error definitions for decoding this call's reverts; merged after the bound errorAbi. */
94
133
  errorAbi?: Abi;
95
134
  };
96
- /** Arguments for `TxSimulator.prepareBalanceOverrides`. */
135
+ /** Arguments for `TxSimulator.balanceQueries.forUser`. */
136
+ export type ForUserBalanceQueriesArgs = SimulationOptions & {
137
+ /** Account whose wallet-style balance queries should be discovered. */
138
+ from: Address;
139
+ /** Calls whose access lists should be searched for token candidates. */
140
+ calls: readonly SimulatedCall[];
141
+ };
142
+ /** Arguments for `TxSimulator.tokenOverrides.forBalances`. */
97
143
  export type PrepareBalanceOverridesArgs = SimulationOptions & {
98
144
  /** Account whose token balance overrides should be prepared. */
99
145
  from: Address;
100
146
  /** Tokens to prepare ERC-20-style balance overrides for. */
101
147
  tokens: readonly Address[];
102
148
  };
103
- /** Arguments for `TxSimulator.prepareAllowanceOverrides`. */
149
+ /** Arguments for `TxSimulator.tokenOverrides.forAllowances`. */
104
150
  export type PrepareAllowanceOverridesArgs = SimulationOptions & {
105
151
  /** Account whose allowance overrides should be prepared. */
106
152
  from: Address;
107
153
  /** Token/spender allowance pairs to prepare overrides for. */
108
154
  pairs: readonly AllowanceSlotPair[];
109
155
  };
110
- /** Arguments for `TxSimulator.estimateAssetRequirements`. */
156
+ /** Arguments for `TxSimulator.tokenOverrides.estimateRequirements`. */
111
157
  export type EstimateAssetRequirementsArgs = SimulationOptions & {
112
158
  /** Account whose balance and approval needs should be estimated. */
113
159
  from: Address;
@@ -179,24 +225,21 @@ export type EstimatedAssetRequirementsReverted = EstimatedAssetRequirementsBase
179
225
  };
180
226
  /** Asset-requirement estimate result; check `status` before reading revert fields. */
181
227
  export type EstimatedAssetRequirements = EstimatedAssetRequirementsSuccess | EstimatedAssetRequirementsReverted;
182
- /** Raw balance delta for native ETH or an ERC-20-style `balanceOf(address)` asset. */
183
- export type AssetBalanceDelta = {
184
- /** `"native"` for ETH, otherwise the token contract address. */
185
- asset: "native" | Address;
186
- /** Signed raw-unit balance change for `from`; negative means the account lost assets. */
187
- delta: bigint;
188
- };
189
228
  /** Successful simulation result. */
190
229
  export type SimulationSuccess = {
191
230
  status: "success";
192
- /** Non-zero raw balance deltas observed during the simulated execution. */
193
- assetBalanceDeltas: AssetBalanceDelta[];
231
+ /** Balance observations mirrored 1:1 from successful queries, including zero deltas. */
232
+ balanceDeltas: BalanceDelta[];
233
+ /** Queries that could not be read, usually because an ERC-20 `balanceOf` staticcall failed. */
234
+ unresolved: BalanceQuery[];
194
235
  };
195
236
  /** Simulation result for a transaction revert; infrastructure failures throw typed errors instead. */
196
237
  export type SimulationReverted = {
197
238
  status: "reverted";
198
- /** Non-zero raw balance deltas observed before the failing call. */
199
- assetBalanceDeltas: AssetBalanceDelta[];
239
+ /** Balance observations mirrored 1:1 from successful queries, including zero deltas. */
240
+ balanceDeltas: BalanceDelta[];
241
+ /** Queries that could not be read, usually because an ERC-20 `balanceOf` staticcall failed. */
242
+ unresolved: BalanceQuery[];
200
243
  /** Raw EVM revert data from the failing simulated call. */
201
244
  revertData: Hex;
202
245
  /** Human-readable decoded revert; present when revertData decodes via supplied error definitions or as built-in Error/Panic. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "viem-tx-sim",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "RPC-only transaction simulation helpers for viem applications.",
5
5
  "keywords": [
6
6
  "eth_call",
@@ -2,4 +2,4 @@ import type { Hex } from "viem";
2
2
 
3
3
  // Generated by scripts/generate-txsim-bytecode.mjs.
4
4
  export const txSimulatorRuntimeBytecode =
5
- "0x60806040526004361061004c575f3560e01c8063150b7a02146100575780631626ba7e146100a0578063bc197c81146100bf578063cb8935e9146100ed578063f23a6e6114610119575f80fd5b3661005357005b5f80fd5b348015610062575f80fd5b506100826100713660046110ac565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156100ab575f80fd5b506100826100ba366004611115565b610145565b3480156100ca575f80fd5b506100826100d936600461119c565b63bc197c8160e01b98975050505050505050565b3480156100f8575f80fd5b5061010c61010736600461124e565b610181565b60405161009791906113cb565b348015610124575f80fd5b506100826101333660046114b9565b63f23a6e6160e01b9695505050505050565b5f30610152858585610300565b6001600160a01b03161461016e576001600160e01b0319610177565b630b135d3f60e11b5b90505b9392505050565b6101d56040518061014001604052805f151581526020015f8152602001606081526020015f8152602001606081526020016060815260200160608152602001606081526020015f8152602001606081525090565b475f6101e18787610456565b90506101ee88600161153f565b6101f89085611552565b6001600160401b0381111561020f5761020f611569565b604051908082528060200260200182016040528015610238578160200160208202803683370190505b50610120840190815260408051608081018252838201518152602080850151908201529151908201525f90606081016102728b600161153f565b905290505f6102878b8b8b8b8b8b888b6106d5565b60408901919091526020880191909152901515865290506102a847856107cd565b8560600181815250506102c383606001518460800151610844565b6080860152808410156102d6575f6102e0565b6102e0818561157d565b6101008601526102f2898985886108e0565b505050509695505050505050565b5f60418290036103bb578235602084013560408501355f1a601b81101561032f5761032c601b82611590565b90505b8060ff16601b1415801561034757508060ff16601c14155b15610357575f935050505061017a565b604080515f81526020810180835289905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156103a7573d5f803e3d5ffd5b50505060206040510351935050505061017a565b604082900361044d57823560208401356001600160ff1b0381165f6103e560ff84901c601b61153f565b604080515f8152602081018083528b905260ff831691810191909152606081018690526080810184905290915060019060a0016020604051602081039080840390855afa158015610438573d5f803e3d5ffd5b5050506020604051035194505050505061017a565b505f9392505050565b6104876040518060a00160405280606081526020016060815260200160608152602001606081526020015f81525090565b816001600160401b0381111561049f5761049f611569565b6040519080825280602002602001820160405280156104c8578160200160208202803683370190505b508152816001600160401b038111156104e3576104e3611569565b60405190808252806020026020018201604052801561050c578160200160208202803683370190505b506020820152816001600160401b0381111561052a5761052a611569565b604051908082528060200260200182016040528015610553578160200160208202803683370190505b506040820152816001600160401b0381111561057157610571611569565b60405190808252806020026020018201604052801561059a578160200160208202803683370190505b5060608201525f5b828110156106ce575f806105dc8686858181106105c1576105c16115a9565b90506020020160208101906105d691906115bd565b30610b97565b9150915081156106c4576001846040015184815181106105fe576105fe6115a9565b60200260200101901515908115158152505080845f01518481518110610626576106266115a9565b6020026020010181815250508084602001518481518110610649576106496115a9565b602002602001018181525050858584818110610667576106676115a9565b905060200201602081019061067c91906115bd565b606085015160808601805190610691826115d6565b9052815181106106a3576106a36115a9565b60200260200101906001600160a01b031690816001600160a01b0316815250505b50506001016105a2565b5092915050565b60015f1960608386156106f7576106f7888888606001515f8a60400151610c6f565b5f5b8b8110156107bd575f8061072f8f8f85818110610718576107186115a9565b905060200281019061072a91906115ee565b610d2a565b9150915081610768575f96509194509092508390838915610761576107618b8b90508a60600151858c60400151610dac565b50506107bd565b4784811015610775578094505b6107888e8e8c5f01518d60200151610e4b565b8a156107af576107af8c8c8c606001518760016107a5919061153f565b8e60400151610c6f565b5050508060010190506106f9565b5098509850985098945050505050565b5f818310610808575f6107e0838561157d565b90506001600160ff1b03811115610801576001600160ff1b0391505061083e565b905061083e565b5f610813848461157d565b90506001600160ff1b0381111561083157600160ff1b91505061083e565b61083a8161160c565b9150505b92915050565b6060816001600160401b0381111561085e5761085e611569565b604051908082528060200260200182016040528015610887578160200160208202803683370190505b5090505f5b828110156106ce578381815181106108a6576108a66115a9565b60200260200101518282815181106108c0576108c06115a9565b6001600160a01b039092166020928302919091019091015260010161088c565b826001600160401b038111156108f8576108f8611569565b604051908082528060200260200182016040528015610921578160200160208202803683370190505b5060e08201525f836001600160401b0381111561094057610940611569565b604051908082528060200260200182016040528015610969578160200160208202803683370190505b5090505f846001600160401b0381111561098557610985611569565b6040519080825280602002602001820160405280156109ae578160200160208202803683370190505b5090505f805b86811015610b6c57856040015181815181106109d2576109d26115a9565b602002602001015115610b6457856020015181815181106109f5576109f56115a9565b6020026020010151865f01518281518110610a1257610a126115a9565b602002602001015110610a875785602001518181518110610a3557610a356115a9565b6020026020010151865f01518281518110610a5257610a526115a9565b6020026020010151610a64919061157d565b8560e001518281518110610a7a57610a7a6115a9565b6020026020010181815250505b5f80610a9e8a8a858181106105c1576105c16115a9565b9150915081610aae575050610b64565b5f610ad5828a5f01518681518110610ac857610ac86115a9565b60200260200101516107cd565b90508015610b60578a8a85818110610aef57610aef6115a9565b9050602002016020810190610b0491906115bd565b878681518110610b1657610b166115a9565b60200260200101906001600160a01b031690816001600160a01b03168152505080868681518110610b4957610b496115a9565b6020908102919091010152610b5d856115d6565b94505b5050505b6001016109b4565b50610b778382610844565b60a0850152610b868282610ee4565b8460c0018190525050505050505050565b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b17905291515f92839283928392881691610bf091611626565b5f60405180830381855afa9150503d805f8114610c28576040519150601f19603f3d011682016040523d82523d5f602084013e610c2d565b606091505b5091509150811580610c40575060208151105b15610c4c575050610c68565b81935080806020019051810190610c639190611637565b925050505b9250929050565b5f5b84811015610d22575f80610cd6888885818110610c9057610c906115a9565b610ca692602060409092020190810191506115bd565b308a8a87818110610cb957610cb96115a9565b9050604002016020016020810190610cd191906115bd565b610f73565b9150915081610ce5575f610ce7565b805b8486610cf38987611552565b610cfd919061153f565b81518110610d0d57610d0d6115a9565b60209081029190910101525050600101610c71565b505050505050565b5f6060610d3a60208401846115bd565b6001600160a01b03166020840135610d55604086018661164e565b604051610d63929190611690565b5f6040518083038185875af1925050503d805f8114610d9d576040519150601f19603f3d011682016040523d82523d5f602084013e610da2565b606091505b5091509150915091565b5f5b84811015610e44575f8284610dc38785611552565b610dcd919061153f565b81518110610ddd57610ddd6115a9565b602002602001015190505f846001610df5919061153f565b90505b85811015610e3a57818482610e0d8987611552565b610e17919061153f565b81518110610e2757610e276115a9565b6020908102919091010152600101610df8565b5050600101610dae565b5050505050565b5f5b83811015610e4457828181518110610e6757610e676115a9565b602002602001015115610edc575f80610e8b8787858181106105c1576105c16115a9565b91509150818015610eb45750838381518110610ea957610ea96115a9565b602002602001015181105b15610ed95780848481518110610ecc57610ecc6115a9565b6020026020010181815250505b50505b600101610e4d565b6060816001600160401b03811115610efe57610efe611569565b604051908082528060200260200182016040528015610f27578160200160208202803683370190505b5090505f5b828110156106ce57838181518110610f4657610f466115a9565b6020026020010151828281518110610f6057610f606115a9565b6020908102919091010152600101610f2c565b604080516001600160a01b03848116602483015283811660448084019190915283518084039091018152606490920183526020820180516001600160e01b0316636eb1769f60e11b17905291515f92839283928392891691610fd491611626565b5f60405180830381855afa9150503d805f811461100c576040519150601f19603f3d011682016040523d82523d5f602084013e611011565b606091505b5091509150811580611024575060208151105b1561103057505061104c565b819350808060200190518101906110479190611637565b925050505b935093915050565b80356001600160a01b038116811461106a575f80fd5b919050565b5f8083601f84011261107f575f80fd5b5081356001600160401b03811115611095575f80fd5b602083019150836020828501011115610c68575f80fd5b5f805f805f608086880312156110c0575f80fd5b6110c986611054565b94506110d760208701611054565b93506040860135925060608601356001600160401b038111156110f8575f80fd5b6111048882890161106f565b969995985093965092949392505050565b5f805f60408486031215611127575f80fd5b8335925060208401356001600160401b03811115611143575f80fd5b61114f8682870161106f565b9497909650939450505050565b5f8083601f84011261116c575f80fd5b5081356001600160401b03811115611182575f80fd5b6020830191508360208260051b8501011115610c68575f80fd5b5f805f805f805f8060a0898b0312156111b3575f80fd5b6111bc89611054565b97506111ca60208a01611054565b965060408901356001600160401b03808211156111e5575f80fd5b6111f18c838d0161115c565b909850965060608b0135915080821115611209575f80fd5b6112158c838d0161115c565b909650945060808b013591508082111561122d575f80fd5b5061123a8b828c0161106f565b999c989b5096995094979396929594505050565b5f805f805f8060608789031215611263575f80fd5b86356001600160401b0380821115611279575f80fd5b6112858a838b0161115c565b9098509650602089013591508082111561129d575f80fd5b6112a98a838b0161115c565b909650945060408901359150808211156112c1575f80fd5b818901915089601f8301126112d4575f80fd5b8135818111156112e2575f80fd5b8a60208260061b85010111156112f6575f80fd5b6020830194508093505050509295509295509295565b5f5b8381101561132657818101518382015260200161130e565b50505f910152565b5f815180845261134581602086016020860161130c565b601f01601f19169290920160200192915050565b5f815180845260208085019450602084015f5b838110156113915781516001600160a01b03168752958201959082019060010161136c565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611391578151875295820195908201906001016113af565b602081526113de60208201835115159052565b602082015160408201525f604083015161014080606085015261140561016085018361132e565b9150606085015160808501526080850151601f19808685030160a087015261142d8483611359565b935060a08701519150808685030160c087015261144a8483611359565b935060c08701519150808685030160e0870152611467848361139c565b935060e08701519150610100818786030181880152611486858461139c565b908801516101208881019190915288015187820390920184880152935090506114af838261139c565b9695505050505050565b5f805f805f8060a087890312156114ce575f80fd5b6114d787611054565b95506114e560208801611054565b9450604087013593506060870135925060808701356001600160401b0381111561150d575f80fd5b61151989828a0161106f565b979a9699509497509295939492505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561083e5761083e61152b565b808202811582820484141761083e5761083e61152b565b634e487b7160e01b5f52604160045260245ffd5b8181038181111561083e5761083e61152b565b60ff818116838216019081111561083e5761083e61152b565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156115cd575f80fd5b61017a82611054565b5f600182016115e7576115e761152b565b5060010190565b5f8235605e19833603018112611602575f80fd5b9190910192915050565b5f600160ff1b82016116205761162061152b565b505f0390565b5f825161160281846020870161130c565b5f60208284031215611647575f80fd5b5051919050565b5f808335601e19843603018112611663575f80fd5b8301803591506001600160401b0382111561167c575f80fd5b602001915036819003821315610c68575f80fd5b818382375f910190815291905056fea2646970667358221220c9adb57984fec989769acf8df499b49fd3aadd781fd0b128ec026480393cb0a764736f6c63430008180033" as const satisfies Hex;
5
+ "0x60806040526004361061004c575f3560e01c8063150b7a02146100575780631626ba7e146100a05780639b093492146100bf578063bc197c81146100eb578063f23a6e6114610119575f80fd5b3661005357005b5f80fd5b348015610062575f80fd5b50610082610071366004611316565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020015b60405180910390f35b3480156100ab575f80fd5b506100826100ba36600461137f565b610145565b3480156100ca575f80fd5b506100de6100d9366004611446565b610181565b60405161009791906115f0565b3480156100f6575f80fd5b5061008261010536600461171e565b63bc197c8160e01b98975050505050505050565b348015610124575f80fd5b506100826101333660046117bc565b63f23a6e6160e01b9695505050505050565b5f306101528585856103b6565b6001600160a01b03161461016e576001600160e01b0319610177565b630b135d3f60e11b5b90505b9392505050565b6101e36040518061018001604052805f151581526020015f8152602001606081526020015f8152602001606081526020016060815260200160608152602001606081526020015f81526020016060815260200160608152602001606081525090565b475f6101ef898961050c565b90505f6101fd8b6001611842565b90506102098186611855565b6001600160401b038111156102205761022061186c565b604051908082528060200260200182016040528015610249578160200160208202803683370190505b50610140850152846001600160401b038111156102685761026861186c565b604051908082528060200260200182016040528015610291578160200160208202803683370190505b506101608501526102a28188611855565b6001600160401b038111156102b9576102b961186c565b6040519080825280602002602001820160405280156102e2578160200160208202803683370190505b5061012085019081526040805160c081018252848201518152602080860151908201529151908201526101408501516060820152610160850151608082015260a081018290525f61033a8e8e8e8e8e8e8e8e8a61078b565b60408a019190915260208901919091529015158752905061035b47866108dc565b86606001818152505061037684606001518560800151610953565b608087015280851015610389575f610393565b6103938186611880565b6101008701526103a58c8c86896109ef565b505050505098975050505050505050565b5f6041829003610471578235602084013560408501355f1a601b8110156103e5576103e2601b82611893565b90505b8060ff16601b141580156103fd57508060ff16601c14155b1561040d575f935050505061017a565b604080515f81526020810180835289905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa15801561045d573d5f803e3d5ffd5b50505060206040510351935050505061017a565b604082900361050357823560208401356001600160ff1b0381165f61049b60ff84901c601b611842565b604080515f8152602081018083528b905260ff831691810191909152606081018690526080810184905290915060019060a0016020604051602081039080840390855afa1580156104ee573d5f803e3d5ffd5b5050506020604051035194505050505061017a565b505f9392505050565b61053d6040518060a00160405280606081526020016060815260200160608152602001606081526020015f81525090565b816001600160401b038111156105555761055561186c565b60405190808252806020026020018201604052801561057e578160200160208202803683370190505b508152816001600160401b038111156105995761059961186c565b6040519080825280602002602001820160405280156105c2578160200160208202803683370190505b506020820152816001600160401b038111156105e0576105e061186c565b604051908082528060200260200182016040528015610609578160200160208202803683370190505b506040820152816001600160401b038111156106275761062761186c565b604051908082528060200260200182016040528015610650578160200160208202803683370190505b5060608201525f5b82811015610784575f80610692868685818110610677576106776118ac565b905060200201602081019061068c91906118c0565b30610ca6565b91509150811561077a576001846040015184815181106106b4576106b46118ac565b60200260200101901515908115158152505080845f015184815181106106dc576106dc6118ac565b60200260200101818152505080846020015184815181106106ff576106ff6118ac565b60200260200101818152505085858481811061071d5761071d6118ac565b905060200201602081019061073291906118c0565b606085015160808601805190610747826118d9565b905281518110610759576107596118ac565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050600101610658565b5092915050565b60015f1960604787156107ad576107ad89898760a001515f8960400151610d7e565b85156107cd576107cd87878760a001515f89606001518a60800151610e39565b5f5b8c8110156108cb576108038e8e838181106107ec576107ec6118ac565b90506020028101906107fe91906118f1565b610f0c565b90955092508461084f57925082881561082d5761082d8a8a90508760a00151838960400151610fa5565b861561084a5761084a888890508760a00151838960600151610fa5565b6108cb565b478281101561085c578092505b61086f8d8d895f01518a60200151611044565b8915610896576108968b8b8960a0015185600161088c9190611842565b8b60400151610d7e565b87156108c2576108c289898960a001518560016108b39190611842565b8b606001518c60800151610e39565b506001016107cf565b509950995099509995505050505050565b5f818310610917575f6108ef8385611880565b90506001600160ff1b03811115610910576001600160ff1b0391505061094d565b905061094d565b5f6109228484611880565b90506001600160ff1b0381111561094057600160ff1b91505061094d565b6109498161190f565b9150505b92915050565b6060816001600160401b0381111561096d5761096d61186c565b604051908082528060200260200182016040528015610996578160200160208202803683370190505b5090505f5b82811015610784578381815181106109b5576109b56118ac565b60200260200101518282815181106109cf576109cf6118ac565b6001600160a01b039092166020928302919091019091015260010161099b565b826001600160401b03811115610a0757610a0761186c565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b5060e08201525f836001600160401b03811115610a4f57610a4f61186c565b604051908082528060200260200182016040528015610a78578160200160208202803683370190505b5090505f846001600160401b03811115610a9457610a9461186c565b604051908082528060200260200182016040528015610abd578160200160208202803683370190505b5090505f805b86811015610c7b5785604001518181518110610ae157610ae16118ac565b602002602001015115610c735785602001518181518110610b0457610b046118ac565b6020026020010151865f01518281518110610b2157610b216118ac565b602002602001015110610b965785602001518181518110610b4457610b446118ac565b6020026020010151865f01518281518110610b6157610b616118ac565b6020026020010151610b739190611880565b8560e001518281518110610b8957610b896118ac565b6020026020010181815250505b5f80610bad8a8a85818110610677576106776118ac565b9150915081610bbd575050610c73565b5f610be4828a5f01518681518110610bd757610bd76118ac565b60200260200101516108dc565b90508015610c6f578a8a85818110610bfe57610bfe6118ac565b9050602002016020810190610c1391906118c0565b878681518110610c2557610c256118ac565b60200260200101906001600160a01b031690816001600160a01b03168152505080868681518110610c5857610c586118ac565b6020908102919091010152610c6c856118d9565b94505b5050505b600101610ac3565b50610c868382610953565b60a0850152610c9582826110dd565b8460c0018190525050505050505050565b604080516001600160a01b0383811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b17905291515f92839283928392881691610cff91611929565b5f60405180830381855afa9150503d805f8114610d37576040519150601f19603f3d011682016040523d82523d5f602084013e610d3c565b606091505b5091509150811580610d4f575060208151105b15610d5b575050610d77565b81935080806020019051810190610d72919061193a565b925050505b9250929050565b5f5b84811015610e31575f80610de5888885818110610d9f57610d9f6118ac565b610db592602060409092020190810191506118c0565b308a8a87818110610dc857610dc86118ac565b9050604002016020016020810190610de091906118c0565b61116c565b9150915081610df4575f610df6565b805b8486610e028987611855565b610e0c9190611842565b81518110610e1c57610e1c6118ac565b60209081029190910101525050600101610d80565b505050505050565b5f5b85811015610f03575f80610e65898985818110610e5a57610e5a6118ac565b90506040020161124d565b9150915081610e74575f610e76565b805b8587610e828a87611855565b610e8c9190611842565b81518110610e9c57610e9c6118ac565b60209081029190910101528515610ed557838381518110610ebf57610ebf6118ac565b60200260200101518015610ed05750815b610ed7565b815b848481518110610ee957610ee96118ac565b911515602092830291909101909101525050600101610e3b565b50505050505050565b5f6060610f1c60208401846118c0565b6001600160a01b03166020840135610f376040860186611951565b604051610f45929190611993565b5f6040518083038185875af1925050503d805f8114610f7f576040519150601f19603f3d011682016040523d82523d5f602084013e610f84565b606091505b5090925090508115610fa0575060408051602081019091525f81525b915091565b5f5b8481101561103d575f8284610fbc8785611855565b610fc69190611842565b81518110610fd657610fd66118ac565b602002602001015190505f846001610fee9190611842565b90505b85811015611033578184826110068987611855565b6110109190611842565b81518110611020576110206118ac565b6020908102919091010152600101610ff1565b5050600101610fa7565b5050505050565b5f5b8381101561103d57828181518110611060576110606118ac565b6020026020010151156110d5575f80611084878785818110610677576106776118ac565b915091508180156110ad57508383815181106110a2576110a26118ac565b602002602001015181105b156110d257808484815181106110c5576110c56118ac565b6020026020010181815250505b50505b600101611046565b6060816001600160401b038111156110f7576110f761186c565b604051908082528060200260200182016040528015611120578160200160208202803683370190505b5090505f5b828110156107845783818151811061113f5761113f6118ac565b6020026020010151828281518110611159576111596118ac565b6020908102919091010152600101611125565b604080516001600160a01b03848116602483015283811660448084019190915283518084039091018152606490920183526020820180516001600160e01b0316636eb1769f60e11b17905291515f928392839283928916916111cd91611929565b5f60405180830381855afa9150503d805f8114611205576040519150601f19603f3d011682016040523d82523d5f602084013e61120a565b606091505b509150915081158061121d575060208151105b15611229575050611245565b81935080806020019051810190611240919061193a565b925050505b935093915050565b5f808061125d60208501856118c0565b6001600160a01b031603611290576001915061127f60408401602085016118c0565b6001600160a01b0316319050915091565b6112b56112a060208501856118c0565b6112b060408601602087016118c0565b610ca6565b91509150915091565b80356001600160a01b03811681146112d4575f80fd5b919050565b5f8083601f8401126112e9575f80fd5b5081356001600160401b038111156112ff575f80fd5b602083019150836020828501011115610d77575f80fd5b5f805f805f6080868803121561132a575f80fd5b611333866112be565b9450611341602087016112be565b93506040860135925060608601356001600160401b03811115611362575f80fd5b61136e888289016112d9565b969995985093965092949392505050565b5f805f60408486031215611391575f80fd5b8335925060208401356001600160401b038111156113ad575f80fd5b6113b9868287016112d9565b9497909650939450505050565b5f8083601f8401126113d6575f80fd5b5081356001600160401b038111156113ec575f80fd5b6020830191508360208260051b8501011115610d77575f80fd5b5f8083601f840112611416575f80fd5b5081356001600160401b0381111561142c575f80fd5b6020830191508360208260061b8501011115610d77575f80fd5b5f805f805f805f806080898b03121561145d575f80fd5b88356001600160401b0380821115611473575f80fd5b61147f8c838d016113c6565b909a50985060208b0135915080821115611497575f80fd5b6114a38c838d016113c6565b909850965060408b01359150808211156114bb575f80fd5b6114c78c838d01611406565b909650945060608b01359150808211156114df575f80fd5b506114ec8b828c01611406565b999c989b5096995094979396929594505050565b5f5b8381101561151a578181015183820152602001611502565b50505f910152565b5f8151808452611539816020860160208601611500565b601f01601f19169290920160200192915050565b5f815180845260208085019450602084015f5b838110156115855781516001600160a01b031687529582019590820190600101611560565b509495945050505050565b5f815180845260208085019450602084015f5b83811015611585578151875295820195908201906001016115a3565b5f815180845260208085019450602084015f5b838110156115855781511515875295820195908201906001016115d2565b6020815261160360208201835115159052565b602082015160408201525f604083015161018080606085015261162a6101a0850183611522565b9150606085015160808501526080850151601f19808685030160a0870152611652848361154d565b935060a08701519150808685030160c087015261166f848361154d565b935060c08701519150808685030160e087015261168c8483611590565b935060e087015191506101008187860301818801526116ab8584611590565b9450808801519250506101208281880152808801519250506101408187860301818801526116d98584611590565b9450808801519250506101608187860301818801526116f88584611590565b90880151878203909201848801529350905061171483826115bf565b9695505050505050565b5f805f805f805f8060a0898b031215611735575f80fd5b61173e896112be565b975061174c60208a016112be565b965060408901356001600160401b0380821115611767575f80fd5b6117738c838d016113c6565b909850965060608b013591508082111561178b575f80fd5b6117978c838d016113c6565b909650945060808b01359150808211156117af575f80fd5b506114ec8b828c016112d9565b5f805f805f8060a087890312156117d1575f80fd5b6117da876112be565b95506117e8602088016112be565b9450604087013593506060870135925060808701356001600160401b03811115611810575f80fd5b61181c89828a016112d9565b979a9699509497509295939492505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561094d5761094d61182e565b808202811582820484141761094d5761094d61182e565b634e487b7160e01b5f52604160045260245ffd5b8181038181111561094d5761094d61182e565b60ff818116838216019081111561094d5761094d61182e565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156118d0575f80fd5b61017a826112be565b5f600182016118ea576118ea61182e565b5060010190565b5f8235605e19833603018112611905575f80fd5b9190910192915050565b5f600160ff1b82016119235761192361182e565b505f0390565b5f8251611905818460208701611500565b5f6020828403121561194a575f80fd5b5051919050565b5f808335601e19843603018112611966575f80fd5b8301803591506001600160401b0382111561197f575f80fd5b602001915036819003821315610d77575f80fd5b818382375f910190815291905056fea26469706673582212204c77b0c567d34ad97024dab0976d2c9adabfbedde5c906937beb807267751de464736f6c63430008180033" as const satisfies Hex;
package/src/index.ts CHANGED
@@ -8,10 +8,13 @@ export {
8
8
  } from "./errors.js";
9
9
  export type {
10
10
  AllowanceSlot,
11
+ BalanceDelta,
12
+ BalanceQuery,
13
+ NativeBalanceOverride,
11
14
  PreparedAllowanceOverrides,
12
15
  AllowanceSlotPair,
13
- AssetBalanceDelta,
14
16
  PreparedBalanceOverrides,
17
+ ForUserBalanceQueriesArgs,
15
18
  PrepareAllowanceOverridesArgs,
16
19
  PrepareBalanceOverridesArgs,
17
20
  EstimatedAssetRequirements,
@@ -0,0 +1,49 @@
1
+ import type { Address } from "viem";
2
+
3
+ import type { BalanceQuery, ForUserBalanceQueriesArgs, SimulatedCall } from "../types.js";
4
+ import type { ClientArgs } from "./rpc.js";
5
+ import { blockOptionsSpread } from "./rpc.js";
6
+ import { discoverCandidateAddresses, runSimulator } from "./simulator.js";
7
+
8
+ /** @internal Implements {@link TxSimulator.balanceQueries.forUser}. Prefer the instance API from the package root. */
9
+ export async function forUserBalanceQueries(
10
+ args: ForUserBalanceQueriesArgs & ClientArgs,
11
+ ): Promise<BalanceQuery[]> {
12
+ const tokens = await discoverErc20s(args);
13
+
14
+ return [
15
+ { asset: "native", account: args.from },
16
+ ...tokens.map((asset) => ({ asset, account: args.from })),
17
+ ];
18
+ }
19
+
20
+ /** @internal Implements {@link TxSimulator.balanceQueries.discoverErc20s}. Prefer the instance API from the package root. */
21
+ export async function discoverErc20s(
22
+ args: ForUserBalanceQueriesArgs & ClientArgs,
23
+ ): Promise<Address[]> {
24
+ const calls = args.calls.map((call) => ({
25
+ to: call.to,
26
+ data: call.data,
27
+ value: call.value ?? 0n,
28
+ })) satisfies SimulatedCall[];
29
+ const candidates = await discoverCandidateAddresses({
30
+ client: args.client,
31
+ from: args.from,
32
+ calls,
33
+ gas: args.gas,
34
+ debug: args.debug,
35
+ ...blockOptionsSpread(args),
36
+ });
37
+ const result = await runSimulator({
38
+ client: args.client,
39
+ from: args.from,
40
+ calls: [],
41
+ candidates,
42
+ debug: args.debug,
43
+ debugStep: "balanceQueries.tokenFilter",
44
+ gas: args.gas,
45
+ ...blockOptionsSpread(args),
46
+ });
47
+
48
+ return result.probeData.observedTokens;
49
+ }
@@ -8,6 +8,7 @@ import type {
8
8
  EstimateAssetRequirementsArgs,
9
9
  SimulatedCall,
10
10
  } from "../types.js";
11
+ import { OVERRIDE_TOKEN_AMOUNT } from "../constants.js";
11
12
  import { prepareAllowanceOverrides, prepareBalanceOverrides } from "./slots.js";
12
13
  import { addressKey, uniqueAddresses } from "./data.js";
13
14
  import type { ClientArgs } from "./rpc.js";
@@ -24,7 +25,7 @@ type AllowanceProbe = {
24
25
  spender: Address;
25
26
  };
26
27
 
27
- /** @internal Implements {@link TxSimulator.estimateAssetRequirements}. Prefer the instance API from the package root. */
28
+ /** @internal Implements {@link TxSimulator.tokenOverrides.estimateRequirements}. Prefer the instance API from the package root. */
28
29
  export async function estimateAssetRequirements(
29
30
  args: EstimateAssetRequirementsArgs & ClientArgs,
30
31
  ): Promise<EstimatedAssetRequirements> {
@@ -37,14 +38,20 @@ export async function estimateAssetRequirements(
37
38
  data: call.data,
38
39
  value: call.value ?? 0n,
39
40
  })) satisfies SimulatedCall[];
40
- const candidateAddresses = await discoverCandidateAddresses({
41
- client: args.client,
42
- from: args.from,
43
- calls,
44
- gas: args.gas,
45
- debug: args.debug,
46
- ...blockOptionsSpread(args),
47
- });
41
+ let candidateAddresses: Address[];
42
+ try {
43
+ candidateAddresses = await discoverCandidateAddresses({
44
+ client: args.client,
45
+ from: args.from,
46
+ calls,
47
+ gas: args.gas,
48
+ debug: args.debug,
49
+ ...blockOptionsSpread(args),
50
+ });
51
+ } catch (cause) {
52
+ if (!isInsufficientFunds(cause)) throw cause;
53
+ candidateAddresses = uniqueAddresses(calls.map((call) => call.to));
54
+ }
48
55
  const recon = await runSimulator({
49
56
  client: args.client,
50
57
  from: args.from,
@@ -90,6 +97,7 @@ export async function estimateAssetRequirements(
90
97
  calls,
91
98
  candidates: candidateAddresses,
92
99
  tokenSlotOverrides,
100
+ extraStateOverrides: [{ address: args.from, balance: OVERRIDE_TOKEN_AMOUNT }],
93
101
  allowanceProbes,
94
102
  gas: args.gas,
95
103
  debug: args.debug,
@@ -138,6 +146,12 @@ export async function estimateAssetRequirements(
138
146
  return { status: "success", ...shared };
139
147
  }
140
148
 
149
+ export const estimateTokenOverrideRequirements = estimateAssetRequirements;
150
+
151
+ function isInsufficientFunds(cause: unknown): boolean {
152
+ return cause instanceof Error && cause.message.includes("Insufficient funds");
153
+ }
154
+
141
155
  function allowancePairs(
142
156
  tokens: readonly Address[],
143
157
  spenders: readonly Address[],
@@ -6,14 +6,10 @@ import {
6
6
  parseAbi,
7
7
  slice,
8
8
  size,
9
+ zeroAddress,
9
10
  } from "viem";
10
11
 
11
- import type {
12
- AssetBalanceDelta,
13
- SimulatedCall,
14
- SimulationResult,
15
- TokenSlotOverride,
16
- } from "../types.js";
12
+ import type { RevertError, SimulatedCall, TokenSlotOverride } from "../types.js";
17
13
  import { InvalidSimulationInputError, StateOverrideUnsupportedError } from "../errors.js";
18
14
  import { txSimulatorRuntimeBytecode } from "../generated/txSimulatorBytecode.js";
19
15
  import {
@@ -39,17 +35,31 @@ type ProbeData = {
39
35
  maxTokenOutflows: readonly bigint[];
40
36
  maxNativeOutflow: bigint;
41
37
  allowanceCheckpoints: readonly bigint[];
38
+ balanceCheckpoints: readonly bigint[];
39
+ balanceProbeOk: readonly boolean[];
42
40
  };
43
41
 
44
- export type SimulatorResult = SimulationResult & {
42
+ type SimulatorBase = {
45
43
  probeData: ProbeData;
46
44
  };
47
45
 
46
+ export type SimulatorResult =
47
+ | (SimulatorBase & { status: "success" })
48
+ | (SimulatorBase & {
49
+ status: "reverted";
50
+ revertData: Hex;
51
+ revertReason?: string;
52
+ revertError?: RevertError;
53
+ revertSelector?: Hex;
54
+ failingCallIndex: number;
55
+ });
56
+
48
57
  const txSimulatorAbi = parseAbi([
49
58
  "struct SimulatedCall { address to; uint256 value; bytes data; }",
50
59
  "struct AllowanceProbe { address token; address spender; }",
51
- "struct SimulationResult { bool success; uint256 failingCallIndex; bytes revertData; int256 nativeDelta; address[] observedTokens; address[] deltaTokens; int256[] tokenDeltas; uint256[] maxTokenOutflows; uint256 maxNativeOutflow; uint256[] allowanceCheckpoints; }",
52
- "function simulate(SimulatedCall[] calls, address[] candidates, AllowanceProbe[] probes) returns (SimulationResult)",
60
+ "struct BalanceProbe { address token; address account; }",
61
+ "struct SimulationResult { bool success; uint256 failingCallIndex; bytes revertData; int256 nativeDelta; address[] observedTokens; address[] deltaTokens; int256[] tokenDeltas; uint256[] maxTokenOutflows; uint256 maxNativeOutflow; uint256[] allowanceCheckpoints; uint256[] balanceCheckpoints; bool[] balanceProbeOk; }",
62
+ "function simulate(SimulatedCall[] calls, address[] candidates, AllowanceProbe[] probes, BalanceProbe[] balanceProbes) returns (SimulationResult)",
53
63
  "function isValidSignature(bytes32 hash, bytes signature) view returns (bytes4)",
54
64
  ]);
55
65
 
@@ -61,11 +71,16 @@ export async function runSimulator(
61
71
  tokenSlotOverrides?: readonly TokenSlotOverride[];
62
72
  extraStateOverrides?: readonly StateOverrideEntry[];
63
73
  allowanceProbes?: readonly { token: Address; spender: Address }[];
74
+ balanceProbes?: readonly { token: Address | "native"; account: Address }[];
64
75
  debugStep?: string;
65
76
  errorAbi?: Abi;
66
77
  },
67
78
  ): Promise<SimulatorResult> {
68
79
  const candidates = uniqueAddresses(args.candidates);
80
+ const balanceProbes = (args.balanceProbes ?? []).map((probe) => ({
81
+ token: probe.token === "native" ? zeroAddress : probe.token,
82
+ account: probe.account,
83
+ }));
69
84
  const data = encodeFunctionData({
70
85
  abi: txSimulatorAbi,
71
86
  functionName: "simulate",
@@ -77,6 +92,7 @@ export async function runSimulator(
77
92
  })),
78
93
  candidates,
79
94
  args.allowanceProbes ?? [],
95
+ balanceProbes,
80
96
  ],
81
97
  });
82
98
 
@@ -97,6 +113,7 @@ export async function runSimulator(
97
113
  from: args.from,
98
114
  calls: args.calls.length,
99
115
  candidates: candidates.length,
116
+ balanceProbes: balanceProbes.length,
100
117
  storageOverrides: args.tokenSlotOverrides?.length ?? 0,
101
118
  stateOverrideAccounts: stateOverride.length,
102
119
  },
@@ -133,32 +150,20 @@ export async function runSimulator(
133
150
  );
134
151
  }
135
152
 
136
- const assetBalanceDeltas: AssetBalanceDelta[] = [];
137
- if (result.nativeDelta !== 0n) {
138
- assetBalanceDeltas.push({ asset: "native", delta: result.nativeDelta });
139
- }
140
-
141
- for (let i = 0; i < result.deltaTokens.length; ++i) {
142
- const token = result.deltaTokens[i];
143
- const delta = result.tokenDeltas[i];
144
- if (token && delta !== undefined && delta !== 0n) {
145
- assetBalanceDeltas.push({ asset: token, delta });
146
- }
147
- }
148
-
149
153
  const probeData = {
150
154
  observedTokens: uniqueAddresses(result.observedTokens),
151
155
  candidates,
152
156
  maxTokenOutflows: result.maxTokenOutflows,
153
157
  maxNativeOutflow: result.maxNativeOutflow,
154
158
  allowanceCheckpoints: result.allowanceCheckpoints,
159
+ balanceCheckpoints: result.balanceCheckpoints,
160
+ balanceProbeOk: result.balanceProbeOk,
155
161
  };
156
162
 
157
163
  if (!result.success) {
158
164
  const decodedRevert = decodeRevert(result.revertData, args.errorAbi);
159
165
  return {
160
166
  status: "reverted",
161
- assetBalanceDeltas,
162
167
  revertData: result.revertData,
163
168
  ...(decodedRevert.revertReason !== undefined
164
169
  ? { revertReason: decodedRevert.revertReason }
@@ -176,7 +181,6 @@ export async function runSimulator(
176
181
 
177
182
  return {
178
183
  status: "success",
179
- assetBalanceDeltas,
180
184
  probeData,
181
185
  };
182
186
  }
@@ -24,7 +24,7 @@ type AllowanceSlotFact = SlotFact & {
24
24
  };
25
25
 
26
26
  // Orchestration
27
- /** @internal Implements `TxSimulator.prepareBalanceOverrides`. Prefer the instance API from the package root. */
27
+ /** @internal Implements `TxSimulator.tokenOverrides.forBalances`. Prefer the instance API from the package root. */
28
28
  export async function prepareBalanceOverrides(
29
29
  args: PrepareBalanceOverridesArgs & ClientArgs,
30
30
  ): Promise<PreparedBalanceOverrides> {
@@ -47,7 +47,7 @@ export async function prepareBalanceOverrides(
47
47
  };
48
48
  }
49
49
 
50
- /** @internal Implements `TxSimulator.prepareAllowanceOverrides`. Prefer the instance API from the package root. */
50
+ /** @internal Implements `TxSimulator.tokenOverrides.forAllowances`. Prefer the instance API from the package root. */
51
51
  export async function prepareAllowanceOverrides(
52
52
  args: PrepareAllowanceOverridesArgs & ClientArgs,
53
53
  ): Promise<PreparedAllowanceOverrides> {
@@ -194,6 +194,9 @@ function mappingSlot(key: Address, baseSlot: Hex | bigint): Hex {
194
194
  );
195
195
  }
196
196
 
197
+ export const prepareBalanceTokenOverrides = prepareBalanceOverrides;
198
+ export const prepareAllowanceTokenOverrides = prepareAllowanceOverrides;
199
+
197
200
  function allowanceSlotFor(owner: Address, spender: Address, base: bigint): Hex {
198
201
  return mappingSlot(spender, mappingSlot(owner, base));
199
202
  }