入门指南
新增功能
在 caver-java 1.5.0 中,我们采用了通用架构。 通用架构是 kaia 开发环境的新软件架构,所有 kaia SDK(caver-js/caver-java)均可共享。 它专为简化开发体验而设计,易于扩展到其他编程语言。
随着 caver-java 升级到 1.5.0,除了某些 API 之外,1.4.0 中使用的 API 将被弃用。
caver-java 1.5.0 中新提供的应用程序接口如下。
caver.account
caver.account 是一个用于更新 Kaia 账户的账户密钥(AccountKey)的软件包,账户密钥可以是一个或多个公钥(AccountKeyPublic、AccountKeyWeightedMultiSig 和 AccountKeyRoleBased),也可以是一种特殊类型的密钥(AccountKeyLegacy 和 AccountKeyFail)。
- 在 caver-java 1.4.0 中,
caver.account
取代了caver.tx.account
。
caver.wallet
caver.wallet 是一个管理内存钱包中 Keyring 实例的软件包。 密钥环是存储 Kaia 账户地址及其私人密钥的实例,该账户地址用于签署交易。 caver.wallet 接受所有类型的 Keyring(单 Keyring、多 Keyring 和基于角色的 Keyring),并通过 kaia 账户地址进行管理。
- 在 caver-java 1.4.0 中,"caver.wallet "取代了 "caver.crypto"。
- 在 caver-java 1.4.0 中,"caver.wallet.KeyStore "取代了 "caver.wallet.WalletFile"。
caver.transaction
caver.transaction是一个提供[Transaction](.../../../learn/transactions/transactions.md#transactions-overview)相关功能的软件包。
- 在 caver-java 1.4.0 中,"caver.transaction "取代了 "caver.tx
caver.rpc
caver.rpc 是一个提供与 kaia Node 的 rpc 调用相关功能的软件包。
- caver.rpc.klay "和 "caver.rpc.net "分别替换了 caver-java 1.4.0 中的 "Klay "和 "Net "接口
caver.util
caver.utils 提供实用功能。
caver.contract
caver.contract "是一个软件包,它能让你在 kaia 中轻松处理智能合约。 通过 caver.contract,您可以部署智能合约,并通过调用其函数来执行它们。 caver.contract "首先从ABI(Application Binary Interface)转换智能合约函数和事件,调用这些函数,并获取事件信息。
先决条件
添加存储库
在使用 IPFS 之前,应添加一个库存储库。 请先添加以下存储库。
maven
<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository></repositories>
gradle
allprojects { repositories { ... maven { url 'https://jitpack.io' } }}
添加依赖项
maven
<dependency> <groupId>com.klaytn.caver</groupId> <artifactId>core</artifactId> <version>1.5.0</version></dependency>
gradle
执行 "com.klaytn.caver:core:1.5.0
如果要使用 Android 依赖关系,只需在版本字符串末尾添加 -android。 \例如 1.0.1-android)
如果想查看 JSON-RPC 请求和响应的详细信息,请在项目中加入 LOGBack 依赖关系。 下面是一个 Gradle 构建文件示例。 您也可以将依赖关系添加到 Maven 中。 由于 caver-java 使用 SLF4J 日志界面,因此您可以切换到自己喜欢的日志框架,而不是 LOGBack。
执行 "ch.qos.logback:logback-classic:1.2.3"
注意:在中央资源库中,RC、Android 和 Java 版本被列在一起。 如果使用通配符获取版本,则可能使用了不适合自己平台的版本。
命令行工具
该命令行工具允许你从命令行生成 Solidity 智能合约函数包装器。
安装 (Homebrew)
安装需要 Java 1.8 以上版本。
$ brew tap klaytn/klaytn$ brew install caver-java
安装完成后,您可以运行 "caver-java "命令,如下所示:
$ caver-java solidity generate -b<smart-contract>.bin -a<smart-contract>.abi -o<outputPath> -p<packagePath>
安装 (其他)
目前,我们不支持其他软件包管理器。 作为另一种解决方案,我们在下文中提供了一种构建 CLI 的方法。
-
下载或 fork caver-java。
-
使用 Gradle 在控制台模块中执行任务 "shadowDistZip"。 结果会生成
console/build/distributions/console-shadow-{version}.zip
。$ ./gradlew :console:shadowDistZip -
解压缩构建目录中的压缩文件
$ unzip ./console/build/distributions/console-shadow-{version}.zip -
执行二进制文件,运行命令行工具,如下所示。 MacOS 用户可以找到 shell 脚本文件,Window 用户可以找到批处理文件。
$ ./console/build/distributions/console-shadow-{version}/bin/caver-java
发送 KAIA 一览
本节介绍一个使用 "keystore 文件 "发送 KAIA 和价值转移交易的简单示例。 密钥存储文件可从 Kaia Wallet 导出。 如果您需要 KAIA 进行测试,可以从 Kaia 水龙头 获取测试 KAIA。
开发时,最好使用与任何真实资金都不相关的账户。 好的方法是创建一个新的浏览器配置文件(在 Chrome、Brave、Firefox 等浏览器上),并在该浏览器上安装 Kaia 钱包,而且永远不要向该钱包汇款。
public void sendingKLAY() throws IOException, CipherException, TransactionException { Caver caver = new Caver(Caver.KAIROS_TESTNET_URL); //Read keystore json file. File file = new File("./keystore.json"); //Decrypt keystore. ObjectMapper objectMapper = ObjectMapperFactory.getObjectMapper(); KeyStore keyStore = objectMapper.readValue(file, KeyStore.class); AbstractKeyring keyring = caver.wallet.keyring.decrypt(keyStore, "password"); //Add to caver wallet. caver.wallet.add(keyring); BigInteger value = new BigInteger(caver.utils.convertToPeb(BigDecimal.ONE, "KLAY")); //Create a value transfer transaction ValueTransfer valueTransfer = caver.transaction.valueTransfer.create( TxPropertyBuilder.valueTransfer() .setFrom(keyring.getAddress()) .setTo("0x8084fed6b1847448c24692470fc3b2ed87f9eb47") .setValue(value) .setGas(BigInteger.valueOf(25000)) ); //Sign to the transaction valueTransfer.sign(keyring); //Send a transaction to the kaia blockchain platform (kaia) Bytes32 result = caver.rpc.klay.sendRawTransaction(valueTransfer.getRawTransaction()).send(); if(result.hasError()) { throw new RuntimeException(result.getError().getMessage()); } //Check transaction receipt. TransactionReceiptProcessor transactionReceiptProcessor = new PollingTransactionReceiptProcessor(caver, 1000, 15); TransactionReceipt.TransactionReceiptData transactionReceipt = transactionReceiptProcessor.waitForTransactionReceipt(result.getResult()); }