caver-js (1.5.0 またはそれ以降)
caver-js
はJavaScript APIライブラリで、HTTPまたはWebsocket接続を使ってkaiaノードと対話することができる。 npm](https://www.npmjs.com/package/caver-js)で入手できる。
特徴
- HTTPとWebsocketを介したkaiaのJSON-RPCクライアントAPIの完全な実装
- kaiaトランザクション、アカウント、およびアカウント・キー・タイプのサポート
- kaiaネットワーク上でスマートコントラクトをデプロイ、実行するためのJavaScriptスマートコントラクトパッケージ
- kaiaアカウント管理用インメモリーウォレット
- フィーデレグのサポート
- kaiaウォレットキーフォーマットのサポート
- RLPにおけるトランザクション・オブジェクトのエンコード/デコード
- トランザクションオブジェクトの署名
- web3-jsアプリケーションをcaver-jsに簡単に移植できる
caver-js のパッケージ
以下は caver-js
で提供されるパッケージである。
- caver.account
- caver.wallet.keyring
- caver.wallet
- caver.transaction
- caver.rpc
- caver.contract
- caver.abi
- caver.kct
- caver.validator
- caver.utils
- caver.ipfs
エラーコードの改善
イーサリアムからのweb3.js経由のエラーメッセージでは、どこでエラーが発生しているのかほとんどわからない。 caver-js
はkaiaからのエラーメッセージをキャッチするインターフェースを改善した。
詳細はトランザクションレシートの txError
の値で確認できる:
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":{}}
kaiaにトランザクションを送信する際の注意事項
カイアは、KIP-71を可能にしたマグマのハードフォーク以来、新しいガス価格政策を持っています。
したがって、ハードフォークが適用されるか否かに応じて、トランザクションを送信する際にgasPrice
ロジックを異なるように設定する必要がある。
マグマのハードフォークまで、カイアでの取引には「固定ガス価格」が適用されてきた。 従って、ネットワークに提出された他の価格の取引は拒否される。 トランザクションに署名または送信する際にgasPrice
が定義されていない場合、caver-jsはcaver.rpc.klay.getGasPrice RPCコールを使用してガス価格を設定する。
マグマのハードフォーク後、kaiaは「ダイナミック・ガス料金価格メカニズム」を採用している。 取引のガス料金は、カイヤネットワークの基本料金より高くなければならない。 トランザクションに署名または送信するときに gasPrice
が定義されていない場合、caver-js は caver.rpc.klay.getGasPrice
を使用してトランザクションの gasPrice
フィールドを設定する。
gasPriceフィールドの設定方法
caver-jsは、gasPrice
を設定する様々な方法を提供する。 caver-jsを使用する際に、gasPrice
フィールドを設定する方法を以下に提案する。 ここで説明する方法は、ハードフォークに関係なく使うことができる。
gasPrice
フィールドを定義しない
gasPrice
フィールドを定義せずにインスタンスを作成した場合、トランザクションに署名するために tx.sign
または tx.signAsFeePayer
を呼び出すと、自動的に gasPrice
フィールドが設定される。
const tx = caver.transaction.valueTransfer.create({ from, to, value, gas })await tx.sign(from, tx) // Before signing, gasPrice is set inside `tx.sign`.
tx.fillTransaction
メソッドを使用する。
tx.fillTransaction
は、トランザクションのオプションフィールドが省略されたときに適切な値で埋める関数である。
const tx = caver.transaction.valueTransfer.create({ from, to, value, gas })await tx.fillTransaction() // Fill the optional tx fields.
tx.suggestGasPrice
メソッドを使用する。
gasPrice
には、推奨ガス価格を返すtx.suggestGasPrice
の結果を設定することができる。
const tx = caver.transaction.valueTransfer.create({ from, to, value, gas })tx.gasPrice = await tx.suggestGasPrice()
ガス料金の詳細については、ガス・単価の概要を参照。 ネットワークで使用されるガスの価格は、caver.rpc.klay.getGasPriceを使用して取得することができます。
リンク
- caver-js GitHub リポジトリ
- caver-js on npm