- The output can be used to analyze gas usage
- Supports smart contracts deployed with Zeppelin OS
-
Install node package manager npm
-
Install Gaster from npm:
npm install [-g] gaster
- Or install Gaster from github:
npm install [-g] 'https://github.com/exyte/gaster'
$ gaster <address> <options>
<address>
: [string] Smart contract address
-s
,--startblock
: [number, optional] Start block number. Default: smart contract genesis block.-e
,--endblock
: [number, optional] End block number. Default: smart contract last transaction block.-n
,--net
: [boolean, optional] Network on which specified smart contract is deployed.-a
,--abi
: [string, optional] Path to *.json file with Ethereum smart contracts' ABIs in appropriate format.-r
,--recursive
: [boolean, optional] Search transactions recursively through the hierarchy of smart contracts.
Acceptable format (array of objects):
[
{
"address": address1, // address of smart contract
"abi": abi1, // ABI of smart contract
"alias": alias // Name of smart contract, optional
},
{
"address": address2,
"abi": abi2
},
...
]
Transaction information is saved in CSV format. Columns:
address
— address of the smart contract (receiving party of the transaction)caller
— the sending party of the transactiontimeStamp
— timestamp when the transaction was minedblockNumber
— number of block in which the transaction was recordedgasUsed
— the exact units of gas that was used for the transactiongasPrice
— cost per unit of gas specified for the transactiongas
— maximum amount of gas provided for the transactionalias
— alias of the smart contractitxs
— internal transactions (traces) related to the transactioninput
— encoded input datamethod
— method called in the transactionparameters
— transaction method parameters decoded with ABI of smart contractfeatures
— parameters' features
CSV file name has format:
<contract alias>_<startblock>_<endblock>_<batch number>.csv
contract alias
— smart contract alias, if the alias was not found, it will be "unidentified"startblock
— block number on which the search was startedendblock
— block number on which the search was endedbatch number
— all smart contract transactions are divided into batches of 1000 transactions
In terminal run:
gaster 0xF324A8f3e0DbeD9059e5acBfC6C53a31A82b6AfB -s 7713731 -e 7713749 --net ropsten -r
The output should be:
Gaster_7713731_7713749_0.csv
address | caller | timeStamp | blockNumber | gasUsed | gasPrice | gas | alias | itxs | input | method | properties | features |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0xf324a8f3e0dbed9059e5acbfc6c53a31a82b6afb |
0x4ca389faad549add7124f2b215266ce162d964e7 |
1586839485 | 7713731 | 557513 | 100000 | 557513 | Gaster |
[] |
0x60806...10032 |
Contract creation Gaster |
{} |
[] |
0xf324a8f3e0dbed9059e5acbfc6c53a31a82b6afb |
0x4ca389faad549add7124f2b215266ce162d964e7 |
1586839616 | 7713738 | 245028 | 100000 | 245028 | Gaster |
[{""from"":""0xf324a8f3e0dbed9059e5acbfc6c53a31a82b6afb"",""to"":"""",""contractAddress"":""0x43c685a1a11b8310a21b876d6c7099db62b4dcc9"",""type"":""create"",""input"":"""",""timeStamp"":""1586839616""}] |
0xfebb0f7e |
bar |
{} |
[] |
0xf324a8f3e0dbed9059e5acbfc6c53a31a82b6afb |
0x4ca389faad549add7124f2b215266ce162d964e7 |
1586839708 | 7713744 | 64262 | 100000 | 64262 | Gaster |
[] |
0xc5d1c9...00000 |
foo |
{""term"":""a"",""_store"":""hello""} |
[{""name"":""_store"",""type"":""length"",""value"":5}] |
0xf324a8f3e0dbed9059e5acbfc6c53a31a82b6afb |
0x4ca389faad549add7124f2b215266ce162d964e7 |
1586839797 | 7713747 | 67628 | 100000 | 68260 | Gaster |
[{""from"":""0xf324a8f3e0dbed9059e5acbfc6c53a31a82b6afb"",""to"":""0x43c685a1a11b8310a21b876d6c7099db62b4dcc9"",""contractAddress"":"""",""type"":""call"",""input"":"""",""timeStamp"":""1586839797""}] |
0xf32ca...00000 |
qux |
{""term"":""64"",""_store"":""hi""} |
[{""name"":""_store"",""type"":""length"",""value"":2}] |
Chaster_7713731_7713749_0.csv
address | caller | timeStamp | blockNumber | gasUsed | gasPrice | gas | alias | itxs | input | method | properties | features |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0x43c685a1a11b8310a21b876d6c7099db62b4dcc9 |
0x4ca389faad549add7124f2b215266ce162d964e7 |
1586839833 | 7713749 | 35107 | 100000 | 36507 | Chaster |
[] |
0xc5d1c9...00000 |
foo |
{""term"":""3e8"",""_store"":""hey""} |
[{""name"":""_store"",""type"":""length"",""value"":3}] |
const { getGasStats } = require('gaster');
const main = async () => {
const address = '0xF324A8f3e0DbeD9059e5acBfC6C53a31A82b6AfB';
const options = {
net: NetworkName.ROPSTEN,
recursive: true
};
const result = await getGasStats(address, options);
return result;
}
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Gaster is available under the MIT license. See the LICENSE file for more info.