🛶 Canoe Solidity
Lightweight Javascript library for decoding constructor arguments.
Summary
Canoe works by reading a contract's ABI and decoding the constructor bytecode with the argument types provided.
Install
npm install canoe-solidity
Requirements
- ABI schema 2.0
Documentation
Functions
- decodeConstructorArgs(contractABI, bytecode) ⇒
Object
Decodes constructor args.
- encodeConstructorArgs(inputs) ⇒
string
Generates constructor args bytecode based on input data.
- decodeFunctionArgs(contractABI, bytecode) ⇒
Object
Decodes function call args.
Object
decodeConstructorArgs(contractABI, bytecode) ⇒ Decodes constructor args.
Kind: global function
Returns: Object
- decodedArgs - Object representing decoded args with name, type, and data fields
Param | Type | Description |
---|---|---|
contractABI | Object |
ABI of contract whose args to decode |
bytecode | string |
Constructor args bytecode |
string
encodeConstructorArgs(inputs) ⇒ Generates constructor args bytecode based on input data.
Kind: global function
Returns: string
- bytecode - Constructor args bytecode
Param | Type | Description |
---|---|---|
inputs | Array.<Object> |
Array of objects with name, and type fields |
inputs[].name | string |
Name of argument |
inputs[].type | string |
Type of argument |
Object
decodeFunctionArgs(contractABI, bytecode) ⇒ Decodes function args.
Kind: global function
Returns: Object
- decodedArgs - Object representing decoded args with name, type, and data fields
Param | Type | Description |
---|---|---|
contractABI | Object |
ABI of contract whose args to decode |
bytecode | string |
function args bytecode, methohID included |
Supported Types
- bool
- uint
- int
- fixed
- address
- bytes1, bytes2, bytes3, ..., bytes32
- byte
- string
- arrays
- multi-dimensional arrays
- mapping
- struct
Example
const { decodeConstructorArgs } = require('canoe-solidity');
let abiExample = {
'abi': [
{
'anonymous': false,
'inputs': [
{
'name': 'addresses',
'type': 'address[]',
},
{
'name': 'quantities',
'type': 'uint256[]',
},
{
'name': '_creationUnit',
'type': 'uint256',
},
{
'name': '_name',
'type': 'string',
},
{
'name': '_symbol',
'type': 'string',
}
],
'payable': false,
'stateMutability': 'nonpayable',
'type': 'constructor'
}
]
};
let bytecodeExample = '00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000008ac7230489e80000000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000ffffffffffffffffffffffffffffffffffffffff000000000000000000000000f1e48f13768bd8114a530070b43257a63f24bb1200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000012457468657265756d31302051322d32303138000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034531300000000000000000000000000000000000000000000000000000000000';
decodeConstructorArgs(abiExample.abi, bytecodeExample);
Output:
[
{
"name": "addresses",
"type": "address[]",
"data": [
"ffffffffffffffffffffffffffffffffffffffff",
"f1e48f13768bd8114a530070b43257a63f24bb12"
]
},
{
"name": "quantities",
"type": "uint256[]",
"data": [
"5",
"10"
]
},
{
"name": "_creationUnit",
"type": "uint256",
"data": "10000000000000000000"
},
{
"name": "_name",
"type": "string",
"data": "Ethereum10 Q2-2018"
},
{
"name": "_symbol",
"type": "string",
"data": "E10"
}
]