Skip to content

Commit

Permalink
♻️ Refactoring multicall
Browse files Browse the repository at this point in the history
Signed-off-by: Pascal Marco Caversaccio <[email protected]>
  • Loading branch information
pcaversaccio committed Nov 6, 2024
1 parent 2f46723 commit 8b51eba
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 30 deletions.
16 changes: 8 additions & 8 deletions .gas-snapshot
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Vyper version: 0.4.1b2+commit.0abcf452
Forge version: forge 0.2.0 (57bb12e 2024-11-06T00:21:40.682166819Z)
Forge version: forge 0.2.0 (58bf161 2024-11-06T16:27:58.427306827Z)
Vyper config:
{
"optimize": "gas"
Expand Down Expand Up @@ -614,11 +614,11 @@ MessageHashUtilsTest:testFuzzToTypedDataHash(string,string) (runs: 256, μ: 9957
MessageHashUtilsTest:testToDataWithIntendedValidatorHash() (gas: 11133)
MessageHashUtilsTest:testToDataWithIntendedValidatorHashSelf() (gas: 11657)
MessageHashUtilsTest:testToTypedDataHash() (gas: 8736)
MulticallTest:testMulticallRevert() (gas: 1150311)
MulticallTest:testMulticallSelfRevert() (gas: 2212951)
MulticallTest:testMulticallRevert() (gas: 1150320)
MulticallTest:testMulticallSelfRevert() (gas: 2212969)
MulticallTest:testMulticallSelfSuccess() (gas: 3335144)
MulticallTest:testMulticallSuccess() (gas: 1158796)
MulticallTest:testMulticallValueRevertCase1() (gas: 1209165)
MulticallTest:testMulticallValueRevertCase1() (gas: 1209174)
MulticallTest:testMulticallValueRevertCase2() (gas: 1210139)
MulticallTest:testMulticallValueSuccess() (gas: 1237243)
MulticallTest:testMultistaticcallRevert() (gas: 1040449054)
Expand Down Expand Up @@ -680,13 +680,13 @@ SignatureCheckerTest:testFuzzEOAWithInvalidSignature(bytes,string) (runs: 256,
SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ: 20409, ~: 20410)
SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20341, ~: 20342)
SignatureCheckerTest:testInitialSetup() (gas: 8356)
TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1303)
TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1302)
TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1270)
TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1239)
TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1305)
TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1306)
TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1277)
TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1303)
TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1302)
TimelockControllerInvariants:statefulFuzzProposalsExecutedMatchCount() (runs: 256, calls: 3840, reverts: 1302)
TimelockControllerInvariants:statefulFuzzSumOfProposals() (runs: 256, calls: 3840, reverts: 1303)
TimelockControllerTest:testAdminCannotBatchExecute() (gas: 750632)
TimelockControllerTest:testAdminCannotBatchSchedule() (gas: 748419)
TimelockControllerTest:testAdminCannotCancel() (gas: 13369)
Expand Down
20 changes: 10 additions & 10 deletions .gas-snapshot-venom
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Vyper version: 0.4.1b2+commit.0abcf452
Forge version: forge 0.2.0 (57bb12e 2024-11-06T00:21:40.682166819Z)
Forge version: forge 0.2.0 (58bf161 2024-11-06T16:27:58.427306827Z)
Vyper config:
{
"optimize": "gas",
Expand Down Expand Up @@ -615,15 +615,15 @@ MessageHashUtilsTest:testFuzzToTypedDataHash(string,string) (runs: 256, μ: 9889
MessageHashUtilsTest:testToDataWithIntendedValidatorHash() (gas: 11027)
MessageHashUtilsTest:testToDataWithIntendedValidatorHashSelf() (gas: 11566)
MessageHashUtilsTest:testToTypedDataHash() (gas: 8668)
MulticallTest:testMulticallRevert() (gas: 1152163)
MulticallTest:testMulticallSelfRevert() (gas: 2216613)
MulticallTest:testMulticallSelfSuccess() (gas: 3340482)
MulticallTest:testMulticallSuccess() (gas: 1160590)
MulticallTest:testMulticallValueRevertCase1() (gas: 1211519)
MulticallTest:testMulticallValueRevertCase2() (gas: 1212396)
MulticallTest:testMulticallValueSuccess() (gas: 1239518)
MulticallTest:testMulticallRevert() (gas: 1152172)
MulticallTest:testMulticallSelfRevert() (gas: 2216625)
MulticallTest:testMulticallSelfSuccess() (gas: 3340497)
MulticallTest:testMulticallSuccess() (gas: 1160596)
MulticallTest:testMulticallValueRevertCase1() (gas: 1211549)
MulticallTest:testMulticallValueRevertCase2() (gas: 1212432)
MulticallTest:testMulticallValueSuccess() (gas: 1239560)
MulticallTest:testMultistaticcallRevert() (gas: 1040449072)
MulticallTest:testMultistaticcallSuccess() (gas: 1130726)
MulticallTest:testMultistaticcallSuccess() (gas: 1130729)
Ownable2StepInvariants:statefulFuzzOwner() (runs: 256, calls: 3840, reverts: 3840)
Ownable2StepInvariants:statefulFuzzPendingOwner() (runs: 256, calls: 3840, reverts: 3840)
Ownable2StepTest:testAcceptOwnershipNonPendingOwner() (gas: 47251)
Expand Down Expand Up @@ -682,7 +682,7 @@ SignatureCheckerTest:testFuzzEOAWithInvalidSigner(string,string) (runs: 256, μ:
SignatureCheckerTest:testFuzzEOAWithValidSignature(string,string) (runs: 256, μ: 20260, ~: 20261)
SignatureCheckerTest:testInitialSetup() (gas: 8374)
TimelockControllerInvariants:statefulFuzzExecutedLessThanOrEqualToScheduled() (runs: 256, calls: 3840, reverts: 1264)
TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1288)
TimelockControllerInvariants:statefulFuzzExecutedProposalCancellation() (runs: 256, calls: 3840, reverts: 1287)
TimelockControllerInvariants:statefulFuzzExecutingCancelledProposal() (runs: 256, calls: 3840, reverts: 1259)
TimelockControllerInvariants:statefulFuzzExecutingNotReadyProposal() (runs: 256, calls: 3840, reverts: 1285)
TimelockControllerInvariants:statefulFuzzOnceProposalExecution() (runs: 256, calls: 3840, reverts: 1247)
Expand Down
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
- Use relative `interfaces` `import`s. ([#263](https://github.com/pcaversaccio/snekmate/pull/263))
- Use `bytes1` literal in `eip712Domain` function. ([#283](https://github.com/pcaversaccio/snekmate/pull/283))
- [`math`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/utils/math.vy): Use mutable `internal` function parameters. ([#267](https://github.com/pcaversaccio/snekmate/pull/267))
- [`multicall`](https://github.com/pcaversaccio/snekmate/blob/v0.1.1/src/snekmate/utils/multicall.vy): Optimise `Batch`-based `for` loops. ([#287](https://github.com/pcaversaccio/snekmate/pull/287))

### 🥢 Test Coverage

Expand Down
20 changes: 8 additions & 12 deletions src/snekmate/utils/multicall.vy
Original file line number Diff line number Diff line change
Expand Up @@ -88,11 +88,10 @@ def _multicall(data: DynArray[Batch, _DYNARRAY_BOUND]) -> DynArray[Result, _DYNA
for batch: Batch in data:
if batch.allow_failure:
success, return_data = raw_call(batch.target, batch.calldata, max_outsize=255, revert_on_failure=False)
results.append(Result(success=success, return_data=return_data))
else:
return_data = raw_call(batch.target, batch.calldata, max_outsize=255)
success = True
results.append(Result(success=success, return_data=return_data))
return_data = raw_call(batch.target, batch.calldata, max_outsize=255)
results.append(Result(success=success, return_data=return_data))
return results


Expand Down Expand Up @@ -127,11 +126,10 @@ def _multicall_value(data: DynArray[BatchValue, _DYNARRAY_BOUND]) -> DynArray[Re
success, return_data = raw_call(
batch.target, batch.calldata, max_outsize=255, value=msg_value, revert_on_failure=False
)
results.append(Result(success=success, return_data=return_data))
else:
return_data = raw_call(batch.target, batch.calldata, max_outsize=255, value=msg_value)
success = True
results.append(Result(success=success, return_data=return_data))
return_data = raw_call(batch.target, batch.calldata, max_outsize=255, value=msg_value)
results.append(Result(success=success, return_data=return_data))
assert msg.value == value_accumulator, "multicall: value mismatch"
return results

Expand Down Expand Up @@ -164,11 +162,10 @@ def _multicall_self(data: DynArray[BatchSelf, _DYNARRAY_BOUND]) -> DynArray[Resu
success, return_data = raw_call(
self, batch.calldata, max_outsize=255, is_delegate_call=True, revert_on_failure=False
)
results.append(Result(success=success, return_data=return_data))
else:
return_data = raw_call(self, batch.calldata, max_outsize=255, is_delegate_call=True)
success = True
results.append(Result(success=success, return_data=return_data))
return_data = raw_call(self, batch.calldata, max_outsize=255, is_delegate_call=True)
results.append(Result(success=success, return_data=return_data))
return results


Expand All @@ -192,9 +189,8 @@ def _multistaticcall(data: DynArray[Batch, _DYNARRAY_BOUND]) -> DynArray[Result,
success, return_data = raw_call(
batch.target, batch.calldata, max_outsize=255, is_static_call=True, revert_on_failure=False
)
results.append(Result(success=success, return_data=return_data))
else:
return_data = raw_call(batch.target, batch.calldata, max_outsize=255, is_static_call=True)
success = True
results.append(Result(success=success, return_data=return_data))
return_data = raw_call(batch.target, batch.calldata, max_outsize=255, is_static_call=True)
results.append(Result(success=success, return_data=return_data))
return results

0 comments on commit 8b51eba

Please sign in to comment.