본문으로 건너뛰기
이 페이지는 영어로 된 기계 번역을 사용하므로 오류나 불명확한 언어가 포함될 수 있습니다. 가장 정확한 정보는 영어 원문을 참조하시기 바랍니다. 잦은 업데이트로 인해 일부 콘텐츠는 원래 영어로 되어 있을 수 있습니다. Crowdin에서 이 페이지의 번역을 개선하는 데 동참하여 도움을 주세요. (Crowdin translation page, Contributing guide)

caver-js (1.5.0 or later)

caver-js is a JavaScript API library that allows developers to interact with a kaia node using a HTTP or Websocket connection. It is available on npm.

Features

  • Complete implementation of kaia’s JSON-RPC client API over HTTP and Websocket
  • Support of kaia transaction, account, and account key types
  • JavaScript smart contract package to deploy and execute a smart contract on the kaia network
  • In-memory wallet for managing kaia accounts
  • Support of fee-delegation
  • Support of the kaia wallet key format
  • Encoding/decoding of a transaction object in RLP
  • Signing of a transaction object
  • Easy to port web3-js application to caver-js

Packages in caver-js

Below are packages provided in caver-js.

Error Code Improvement

The error messages from Ethereum via web3.js are hardly figuring out where the error occurs. caver-js improves the interface to catch error messages from kaia.

More details can be found in the value of txError of the transaction receipt like the below:


Error: runtime error occurred in interpreter
{
"blockHash": "0xe7ec35c9fff1178d52cee1d46d40627d19f828c4b06ad1a5c3807698b99acb20",
"blockNumber": 7811,
"contractAddress": null,
"from": "0xa8a2d37727197cc0eb827f8c5a3a3aceb26cf59e",
"gasUsed": 9900000000,
"logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"status": false,
"to": "0xf8425b0f65147969621f9390ca06139c7b439497",
"transactionHash": "0x85ce2b307899c90144442d9b3236827ac57375c522be2435093aebfd920b8c58",
"transactionIndex": 0,
"txError": "0x2",
"events": {}
}

Caution when Sending a Transaction to kaia

Kaia has a new gas price policy since the Magma hard fork which enabled the KIP-71.

Therefore, you need to set the gasPrice logic differently when sending a transaction, depending on whether the hard fork is applicable or not.

Until the Magma hard fork, transactions on kaia have been subject to a "fixed gas price". Therefore, transactions with any other price submitted to the network are rejected. If gasPrice is not defined when you sign or submit a transaction, caver-js uses caver.rpc.klay.getGasPrice RPC call to set the gas price.

After the Magma hard fork, kaia uses a "dynamic gas fee pricing mechanism". The gas price of the transaction should be higher than the base fee of the kaia network. If gasPrice is not defined when you sign or submit a transaction, caver-js sets the gasPrice field of the transaction using caver.rpc.klay.getGasPrice.

How to set gasPrice field

caver-js provides various ways to set the gasPrice. Ways to set the gasPrice field when using caver-js are suggested below. The methods described here can be used regardless of the hard fork.

Do not define gasPrice field

If you create an instance without defining the gasPrice field, the gasPrice field is automatically set when you call tx.sign or tx.signAsFeePayer to sign a transaction.


const tx = caver.transaction.valueTransfer.create({ from, to, value, gas })
await tx.sign(from, tx) // Before signing, gasPrice is set inside `tx.sign`.

Use tx.fillTransaction method

You can use tx.fillTransaction, a function that fills the optional fields of a transaction with appropriate values when they are omitted.


const tx = caver.transaction.valueTransfer.create({ from, to, value, gas })
await tx.fillTransaction() // Fill the optional tx fields.

Use tx.suggestGasPrice method

You can set the gasPrice with the result of tx.suggestGasPrice which returns the recommended gas price.


const tx = caver.transaction.valueTransfer.create({ from, to, value, gas })
tx.gasPrice = await tx.suggestGasPrice()

For more information about the gas price, see Gas and Unit Price Overview The price of gas used in the network can be obtained by using caver.rpc.klay.getGasPrice.

페이지를 개선해 주세요