Skip to main content

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

NameTypeDescription
functionSignaturestring | objectThe 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

TypeDescription
stringThe 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

NameTypeDescription
eventSignaturestring | objectThe 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

TypeDescription
stringThe 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

NameTypeDescription
typestring | objectThe type of the parameter, see the solidity documentation for a list of types.
parameterMixedThe 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

TypeDescription
stringThe 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

NameTypeDescription
typesArrayArray | objectAn array with types or a JSON interface of a function. See the solidity documentation for a list of types.
parametersArrayThe 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

TypeDescription
stringThe 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

NameTypeDescription
jsonInterfaceobjectThe JSON interface object of a function.
parametersArrayThe parameters to encode.

Return Value

TypeDescription
stringThe 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

NameTypeDescription
abiobjectThe abi object of a function.
functionCallstringThe encoded function call string.

Return Value

TypeDescription
objectAn 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

NameTypeDescription
typestring | objectThe type of the parameter, see the solidity documentation for a list of types.
hexstringArrayThe 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

TypeDescription
MixedThe 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

NameTypeDescription
typesArrayArray | objectAn array with types or an array of JSON interface outputs. See the solidity documentation for a list of types.
hexstringstringThe 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

TypeDescription
objectThe 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

NameTypeDescription
inputsArrayAn array of JSON interface inputs. See the solidity documentation for a list of types.
hexstringstringThe ABI byte code in the data field of a log.
topicsArrayAn 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

TypeDescription
objectThe 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

NameTypeDescription
jsonInterfaceArrayThe JSON interface of the contract.
hexstringstringA bytecode of smart contract to be deployed.
paramsMixed(optional) Arguments to pass to the constructor.

Return Value

TypeDescription
stringThe 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'