viem-tx-sim 0.1.1 → 0.2.0
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/README.md +103 -34
- package/contracts/TxSimulator.sol +83 -20
- package/dist/generated/txSimulatorBytecode.d.ts +1 -1
- package/dist/generated/txSimulatorBytecode.d.ts.map +1 -1
- package/dist/generated/txSimulatorBytecode.js +1 -1
- package/dist/generated/txSimulatorBytecode.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/internal/queryDiscovery.d.ts +8 -0
- package/dist/internal/queryDiscovery.d.ts.map +1 -0
- package/dist/internal/queryDiscovery.js +38 -0
- package/dist/internal/queryDiscovery.js.map +1 -0
- package/dist/internal/requirements.d.ts +2 -1
- package/dist/internal/requirements.d.ts.map +1 -1
- package/dist/internal/requirements.js +2 -1
- package/dist/internal/requirements.js.map +1 -1
- package/dist/internal/simulator.d.ts +19 -3
- package/dist/internal/simulator.d.ts.map +1 -1
- package/dist/internal/simulator.js +12 -16
- package/dist/internal/simulator.js.map +1 -1
- package/dist/internal/slots.d.ts +4 -2
- package/dist/internal/slots.d.ts.map +1 -1
- package/dist/internal/slots.js +4 -2
- package/dist/internal/slots.js.map +1 -1
- package/dist/txSimulator.d.ts +64 -40
- package/dist/txSimulator.d.ts.map +1 -1
- package/dist/txSimulator.js +64 -16
- package/dist/txSimulator.js.map +1 -1
- package/dist/types.d.ts +47 -16
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/generated/txSimulatorBytecode.ts +1 -1
- package/src/index.ts +3 -1
- package/src/internal/queryDiscovery.ts +49 -0
- package/src/internal/requirements.ts +3 -1
- package/src/internal/simulator.ts +28 -24
- package/src/internal/slots.ts +5 -2
- package/src/txSimulator.ts +160 -63
- package/src/types.ts +50 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,6BAA6B,EAE9B,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAc3C,
|
|
1
|
+
{"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,0BAA0B,EAC1B,6BAA6B,EAE9B,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAc3C,mIAAmI;AACnI,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,6BAA6B,GAAG,UAAU,GAC/C,OAAO,CAAC,0BAA0B,CAAC,CA6GrC;AAED,eAAO,MAAM,iCAAiC,kCAA4B,CAAC"}
|
|
@@ -8,7 +8,7 @@ const allowanceSettingAbi = parseAbi([
|
|
|
8
8
|
"function approve(address spender, uint256 amount) returns (bool)",
|
|
9
9
|
"function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)",
|
|
10
10
|
]);
|
|
11
|
-
/** @internal Implements {@link TxSimulator.
|
|
11
|
+
/** @internal Implements {@link TxSimulator.tokenOverrides.estimateRequirements}. Prefer the instance API from the package root. */
|
|
12
12
|
export async function estimateAssetRequirements(args) {
|
|
13
13
|
if (args.calls.length === 0) {
|
|
14
14
|
throw new InvalidSimulationInputError("estimateAssetRequirements requires at least one call.");
|
|
@@ -101,6 +101,7 @@ export async function estimateAssetRequirements(args) {
|
|
|
101
101
|
}
|
|
102
102
|
return { status: "success", ...shared };
|
|
103
103
|
}
|
|
104
|
+
export const estimateTokenOverrideRequirements = estimateAssetRequirements;
|
|
104
105
|
function allowancePairs(tokens, spenders) {
|
|
105
106
|
return tokens.flatMap((token) => spenders
|
|
106
107
|
.filter((spender) => addressKey(token) !== addressKey(spender))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAO3D,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACnC,kEAAkE;IAClE,iHAAiH;CAClH,CAAC,CAAC;AAOH,
|
|
1
|
+
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/internal/requirements.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAO3D,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACnC,kEAAkE;IAClE,iHAAiH;CAClH,CAAC,CAAC;AAOH,mIAAmI;AACnI,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,IAAgD;IAEhD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,2BAA2B,CAAC,uDAAuD,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;KACxB,CAAC,CAA2B,CAAC;IAC9B,MAAM,kBAAkB,GAAG,MAAM,0BAA0B,CAAC;QAC1D,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK;QACL,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,kBAAkB,CAAC,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC;QAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK;QACL,UAAU,EAAE,kBAAkB;QAC9B,eAAe,EAAE,EAAE;QACnB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;IAC9C,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAC/F,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3D,CAAC;IAEF,MAAM,gBAAgB,GAAG,MAAM,uBAAuB,CAAC;QACrD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM;QACN,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,kBAAkB,CAAC,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,MAAM,yBAAyB,CAAC;QACzD,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC;QACvC,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,kBAAkB,CAAC,IAAI,CAAC;KAC5B,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC;IAC5C,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAK,CAAC;IAChD,MAAM,eAAe,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpD,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC,CAAC;IACJ,MAAM,kBAAkB,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,cAAc,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC;QACrC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK;QACL,UAAU,EAAE,kBAAkB;QAC9B,kBAAkB;QAClB,eAAe;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,kBAAkB,CAC3C,IAAI,CAAC,IAAI,EACT,KAAK,EACL,eAAe,EACf,WAAW,CAAC,SAAS,CAAC,oBAAoB,EAC1C,WAAW,CAAC,SAAS,CAAC,UAAU,EAChC,WAAW,CAAC,SAAS,CAAC,gBAAgB,CACvC,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC,gBAAgB;QAC9C,QAAQ,EAAE,gBAAgB,CACxB,WAAW,CAAC,SAAS,CAAC,UAAU,EAChC,MAAM,EACN,WAAW,CAAC,SAAS,CAAC,gBAAgB,CACvC;QACD,UAAU,EAAE,kBAAkB,CAAC,UAAU;QACzC,KAAK,EAAE,kBAAkB;QACzB,UAAU,EAAE;YACV,YAAY,EAAE,gBAAgB,CAAC,UAAU;YACzC,cAAc,EAAE,kBAAkB,CAAC,UAAU;YAC7C,UAAU,EAAE,kBAAkB,CAAC,SAAS;SACzC;KACF,CAAC;IAEF,IAAI,WAAW,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,GAAG,MAAM;YACT,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,GAAG,CAAC,WAAW,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,GAAG,CAAC,WAAW,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1F,GAAG,CAAC,WAAW,CAAC,cAAc,KAAK,SAAS;gBAC1C,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE;gBAChD,CAAC,CAAC,EAAE,CAAC;YACP,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;SAC/C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,iCAAiC,GAAG,yBAAyB,CAAC;AAE3E,SAAS,cAAc,CACrB,MAA0B,EAC1B,QAA4B;IAE5B,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC9B,QAAQ;SACL,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC;SAC9D,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAC1C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,UAA8B,EAC9B,MAA0B,EAC1B,gBAAmC;IAEnC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,MAAM,QAAQ,GAA2C,EAAE,CAAC;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,GAAG,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAc,EACd,KAA+B,EAC/B,MAAiC,EACjC,WAA8B,EAC9B,UAA8B,EAC9B,gBAAmC;IAKnC,MAAM,UAAU,GAA6C,EAAE,CAAC;IAChE,MAAM,SAAS,GAAwB,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhC,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC;QAClE,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAElC,MAAM,sBAAsB,GAAG,6BAA6B,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAClF,MAAM,KAAK,GAAG,sBAAsB,IAAI,KAAK,CAAC,MAAM,CAAC;QACrD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,WAAW,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACrE,IAAI,MAAM,GAAG,KAAK;gBAAE,MAAM,IAAI,MAAM,GAAG,KAAK,CAAC;QAC/C,CAAC;QACD,IAAI,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,gBAAgB,CAAC,EAAE,CAAC;YACrE,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/D,SAAS;QACX,CAAC;QACD,IAAI,MAAM,GAAG,EAAE;YAAE,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED,SAAS,6BAA6B,CACpC,KAA+B,EAC/B,KAAc,EACd,KAAqB;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;YAAE,SAAS;QACpF,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAS,EAAE,KAAc,EAAE,OAAgB;IAC3E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;QACvE,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YACpC,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,CAAC;QAC7D,OAAO,CACL,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC;YACjD,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,CACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAAc,EACd,UAA8B,EAC9B,gBAAmC;IAEnC,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/F,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Abi, Address, StateOverride } from "viem";
|
|
2
|
-
import type {
|
|
1
|
+
import type { Abi, Address, Hex, StateOverride } from "viem";
|
|
2
|
+
import type { RevertError, SimulatedCall, TokenSlotOverride } from "../types.js";
|
|
3
3
|
import type { RpcCallArgs } from "./rpc.js";
|
|
4
4
|
type ProbeData = {
|
|
5
5
|
observedTokens: Address[];
|
|
@@ -7,10 +7,22 @@ type ProbeData = {
|
|
|
7
7
|
maxTokenOutflows: readonly bigint[];
|
|
8
8
|
maxNativeOutflow: bigint;
|
|
9
9
|
allowanceCheckpoints: readonly bigint[];
|
|
10
|
+
balanceCheckpoints: readonly bigint[];
|
|
11
|
+
balanceProbeOk: readonly boolean[];
|
|
10
12
|
};
|
|
11
|
-
|
|
13
|
+
type SimulatorBase = {
|
|
12
14
|
probeData: ProbeData;
|
|
13
15
|
};
|
|
16
|
+
export type SimulatorResult = (SimulatorBase & {
|
|
17
|
+
status: "success";
|
|
18
|
+
}) | (SimulatorBase & {
|
|
19
|
+
status: "reverted";
|
|
20
|
+
revertData: Hex;
|
|
21
|
+
revertReason?: string;
|
|
22
|
+
revertError?: RevertError;
|
|
23
|
+
revertSelector?: Hex;
|
|
24
|
+
failingCallIndex: number;
|
|
25
|
+
});
|
|
14
26
|
export declare function runSimulator(args: RpcCallArgs & {
|
|
15
27
|
from: Address;
|
|
16
28
|
calls: readonly SimulatedCall[];
|
|
@@ -21,6 +33,10 @@ export declare function runSimulator(args: RpcCallArgs & {
|
|
|
21
33
|
token: Address;
|
|
22
34
|
spender: Address;
|
|
23
35
|
}[];
|
|
36
|
+
balanceProbes?: readonly {
|
|
37
|
+
token: Address | "native";
|
|
38
|
+
account: Address;
|
|
39
|
+
}[];
|
|
24
40
|
debugStep?: string;
|
|
25
41
|
errorAbi?: Abi;
|
|
26
42
|
}): Promise<SimulatorResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/internal/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../../src/internal/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAW7D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAWjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAS5C,KAAK,SAAS,GAAG;IACf,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,cAAc,EAAE,SAAS,OAAO,EAAE,CAAC;CACpC,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,eAAe,GACvB,CAAC,aAAa,GAAG;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC,GACvC,CAAC,aAAa,GAAG;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,GAAG,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC,CAAC;AAWP,wBAAsB,YAAY,CAChC,IAAI,EAAE,WAAW,GAAG;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IAChC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;IAC/B,kBAAkB,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAClD,mBAAmB,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,eAAe,CAAC,EAAE,SAAS;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAClE,aAAa,CAAC,EAAE,SAAS;QAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,GACA,OAAO,CAAC,eAAe,CAAC,CA4G1B;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,WAAW,GAAG;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CACjC,GACA,OAAO,CAAC,OAAO,EAAE,CAAC,CAsBpB;AA8BD,KAAK,kBAAkB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { decodeErrorResult, decodeFunctionResult, encodeFunctionData, parseAbi, slice, size, } from "viem";
|
|
1
|
+
import { decodeErrorResult, decodeFunctionResult, encodeFunctionData, parseAbi, slice, size, zeroAddress, } from "viem";
|
|
2
2
|
import { InvalidSimulationInputError, StateOverrideUnsupportedError } from "../errors.js";
|
|
3
3
|
import { txSimulatorRuntimeBytecode } from "../generated/txSimulatorBytecode.js";
|
|
4
4
|
import { MAX_UINT256, addressKey, getCallData, normalizeAddress, uint256Hex, uniqueAddresses, } from "./data.js";
|
|
@@ -6,12 +6,17 @@ import { blockOptionsSpread, buildCallParameters, createAccessList, formatRpcErr
|
|
|
6
6
|
const txSimulatorAbi = parseAbi([
|
|
7
7
|
"struct SimulatedCall { address to; uint256 value; bytes data; }",
|
|
8
8
|
"struct AllowanceProbe { address token; address spender; }",
|
|
9
|
-
"struct
|
|
10
|
-
"
|
|
9
|
+
"struct BalanceProbe { address token; address account; }",
|
|
10
|
+
"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; }",
|
|
11
|
+
"function simulate(SimulatedCall[] calls, address[] candidates, AllowanceProbe[] probes, BalanceProbe[] balanceProbes) returns (SimulationResult)",
|
|
11
12
|
"function isValidSignature(bytes32 hash, bytes signature) view returns (bytes4)",
|
|
12
13
|
]);
|
|
13
14
|
export async function runSimulator(args) {
|
|
14
15
|
const candidates = uniqueAddresses(args.candidates);
|
|
16
|
+
const balanceProbes = (args.balanceProbes ?? []).map((probe) => ({
|
|
17
|
+
token: probe.token === "native" ? zeroAddress : probe.token,
|
|
18
|
+
account: probe.account,
|
|
19
|
+
}));
|
|
15
20
|
const data = encodeFunctionData({
|
|
16
21
|
abi: txSimulatorAbi,
|
|
17
22
|
functionName: "simulate",
|
|
@@ -23,6 +28,7 @@ export async function runSimulator(args) {
|
|
|
23
28
|
})),
|
|
24
29
|
candidates,
|
|
25
30
|
args.allowanceProbes ?? [],
|
|
31
|
+
balanceProbes,
|
|
26
32
|
],
|
|
27
33
|
});
|
|
28
34
|
const stateOverride = buildStateOverride([
|
|
@@ -39,6 +45,7 @@ export async function runSimulator(args) {
|
|
|
39
45
|
from: args.from,
|
|
40
46
|
calls: args.calls.length,
|
|
41
47
|
candidates: candidates.length,
|
|
48
|
+
balanceProbes: balanceProbes.length,
|
|
42
49
|
storageOverrides: args.tokenSlotOverrides?.length ?? 0,
|
|
43
50
|
stateOverrideAccounts: stateOverride.length,
|
|
44
51
|
},
|
|
@@ -66,29 +73,19 @@ export async function runSimulator(args) {
|
|
|
66
73
|
catch (cause) {
|
|
67
74
|
throw new StateOverrideUnsupportedError(formatRpcError("eth_call returned undecodable simulator output", cause));
|
|
68
75
|
}
|
|
69
|
-
const assetBalanceDeltas = [];
|
|
70
|
-
if (result.nativeDelta !== 0n) {
|
|
71
|
-
assetBalanceDeltas.push({ asset: "native", delta: result.nativeDelta });
|
|
72
|
-
}
|
|
73
|
-
for (let i = 0; i < result.deltaTokens.length; ++i) {
|
|
74
|
-
const token = result.deltaTokens[i];
|
|
75
|
-
const delta = result.tokenDeltas[i];
|
|
76
|
-
if (token && delta !== undefined && delta !== 0n) {
|
|
77
|
-
assetBalanceDeltas.push({ asset: token, delta });
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
76
|
const probeData = {
|
|
81
77
|
observedTokens: uniqueAddresses(result.observedTokens),
|
|
82
78
|
candidates,
|
|
83
79
|
maxTokenOutflows: result.maxTokenOutflows,
|
|
84
80
|
maxNativeOutflow: result.maxNativeOutflow,
|
|
85
81
|
allowanceCheckpoints: result.allowanceCheckpoints,
|
|
82
|
+
balanceCheckpoints: result.balanceCheckpoints,
|
|
83
|
+
balanceProbeOk: result.balanceProbeOk,
|
|
86
84
|
};
|
|
87
85
|
if (!result.success) {
|
|
88
86
|
const decodedRevert = decodeRevert(result.revertData, args.errorAbi);
|
|
89
87
|
return {
|
|
90
88
|
status: "reverted",
|
|
91
|
-
assetBalanceDeltas,
|
|
92
89
|
revertData: result.revertData,
|
|
93
90
|
...(decodedRevert.revertReason !== undefined
|
|
94
91
|
? { revertReason: decodedRevert.revertReason }
|
|
@@ -105,7 +102,6 @@ export async function runSimulator(args) {
|
|
|
105
102
|
}
|
|
106
103
|
return {
|
|
107
104
|
status: "success",
|
|
108
|
-
assetBalanceDeltas,
|
|
109
105
|
probeData,
|
|
110
106
|
};
|
|
111
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../src/internal/simulator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,EACR,KAAK,EACL,IAAI,
|
|
1
|
+
{"version":3,"file":"simulator.js","sourceRoot":"","sources":["../../src/internal/simulator.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/slots.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { PreparedAllowanceOverrides, PreparedBalanceOverrides, PrepareAllowanceOverridesArgs, PrepareBalanceOverridesArgs } from "../types.js";
|
|
2
2
|
import type { ClientArgs } from "./rpc.js";
|
|
3
|
-
/** @internal Implements `TxSimulator.
|
|
3
|
+
/** @internal Implements `TxSimulator.tokenOverrides.forBalances`. Prefer the instance API from the package root. */
|
|
4
4
|
export declare function prepareBalanceOverrides(args: PrepareBalanceOverridesArgs & ClientArgs): Promise<PreparedBalanceOverrides>;
|
|
5
|
-
/** @internal Implements `TxSimulator.
|
|
5
|
+
/** @internal Implements `TxSimulator.tokenOverrides.forAllowances`. Prefer the instance API from the package root. */
|
|
6
6
|
export declare function prepareAllowanceOverrides(args: PrepareAllowanceOverridesArgs & ClientArgs): Promise<PreparedAllowanceOverrides>;
|
|
7
|
+
export declare const prepareBalanceTokenOverrides: typeof prepareBalanceOverrides;
|
|
8
|
+
export declare const prepareAllowanceTokenOverrides: typeof prepareAllowanceOverrides;
|
|
7
9
|
//# sourceMappingURL=slots.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/internal/slots.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAE5B,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AAaxD,
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/internal/slots.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAE5B,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,UAAU,CAAC;AAaxD,oHAAoH;AACpH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,2BAA2B,GAAG,UAAU,GAC7C,OAAO,CAAC,wBAAwB,CAAC,CAkBnC;AAED,sHAAsH;AACtH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,6BAA6B,GAAG,UAAU,GAC/C,OAAO,CAAC,0BAA0B,CAAC,CAcrC;AAkID,eAAO,MAAM,4BAA4B,gCAA0B,CAAC;AACpE,eAAO,MAAM,8BAA8B,kCAA4B,CAAC"}
|
package/dist/internal/slots.js
CHANGED
|
@@ -4,7 +4,7 @@ import { addressKey, uint256Hex } from "./data.js";
|
|
|
4
4
|
import { discoverAllowanceSlot, discoverBalanceSlot, readAllowance } from "./probes.js";
|
|
5
5
|
import { blockOptionsSpread } from "./rpc.js";
|
|
6
6
|
// Orchestration
|
|
7
|
-
/** @internal Implements `TxSimulator.
|
|
7
|
+
/** @internal Implements `TxSimulator.tokenOverrides.forBalances`. Prefer the instance API from the package root. */
|
|
8
8
|
export async function prepareBalanceOverrides(args) {
|
|
9
9
|
const slots = await Promise.all(args.tokens.map((token) => discoverBalanceSlot({
|
|
10
10
|
client: args.client,
|
|
@@ -20,7 +20,7 @@ export async function prepareBalanceOverrides(args) {
|
|
|
20
20
|
unresolved: args.tokens.filter((_, index) => slots[index] === undefined),
|
|
21
21
|
};
|
|
22
22
|
}
|
|
23
|
-
/** @internal Implements `TxSimulator.
|
|
23
|
+
/** @internal Implements `TxSimulator.tokenOverrides.forAllowances`. Prefer the instance API from the package root. */
|
|
24
24
|
export async function prepareAllowanceOverrides(args) {
|
|
25
25
|
const slots = await prepareAllowanceOverridesWithInference({
|
|
26
26
|
client: args.client,
|
|
@@ -115,6 +115,8 @@ async function computeAllowanceSlot(args) {
|
|
|
115
115
|
function mappingSlot(key, baseSlot) {
|
|
116
116
|
return keccak256(encodeAbiParameters([{ type: "address" }, { type: "uint256" }], [key, typeof baseSlot === "bigint" ? baseSlot : BigInt(baseSlot)]));
|
|
117
117
|
}
|
|
118
|
+
export const prepareBalanceTokenOverrides = prepareBalanceOverrides;
|
|
119
|
+
export const prepareAllowanceTokenOverrides = prepareAllowanceOverrides;
|
|
118
120
|
function allowanceSlotFor(owner, spender, base) {
|
|
119
121
|
return mappingSlot(spender, mappingSlot(owner, base));
|
|
120
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/internal/slots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAQxD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAW9C,gBAAgB;AAChB,
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/internal/slots.ts"],"names":[],"mappings":"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"}
|
package/dist/txSimulator.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Address } from "viem";
|
|
2
|
+
import type { BalanceQuery, ForUserBalanceQueriesArgs, PreparedAllowanceOverrides, PreparedBalanceOverrides, PrepareAllowanceOverridesArgs, PrepareBalanceOverridesArgs, EstimateAssetRequirementsArgs, EstimatedAssetRequirements, SimulateArgs, SimulationResult, TxSimulatorConfig } from "./types.js";
|
|
2
3
|
/**
|
|
3
4
|
* Bound transaction simulator for one viem public client.
|
|
4
5
|
*
|
|
@@ -8,15 +9,13 @@ import type { PreparedAllowanceOverrides, PreparedBalanceOverrides, PrepareAllow
|
|
|
8
9
|
*/
|
|
9
10
|
export interface TxSimulator {
|
|
10
11
|
/**
|
|
11
|
-
* Simulates one call or sequential batch and returns
|
|
12
|
+
* Simulates one call or sequential batch and returns requested balance deltas.
|
|
12
13
|
*
|
|
13
|
-
* This
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* unfunded accounts. Transaction reverts return `status: "reverted"` instead of throwing.
|
|
14
|
+
* This performs one `eth_call` with state overrides that inject the simulator at `from`.
|
|
15
|
+
* Balances are observed only for `balanceQueries`; query the tokens you forge if you want to
|
|
16
|
+
* observe them. Transaction reverts return `status: "reverted"` instead of throwing.
|
|
17
17
|
*
|
|
18
18
|
* @throws InvalidSimulationInputError when `calls` is empty.
|
|
19
|
-
* @throws AccessListUnsupportedError when the RPC endpoint cannot provide access lists.
|
|
20
19
|
* @throws StateOverrideUnsupportedError when the RPC endpoint cannot execute state overrides or
|
|
21
20
|
* returns undecodable simulator output.
|
|
22
21
|
*
|
|
@@ -26,43 +25,68 @@ export interface TxSimulator {
|
|
|
26
25
|
* const result = await sim.simulate({
|
|
27
26
|
* from,
|
|
28
27
|
* calls: [{ to, data, value: 0n }],
|
|
28
|
+
* balanceQueries: [{ asset: "native", account: from }],
|
|
29
29
|
* });
|
|
30
30
|
* ```
|
|
31
31
|
*/
|
|
32
32
|
simulate: (args: SimulateArgs) => Promise<SimulationResult>;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
33
|
+
readonly balanceQueries: {
|
|
34
|
+
/**
|
|
35
|
+
* Discovers wallet-style balance queries for `from`.
|
|
36
|
+
*
|
|
37
|
+
* This runs access-list candidate discovery, then one token-filter `eth_call`, and returns
|
|
38
|
+
* native plus token balance queries for `from`. Pass the result to `simulate`.
|
|
39
|
+
*
|
|
40
|
+
* @throws AccessListUnsupportedError when the RPC endpoint cannot provide access lists.
|
|
41
|
+
* @throws StateOverrideUnsupportedError when the RPC endpoint cannot execute state overrides.
|
|
42
|
+
*/
|
|
43
|
+
forUser: (args: ForUserBalanceQueriesArgs) => Promise<BalanceQuery[]>;
|
|
44
|
+
/**
|
|
45
|
+
* Discovers ERC-20 contracts touched by the calls that answer `balanceOf(from)`.
|
|
46
|
+
*
|
|
47
|
+
* This is the discovery half of `forUser`; map the returned addresses yourself when observing a
|
|
48
|
+
* different account.
|
|
49
|
+
*
|
|
50
|
+
* @throws AccessListUnsupportedError when the RPC endpoint cannot provide access lists.
|
|
51
|
+
* @throws StateOverrideUnsupportedError when the RPC endpoint cannot execute state overrides.
|
|
52
|
+
*/
|
|
53
|
+
discoverErc20s: (args: ForUserBalanceQueriesArgs) => Promise<Address[]>;
|
|
54
|
+
};
|
|
55
|
+
readonly tokenOverrides: {
|
|
56
|
+
/**
|
|
57
|
+
* Prepares ERC-20 balance overrides for `from`.
|
|
58
|
+
*
|
|
59
|
+
* Each token is probed with RPC-only access lists and sentinel state overrides. Tokens the
|
|
60
|
+
* simulator cannot `deal` by verified storage write are returned in `unresolved` rather than
|
|
61
|
+
* thrown.
|
|
62
|
+
*
|
|
63
|
+
* @throws StateOverrideUnsupportedError when the RPC endpoint cannot execute state overrides.
|
|
64
|
+
*/
|
|
65
|
+
forBalances: (args: PrepareBalanceOverridesArgs) => Promise<PreparedBalanceOverrides>;
|
|
66
|
+
/**
|
|
67
|
+
* Prepares ERC-20 allowance overrides for `from` and the requested token/spender pairs.
|
|
68
|
+
*
|
|
69
|
+
* Standard Solidity allowance layouts are inferred after one verified probe per token where
|
|
70
|
+
* possible; non-standard layouts fall back to per-pair probing. Pairs the simulator cannot
|
|
71
|
+
* `deal` via verified storage write are returned in `unresolved` rather than thrown.
|
|
72
|
+
*
|
|
73
|
+
* @throws StateOverrideUnsupportedError when the RPC endpoint cannot execute state overrides.
|
|
74
|
+
*/
|
|
75
|
+
forAllowances: (args: PrepareAllowanceOverridesArgs) => Promise<PreparedAllowanceOverrides>;
|
|
76
|
+
/**
|
|
77
|
+
* Estimates the balances and approvals needed to execute the observed path.
|
|
78
|
+
*
|
|
79
|
+
* Use this when the tokens or spenders are not known ahead of time. Returned amounts are
|
|
80
|
+
* estimated under forged balances/allowances and should be padded before display or transaction
|
|
81
|
+
* assembly; unreliable measurements are reported under `unresolved`.
|
|
82
|
+
*
|
|
83
|
+
* @throws InvalidSimulationInputError when `calls` is empty.
|
|
84
|
+
* @throws AccessListUnsupportedError when the RPC endpoint cannot provide access lists.
|
|
85
|
+
* @throws StateOverrideUnsupportedError when the RPC endpoint cannot execute state overrides or
|
|
86
|
+
* returns undecodable simulator output.
|
|
87
|
+
*/
|
|
88
|
+
estimateRequirements: (args: EstimateAssetRequirementsArgs) => Promise<EstimatedAssetRequirements>;
|
|
89
|
+
};
|
|
66
90
|
}
|
|
67
91
|
/** Factory for {@link TxSimulator} instances bound to one viem public client. */
|
|
68
92
|
export declare const TxSimulator: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txSimulator.d.ts","sourceRoot":"","sources":["../src/txSimulator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"txSimulator.d.ts","sourceRoot":"","sources":["../src/txSimulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AASpC,OAAO,KAAK,EAEV,YAAY,EACZ,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,0BAA0B,EAC1B,YAAY,EAEZ,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAQpB;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE5D,QAAQ,CAAC,cAAc,EAAE;QACvB;;;;;;;;WAQG;QACH,OAAO,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QAEtE;;;;;;;;WAQG;QACH,cAAc,EAAE,CAAC,IAAI,EAAE,yBAAyB,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;KACzE,CAAC;IAEF,QAAQ,CAAC,cAAc,EAAE;QACvB;;;;;;;;WAQG;QACH,WAAW,EAAE,CAAC,IAAI,EAAE,2BAA2B,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEtF;;;;;;;;WAQG;QACH,aAAa,EAAE,CAAC,IAAI,EAAE,6BAA6B,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAE5F;;;;;;;;;;;WAWG;QACH,oBAAoB,EAAE,CACpB,IAAI,EAAE,6BAA6B,KAChC,OAAO,CAAC,0BAA0B,CAAC,CAAC;KAC1C,CAAC;CACH;AAED,iFAAiF;AACjF,eAAO,MAAM,WAAW;IACtB;;;;;;;;;;;OAWG;kBACW,iBAAiB,GAAG,WAAW;CAyC9C,CAAC"}
|
package/dist/txSimulator.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { DEFAULT_SIMULATION_GAS_LIMIT } from "./constants.js";
|
|
2
2
|
import { InvalidSimulationInputError } from "./errors.js";
|
|
3
|
-
import {
|
|
3
|
+
import { discoverErc20s, forUserBalanceQueries } from "./internal/queryDiscovery.js";
|
|
4
|
+
import { estimateTokenOverrideRequirements } from "./internal/requirements.js";
|
|
4
5
|
import { blockOptionsSpread } from "./internal/rpc.js";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
6
|
+
import { runSimulator } from "./internal/simulator.js";
|
|
7
|
+
import { prepareAllowanceTokenOverrides, prepareBalanceTokenOverrides } from "./internal/slots.js";
|
|
7
8
|
/** Factory for {@link TxSimulator} instances bound to one viem public client. */
|
|
8
9
|
export const TxSimulator = {
|
|
9
10
|
/**
|
|
@@ -36,9 +37,19 @@ export const TxSimulator = {
|
|
|
36
37
|
};
|
|
37
38
|
return {
|
|
38
39
|
simulate: (args) => runSimulate({ ...args, ...revertDefaults(args), client: bound.client }),
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
balanceQueries: {
|
|
41
|
+
forUser: (args) => forUserBalanceQueries({ ...args, ...defaults(args), client: bound.client }),
|
|
42
|
+
discoverErc20s: (args) => discoverErc20s({ ...args, ...defaults(args), client: bound.client }),
|
|
43
|
+
},
|
|
44
|
+
tokenOverrides: {
|
|
45
|
+
forBalances: (args) => prepareBalanceTokenOverrides({ ...args, ...defaults(args), client: bound.client }),
|
|
46
|
+
forAllowances: (args) => prepareAllowanceTokenOverrides({ ...args, ...defaults(args), client: bound.client }),
|
|
47
|
+
estimateRequirements: (args) => estimateTokenOverrideRequirements({
|
|
48
|
+
...args,
|
|
49
|
+
...revertDefaults(args),
|
|
50
|
+
client: bound.client,
|
|
51
|
+
}),
|
|
52
|
+
},
|
|
42
53
|
};
|
|
43
54
|
},
|
|
44
55
|
};
|
|
@@ -51,25 +62,62 @@ async function runSimulate(args) {
|
|
|
51
62
|
data: call.data,
|
|
52
63
|
value: call.value ?? 0n,
|
|
53
64
|
}));
|
|
54
|
-
const candidateAddresses = await discoverCandidateAddresses({
|
|
55
|
-
client: args.client,
|
|
56
|
-
from: args.from,
|
|
57
|
-
calls,
|
|
58
|
-
...blockOptionsSpread(args),
|
|
59
|
-
gas: args.gas,
|
|
60
|
-
...(args.debug !== undefined ? { debug: args.debug } : {}),
|
|
61
|
-
});
|
|
62
65
|
const tokenSlotOverrides = args.tokenSlotOverrides ?? [];
|
|
63
|
-
|
|
66
|
+
const result = await runSimulator({
|
|
64
67
|
client: args.client,
|
|
65
68
|
from: args.from,
|
|
66
69
|
calls,
|
|
67
|
-
candidates: [
|
|
70
|
+
candidates: [],
|
|
68
71
|
tokenSlotOverrides,
|
|
72
|
+
balanceProbes: args.balanceQueries.map((query) => ({
|
|
73
|
+
token: query.asset,
|
|
74
|
+
account: query.account,
|
|
75
|
+
})),
|
|
69
76
|
debug: args.debug,
|
|
70
77
|
...blockOptionsSpread(args),
|
|
71
78
|
gas: args.gas,
|
|
72
79
|
...(args.errorAbi !== undefined ? { errorAbi: args.errorAbi } : {}),
|
|
73
80
|
});
|
|
81
|
+
const balances = buildBalanceResults(args.balanceQueries, result.probeData, calls.length);
|
|
82
|
+
if (result.status === "reverted") {
|
|
83
|
+
return {
|
|
84
|
+
status: "reverted",
|
|
85
|
+
...balances,
|
|
86
|
+
revertData: result.revertData,
|
|
87
|
+
...(result.revertReason !== undefined ? { revertReason: result.revertReason } : {}),
|
|
88
|
+
...(result.revertError !== undefined ? { revertError: result.revertError } : {}),
|
|
89
|
+
...(result.revertSelector !== undefined ? { revertSelector: result.revertSelector } : {}),
|
|
90
|
+
failingCallIndex: result.failingCallIndex,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return { status: "success", ...balances };
|
|
94
|
+
}
|
|
95
|
+
function buildBalanceResults(queries, probeData, callsLength) {
|
|
96
|
+
const balanceDeltas = [];
|
|
97
|
+
const unresolved = [];
|
|
98
|
+
const stride = callsLength + 1;
|
|
99
|
+
for (let i = 0; i < queries.length; ++i) {
|
|
100
|
+
const query = queries[i];
|
|
101
|
+
if (query === undefined)
|
|
102
|
+
continue;
|
|
103
|
+
if (probeData.balanceProbeOk[i] !== true) {
|
|
104
|
+
unresolved.push(query);
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
const base = i * stride;
|
|
108
|
+
const before = probeData.balanceCheckpoints[base] ?? 0n;
|
|
109
|
+
const after = probeData.balanceCheckpoints[base + callsLength] ?? 0n;
|
|
110
|
+
const byCall = Array.from({ length: callsLength }, (_, callIndex) => (probeData.balanceCheckpoints[base + callIndex + 1] ?? 0n) -
|
|
111
|
+
(probeData.balanceCheckpoints[base + callIndex] ?? 0n));
|
|
112
|
+
balanceDeltas.push({
|
|
113
|
+
asset: query.asset,
|
|
114
|
+
account: query.account,
|
|
115
|
+
before,
|
|
116
|
+
after,
|
|
117
|
+
delta: after - before,
|
|
118
|
+
byCall,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
return { balanceDeltas, unresolved };
|
|
74
122
|
}
|
|
75
123
|
//# sourceMappingURL=txSimulator.js.map
|
package/dist/txSimulator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"txSimulator.js","sourceRoot":"","sources":["../src/txSimulator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"txSimulator.js","sourceRoot":"","sources":["../src/txSimulator.ts"],"names":[],"mappings":"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"}
|