abi-codegen
Typescript library for generating solidity and typescript code to handle tightly packed ABI structures.
Install
npm install -g abi-gen
Command Line
Solidity
abi-gen sol --input <input_file> --output <output_file> [flags]
Flags
--verbose Tells the code generator to explicitly define variables and construct the output rather than assigning directly to memory.
TypeScript
abi-gen ts -i <input_file> -o <output_directory>
Examples
Input Struct
enum ABC { a, b }
struct TestWrapped {
uint32 a;
bytes32 b;
bytes32 c;
uint8 d;
ABC e;
}
Save the above in ./input
.
Solidity
abi-gen sol -i ./input -o ./output.sol
I still need to add handling to use the right library name instead of making one up.
Output
pragma solidity ^0.6.0; library OutputCode { enum ABC { a, b } struct TestWrapped { uint32 a; bytes32 b; bytes32 c; uint8 d; ABC e; } function unpackTestWrapped(bytes memory input) internal pure returns (TestWrapped memory ret) { assembly { let ptr := add(input, 32) mstore(ret, shr(224, mload(ptr))) mstore(add(ret, 32), mload(add(ptr, 4))) mstore(add(ret, 64), mload(add(ptr, 36))) mstore(add(ret, 96), shr(248, mload(add(ptr, 68)))) mstore(add(ret, 128), shr(248, mload(add(ptr, 69)))) } }}
TypeScript
abi-gen ts -i ./input -o ./output-dir
A number of files will be created, but the main output will be:
;;; definePropertiesTestWrapped, TestWrappedABI;