caver.contract
객체는 Klaytn 블록체인과 스마트 컨트랙트 간의 상호작용을 쉽게 만들어 줍니다. 새 컨트랙트 객체를 생성할 때 해당 스마트 컨트랙트를 위해 JSON 인터페이스를 제공해야 하는데, 이때 caver-js가 자바스크립트로 작성된 컨트랙트 객체와의 모든 호출을 RPC를 통해 하위 수준의 ABI 호출로 자동 변환시켜줍니다.
이를 통해 스마트 컨트랙트가 마치 자바스크립트 객체인 것처럼 스마트 컨트랙트와 상호작용할 수 있습니다.
caver.contract.create
Copy caver . contract .create (jsonInterface [ , address] [ , options])
JSON 인터페이스 오브젝트에 정의된 모든 메소드 및 이벤트로 새 컨트랙트 인스턴스를 생성합니다. This function works the same as new caver.contract .
참고 caver.contract.create
는 caver-js v1.6.1 부터 지원됩니다.
Parameters
See the new caver.contract .
Return Value
See the new caver.contract .
Example
Copy const contract = caver . contract .create ([
{
constant : true ,
inputs : [{ name : 'interfaceId' , type : 'bytes4' }] ,
name : 'supportsInterface' ,
outputs : [{ name : '' , type : 'bool' }] ,
payable : false ,
stateMutability : 'view' ,
type : 'function' ,
} ,
...
] , '0x{address in hex}' )
caver.contract
Copy new caver .contract (jsonInterface [ , address] [ , options])
Creates a new contract instance with all its methods and events defined in its JSON interface object.
Parameters
옵션 개체에는 다음이 포함됩니다:
Return Value
Example
Copy const myContract = new caver .contract ([ ... ] , '0x{address in hex}' , { gasPrice : '25000000000' })
myContract.options
컨트랙트 인스턴스에 대한 options
객체. from
, gas
, gasPrice
, feePayer
그리고 feeRatio
는 트랜잭션 전송시 대체값으로 사용됩니다.
속성
참고 feeDelegation
, feePayer
, 그리고 feeRatio
는 caver-js v1.6.1 이후부터 지원됩니다.
Example
Copy > myContract .options
{
address : [Getter / Setter] ,
jsonInterface : [Getter / Setter] ,
from : [Getter / Setter] ,
feePayer : [Getter / Setter] ,
feeDelegation : [Getter / Setter] ,
feeRatio : [Getter / Setter] ,
gasPrice : [Getter / Setter] ,
gas : [Getter / Setter] ,
data : [Getter / Setter]
}
> myContract . options .from = '0x1234567890123456789012345678901234567891' // default from address
> myContract . options .gasPrice = '25000000000000' // default gas price in peb
> myContract . options .gas = 5000000 // provide as fallback always 5M gas
> myContract . options .feeDelegation = true // use fee delegation transaction
> myContract . options .feePayer = '0x1234567890123456789012345678901234567891' // default fee payer address
> myContract . options .feeRatio = 20 // default fee ratio when send partial fee delegation transaction
myContract.options.address
Copy myContract . options .address
이 컨트랙트 인스턴스 myContract
에 사용된 주소. 해당 컨트랙트에서 caver-js에 의해 생성된 모든 트랜잭션에 이 주소가 to
로서 포함될 것입니다.
속성
Example
Copy > myContract . options .address
'0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae'
// 컨트랙트 주소 설정
> myContract . options .address = '0x1234FFDD...'
myContract.options.jsonInterface
Copy myContract . options .jsonInterface
이 컨트랙트 myContract
의 ABI에서 파생된 JSON 인터페이스 객체.
Property
Example
Copy > myContract . options .jsonInterface
[
{
constant : true ,
inputs : [ { name : 'interfaceId' , type : 'bytes4' } ] ,
name : 'supportsInterface' ,
outputs : [ { name : '' , type : 'bool' } ] ,
payable : false ,
stateMutability : 'view' ,
type : 'function' ,
signature : '0x01ffc9a7' ,
} ,
...
{
anonymous : false ,
inputs : [
{ indexed : true , name : 'owner' , type : 'address' } ,
{ indexed : true , name : 'spender' , type : 'address' } ,
{ indexed : false , name : 'value' , type : 'uint256' }
] ,
name : 'Approval' ,
type : 'event' ,
signature : '0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925' ,
} ,
]
// 새 jsonInterface 설정
> myContract . options .jsonInterface = [ ... ]
myContract.clone
Copy myContract .clone ([contractAddress])
현재 컨트랙트 인스턴스를 복제합니다.
Parameters
Return Value
Example
Copy > myContract .clone ()
Contract {
currentProvider : [Getter / Setter] ,
...
_keyrings : KeyringContainer { ... }
}
myContract.deploy
Copy myContract .deploy (options , byteCode [ , param1 [ , param2 [ , ... ]]])
컨트랙트를 Klaytn 네트워크에 배포합니다. 성공적으로 배포된 후, Promise는 새로운 컨트랙트 인스턴스와 함께 해결(resolved)될 것입니다. Unlike the usability of the existing myContract.deploy function, this function sends a transaction directly to the Klaytn network. 반환된 객체와 함께 send()
를 호출할 필요가 없습니다.
NOTE 서명을 하기 위해서는 caver.wallet
가 options
나 myContract.options
의 from
와 feePayer
에 해당하는 키링 인스턴스를 포함해야 합니다.
참고 myContract.deploy
는 caver-js v1.6.1 부터 지원됩니다.
Parameters
Return Value
Promise
는 PromiEvent
를 반환: Promise가 새로운 컨트랙트 인스턴스와 함께 해결(resolved)됩니다.
PromiEvent에서는 다음 이벤트가 발생할 수 있습니다.
"transactionHash"
: 트랜잭션이 전송되고 트랜잭션 해시가 준비된 직후에 발생합니다. 타입은 string
입니다.
error
: 전송 중 에러가 발생하면 발생합니다. 가스 부족 에러(out-of-gas)가 발생한 경우 두 번째 인자는 트랜잭션 영수증입니다. 타입은 error
입니다.
Example
Copy // Deploy a smart contract without constructor arguments
> myContract .deploy ({
from : '0x{address in hex}' ,
gas : 1500000 ,
} , '0x{byte code}' )
.on ( 'error' , function (error) { ... })
.on ( 'transactionHash' , function (transactionHash) { ... })
.on ( 'receipt' , function (receipt) {
console .log ( receipt .contractAddress) // contains the new contract address
})
.then ( function (newContractInstance) {
console .log ( newContractInstance . options .address) // instance with the new contract address
})
// Deploy a smart contract with constructor arguments
> myContract .deploy ({
from : '0x{address in hex}' ,
gas : 1500000 ,
} , '0x{byte code}' , 'keyString' , ... )
.on ( 'error' , function (error) { ... })
.on ( 'transactionHash' , function (transactionHash) { ... })
.on ( 'receipt' , function (receipt) {
console .log ( receipt .contractAddress)
})
.then ( function (newContractInstance) {
console .log ( newContractInstance . options .address)
})
// Deploy a smart contract with fee delegation transaction (TxTypeFeeDelegatedSmartContractDeploy)
> myContract .deploy ({
from : '0x{address in hex}' ,
feeDelegation : true ,
feePayer : '0x{address in hex}' ,
gas : 1500000 ,
} , '0x{byte code}' )
.on ( 'error' , function (error) { ... })
.on ( 'transactionHash' , function (transactionHash) { ... })
.on ( 'receipt' , function (receipt) {
console .log ( receipt .contractAddress)
})
.then ( function (newContractInstance) {
console .log ( newContractInstance . options .address)
})
// Deploy a smart contract with partial fee delegation transaction (TxTypeFeeDelegatedSmartContractDeployWithRatio)
> myContract .deploy ({
from : '0x{address in hex}' ,
feeDelegation : true ,
feePayer : '0x{address in hex}' ,
feeRatio : 30 ,
gas : 1500000 ,
} , '0x{byte code}' )
.on ( 'error' , function (error) { ... })
.on ( 'transactionHash' , function (transactionHash) { ... })
.on ( 'receipt' , function (receipt) {
console .log ( receipt .contractAddress)
})
.then ( function (newContractInstance) {
console .log ( newContractInstance . options .address)
})
myContract.deploy
Copy myContract .deploy (options)
Klaytn에 스마트 컨트랙트를 배포할 때 사용되는 객체를 반환합니다. myContract.deploy({ data, arguments }).send(options)
를 호출함으로써 스마트 컨트랙트 배포 트랜잭션을 전송할 수 있습니다. After a successful deployment, the promise will be resolved with a new contract instance.
Parameters
옵션 개체에는 다음이 포함됩니다:
Return Value
The object contains the following:
참고 myContract.deploy({ data, arguments }).sign(options)
and myContract.deploy({ data, arguments }).signAsFeePayer(options)
는 caver-js v1.6.1 부터 지원됩니다.
Example
Copy > myContract .deploy ({
data : '0x12345...' ,
arguments : [ 123 , 'My string' ]
})
.send ({
from : '0x1234567890123456789012345678901234567891' ,
gas : 1500000 ,
value : 0 ,
} , function (error , transactionHash) { ... })
.on ( 'error' , function (error) { ... })
.on ( 'transactionHash' , function (transactionHash) { ... })
.on ( 'receipt' , function (receipt) {
console .log ( receipt .contractAddress) // contains the new contract address
})
.then ( function (newContractInstance) {
console .log ( newContractInstance . options .address) // instance with the new contract address
})
// When the data is already set as an option to the contract itself
> myContract . options .data = '0x12345...'
> myContract .deploy ({
arguments : [ 123 , 'My string' ]
})
.send ({
from : '0x1234567890123456789012345678901234567891' ,
gas : 1500000 ,
value : 0 ,
})
.then ( function (newContractInstance) {
console .log ( newContractInstance . options .address) // instance with the new contract address
})
// Simply encoding
> myContract .deploy ({
data : '0x12345...' ,
arguments : [ 123 , 'My string' ]
})
.encodeABI ()
'0x12345...0000012345678765432'
// Gas estimation
> myContract .deploy ({
data : '0x12345...' ,
arguments : [ 123 , 'My string' ]
})
.estimateGas ( function (err , gas) {
console .log (gas)
})
myContract.send
Copy myContract .send (options , methodName [ , param1 [ , param2 [ , ... ]]])
스마트 컨트랙트 함수를 실행하기 위한 트랜잭션을 보냅니다. 이러한 호출은 스마트 컨트랙트의 상태를 변경할 수 있습니다.
이 함수에 사용되는 트랜잭션 타입은 options
나 myContract.options
에 정의된 값에 따라 결정됩니다. myContract.send
를 통해 수수료 위임 트랜잭션을 사용하고 싶다면, feeDelegation
와 feePayer
를 올바르게 설정해야 합니다.
feeDelegation
가 true
로 정의되었지만, feePayer
가 정의되지 않음: 에러 반환.
NOTE caver.wallet
must contains keyring instances corresponding to from
and feePayer
in options
or myContract.options
to make signatures.
참고 myContract.send
는 caver-js v1.6.1 부터 지원됩니다.
Parameters
Return Value
Promise
returns PromiEvent
For PromiEvent, the following events are available:
"transactionHash"
: 트랜잭션이 전송되고 트랜잭션 해시가 준비된 직후에 발생합니다. Its type is string
.
error
: It is fired if an error occurs during sending. On an out-of-gas error, the second parameter is the receipt. Its type is Error
.
Example
Copy // Send a SmartContractExecution and use the promise
> myContract .send ({ from : '0x{address in hex}' , gas : 1000000 } , 'methodName' , 123 ) .then ( console .log)
{
blockHash : '0x294202dcd1d3c422880e2a209b9cd70ce7036300536c78ab74130c5717cb90da' ,
blockNumber : 16342 ,
contractAddress : null ,
from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
gas : '0xf4240' ,
gasPrice : '0x5d21dba00' ,
gasUsed : 47411 ,
input : '0x983b2...' ,
logsBloom : '0x00800...' ,
nonce : '0x1cd' ,
senderTxHash : '0xe3f50d2bab2c462ef99379860d2b634d85a0c9fba4e2b189daf1d96bd4bbf8ff' ,
signatures : [ { V : '0x4e43' , R : '0x2ba27...' , S : '0x50d37...' } ] ,
status : true ,
to : '0x361870b50834a6afc3358e81a3f7f1b1eb9c7e55' ,
transactionHash : '0xe3f50d2bab2c462ef99379860d2b634d85a0c9fba4e2b189daf1d96bd4bbf8ff' ,
transactionIndex : 0 ,
type : 'TxTypeSmartContractExecution' ,
typeInt : 48 ,
value : '0x0' ,
events : { ... }
}
// Send a SmartContractExecution and use the event emitter
> myContract .send ({ from : '0x{address in hex}' , gas : 1000000 } , 'methodName' , 123 )
.on ( 'transactionHash' , function (hash) {
...
})
.on ( 'receipt' , function (receipt) {
console .log (receipt)
})
.on ( 'error' , console .error)
// Send a FeeDelegatedSmartContractExecution
> myContract .send ({
from : '0x{address in hex}' ,
gas : 1000000 ,
feeDelegation : true ,
feePayer : '0x{address in hex}' ,
} , 'methodName' , 123 ) .then ( console .log)
{
blockHash : '0x149e36f279577c306fccb9779a0274e802501c32f7054c951f592778bd5c168a' ,
blockNumber : 16458 ,
contractAddress : null ,
feePayer : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
feePayerSignatures : [ { V : '0x4e43' , R : '0x48c28...' , S : '0x18413...' } ] ,
from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
gas : '0xf4240' ,
gasPrice : '0x5d21dba00' ,
gasUsed : 57411 ,
input : '0x983b2d5600000000000000000000000022bb89bd35e7b12bd25bea4165cf0f9330032f8c' ,
logsBloom : '0x00800...' ,
nonce : '0x1f5' ,
senderTxHash : '0x5b06ca5046229e066c11dfc0c74fcbc98509294370981f9b142378a8f2bd5fe8' ,
signatures : [ { V : '0x4e44' , R : '0xfb707...' , S : '0x641c6...' } ] ,
status : true ,
to : '0x361870b50834a6afc3358e81a3f7f1b1eb9c7e55' ,
transactionHash : '0x0e04be479ad06ec87acbf49abd44f16a56390c736f0a7354860ebc7fc0f92e13' ,
transactionIndex : 1 ,
type : 'TxTypeFeeDelegatedSmartContractExecution' ,
typeInt : 49 ,
value : '0x0' ,
events : { ... }
}
// Send a FeeDelegatedSmartContractExecutionWithRatio
> myContract .send ({
from : '0x{address in hex}' ,
gas : 1000000 ,
feeDelegation : true ,
feePayer : '0x{address in hex}' ,
feeRatio : 30 ,
} , 'methodName' , 123 ) .then ( console .log)
{
blockHash : '0x8f0a0137cf7e0fea503c818910140246437db36121871bc54b2ebc688873b3f3' ,
blockNumber : 16539 ,
contractAddress : null ,
feePayer : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
feePayerSignatures : [ { V : '0x4e43' , R : '0x80db0...' , S : '0xf8c7c...' } ] ,
feeRatio : '0x1e' ,
from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
gas : '0xf4240' ,
gasPrice : '0x5d21dba00' ,
gasUsed : 62411 ,
input : '0x983b2d560000000000000000000000007ad1a538041fa3ba1a721f87203cb1a3822b8eaa' ,
logsBloom : '0x00800...' ,
nonce : '0x219' ,
senderTxHash : '0x14c7b674a0e253b31c85c7be8cbfe4bf9d86e66e940fcae34b854e25eab1ce15' ,
signatures : [ { V : '0x4e43' , R : '0xd57ef...' , S : '0xe14f3...' } ] ,
status : true ,
to : '0x361870b50834a6afc3358e81a3f7f1b1eb9c7e55' ,
transactionHash : '0xfbf00ec189aeb0941d554384f1660ffdac7768b3af2bb1526bcb3983215c1183' ,
transactionIndex : 0 ,
type : 'TxTypeFeeDelegatedSmartContractExecutionWithRatio' ,
typeInt : 50 ,
value : '0x0' ,
events : { ... }
}
myContract.sign
Copy myContract .sign (options , methodName [ , param1 [ , param2 [ , ... ]]])
스마트 컨트랙트 배포 또는 스마트 컨트랙트 함수 실행을 위해 발신자로서 스마트 컨트랙트 트랜잭션에 서명합니다.
스마트 컨트랙트가 배포되었다면 myContract.sign({ from, ... }, 'constructor', byteCode, ...)
와 같이 'constructor'를 methodName에 입력할 수 있습니다.
The transaction type used for this function depends on the options
or the value defined in myContract.options
. myContract.sign
를 통해 수수료 위임 트랜잭션을 사용하고 싶다면, feeDelegation
dl true
로 정의되어야 합니다.
NOTE 서명을 하기 위해서는 caver.wallet
가 options
나 myContract.options
의 from
에 해당하는 키링 인스턴스를 포함해야 합니다.
참고 myContract.sign
은 caver-js v1.6.1 부터 지원됩니다.
Parameters
Return Value
Promise
returning Transaction - The signed smart contract transaction.
Example
Copy // Sign a SmartContractDeploy
> myContract .sign ({ from : '0x{address in hex}' , gas : 1000000 } , 'constructor' , byteCode , 123 ) .then ( console .log)
SmartContractDeploy {
_type : 'TxTypeSmartContractDeploy' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x4e43' , _r : '0xeb6b5...' , _s : '0x5e4f9...' } ] ,
_to : '0x' ,
_value : '0x0' ,
_input : '0x60806...' ,
_humanReadable : false ,
_codeFormat : '0x0' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x2a5'
}
// Sign a FeeDelegatedSmartContractDeploy
> myContract.sign({ from: '0x{address in hex}', feeDelegation: true, gas: 1000000 }, 'constructor', byteCode, 123).then(console.log)
FeeDelegatedSmartContractDeploy {
_type : 'TxTypeFeeDelegatedSmartContractDeploy' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x4e43' , _r : '0xee0f5...' , _s : '0x31cbf...' } ] ,
_feePayer : '0x0000000000000000000000000000000000000000' ,
_feePayerSignatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_to : '0x' ,
_value : '0x0' ,
_input : '0x60806...' ,
_humanReadable : false ,
_codeFormat : '0x0' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x320'
}
// Sign a FeeDelegatedSmartContractDeployWithRatio
> myContract.sign({ from: keyring.address, feeDelegation: true, feeRatio: 30, gas: 1000000 }, 'constructor', byteCode, 123).then(console.log)
FeeDelegatedSmartContractDeployWithRatio {
_type : 'TxTypeFeeDelegatedSmartContractDeployWithRatio' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x4e44' , _r : '0x4c2b0...' , _s : '0x47df8...' } ] ,
_feePayer : '0x0000000000000000000000000000000000000000' ,
_feePayerSignatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_feeRatio : '0x1e' ,
_to : '0x' ,
_value : '0x0' ,
_input : '0x60806...' ,
_humanReadable : false ,
_codeFormat : '0x0' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x306'
}
// Sign a SmartContractExecution
> myContract .sign ({ from : '0x{address in hex}' , gas : 1000000 } , 'methodName' , 123 ) .then ( console .log)
SmartContractExecution {
_type : 'TxTypeSmartContractExecution' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x4e44' , _r : '0xb2846...' , _s : '0x422c1...' } ] ,
_to : '0x361870b50834a6afc3358e81a3f7f1b1eb9c7e55' ,
_value : '0x0' ,
_input : '0x983b2...' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x23b'
}
// Sign a FeeDelegatedSmartContractExecution
> myContract .sign ({
from : '0x{address in hex}' ,
gas : 1000000 ,
feeDelegation : true ,
} , 'methodName' , 123 ) .then ( console .log)
FeeDelegatedSmartContractExecution {
_type : 'TxTypeFeeDelegatedSmartContractExecution' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x4e43' , _r : '0xf7676...' , _s : '0x42673...' } ] ,
_feePayer : '0x0000000000000000000000000000000000000000' ,
_feePayerSignatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_to : '0x361870b50834a6afc3358e81a3f7f1b1eb9c7e55' ,
_value : '0x0' ,
_input : '0x983b2...' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x254'
}
// Sign a FeeDelegatedSmartContractExecutionWithRatio
> myContract .sign ({
from : '0x{address in hex}' ,
gas : 1000000 ,
feeDelegation : true ,
feeRatio : 30 ,
} , 'methodName' , 123 ) .then ( console .log)
FeeDelegatedSmartContractExecutionWithRatio {
_type : 'TxTypeFeeDelegatedSmartContractExecutionWithRatio' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x4e44' , _r : '0x58b06...' , _s : '0x637ff...' } ] ,
_feePayer : '0x0000000000000000000000000000000000000000' ,
_feePayerSignatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_feeRatio : '0x1e' ,
_to : '0x361870b50834a6afc3358e81a3f7f1b1eb9c7e55' ,
_value : '0x0' ,
_input : '0x983b2...' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x262'
}
myContract.signAsFeePayer
Copy myContract .signAsFeePayer (options , methodName [ , param1 [ , param2 [ , ... ]]])
스마트 컨트랙트 배포 또는 스마트 컨트랙트 함수 실행을 위해 수수료 납부자로서 스마트 컨트랙트 트랜잭션에 서명합니다.
스마트 컨트랙트가 배포되었다면 myContract.signAsFeePayer({ from, feeDelegation: true, feePayer, ... }, 'constructor', byteCode, ...)
와 같이 methodName에 'constructor'를 입력할 수 있습니다.
The transaction type used for this function depends on the options
or the value defined in myContract.options
. signAsFeePayer
는 트랜잭션 수수료 납부자로서 서명하는 함수이기 때문에 feeDelegation
필드는 true
로 정의되어야 합니다. 수수료 납부자의 주소 또한 feePayer
필드에 정의되어 있어야 합니다.
feeDelegation
이 정의되지 않음: 에러 반환.
feeDelegation
이 정의되었지만, feePayer
는 정의되지 않음: 에러 반환.
NOTE 서명을 하기 위해서는 caver.wallet
가 options
나 myContract.options
의 feePayer
에 해당하는 키링 인스턴스를 포함해야 합니다.
참고 myContract. signAsFeePayer
는 caver-js v1.6.1 부터 지원됩니다.
Parameters
Return Value
Promise
returning Transaction - The signed smart contract transaction.
Example
Copy // Sign a FeeDelegatedSmartContractDeploy
> myContract.signAsFeePayer({ from: '0x{address in hex}', feeDelegation: true, feePayer: '0x{address in hex}', gas: 1000000 }, 'constructor', byteCode, 123).then(console.log)
FeeDelegatedSmartContractDeploy {
_type : 'TxTypeFeeDelegatedSmartContractDeploy' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_feePayer : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_feePayerSignatures : [ SignatureData { _v : '0x4e43' , _r : '0xe0641...' , _s : '0x1d21e...' } ] ,
_to : '0x' ,
_value : '0x0' ,
_input : '0x60806...' ,
_humanReadable : false ,
_codeFormat : '0x0' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x32a'
}
// Sign a FeeDelegatedSmartContractDeployWithRatio
> myContract.signAsFeePayer({ from: keyring.address, feeDelegation: true, feePayer: '0x{address in hex}', feeRatio: 30, gas: 1000000 }, 'constructor', byteCode, 123).then(console.log)
FeeDelegatedSmartContractDeployWithRatio {
_type : 'TxTypeFeeDelegatedSmartContractDeployWithRatio' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_feePayer : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_feePayerSignatures : [ SignatureData { _v : '0x4e44' , _r : '0x307bd...' , _s : '0x75110...' } ] ,
_feeRatio : '0x1e' ,
_to : '0x' ,
_value : '0x0' ,
_input : '0x60806...' ,
_humanReadable : false ,
_codeFormat : '0x0' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x359'
}
// Sign a FeeDelegatedSmartContractExecution
> myContract .signAsFeePayer ({
from : '0x{address in hex}' ,
gas : 1000000 ,
feeDelegation : true ,
feePayer : '0x{address in hex}' ,
} , 'methodName' , 123 ) .then ( console .log)
FeeDelegatedSmartContractExecution {
_type : 'TxTypeFeeDelegatedSmartContractExecution' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_feePayer : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_feePayerSignatures : [ SignatureData { _v : '0x4e43' , _r : '0xc58ba...' , _s : '0x76fdb...' } ] ,
_to : '0x4a9d979707aede18fa674711f3b2fe110fac4e7e' ,
_value : '0x0' ,
_input : '0x983b2...' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x36c'
}
// Sign a FeeDelegatedSmartContractExecutionWithRatio
> myContract .signAsFeePayer ({
from : '0x{address in hex}' ,
gas : 1000000 ,
feeDelegation : true ,
feePayer : '0x{address in hex}' ,
feeRatio : 30 ,
} , 'methodName' , 123 ) .then ( console .log)
FeeDelegatedSmartContractExecutionWithRatio {
_type : 'TxTypeFeeDelegatedSmartContractExecutionWithRatio' ,
_from : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_gas : '0xf4240' ,
_signatures : [ SignatureData { _v : '0x01' , _r : '0x' , _s : '0x' } ] ,
_feePayer : '0x69c3a6e3485446118d8081063dcef2e65b69ae91' ,
_feePayerSignatures : [ SignatureData { _v : '0x4e44' , _r : '0xeb78d...' , _s : '0x2864d...' } ] ,
_feeRatio : '0x1e' ,
_to : '0x4a9d979707aede18fa674711f3b2fe110fac4e7e' ,
_value : '0x0' ,
_input : '0x983b2...' ,
_chainId : '0x2710' ,
_gasPrice : '0x5d21dba00' ,
_nonce : '0x37b'
}
myContract.call
Copy myContract .call ( 'methodName' , [param1 [ , param2 [ , ... ]]])
myContract .call (options , 'methodName' , [param1 [ , param2 [ , ... ]]])
상수형 메서드를 호출하며 트랜잭션을 보내지 않고 그 스마트 컨트랙트 메서드를 Klaytn 가상머신에서 실행합니다. Note that calling cannot alter the smart contract state.
참고 myContract.call
는 caver-js v1.6.1 부터 지원됩니다.
Parameters
Return Value
Promise
가 Mixed
를 반환: 스마트 컨트랙트 메서드의 리턴값(들) 입니다. 하나를 반환하면, 그대로 반환됩니다. 다수의 반환값이 있는 경우 속성과 인덱스로 구성된 객체로서 반환됩니다.
Example
Copy > myContract .call ( 'methodName' ) .then ( console .log)
Jasmine
> myContract .call ({ from : '0x{address in hex}' } , 'methodName' , 123 ) .then ( console .log)
Test Result
myContract.decodeFunctionCall
Copy myContract .decodeFunctionCall (functionCall)
Decodes a function call and returns parameters.
NOTE myContract.decodeFunctionCall
is supported since caver-js v1.6.3 .
Parameters
Return Value
Examples
Copy // The myContract variable is instantiated with the below abi.
/ [
// {
// constant: true,
// inputs: [{ name: 'key', type: 'string' }],
// name: 'get',
// outputs: [{ name: '', type: 'string' }],
// payable: false,
// stateMutability: 'view',
// type: 'function',
// },
// {
// constant: false,
// inputs: [{ name: 'key', type: 'string' }, { name: 'value', type: 'string' }],
// name: 'set',
// outputs: [],
// payable: false,
// stateMutability: 'nonpayable',
// type: 'function',
// },
// ]
> myContract.decodeFunctionCall('0xe942b5160000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000036b65790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000576616c7565000000000000000000000000000000000000000000000000000000')
Result {
'0' : '2345675643' ,
'1' : 'Hello!%' ,
__length__ : 2 ,
myNumber : '2345675643' ,
mystring : 'Hello!%'
}
myContract.methods
Copy myContract . methods .methodName ([param1 [ , param2 [ , ... ]]])
myContract .methods[ 'methodName' ]([param1 [ , param2 [ , ... ]]])
호출, 전송, 추정 또는 ABI 인코딩될 수 있는 해당 메소드에 대한 트랜잭션 객체를 생성합니다.
이 스마트 컨트랙트의 메서드는 다음을 통해 이용할 수 있습니다:
메서드 이름: myContract.methods.methodName(123)
또는 myContract.methods[methodName](123)
메서드 프로토타입: myContract.methods['methodName(uint256)'](123)
메서드 서명: myContract.methods['0x58cf5f10'](123)
이를 통해 자바스크립트 컨트랙트 객체로부터 이름은 같지만 매개변수가 다른 함수를 호출할 수 있습니다.
cf) *function signature (function selector)
The first four bytes of the call data for a function call specifies the function to be called.
It is the first (left, high-order in big-endian) four bytes of the Keccak-256 (SHA-3) hash of the signature of the function.
The function signature can be given via 2 different methods.
1. caver.abi.encodefunctionSignature('funcName(paramType1,paramType2,...)')
2. caver.utils.sha3('funcName(paramType1,paramType2,...)').substr(0, 10)
ex)
Copy caver . abi .encodefunctionSignature ( 'methodName(uint256)' )
> 0x58cf5f10
caver . utils .sha3 ( 'methodName(uint256)' ) .substr ( 0 , 10 )
> 0x58cf5f10
Parameters
JSON 인터페이스에 정의된 스마트 컨트랙트 메서드에 속하는 모든 메서드의 매개변수
Return Value
Promise
는 object
를 반환 - 컨트랙트 실행을 위한 인자와 함수가 정의되어 있는 객체입니다:
참고 sign
과 signAsFeePayer
는 caver-js v1.6.1 부터 지원됩니다.
Example
Copy // Calling a method
> myContract . methods .methodName ( 123 ) .call ({ ... } , function (error , result) { ... })
> myContract . methods .methodName ( 123 ) .call ({ ... }) .then ((result) => { ... })
// Sending basic transaction and using the promise
> myContract . methods .methodName ( 123 ) .send ({
from : '0x{address in hex}' ,
...
}) .then ( function (receipt) {
// receipt can also be a new contract instance, when coming from a "contract.deploy({...}).send()"
})
// Sending basic transaction and using the eventEmitter
>