caver-klay-abi
패키지는 ABI(Application Binary Interface)의 매개변수를 디코딩 및 인코딩할 수 있게 해줍니다. 배포된 스마트 컨트랙트의 함수를 호출하는 데 사용됩니다.
encodeFunctionSignature
Copy caver . abi .encodeFunctionSignature (functionSignature)
파라미터 타입을 포함한 함수 이름의 sha3 해시의 첫 4바이트인 ABI 서명으로 함수 서명을 인코딩합니다.
Parameters
인코딩할 이벤트의 이벤트 서명 또는 JSON 인터페이스 객체입니다. 문자열인 경우 function(type,type,...)
형식이어야 합니다. 예시: myFunction(uint256,uint32[],bytes10,bytes)
Return Value
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)
입력 파라미커 타입을 포함한 이벤트 이름의 sha3 해시의 ABI 서명으로 이벤트 서명을 인코딩합니다.
Parameters
인코딩할 이벤트의 이벤트 서명 또는 JSON 인터페이스 객체입니다. 문자열인 경우 event(type,type,...)
형식이어야 합니다. 예시: myEvent(uint256,uint32[],bytes10,bytes)
Return Value
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)
타입에 따라 매개변수를 ABI 표현으로 인코딩합니다.
Parameters
참고 ``는 caver-js v1.6.0 부터 지원됩니다. tuple
타입에 대한 자세한 정보는 Solidity Docs 에서 확인할 수 있습니다.
Return Value
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)
JSON 인터페이스 객체를 기반으로 함수 매개변수를 인코딩합니다.
Parameters
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 .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)
JSON 인터페이스 객체 및 주어진 매개변수를 사용하여 함수 호출을 인코딩합니다.
Parameters
The parameters to encode.
Return Value
함수 서명 + 매개변수를 의미하는 ABI 인코딩된 함수 호출.
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
The abi object of a function.
The encoded function call string.
Return Value
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)
ABI 인코딩된 매개변수를 자바스크립트 타입으로 디코딩합니다.
Parameters
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)
ABI 인코딩된 매개변수를 자바스크립트 타입으로 디코딩합니다.
Parameters
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
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)
ABI 인코딩된 로그 데이터 및 인덱싱된 토픽 데이터를 디코딩합니다.
Parameters
로그의 data
필드에 있는 ABI 바이트 코드.
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
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
(optional) Arguments to pass to the constructor.
Return Value
바이트코드 + 매개변수를 의미하는 생성자 인자를 포함한 ABI 인코딩된 스마트 컨트랙트 배포.
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'