caver.abi
The caver.abi
package allows you to decode and encode parameters with an ABI (Application Binary Interface). This will be used for calling functions of a deployed smart contracts.
encodeFunctionSignature β
caver.abi.encodeFunctionSignature(functionSignature)
Encodes the function signature to its ABI signature, which are the first 4 bytes of the sha3 hash of the function name including parameter types.
Parameters
Name | Type | Description |
---|---|---|
functionSignature | string | object | The function signature or the JSON interface object of the function to encode. If this is a string, it has to be in the form function(type, type,...) , e.g: myFunction(uint256,uint32[],bytes10,bytes) |
Return Value
Type | Description |
---|---|
string | The ABI signature of the function. |
Examples
// From a JSON interface object> caver.abi.encodeFunctionSignature({ name: 'myMethod', type: 'function', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'string', name: 'mystring' }]})'0x24ee0097'// From a function signature> caver.abi.encodeFunctionSignature('myMethod(uint256,string)')'0x24ee0097'
encodeEventSignature β
caver.abi.encodeEventSignature(eventSignature)
Encodes the event signature to its ABI signature, which is the sha3 hash of the event name including input parameter types.
Parameters
Name | Type | Description |
---|---|---|
eventSignature | string | object | The event signature or the JSON interface object of the event to encode. If this is a string, it has to be in the form event(type,type,...) , e.g: myEvent(uint256,uint32[],bytes10,bytes) |
Return Value
Type | Description |
---|---|
string | The ABI signature of the event. |
Examples
// From a JSON interface object> caver.abi.encodeEventSignature({ name: 'myEvent', type: 'event', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'bytes32', name: 'myBytes' }]})'0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97'// From an event signature> caver.abi.encodeEventSignature('myEvent(uint256,bytes32)')'0xf2eeb729e636a8cb783be044acf6b7b1e2c5863735b60d6daae84c366ee87d97'
encodeParameter β
caver.abi.encodeParameter(type, parameter)
Encodes a parameter based on its type to its ABI representation.
Parameters
Name | Type | Description |
---|---|---|
type | string | object | The type of the parameter, see the solidity documentation for a list of types. |
parameter | Mixed | The actual parameter to encode. |
NOTE tuple
type is supported since caver-js v1.6.0. For more details about tuple
type, please refer to Solidity Docs.
Return Value
Type | Description |
---|---|
string | The ABI encoded parameter. |
Examples
> caver.abi.encodeParameter('uint256', '2345675643')'0x000000000000000000000000000000000000000000000000000000008bd02b7b'> caver.abi.encodeParameter('bytes32', caver.utils.rightPad('0xdf3234', 64))'0xdf32340000000000000000000000000000000000000000000000000000000000'> caver.abi.encodeParameter('bytes', '0xdf3234')'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003df32340000000000000000000000000000000000000000000000000000000000'> caver.abi.encodeParameter('bytes32[]', [caver.utils.rightPad('0xdf3234', 64), caver.utils.rightPad('0xfdfd', 64)])'0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002df32340000000000000000000000000000000000000000000000000000000000fdfd000000000000000000000000000000000000000000000000000000000000'> caver.abi.encodeParameter('tuple(bytes32,bool)', ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001'> caver.abi.encodeParameter( { components: [{ name: 'a', type: 'bytes32' }, { name: 'b', type: 'bool' }], name: 'tupleExample', type: 'tuple', }, ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001'
encodeParameters β
caver.abi.encodeParameters(typesArray, parameters)
Encodes function parameters based on its JSON interface object.
Parameters
Name | Type | Description |
---|---|---|
typesArray | Array | object | An array with types or a JSON interface of a function. See the solidity documentation for a list of types. |
parameters | Array | The parameters to encode. |
NOTE tuple
type is supported since caver-js v1.6.0. For more details about tuple
type, please refer to Solidity Docs.
Return Value
Type | Description |
---|---|
string | The ABI encoded parameters. |
Examples
> caver.abi.encodeParameters(['uint256','string'], ['2345675643', 'Hello!%'])'0x000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000'> caver.abi.encodeParameters(['uint8[]','bytes32'], [['34','255'], caver.utils.rightPad('0x324567fff', 64)])'0x0000000000000000000000000000000000000000000000000000000000000040324567fff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff'> caver.abi.encodeParameters( ['tuple(bytes32,bool)', 'tuple(bool,address)'], [ ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true], [true, '0x77656c636f6d6520746f20657468657265756d2e'] ])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000077656c636f6d6520746f20657468657265756d2e'> caver.abi.encodeParameters( [ { components: [{ name: 'a', type: 'bytes32' }, { name: 'b', type: 'bool' }], name: 'tupleExample', type: 'tuple', }, { components: [{ name: 'c', type: 'bool' }, { name: 'd', type: 'address' }], name: 'tupleExample2', type: 'tuple', }, ], [ ['0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true], [true, '0x77656c636f6d6520746f20657468657265756d2e'] ])'0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000077656c636f6d6520746f20657468657265756d2e'
encodeFunctionCall β
caver.abi.encodeFunctionCall(jsonInterface, parameters)
Encodes a function call using its JSON interface object and given parameters.
Parameters
Name | Type | Description |
---|---|---|
jsonInterface | object | The JSON interface object of a function. |
parameters | Array | The parameters to encode. |
Return Value
Type | Description |
---|---|
string | The ABI encoded function call, which means function signature + parameters. |
Examples
> caver.abi.encodeFunctionCall({ name: 'myMethod', type: 'function', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'string', name: 'mystring' }]}, ['2345675643', 'Hello!%'])'0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000'
decodeFunctionCall β
caver.abi.decodeFunctionCall(abi, functionCall)
Decodes a function call from its abi object of a function or function abi string and returns parameters.
NOTE caver.abi.decodeFunctionCall
is supported since caver-js v1.6.3.
Parameters
Name | Type | Description |
---|---|---|
abi | object | The abi object of a function. |
functionCall | string | The encoded function call string. |
Return Value
Type | Description |
---|---|
object | An object which includes plain params. You can use result[0] as it is provided to be accessed like an array in the order of the parameters. |
Examples
> caver.abi.decodeFunctionCall({ name: 'myMethod', type: 'function', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'string', name: 'mystring' }]}, '0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000')Result { '0': '2345675643', '1': 'Hello!%', __length__: 2, myNumber: '2345675643', mystring: 'Hello!%'}
decodeParameter β
caver.abi.decodeParameter(type, hexstring)
Decodes an ABI encoded parameter to its JavaScript type.
Parameters
Name | Type | Description |
---|---|---|
type | string | object | The type of the parameter, see the solidity documentation for a list of types. |
hexstring | Array | The ABI byte code to decode. |
NOTE tuple
type is supported since caver-js v1.6.0. For more details about tuple
type, please refer to Solidity Docs.
Return Value
Type | Description |
---|---|
Mixed | The decoded parameter. |
Examples
> caver.abi.decodeParameter('uint256', '0x0000000000000000000000000000000000000000000000000000000000000010')'16'> caver.abi.decodeParameter('string', '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000')'Hello!%!'> caver.abi.decodeParameter('tuple(bytes32,bool)', '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001')[ '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true ]> caver.abi.decodeParameter( { components: [{ name: 'a', type: 'bytes32' }, { name: 'b', type: 'bool' }], name: 'tupleExample', type: 'tuple', }, '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001')[ '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true, a: '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', b: true]
decodeParameters β
caver.abi.decodeParameters(typesArray, hexstring)
Decodes ABI encoded parameters to its JavaScript types.
Parameters
Name | Type | Description |
---|---|---|
typesArray | Array | object | An array with types or an array of JSON interface outputs. See the solidity documentation for a list of types. |
hexstring | string | The ABI byte code to decode. |
NOTE tuple
type is supported since caver-js v1.6.0. For more details about tuple
type, please refer to Solidity Docs.
Return Value
Type | Description |
---|---|
object | The result object containing the decoded parameters. |
Examples
> caver.abi.decodeParameters(['string', 'uint256'], '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000')Result { '0': 'Hello!%!', '1': '234' }> caver.abi.decodeParameters([{ type: 'string', name: 'mystring' },{ type: 'uint256', name: 'myNumber' }], '0x000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000ea000000000000000000000000000000000000000000000000000000000000000848656c6c6f212521000000000000000000000000000000000000000000000000')Result { '0': 'Hello!%!', '1': '234', mystring: 'Hello!%!', myNumber: '234'}> caver.abi.decodeParameters( ['tuple(bytes32,bool)', 'tuple(bool,address)'], '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000077656c636f6d6520746f20657468657265756d2e')Result { '0': [ '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true ], '1': [ true, '0x77656c636f6d6520746F20657468657265756d2E' ],}> caver.abi.decodeParameters( [ { components: [{ name: 'a', type: 'bytes32' }, { name: 'b', type: 'bool' }], name: 'tupleExample', type: 'tuple', }, { components: [{ name: 'c', type: 'bool' }, { name: 'd', type: 'address' }], name: 'tupleExample2', type: 'tuple', }, ], '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a180000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000077656c636f6d6520746f20657468657265756d2e')Result { '0': [ '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true, a: '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', b: true ], '1': [ true, '0x77656c636f6d6520746F20657468657265756d2E', c: true, d: '0x77656c636f6d6520746F20657468657265756d2E' ], tupleExample: [ '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', true, a: '0xabdef18710a18a18abdef18710a18a18abdef18710a18a18abdef18710a18a18', b: true ], tupleExample2: [ true, '0x77656c636f6d6520746F20657468657265756d2E', c: true, d: '0x77656c636f6d6520746F20657468657265756d2E' ]}
decodeLog β
caver.abi.decodeLog(inputs, hexstring, topics)
Decodes ABI encoded log data and indexed topic data.
Parameters
Name | Type | Description |
---|---|---|
inputs | Array | An array of JSON interface inputs. See the solidity documentation for a list of types. |
hexstring | string | The ABI byte code in the data field of a log. |
topics | Array | An array of the index parameter topics of the log. This array doesn't have topic[0] if it is a non-anonymous event, or otherwise, it has topic[0]. |
Return Value
Type | Description |
---|---|
object | The result object containing the decoded logs. |
Examples
> caver.abi.decodeLog([{ type: 'string', name: 'mystring' },{ type: 'uint256', name: 'myNumber', indexed: true },{ type: 'uint8', name: 'mySmallNumber', indexed: true }], '0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000748656c6c6f252100000000000000000000000000000000000000000000000000', ['0x000000000000000000000000000000000000000000000000000000000000f310', '0x0000000000000000000000000000000000000000000000000000000000000010'])Result { '0': 'Hello%!', '1': '62224', '2': '16', mystring: 'Hello%!', myNumber: '62224', mySmallNumber: '16'}
encodeContractDeploy β
caver.abi.encodeContractDeploy(jsonInterface, hexstring [, params])
Encodes smart contract bytecode with the arguments of the constructor.
Parameters
Name | Type | Description |
---|---|---|
jsonInterface | Array | The JSON interface of the contract. |
hexstring | string | A bytecode of smart contract to be deployed. |
params | Mixed | (optional) Arguments to pass to the constructor. |
Return Value
Type | Description |
---|---|
string | The ABI encoded smart contract deployment with constructor arguments, which means byteCode + parameters. |
Examples
// There is no argument for constructor> caver.abi.encodeContractDeploy([ {"constant": true, "inputs": [], "name": "count", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getBlockNumber", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_count", "type": "uint256" } ], "name": "setCount", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" } ],'0x60806040526000805534801561001457600080fd5b50610116806100246000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a7230582064856de85a2706463526593b08dd790054536042ef66d3204018e6790a2208d10029')'0x60806040526000805534801561001457600080fd5b50610116806100246000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a7230582064856de85a2706463526593b08dd790054536042ef66d3204018e6790a2208d10029'// There is one argument for constructor(uint256)> caver.abi.encodeContractDeploy([ { "constant": true, "inputs": [], "name": "count", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getBlockNumber", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_count", "type": "uint256" } ], "name": "setCount", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "name": "_a", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" } ],'0x60806040526000805534801561001457600080fd5b5060405160208061015d8339810180604052810190808051906020019092919050505050610116806100476000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a72305820ec774499bcdb89d9e570156a76249b33e99c766dfc6944e55aeeca316b41debf0029', 1)'0x60806040526000805534801561001457600080fd5b5060405160208061015d8339810180604052810190808051906020019092919050505050610116806100476000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a72305820ec774499bcdb89d9e570156a76249b33e99c766dfc6944e55aeeca316b41debf00290000000000000000000000000000000000000000000000000000000000000001'// There are two arguments for constructor(uint256, uint256)> caver.abi.encodeContractDeploy([ { "constant": true, "inputs": [], "name": "count", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getBlockNumber", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_count", "type": "uint256" } ], "name": "setCount", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "name": "_a", "type": "uint256" }, { "name": "_b", "type": "uint256" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" } ],'0x60806040526000805534801561001457600080fd5b5060405160408061016883398101806040528101908080519060200190929190805190602001909291905050505050610116806100526000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a72305820f85b40d5ad70d0b3599200515915dca3074bcf609f27660845ecbfe882d3eeee0029', 1, 2)'0x60806040526000805534801561001457600080fd5b5060405160408061016883398101806040528101908080519060200190929190805190602001909291905050505050610116806100526000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a72305820f85b40d5ad70d0b3599200515915dca3074bcf609f27660845ecbfe882d3eeee002900000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002'// There is one argument for constructor(string)> caver.abi.encodeContractDeploy([ { "constant": true, "inputs": [], "name": "count", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "getBlockNumber", "outputs": [ { "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "name": "_count", "type": "uint256" } ], "name": "setCount", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "name": "_a", "type": "string" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" } ],'0x60806040526000805534801561001457600080fd5b5060405161015d38038061015d8339810180604052810190808051820192919050505050610116806100476000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a7230582082c35290d5a3c5f9ae552e0f638388cdc57d596a0973febe5de8eb9ee6df48a60029', 'stringParams')'0x60806040526000805534801561001457600080fd5b5060405161015d38038061015d8339810180604052810190808051820192919050505050610116806100476000396000f3006080604052600436106053576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306661abd14605857806342cbb15c146080578063d14e62b81460a8575b600080fd5b348015606357600080fd5b50606a60d2565b6040518082815260200191505060405180910390f35b348015608b57600080fd5b50609260d8565b6040518082815260200191505060405180910390f35b34801560b357600080fd5b5060d06004803603810190808035906020019092919050505060e0565b005b60005481565b600043905090565b80600081905550505600a165627a7a7230582082c35290d5a3c5f9ae552e0f638388cdc57d596a0973febe5de8eb9ee6df48a600290000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c737472696e67506172616d730000000000000000000000000000000000000000'