yarn add --dev @nomiclabs/hardhat-ethers@npm:hardhat-deploy-ethers ethers @nomiclabs/hardhat-etherscan @nomiclabs/hardhat-waffle chai ethereum-waffle hardhat hardhat-contract-sizer hardhat-deploy hardhat-gas-reporter prettier prettier-plugin-solidity solhint solidity-coverage dotenv
在这个示例中,我们使用了一个空的数组 contractData
来保存获取到的所有合约的信息。在每个交易中,我们首先检查交易是否为合约创建交易。如果是,我们使用 ethers.ContractFactory
来解析合约字节码并获取合约 ABI,并且通过provider.getCode()
的方法获得字节码。然后将所有信息添加到 contractData
数组中。
如果交易不是合约创建交易,我们检查交易目标地址是否为合约地址,如果是,我们使用 ethers.Contract 对象连接到该地址,并使用 interface
属性来获取合约 ABI
,然后将所有信息添加到 contractData
数组中。
最后,我们使用 fs.writeFileSync
方法将 contractData
数组中的信息保存到一个 JSON 文件中。输出文件的格式化选项是 null, 2
,这将在文件中使用两个空格来缩进每个对象的属性。在输出文件后,程序会在控制台上输出一条消息。
将contractData.json
中的 array 的bytecode
的部分单独拿出来。
在这个例子中,我们首先读取 contractData.json
文件,并使用 JSON.parse
方法将其解析为一个对象数组。然后,我们使用 map
方法对数组中的每个元素进行处理,提取其中的 bytecode
字段的值,并将所有值存储到一个新的数组中。最后,我们将新的数组输出到typecodeData.json
中,为使用slither
工具的做准备。
现在需要知道如何使用这个slither
工具。
创建 python 的虚拟环境gp
,
conda activate gp
pip3 install slither-analyzer
yarn add slither-js --dev
👿 👿 假的 👿 👿
试着安装slither
,根本用不来,吐了。
了解了一下后续工作要具体怎么做感觉大方向感觉没什么问题,但是在细节部分问题可能会有很多
在powershell
上用slither .
这个命令竟然又行了?行吧。
Different versions of Solidity are used:
- Version used: ['^0.8.0', '^0.8.7']
- ^0.8.0 (node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol#2)
- ^0.8.7 (contracts/Lock.sol#3)
- ^0.8.7 (contracts/PriceConverter.sol#2)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#different-pragma-directives-are-used
Pragma version^0.8.0 (node_modules/@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol#2) allows old versions
Pragma version^0.8.7 (contracts/Lock.sol#3) allows old versions
Pragma version^0.8.7 (contracts/PriceConverter.sol#2) allows old versions
solc-0.8.17 is not recommended for deployment
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#incorrect-versions-of-solidity
Low level call in FundMe.withdraw() (contracts/Lock.sol#62-76):
- (success) = i_owner.call{value: address(this).balance}() (contracts/Lock.sol#74)
Low level call in FundMe.cheaperWithdraw() (contracts/Lock.sol#78-93):
- (success) = i_owner.call{value: address(this).balance}() (contracts/Lock.sol#91)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#low-level-calls
Variable FundMe.i_owner (contracts/Lock.sol#22) is not in mixedCase
Variable FundMe.s_funders (contracts/Lock.sol#23) is not in mixedCase
Variable FundMe.s_addressToAmountFunded (contracts/Lock.sol#24) is not in mixedCase
Variable FundMe.s_priceFeed (contracts/Lock.sol#25) is not in mixedCase
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#conformance-to-solidity-naming-conventions
PriceConverter.getPrice(AggregatorV3Interface) (contracts/PriceConverter.sol#7-15) uses literals with too many digits:
- uint256(answer * 10000000000) (contracts/PriceConverter.sol#14)
PriceConverter.getConversionRate(uint256,AggregatorV3Interface) (contracts/PriceConverter.sol#20-28) uses literals with too many digits:
- ethAmountInUsd = (ethPrice * ethAmount) / 1000000000000000000 (contracts/PriceConverter.sol#25)
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#too-many-digits
FundMe.s_priceFeed (contracts/Lock.sol#25) should be immutable
Reference: https://github.com/crytic/slither/wiki/Detector-Documentation#state-variables-that-could-be-declared-immutable
. analyzed (3 contracts with 84 detectors), 14 result(s) found
那接下来我需要安装solc
的版本控制工具了。预祝接下来的我一切顺利。 😄
安装Mythril
pip3 install mythril
myth analyze <solidity-file>
Or:
myth analyze -a <contract-address>
用 docker 解决了,行吧。docker 石我蝶
docker pull mythril/myth
开始做小数据集和写部署脚本了
想着做个 demo 出来。然后再做大规模的数据检测。
今天在研究slither
和mythril
这两个漏洞检测工具的用法。开始智能合约代码审计(auditing)
加上开始学习如何利用这些漏洞。
例如重入漏洞:
function withdraw() external {
uint256 balance = balances[msg.sender];
require(balance > 0);
(bool success, ) = msg.sender.call{ value: balance }(""); // here
require(success, "Failed to send Ether");
balances[msg.sender] = 0; // here
}
在代码中,发送 ether 后再更新余额会引发冲入漏洞(Reentrancy),具体原因是
摸了
在文件目录的以T
为开头的文件,以后要将它们写入到hardhat
的task
里面。
Two most common attacks:
- Reenteancy
- Oracle Manipulation
pip3 install solc-select
solc-select use 0.8.7
这样就可以实现使用yarn slither 来使用slither 这个工具。并且可以对其输出进行处理
package.json
中编写的脚本
"scripts": {
"slither": "slither ./contracts --solc-remaps '@openzeppelin=node_modules/@openzeppelin @chainlink=node_modules/@chainlink' --exclude naming-convention,external-function,low-level-calls",
"toolbox": "docker run -it --rm -v $PWD:/src trailofbits/eth-security-toolbox",
"lint": "solhint 'contracts/*.sol'",
"lint:fix": "solhint 'contracts/**/*.sol' --fix",
"format": "prettier --write ."
}
在运行过程中遇到ArgumentTypeError: No solc version set. Run
solc-select use VERSIONor set SOLC_VERSION environment variable.
的错误
解决办法如下:
set SOLC_VERSION environment variable.
编写了一个solc.bat
的文件,一键下载所有版本 solidity。
在使用 docker 里面的智能合约工具。还在学习,预计明天学完就开始着手标记我的爬出来的合约了。后天开始部署合约,开始写脚本。尽量这一周做完所有小小 demo 的代码吧。然后下一周完善+大量批量进行测试。然后就可以开始准备毕业论文了。
理想情况:3 月完全搞完
但愿如此 😢 😢 😢
trailofbits/eth-security-toolbox
是一个 Docker 容器,预装和预配置了所有Trail of Bits
的以太坊安全工具,包括slither、echidna、crytic-compile
等。
我可以从docker hub
上拉取trailofbits/eth-security-toolbox
镜像,并运行它。例如,你可以使用以下命令:
docker pull trailofbits/eth-security-toolbox
docker run -it -v /path/to/your/contracts:/contracts trailofbits/eth-security-toolbox
这个命令会启动一个交互式的 shell,将你本地的合约目录映射到容器里的/contracts 目录。
在容器里,你可以使用任何Trail of Bits
的工具来检测你的 sol 文件。例如,你可以使用 slither 来分析 VaultFuzzTest.sol 文件:
slither /contracts/test/fuzzing/VaultFuzzTest.sol --config /contracts/test/fuzzing/config.yaml
with tool Echidna
Analyzing contract: /src/test/fuzzing/VaultFuzzTest.sol:VaultFuzzTest
echidna_test_find_password: failed!💥
Call sequence:
unlock("123asd123\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL")
Unique instructions: 154
Unique codehashes: 1
Corpus size: 1
Seed: -6925906297868386582
今天新开了一个T_LableTheContracts.js
,目的是用来给我 fetch 到的合约的字节码添上标签。
docker 地命令总是出错,还在调试。可能要换到 linux 系统上。
Use our prebuilt Docker container to quickly install and run the toolkit:
docker pull trailofbits/eth-security-toolbox
docker run -it trailofbits/eth-security-toolbox
执行出错: Error: Command failed: docker run -v /mnt/d/Code/JS-Solidity/Graduation_Project/contract_data:/data:rw trailofbits/eth-security-toolbox slither /data
/home/ethsec/.local/bin/slither: line 4: import: command not found
/home/ethsec/.local/bin/slither: line 5: import: command not found
/home/ethsec/.local/bin/slither: line 7: from: command not found
/home/ethsec/.local/bin/slither: slither: line 10: syntax error near unexpected token `('
/home/ethsec/.local/bin/slither: slither: line 10: ` sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])'
这个错误信息表明你在运行 slither
命令时出现了问题。看起来像是 slither
脚本的第 4 行和第 5 行中的 import
命令没有被识别。这可能是由于你的环境中缺少某些依赖或配置不正确导致的。
你可以尝试检查你的环境配置,确保所有必要的依赖都已安装并正确配置。如果问题仍然存在,建议查阅 slither
的文档以获取更多帮助。
docker pull python
这个文件中除了 abi 以外,还可以看到这个 bytecode,将其和 transaction 的 data 字段进行比对,会发现一模一样。
其实deployedBytecode
是明显要比bytecode
短的,这是因为bytecode
里包含了一些constructor
操作,以及合约收款验证等预置操作,这些预置操作只有在部署合约的时候才会运行一次,之后再也不会运行,所以Transaction
中的data
是bytecode
,而以太坊节点保存的字节码,则是deployedBytecode
。
昨天修改了我 py 的代码。然后就可以开始使用工具进行打标签活动了。来吧,用 js 来写。
target can be:
- file.sol // a Solidity file
- project_directory // a project directory. See https://github.com/crytic/crytic-compile/#crytic-compile for the supported platforms
- 0x.. // a contract on mainnet
- NETWORK:0x.. // a contract on a different network. Supported networks: mainet,optim,ropsten,kovan,rinkeby,goerli,tobalaba,bsc,testnet.bsc,arbi,testnet.arbi,poly,mumbai,avax,testnet.avax,ftm
For usage information, see https://github.com/crytic/slither/wiki/Usage
optional arguments:
-h, --help show this help message and exit
--version displays the current version
Compile options:
--compile-force-framework COMPILE_FORCE_FRAMEWORK
Force the compile to a given framework (solc,truffle,embark,dapp,etherlime,etherscan,vyper,waffle,brownie,solc-json,buidler,hardhat,foundry,standard,archive)
--compile-remove-metadata
Remove the metadata from the bytecodes
--compile-custom-build COMPILE_CUSTOM_BUILD
Replace platform specific build command
--ignore-compile Do not run compile of any platform
--skip-clean Do not attempt to clean before compiling with a platform
Solc options:
--solc SOLC solc path
--solc-remaps SOLC_REMAPS
Add remapping
--solc-args SOLC_ARGS
Add custom solc arguments. Example: --solc-args "--allow-path /tmp --evm-version byzantium".
--solc-disable-warnings
Disable solc warnings
--solc-working-dir SOLC_WORKING_DIR
Change the default working directory
--solc-solcs-select SOLC_SOLCS_SELECT
Specify different solc version to try (env config). Depends on solc-select
--solc-solcs-bin SOLC_SOLCS_BIN
Specify different solc version to try (path config). Example: --solc-solcs-bin solc-0.4.24,solc-0.5.3
--solc-standard-json Compile all specified targets in a single compilation using solc standard json
--solc-force-legacy-json
Force the solc compiler to use the legacy json ast format over the compact json ast format
Truffle options:
--truffle-ignore-compile
Do not run truffle compile
--truffle-build-directory TRUFFLE_BUILD_DIRECTORY
Use an alternative truffle build directory
--truffle-version TRUFFLE_VERSION
Use a local Truffle version (with npx)
--truffle-overwrite-config
Use a simplified version of truffle-config.js for compilation
--truffle-overwrite-version TRUFFLE_OVERWRITE_VERSION
Overwrite solc version in truffle-config.js (only if --truffle-overwrite-config)
Embark options:
--embark-ignore-compile
Do not run embark build
--embark-overwrite-config
Install @trailofbits/embark-contract-export and add it to embark.json
Brownie options:
--brownie-ignore-compile
Do not run brownie compile
Dapp options:
--dapp-ignore-compile
Do not run dapp build
Etherlime options:
--etherlime-ignore-compile
Do not run etherlime compile
--etherlime-compile-arguments
Add arbitrary arguments to etherlime compile (note: [dir] is the the directory provided to crytic-compile)
Etherscan options:
--etherscan-only-source-code
Only compile if the source code is available.
--etherscan-only-bytecode
Only looks for bytecode.
--etherscan-apikey ETHERSCAN_API_KEY
Etherscan API key.
--arbiscan-apikey ARBISCAN_API_KEY
Etherscan API key.
--polygonscan-apikey POLYGONSCAN_API_KEY
Etherscan API key.
--test-polygonscan-apikey TEST_POLYGONSCAN_API_KEY
Etherscan API key.
--avax-apikey AVAX_API_KEY
Etherscan API key.
--ftmscan-apikey FTMSCAN_API_KEY
Etherscan API key.
--bscan-apikey BSCAN_API_KEY
Etherscan API key.
--optim-apikey OPTIM_API_KEY
Optimistic API key.
--etherscan-export-directory ETHERSCAN_EXPORT_DIR
Directory in which to save the analyzed contracts.
Waffle options:
--waffle-ignore-compile
Do not run waffle compile
--waffle-config-file WAFFLE_CONFIG_FILE
Provide a waffle config file
NPX options:
--npx-disable Do not use npx
Buidler options:
--buidler-ignore-compile
Do not run buidler compile
--buidler-cache-directory BUIDLER_CACHE_DIRECTORY
Use an alternative buidler cache directory (default ./cache)
--buidler-skip-directory-name-fix
Disable directory name fix (see https://github.com/crytic/crytic-compile/issues/116)
Hardhat options:
--hardhat-ignore-compile
Do not run hardhat compile
--hardhat-cache-directory HARDHAT_CACHE_DIRECTORY
Use an alternative hardhat cache directory (default ./cache)
--hardhat-artifacts-directory HARDHAT_ARTIFACTS_DIRECTORY
Use an alternative hardhat artifacts directory (default ./artifacts)
Foundry options:
--foundry-ignore-compile
Do not run foundry compile
--foundry-out-directory FOUNDRY_OUT_DIRECTORY
Use an alternative out directory (default: out)
Detectors:
--detect DETECTORS_TO_RUN
Comma-separated list of detectors, defaults to all, available detectors: abiencoderv2-array, arbitrary-send-erc20, arbitrary-send-erc20-permit, arbitrary-send-eth, array-by-
reference, controlled-array-length, assembly, assert-state-change, backdoor, weak-prng, boolean-cst, boolean-equal, shadowing-builtin, codex, constant-function-asm, constant-
function-state, pragma, controlled-delegatecall, costly-loop, constable-states, immutable-states, dead-code, delegatecall-loop, deprecated-standards, divide-before-multiply,
domain-separator-collision, enum-conversion, external-function, function-init-state, erc20-interface, erc721-interface, solc-version, incorrect-equality, incorrect-unary,
shadowing-local, locked-ether, low-level-calls, mapping-deletion, events-access, events-maths, missing-inheritance, missing-zero-check, incorrect-modifier, msg-value-loop, calls-
loop, multiple-constructors, name-reused, naming-convention, variable-scope, protected-vars, public-mappings-nested, redundant-statements, reentrancy-benign, reentrancy-eth,
reentrancy-events, reentrancy-unlimited-gas, reentrancy-no-eth, reused-constructor, rtlo, shadowing-abstract, incorrect-shift, similar-names, shadowing-state, storage-array,
suicidal, timestamp, too-many-digits, tx-origin, tautology, unchecked-lowlevel, unchecked-send, unchecked-transfer, unimplemented-functions, erc20-indexed, uninitialized-fptr-cst,
uninitialized-local, uninitialized-state, uninitialized-storage, unprotected-upgrade, unused-return, unused-state, var-read-using-this, void-cst, write-after-write
--list-detectors List available detectors
--exclude DETECTORS_TO_EXCLUDE
Comma-separated list of detectors that should be excluded
--exclude-dependencies
Exclude results that are only related to dependencies
--exclude-optimization
Exclude optimization analyses
--exclude-informational
Exclude informational impact analyses
--exclude-low Exclude low impact analyses
--exclude-medium Exclude medium impact analyses
--exclude-high Exclude high impact analyses
--fail-pedantic Return the number of findings in the exit code
--no-fail-pedantic Do not return the number of findings in the exit code. Opposite of --fail-pedantic
--fail-low Fail if low or greater impact finding is detected
--fail-medium Fail if medium or greater impact finding is detected
--fail-high Fail if high impact finding is detected
--show-ignored-findings
Show all the findings
Printers:
--print PRINTERS_TO_RUN
Comma-separated list of contract information printers, available printers: cfg, constructor-calls, contract-summary, data-dependency, declaration, dominator, echidna, function-id,
function-summary, modifiers, call-graph, evm, human-summary, inheritance, inheritance-graph, slithir, slithir-ssa, pausable, vars-and-auth, require, variable-order
--list-printers List available printers
Checklist (consider using https://github.com/crytic/slither-action):
--checklist Generate a markdown page with the detector results
--checklist-limit CHECKLIST_LIMIT
Limite the number of results per detector in the markdown file
--markdown-root MARKDOWN_ROOT
URL for markdown generation
Additional options:
--json JSON Export the results as a JSON file ("--json -" to export to stdout)
--sarif SARIF Export the results as a SARIF JSON file ("--sarif -" to export to stdout)
--json-types JSON_TYPES
Comma-separated list of result types to output to JSON, defaults to detectors,printers. Available types: compilations,console,detectors,printers,list-detectors,list-printers
--zip ZIP Export the results as a zipped JSON file
--zip-type ZIP_TYPE Zip compression type. One of lzma,stored,deflated,bzip2. Default lzma
--disable-color Disable output colorization
--filter-paths FILTER_PATHS
Comma-separated list of paths for which results will be excluded
--triage-mode Run triage mode (save results in slither.db.json)
--config-file CONFIG_FILE
Provide a config file (default: slither.config.json)
--change-line-prefix CHANGE_LINE_PREFIX
Change the line prefix (default #) for the displayed source codes (i.e. file.sol#1).
--solc-ast Provide the contract as a json AST
--generate-patches Generate patches (json output only)
--no-fail Do not fail in case of parsing (echidna mode only)
Codex (https://beta.openai.com/docs/guides/code):
--codex Enable codex (require an OpenAI API Key)
--codex-log Log codex queries (in crytic_export/codex/)
--codex-contracts CODEX_CONTRACTS
Comma separated list of contracts to submit to OpenAI Codex
--codex-model CODEX_MODEL
Name of the Codex model to use (affects pricing). Defaults to 'text-davinci-003'
--codex-temperature CODEX_TEMPERATURE
Temperature to use with Codex. Lower number indicates a more precise answer while higher numbers return more creative answers. Defaults to 0
--codex-max-tokens CODEX_MAX_TOKENS
Maximum amount of tokens to use on the response. This number plus the size of the prompt can be no larger than the limit (4097 for text-davinci-003)
接下来是想办法处理软件输出结果(根据上面的 slither -h 的提示),然后对漏洞类型进行分类,然后给每个合约加上标签。 (希望能遇到几个有漏洞的而且可以成功重现漏洞的合约,感觉希望不大)
发烧,估计是甲流,室友传给我的。今天才有点精神。赶紧毕业换个环境,感觉室友都有些拖累我。
原先写的爬取合约的代码需要修改,命名要改一下。改完了,成功了,开心了。
然后现在运行slither
的时候总是出岔子。运行结果和我预想中的中是不一样,而且目前找不到一些可以利用的漏洞。大多都是一些新问题。我可能需要自己写一些漏洞和漏洞利用脚本。
刚刚我还在想我这个hardhat
框架好像没用,还是有用的有用的。嘻嘻~
这几天赶紧写完。脚本的东西大概有头绪了。 用漏洞检测工具检测出漏洞之后,我根据漏洞信息进行去量部署。假如是重入漏洞,我就获取重入漏洞的函数的信息,然后自动生成一个脚本代码。运行。 看看今明两天能不能做出来。
在 Windows 上使用 Slither 进行批量漏洞检测,你可以按照以下步骤进行操作:
确保你已经安装了 Python 和 Slither 安装完成后,打开命令行工具(CMD),输入以下命令来确认是否已经安装成功:
Copy code
python --version
如果成功输出 Python 版本号,说明已经安装成功。
然后,你需要使用以下命令来安装 Slither:
Copy code pip install slither-analyzer 创建一个批处理文件 在一个文件夹下,创建一个批处理文件(比如名为 run_slither.bat 的文件),用于批量执行 Slither。在这个文件中,写入以下代码:
bash
Copy code
@echo off
set slither_path=C:\Users\your_username\AppData\Local\Programs\Python\PythonXX\Scripts\slither.exe
if not exist slither_result mkdir slither_result
for %%i in (*.sol) do (
echo Processing %%i...
"%slither_path%" %%i --json --solc-ast-compact > slither_result\%%~ni.json
)
echo Done.
pause
在代码中,将 C:\Users\your_username\AppData\Local\Programs\Python\PythonXX\Scripts\slither.exe 替换为你本地的 Slither 可执行文件的路径,XX 是你本地的 Python 版本号。
这段代码的作用是:
首先,创建一个名为 slither_result 的文件夹,用于存放 Slither 的检测结果。 然后,遍历当前文件夹下所有的 .sol 文件,依次使用 Slither 进行漏洞检测,并将结果以 JSON 格式输出到 slither_result 文件夹下的同名文件中。 最后,输出 "Done.",并在命令行中等待用户按下任意键。 将需要检测的 .sol 文件放入同一个文件夹下 将需要检测的 .sol 文件放入同一个文件夹下,与 run_slither.bat 文件放在同一目录下。
运行批处理文件 双击 run_slither.bat 文件,批量执行 Slither 进行漏洞检测。检测结果会输出到 slither_result 文件夹下的同名文件中。
注意:如果你的 Solidity 代码依赖于其他 Solidity 文件,需要将这些 Solidity 文件一起放入同一个文件夹下,并在需要检测的 Solidity 文件中使用 import 语句引用这些文件。
Slither工具解决solc版本与当前sol文件版本不兼容的问题 windows环境:
Standardised output format. Scripts parse and normalise the output of the tools to allow for an automated analysis of the results across tools.
Automatic download of an appropriate Solidity compiler matching the contract under analysis, and injection into the Docker image.
The following steps are for Powershell and worked under Windows 10:
Run the following Powershell command to allow execution:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Clone the smartbugs repository:
git clone https://github.com/smartbugs/smartbugs.git
Create a new virtual environment called venv inside the cloned repository:
cd smartbugs
python -m venv venv
Activate the new virtual environment:
.\venv\Scripts\Activate.ps1
Install Python dependencies:
pip install wheel; pip install pyyaml colorama requests semantic_version docker py-cpuinfo
Run SmartBugs (here, we run the tool conkas on the contract samples/simple_dao.sol):
python -m sb -t conkas -f samples/simple_dao.sol
./pre_scripts -t mythril -f samples/*.sol --processes 8 --mem-limit 4g --timeout 600
./pre_scripts -t slither -f samples/*.sol --processes 8 --mem-limit 4g
./reparse results
./results2csv -p results > results.csv
今天的任务是将一个测试集做出来。然后确定两种漏洞。一个是比较古老的上下溢,还有一个自己写一下。或者自己在网上找一个。
Collection Methodology. This dataset has been created by collecting contracts from three different sources: 1. GitHub repositories,
2. blog posts that analyze contracts, and 3. the Ethereum network.
80\% of the contracts were collected from GitHub repositories.
数据集测试完了,现在开始正式进行攻击了。
T_generateTestFile.js
我修改了以下几个地方:
在artifactFiles数组中使用通配符匹配所有以.json结尾的文件,如:${artifactsDir}/**/*.json,这样就能匹配到所有子目录中的JSON文件。
生成测试用例时,使用完全限定名来加载合约工厂:${artifactFile}:${contractArtifacts.contractName},这样可以避免同名合约在不同文件夹下的命名冲突。
修改了在generateIntegerOverflowTests()函数中加载合约工厂的方式,使用了getContractFactoryByAbiAndBytecode()函数,这个函数可以直接根据合约的 ABI 和 Bytecode 来加载合约工厂。这样可以避免在加载合约工厂时缺少构造函数参数的问题。
在生成测试文件后,添加了检查ABI文件是否存在的逻辑。如果ABI文件不存在,则跳过该合约的测试文件生成。
基本结束啦 😄 😄 😄 😄
我想要生成测试文件以检查Solidity合约是否遭受整数溢出攻击。我写了一些代码,其中包括读取合约ABI文件、获取整数变量以及生成测试文件的功能。然而,在尝试运行代码时,出现了一些问题,例如abi is not iterable和Unexpected end of JSON input。我检查代码并修复了这些错误。
其中一个问题是由于abi文件没有正确读取而导致的,因此我们添加了一些异常处理程序以确保即使abi文件为空,程序也能够继续运行。 还讨论了如何处理无法迭代的循环内部。
最终,我们的程序能够生成Solidity合约的测试文件,用于检查整数溢出攻击。
这其实是我很随意做出来的东西只是为了毕业 还有很多需要修改的地方 现在我已经入职了 怎么说呢 因为是国企,要做很多重复的事情很多内耗的事,不是很开心。 其实是很想在github上面做一些有意思的东西的。 我也想把这个工具给做好,但是我一个是没时间,一个是技术是在是不敢恭维。还需要很长时间的学习。其实看到有人一直在看我的代码甚至有人fork的代码的时候 我是很开心的。😃 java实在不是我追求一生的东西。正在想办法努力蜕变。