nevillegrech / gigahorse-toolchain

A binary lifter and analysis framework for Ethereum smart contracts
Other
290 stars 59 forks source link

Support for some conditional call patterns + cloning improvement #126

Closed sifislag closed 6 months ago

sifislag commented 6 months ago

This PR includes a couple of improvements, vastly improving our function inference output:


Results

solc 0.8 contracts see a big improvement, as can be seen in the metadata-dataset1

1996 contracts decompiled/analyzed by some config
1996 contracts decompiled/analyzed by all configs (common)

ANALYTIC: decomp_time
jan24-metadata-master-200 (common): 6692.843376874924
jan24-metadata-cloneimprovement-200 (common): 6981.639788150787 (+4.315%)
jan24-metadata-bothimprovements-200 (common): 6955.371892213821 (+3.923%)

ANALYTIC: Analytics_JumpToMany
jan24-metadata-master-200 (common): 355 (+179.5%)
jan24-metadata-cloneimprovement-200 (common): 294 (+131.5%)
jan24-metadata-bothimprovements-200 (common): 127

ANALYTIC: Analytics_PublicFunction
jan24-metadata-master-200 (common): 78126
jan24-metadata-cloneimprovement-200 (common): 78126
jan24-metadata-bothimprovements-200 (common): 78126

ANALYTIC: Analytics_ReachableBlocks
jan24-metadata-master-200 (common): 1235649
jan24-metadata-cloneimprovement-200 (common): 1235649
jan24-metadata-bothimprovements-200 (common): 1235649

ANALYTIC: Analytics_BlockHasNoTACBlock
jan24-metadata-master-200 (common): 8
jan24-metadata-cloneimprovement-200 (common): 8
jan24-metadata-bothimprovements-200 (common): 11 (+37.5%)

ANALYTIC: Analytics_PolymorphicTargetSameCtx
jan24-metadata-master-200 (common): 37
jan24-metadata-cloneimprovement-200 (common): 37
jan24-metadata-bothimprovements-200 (common): 37

ANALYTIC: Analytics_LocalBlockEdge
jan24-metadata-master-200 (common): 1430818
jan24-metadata-cloneimprovement-200 (common): 1430743 (-0.005242%)
jan24-metadata-bothimprovements-200 (common): 1423748 (-0.4941%)

ANALYTIC: Analytics_StmtMissingOperand
jan24-metadata-master-200 (common): 87 (+128.9%)
jan24-metadata-cloneimprovement-200 (common): 55 (+44.74%)
jan24-metadata-bothimprovements-200 (common): 38

ANALYTIC: Analytics_PrivateFunctionMatchesMetadata
jan24-metadata-master-200 (common): 104741 (-0.163%)
jan24-metadata-cloneimprovement-200 (common): 104741 (-0.163%)
jan24-metadata-bothimprovements-200 (common): 104912

ANALYTIC: Analytics_PrivateFunctionMatchesMetadataIncorrectArgs
jan24-metadata-master-200 (common): 477 (+207.7%)
jan24-metadata-cloneimprovement-200 (common): 182 (+17.42%)
jan24-metadata-bothimprovements-200 (common): 155

ANALYTIC: Analytics_PrivateFunctionMatchesMetadataIncorrectReturnArgs
jan24-metadata-master-200 (common): 679 (+37.45%)
jan24-metadata-cloneimprovement-200 (common): 494
jan24-metadata-bothimprovements-200 (common): 494

for ir contracts the results are almost unchanged.

for contracts produced by the legacy pipeline in older compiler versions we still see an improvement, but way smaller than with 0.8 contracts

github-actions[bot] commented 6 months ago

Test Results (Souffle 2.3)

48 tests  +2   48 :white_check_mark: +2   28m 55s :stopwatch: + 4m 54s  1 suites ±0    0 :zzz: ±0   1 files   ±0    0 :x: ±0 

Results for commit f7efba92. ± Comparison against base commit 20df5a75.

:recycle: This comment has been updated with latest results.

github-actions[bot] commented 6 months ago

Test Results (Souffle 2.4)

48 tests  +2   48 :white_check_mark: +2   29m 16s :stopwatch: + 4m 22s  1 suites ±0    0 :zzz: ±0   1 files   ±0    0 :x: ±0 

Results for commit f7efba92. ± Comparison against base commit 20df5a75.

:recycle: This comment has been updated with latest results.