f34ce41345
GitOrigin-RevId: b73c2221a46c13557b1b3be9c2070cc42cf01eb3
106 lines
2.2 KiB
Nix
106 lines
2.2 KiB
Nix
{
|
|
lib,
|
|
nix-update-script,
|
|
buildPythonPackage,
|
|
crytic-compile,
|
|
fetchFromGitHub,
|
|
makeWrapper,
|
|
packaging,
|
|
prettytable,
|
|
pythonOlder,
|
|
setuptools-scm,
|
|
solc,
|
|
web3,
|
|
withSolc ? false,
|
|
testers,
|
|
slither-analyzer,
|
|
}:
|
|
|
|
buildPythonPackage rec {
|
|
pname = "slither-analyzer";
|
|
version = "0.10.3";
|
|
pyproject = true;
|
|
|
|
disabled = pythonOlder "3.8";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "crytic";
|
|
repo = "slither";
|
|
rev = "refs/tags/${version}";
|
|
hash = "sha256-KWLv0tpd1FHZ9apipVPWw6VjtfYpngsH7XDQQ3luBZA=";
|
|
};
|
|
|
|
nativeBuildInputs = [
|
|
makeWrapper
|
|
setuptools-scm
|
|
];
|
|
|
|
propagatedBuildInputs = [
|
|
crytic-compile
|
|
packaging
|
|
prettytable
|
|
web3
|
|
];
|
|
|
|
postFixup = lib.optionalString withSolc ''
|
|
wrapProgram $out/bin/slither \
|
|
--prefix PATH : "${lib.makeBinPath [ solc ]}"
|
|
'';
|
|
|
|
# required for pythonImportsCheck
|
|
postInstall = ''
|
|
export HOME="$TEMP"
|
|
'';
|
|
|
|
pythonImportsCheck = [
|
|
"slither"
|
|
"slither.all_exceptions"
|
|
"slither.analyses"
|
|
"slither.core"
|
|
"slither.detectors"
|
|
"slither.exceptions"
|
|
"slither.formatters"
|
|
"slither.printers"
|
|
"slither.slither"
|
|
"slither.slithir"
|
|
"slither.solc_parsing"
|
|
"slither.utils"
|
|
"slither.visitors"
|
|
"slither.vyper_parsing"
|
|
];
|
|
|
|
# Test if the binary works during the build phase.
|
|
checkPhase = ''
|
|
runHook preCheck
|
|
|
|
HOME="$TEMP" $out/bin/slither --version
|
|
|
|
runHook postCheck
|
|
'';
|
|
|
|
passthru.tests.version = testers.testVersion {
|
|
package = slither-analyzer;
|
|
command = "HOME=$TMPDIR slither --version";
|
|
version = "${version}";
|
|
};
|
|
|
|
passthru.updateScript = nix-update-script { };
|
|
|
|
meta = with lib; {
|
|
description = "Static Analyzer for Solidity";
|
|
longDescription = ''
|
|
Slither is a Solidity static analysis framework written in Python 3. It
|
|
runs a suite of vulnerability detectors, prints visual information about
|
|
contract details, and provides an API to easily write custom analyses.
|
|
'';
|
|
homepage = "https://github.com/trailofbits/slither";
|
|
changelog = "https://github.com/crytic/slither/releases/tag/${version}";
|
|
license = licenses.agpl3Plus;
|
|
mainProgram = "slither";
|
|
maintainers = with maintainers; [
|
|
arturcygan
|
|
fab
|
|
hellwolf
|
|
];
|
|
};
|
|
}
|