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
Copy 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 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 The ABI signature of the function.
Examples
Copy // 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
Copy 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 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 The ABI signature of the event.
Examples
Copy // 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
Copy caver . abi .encodeParameter (type , parameter)
Encodes a parameter based on its type to its ABI representation.
Parameters
Name Type Description 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 The ABI encoded parameter.
Examples
Copy > 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
Copy caver . abi .encodeParameters (typesArray , parameters)
Encodes function parameters based on its JSON interface object.
Parameters
Name Type Description 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 The ABI encoded parameters.
Examples
Copy > 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
Copy caver . abi .encodeFunctionCall (jsonInterface , parameters)
Encodes a function call using its JSON interface object and given parameters.
Parameters
Name Type Description The JSON interface object of a function.
The parameters to encode.
Return Value
Type Description The ABI encoded function call, which means function signature + parameters.
Examples
Copy > caver . abi .encodeFunctionCall ({
name : 'myMethod' ,
type : 'function' ,
inputs : [{
type : 'uint256' ,
name : 'myNumber'
} , {
type : 'string' ,
name : 'mystring'
}]
} , [ '2345675643' , 'Hello!%' ])
'0x24ee0097000000000000000000000000000000000000000000000000000000008bd02b7b0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000748656c6c6f212500000000000000000000000000000000000000000000000000'
decodeFunctionCall
Copy 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 The abi object of a function.
The encoded function call string.
Return Value
Type Description 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
Copy > 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
Copy caver . abi .decodeParameter (type , hexstring)
Decodes an ABI encoded parameter to its JavaScript type.
Parameters
Name Type Description 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
Examples
Copy > 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
Copy caver . abi .decodeParameters (typesArray , hexstring)
Decodes ABI encoded parameters to its JavaScript types.
Parameters
Name Type Description An array with types or an array of JSON interface outputs. See the solidity documentation for a list of types.
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 The result object containing the decoded parameters.
Examples
Copy > 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
Copy caver . abi .decodeLog (inputs , hexstring , topics)
Decodes ABI encoded log data and indexed topic data.
Parameters
Name Type Description The ABI byte code in the data
field of a log.
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 The result object containing the decoded logs.
Examples
Copy > 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
Copy caver . abi .encodeContractDeploy (jsonInterface , hexstring [ , params])
Encodes smart contract bytecode with the arguments of the constructor.
Parameters
Name Type Description The JSON interface of the contract.
A bytecode of smart contract to be deployed.
(optional) Arguments to pass to the constructor.
Return Value
Type Description The ABI encoded smart contract deployment with constructor arguments, which means byteCode + parameters.
Examples
Copy // 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'