Home

Awesome

abi-lity

Solidity codegen tool for efficient ABI encoding/decoding.

Currently supports decoding calldata. Returndata decoding and ABI encoding are target features.

Note: Overflow protection is implemented by masking the last 4 bytes of any component which is used to derive a calldata pointer or length, provided that that value still yields valid ABI encoding. This may result in inconsistent behavior between abi-lity and solc's decoders. It may not revert when given an offset or length which would cause a pointer to overflow, whereas solc would throw in that case.

Build

yarn && yarn build
chmod +x ./dist/cli.js
sudo npm link

Decoder codegen

To generate decoders for a contract and automatically modify all external functions to use the decoders and a function switch, run:

abi-lity ./input-sol-file ./output-dir

Flags

-d, --decoderOnly only generate decoding files, do not modify the contract

-y, --ir output irOptimized for the contract

-u, --irUnoptimized output ir (unoptimized) for the contract in addition to the optimized IR

-v, --verbose By default, all comments in the IR output will be removed. Setting this flag will keep them in.

IR codegen

To generate irOptimized for a contract:

abi-lity ir ./input-sol-file ./output-dir

Flags

-u, --unoptimized output ir (unoptimized) for the contract in addition to the optimized IR

-v, --verbose By default, all comments in the IR output will be removed. Setting this flag will keep them in.

Known Bugs

Currently only applies function edits to contract in root file, not any inherited contracts. This also means any overridden functions in the root file will break. Overrides will be removed if the function is modified, but the inherited contract will not be edited or removed.

Currently breaks if more than one contract is defined in root file.