# tracpls
Cli tool to get smart contract code + ABI on EVM-based chains for ease of piping and viewing at terminal (e.g. with vim or others).
It supports BSC, Ethereum, and Polygon.
# Installation
```
cargo install tracpls
```
# Usage
Users are required to define environment variables of the following depending on
API platforms which provide the service off-chain
* `TRACPLS_BSCSCAN_APIKEY` - API key from bscscan.com
* `TRACPLS_ETHERSCAN_APIKEY` - API key from etherscan.io
* `TRACPLS_POLYGONSCAN_APIKEY` - API key from polygonscan.com
At runtime, the program will select the appropriate one which dictated by flag
`--chain` (or `-c`) then grab the API key then use it as such.
The following options are available
```
$ tracpls --help
tracpls
Wasin Thonkaew (wasin@wasin.io)
cli tool to get smart contract code and its ABI for ease of viewing on terminal
USAGE:
tracpls [OPTIONS] --address
--chain
OPTIONS:
-a, --address Target contract address to get its smart contract code or ABI
from
--abi-only Get only contract ABI
-c, --chain Which chain to work with. Possible values are 'bsc', 'ethereum',
and 'polygon'
-h, --help Print help information
--no-abi-pretty-print Pretty print output for contract ABI. It can only be used if
--abi-only exists
--no-clean-crlf Make sure to clean CR/LF character codes to make it suitable to
view the content on the platform running the application
--out-dir Output directory path to write content of files to. In case of
--abi-only, it will output into fixed filename of "abi.json" but
at the supplied output directory. For JSON-based code, it will
use the contract name of each file as the filename to write its
content to
-s, --silence Whether or not to print meta information during execution
```
# Examples
> Always use --chain (or -c) to specify chain type whose possible values are either `bsc`, `ethereum`, or `polygon`.
1. Get smart contract then pipe directly to vim
```bash
$ tracpls -a 0x0000000000000000000000000000000000001004 -c bsc | vim -c "set syntax=solidity" -
```
You might not need `-c "set syntax=solidity"` if you already configured your
`~/.vimrc` to support solidity syntax highlighting.
2. Get contract's ABI then save to file
```bash
$ tracpls -a 0x0000000000000000000000000000000000001004 --chain bsc --abi-only > abi.json
```
3. Same as 2. but with no pretty print
```bash
$ tracpls -a 0x0000000000000000000000000000000000001004 --chain bsc --abi-only --no-abi-pretty-print > abi.json
```
4. Write all smart contract files into files at the destination directory
```bash
$ tracpls -a 0x1befe6f3f0e8edd2d4d15cae97baee01e51ea4a4 --chain bsc --out-dir /tmp/0x1bef
/tmp/0x1bef/contracts/LpMigration.sol
/tmp/0x1bef/@openzeppelin/contracts/access/Ownable.sol
/tmp/0x1bef/@openzeppelin/contracts/utils/Context.sol
/tmp/0x1bef/@openzeppelin/contracts/utils/math/SafeMath.sol
/tmp/0x1bef/@openzeppelin/contracts/security/ReentrancyGuard.sol
/tmp/0x1bef/@openzeppelin/contracts/token/ERC20/IERC20.sol
```
5. Same as 4. but silence the meta information
```bash
$ tracpls -a 0x1befe6f3f0e8edd2d4d15cae97baee01e51ea4a4 --chain bsc --out-dir /tmp/0x1bef -s
```
# Note
Error message will always be outputted to `stderr`. So normal correct and proper
output won't be interfere with the error message. But you are free to combine
them into one.
# License
MIT, Wasin Thonkaew