Bắt đầu
Có gì mới?
Trong caver-java 1.5.0, chúng tôi áp dụng Common Architecture. Common Architecture là một kiến trúc phần mềm mới dành cho môi trường phát triển Klaytn, được chia sẻ bởi tất cả các SDK Klaytn (caver-js/caver-java). Kiến trúc này đươc thiết kế để đảm bảo trải nghiệm phát triển thuận lợi và khả năng mở rộng dễ dàng sang các ngôn ngữ lập trình khác.
Khi caver-java được cập nhật lên phiên bản 1.5.0, các API được dùng trong phiên bản 1.4.0 sẽ không còn hoạt động được nữa, ngoại trừ một số API.
Các API mới được cung cấp trong caver-java 1.5.0 như sau.
caver.tài khoản
caver.tài khoản là một gói dùng để cập nhật AccountKey, đó có thể là một hoặc nhiều khóa công khai (AccountKeyPublic, AccountKeyWeightedMultiSig và AccountKeyRoleBased) hoặc một loại khóa đặc biệt (AccountKeyLegacy và AccountKeyFail) cho một tài khoản Klaytn.
caver.tài khoản
thay thếcaver.tx.tài khoản
trong caver-java 1.4.0
caver.wallet
caver.wallet là gói quản lý các đối tượng trong ví trong bộ nhớ. Keyring là một đối tượng cụ thể chứa địa chỉ của một tài khoản Klaytn và (các) khóa riêng tư của tài khoản đó, và nó được dùng khi địa chỉ của tài khoản này ký một giao dịch. caver.wallet chấp nhận tất cả các loại Keyring (SingleKeyring, MultipleKeyring và RoleBasedKeyring) và quản lý bằng địa chỉ tài khoản Klaytn của chúng.
caver.wallet
thay thếcaver.crypto
trong caver-java 1.4.0caver.wallet.KeyStore
thay thếcaver.wallet.WalletFile
trong caver-java 1.4.0
caver.transaction
canver.transaction là một gói cung cấp chức năng liên quan đến Giao dịch.
caver.transaction
thay thếcaver.tx
trong caver-java 1.4.0
caver.rpc
caver.rpc là một gói cung cấp chức năng liên quan đến việc thực hiện gọi rpc đến nút Klaytn.
caver.rpc.klay
vàcaver.rpc.net
lần lượt thay thế các giao diệnKlay
,Net
trong caver-java 1.4.0
caver.util
caver.util cung cấp các chức năng tiện ích.
caver.contract
caver.contract
là một gói giúp cho việc xử lý hợp đồng thông minh trong Klaytn trở nên dễ dàng hơn. Với caver.contract, bạn có thể triển khai và thực thi hợp đồng thông minh bằng cách gọi các hàm của chúng. caver.contract
trước tiên sẽ chuyển đổi các hàm của hợp đồng thông minh và sự kiện từ ABI(Giao diện nhị phân ứng dụng), gọi các hàm đó và lấy thông tin sự kiện.
Điều kiện tiên quyết
Thêm kho dữ liệu
Một kho chứa dữ liệu thư viện cần phải được thêm vào trước khi sử dụng IPFS. Trước hết, vui lòng thêm kho dữ liệu sau.
maven
<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository></repositories>
gradle
allprojects { repositories { ... maven { url 'https://jitpack.io' } }}
Thêm phần phụ thuộc
maven
<dependency> <groupId>com.klaytn.caver</groupId> <artifactId>core</artifactId> <version>1.5.0</version></dependency>
gradle
implementation 'com.klaytn.caver:core:1.5.0'
Nếu bạn muốn dùng phần phụ thuộc Android, bạn chỉ cần thêm -android vào cuối chuỗi phiên bản. (ví dụ 1.0.1-android)
Nếu bạn muốn xem chi tiết của các yêu cầu và phản hồi JSON-RPC, vui lòng đưa phần phụ thuộc LOGBack vào dự án của mình. Dưới đây là một ví dụ về tập tin xây dựng Gradle. Bạn cũng có thể thêm phần phụ thuộc vào Maven. Vì caver-java sử dụng giao diện đăng nhập SLF4J, bạn có thể chuyển sang trình ghi bản ghi mà bạn thích thay cho LOGBack.
implementation "ch.qos.logback:logback-classic:1.2.3"
Lưu ý: Trong kho dữ liệu trung tâm, các phiên bản RC, Andriod và Java được liệt kê cùng nhau. Nếu bạn sử dụng ký tự đại diện để lấy một phiên bản, bạn có thể dùng phải một phiên bản không phù hợp với nền tảng của mình.
Công cụ dòng lệnh
Công cụ dòng lệnh cho phép bạn dùng dòng lệnh để tạo các lớp vỏ bọc chức năng bằng Solidity cho hợp đồng thông minh.
Cài đặt (Homebrew)
Cần có Java 1.8 trở lên để cài đặt công cụ này.
$ brew tap klaytn/klaytn$ brew install caver-java
Sau khi cài đặt, bạn có thể chạy lệnh "caver-java" như dưới đây:
$ caver-java solidity generate -b <smart-contract>.bin -a <smart-contract>.abi -o <outputPath> -p <packagePath>
Cài đặt (Khác)
Hiện tại, chúng tôi không hỗ trợ các trình quản lý gói khác. Một giải pháp khác mà chúng tôi cung cấp là một phương pháp để xây dựng CLI như bên dưới.
-
Tải xuống hoặc tách luồng caver-java.
-
Dùng Gradle thực hiện tác vụ "shadowDistZip" trong mô-đun bảng điều khiển. Kết quả là
console/build/distributions/console-shadow-{version}.zip
được tạo ra.$ ./gradlew :console:shadowDistZip -
Giải nén tập tin zip trong thư mục xây dựng
$ unzip ./console/build/distributions/console-shadow-{version}.zip -
Thực thi tập tin nhị phân để chạy công cụ dòng lệnh như dưới đây. Bạn có thể tìm thấy tập tin mã lập trình shell dành cho người dùng macOS và tập tin batch dành cho người dùng Window.
$ ./console/build/distributions/console-shadow-{version}/bin/caver-java
Sơ lược về việc gửi KLAY
Phần này mô tả một ví dụ đơn giản về việc sử dụng tập tin kho khóa
để gửi KLAY với một giao dịch chuyển giá trị. Tập tin kho khóa có thể được tạo ra trong Ví Klaytn. Nếu bạn cần KLAY để thử nghiệm, bạn có thể nhận KLAY dùng trong mạng thử nghiệm Baobab từ Ví Klaytn.
public void sendingKLAY() throws IOException, CipherException, TransactionException { Caver caver = new Caver(Caver.BAOBAB_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 klaytn blockchain platform (Klaytn) 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()); }
Bắt đầu với caver-java
Kết nối với một Nút Klaytn
Nếu bạn đang chạy một EN, bạn có thể kết nối nó với nút của riêng mình bằng cách thay đổi máy chủ và cổng như dưới đây:
Caver caver = new Caver("http://your.en.url:8551/");
Quản lý Keyring
Keyring
là một cấu trúc chứa địa chỉ của một tài khoản Klaytn và (các) khóa riêng tư.
Keyring
có thể được phân thành ba loại tùy theo loại khóa được lưu trữ: SingleKeyring
lưu trữ một địa chỉ và một khóa riêng tư, MultipleKeyring
lưu trữ một địa chỉ và nhiều khóa riêng tư, và RoleBasedKeyring
lưu trữ một địa chỉ và một hoặc nhiều khóa riêng tư cho từng vai trò.
SingleKeyring
xác định thuộc tính key
bên trong, và key
này chứa một khóa riêng tư.
MultipleKeyring
xác định thuộc tính keys
bên trong, và keys
này được triển khai dưới dạng một mảng để chứa nhiều khóa riêng tư.
Thuộc tính keys
được xác định trong RoleBasedKeyring
được triển khai dưới dạng một đối tượng Danh sách gồm 3 mảng chứa (các) khóa riêng tư như các phần tử trong đó (thuộc tính keys
trống có dạng [ [], [], [] ]
), như vậy, nó có thể chứa nhiều khóa cho từng vai trò
. Phần tử đầu tiên của mảng này chứa (các) khóa riêng tư để sử dụng cho roleTransactionKey
, phần tử thứ hai là (các) khóa riêng tư để sử dụng cho roleAccountUpdateKey
, và phần tử thứ ba là (các) khóa riêng tư để sử dụng cho roleFeePayerKey
.
Tạo một Keyring
Tạo một SingleKeyring
Bạn có thể tạo ngẫu nhiên một keyring đơn lẻ như dưới đây.
SingleKeyring keyring = caver.wallet.keyring.generate();
Tạo một SingleKeyring từ khóa riêng tư
Ngoài ra, nếu bạn sở hữu một khóa riêng tư cụ thể, bạn có thể sử dụng khóa này để tạo một keyring như bên dưới.
String privateKey = "0x{private key in hex}";SingleKeyring keyring = caver.wallet.keyring.createFromPrivateKey(privateKey);
Tạo một SingleKeyring bằng một khóa riêng tư và một địa chỉ
Nếu khóa riêng tư cho tài khoản Klaytn của bạn tách rời khỏi địa chỉ, bạn có thể tạo một keyring bằng địa chỉ đã cho và khóa riêng tư đã cho như dưới đây.
String address = "0x{address in hex}";String privateKey = "0x{private key in hex}";SingleKeyring keyring = caver.wallet.keyring.createWithSingleKey(address, privateKey);
Ngoài ra, bạn có thể lấy đối tượng SingleKeyring cụ thể từ khóa của ví Klaytn.
String klaytnWalletKey = "0x{private key}0x{type}0x{address in hex}";SingleKeyring keyring = caver.wallet.keyring.createFromKlaytnWalletKey(klaytnWalletKey);
Tạo một MultipleKeyring bằng nhiều khóa riêng tư
Nếu bạn muốn dùng nhiều khóa riêng tư, bạn có thể tạo một MultipleKeyring
bằng một địa chỉ và nhiều khóa riêng tư. Các ví dụ dưới đây cho thấy cách để tạo ra một MultipleKeyring
bằng nhiều khóa riêng tư.
String address = "0x{address in hex}";String[] privateKeyArray = new String[] {"0x{private key#1}", "0x{private key#2}", "0x{private key#3}"};MultipleKeyring multipleKeyring = caver.wallet.keyring.createWithMultipleKey(address, privateKeyArray);
Tạo một RoleBasedKeyring bằng các khóa riêng tư
Để sử dụng (các) khóa riêng tư khác nhau cho từng role
, caver.wallet.keyring.createWithRoleBasedKey
sẽ được dùng. Mỗi phần tử trong mảng tương ứng với một vai trò được mô tả trong RoleBasedKeyring
. Ví dụ dưới đây hướng dẫn cách tạo ra một đối tượng RoleBasedKeyring
cụ thể từ các khóa khác nhau cho từng vai trò.
String address = "0x{address in hex}";String[][] privateKeyArr = new String[][] { //roleTransactionKey { "0x{privateKey in hex}", "0x{privateKey in hex}", "0x{privateKey in hex}", }, //roleAccountUpdateKey { "0x{privateKey in hex}", "0x{privateKey in hex}", "0x{privateKey in hex}", }, //roleFeePayerKey { "0x{privateKey in hex}", "0x{privateKey in hex}", "0x{privateKey in hex}", },};RoleBasedKeyring keyring = caver.wallet.keyring.createWithRoleBasedKey(address, Arrays.asList(privateKeyArr));
Thêm các Keyring vào caver-java từ một chuỗi kho khóa json.
Bạn có thể sử dụng một keyring dễ dàng hơn bằng cách thêm nó vào ví trên bộ nhớ được caver-java cung cấp. Các ví dụ dưới đây minh họa cách để thêm một keyring vào caver.wallet
bằng một chuỗi tập tin kho khóa JASON lưu trữ khóa được tạo ra bởi Ví Klaytn.
Caver caver = new Caver(Caver.MAINNET_URL);String password = "password";String keyStoreJsonString = "{\n" + " \"version\": 4,\n" + " \"id\": \"9c12de05-0153-41c7-a8b7-849472eb5de7\",\n" + " \"address\": \"0xc02cec4d0346bf4124deeb55c5216a4138a40a8c\",\n" + " \"keyring\": [\n" + " {\n" + " \"ciphertext\": \"eacf496cea5e80eca291251b3743bf93cdbcf7072efc3a74efeaf518e2796b15\",\n" + " \"cipherparams\": {\n" + " \"iv\": \"d688a4319342e872cefcf51aef3ec2da\"\n" + " },\n" + " \"cipher\": \"aes-128-ctr\",\n" + " \"kdf\": \"scrypt\",\n" + " \"kdfparams\": {\n" + " \"dklen\": 32,\n" + " \"salt\": \"c3cee502c7157e0faa42386c6d666116ffcdf093c345166c502e23bc34e6ba40\",\n" + " \"n\": 4096,\n" + " \"r\": 8,\n" + " \"p\": 1\n" + " },\n" + " \"mac\": \"4b49574f3d3356fa0d04f73e07d5a2a6bbfdd185bedfa31f37f347bc98f2ef26\"\n" + " }\n" + " ]\n" + "}";SingleKeyring decrypt = (SingleKeyring)caver.wallet.keyring.decrypt(keyStoreJsonString, password);System.out.println("Decrypted address : " + decrypt.getAddress());System.out.println("Decrypted key : " + decrypt.getKey().getPrivateKey());SingleKeyring addedKeyring = (SingleKeyring)caver.wallet.add(decrypt);System.out.println("address : " + addedKeyring.getAddress());System.out.println("key : " + addedKeyring.getKey().getPrivateKey());
Decrypted address : 0xc02cec4d0346bf4124deeb55c5216a4138a40a8cDecrypted key : 0x93c90135ae69669e416ba5997d9274f8c8bd60748761fc421e415602d68a13a5address : 0xc02cec4d0346bf4124deeb55c5216a4138a40a8ckey : 0x93c90135ae69669e416ba5997d9274f8c8bd60748761fc421e415602d68a13a5
Nhìn vào kết quả đầu ra ở trên, bạn có thể truy vấn keyring của mình từ caver.wallet
sau khi thêm nó vào caver.wallet
.
Nếu bạn có một địa chỉ và (các) khóa riêng tư để dùng, bạn có thể dễ dàng tạo ra một keyring và trực tiếp thêm nó vào caver.wallet thông qua caver.wallet.newKeyring.
Caver caver = new Caver(Caver.MAINNET_URL);// Add to wallet with an address and a private keyAbstractKeyring addedSingleKeyring = caver.wallet.newKeyring("0x{address in hex}", "0x{private key1}");// Add to wallet with an address and private keysString[] privateKeyArr = new String[] { "0x{privateKey in hex}", "0x{privateKey in hex}", "0x{privateKey in hex}",};AbstractKeyring addedMultipleKeyring = caver.wallet.newKeyring('0x{address in hex}', privateKeyArr);// Add to wallet with an address and private keys defined by each rolesString[][] privateKeyArr = new String[][] { //roleTransactionKey { "0x{privateKey in hex}", "0x{privateKey in hex}", "0x{privateKey in hex}", }, //roleAccountUpdateKey { "0x{privateKey in hex}", "0x{privateKey in hex}", "0x{privateKey in hex}", }, //roleFeePayerKey { "0x{privateKey in hex}", "0x{privateKey in hex}", "0x{privateKey in hex}", },};AbstractKeyring addedRoleBased = caver.wallet.newKeyring('0x{address in hex}', Arrays.asList(privateKeyArr))
Khi caver.wallet.newKeyring
được thực thi với một khóa riêng tư, một đối tượng Keyring cụ thể với một khóa riêng tư sẽ được tạo ra và thêm vào caver.wallet
. Đối với nhiều khóa riêng tư, một đối tượng Keyring cụ thể với nhiều khóa riêng tư sẽ được tạo ra và thêm vào caver.wallet
. Khi dùng một mảng chuỗi 2D làm dữ liệu đầu vào, bao gồm một hoặc nhiều khóa riêng tư cho mỗi vai trò với tư cách là một phần tử, một đối tượng Keyring cụ thể có chứa (các) khóa riêng tư khác nhau cho từng vai trò sẽ được tạo ra, và cũng được thêm vào caver.wallet
.
caver.wallet.add
hoặc caver.wallet.newKeyring
trả về một đối tượng Keyring cụ thể sau khi đã thêm nó vào caver.wallet
.
Gửi giao dịch
Phần này sẽ hư ớng dẫn bạn các để gửi KLAY bằng caver-java trên mạng Baobab.
Nhận KLAY qua Vòi Baobab
Nếu bạn cần KLAY để thử nghiệm, bạn có thể nhận KLAY dùng trong mạng thử nghiệm Baobab từ Ví Klaytn. Hãy đăng nhập vào Ví Wallet bằng khóa riêng tư hoặc tập tin lưu trữ khóa, và nhận KLAY dùng cho mạng thử nghiệm Baobab qua vòi để thử nghiệm.
Gửi một giao dịch chuyển giá trị
Bạn có thể sử dụng ví caver-java để tạo chữ ký của giao dịch. Bạn sẽ phải thực hiện hai bước dưới đây để gửi giao dịch đến mạng lưới.
- Ký giao dịch
- Nếu keyring mà bạn muốn dùng đã được thêm vào
caver.wallet
, bạn có thể dùng hàmcaver.wallet.sign
để ký. - Nếu bạn quản ký keyring riêng biệt và không thêm nó vào
caver.wallet
, bạn có thể ký giao dịch thông qua hàmtransaction.sign
.
- Nếu keyring mà bạn muốn dùng đã được thêm vào
- Gửi chuỗi mã hóa RLP của giao dịch đã ký đến Klaytn qua
caver.rpc.klay.sendRawTransaction
.
Lưu ý: Người gửi phải có đủ lượng KLAY để chuyển và trả phí giao dịch.
Ký giao dịch
Trước khi gửi một giao dịch đến Klaytn, bạn phải ký giao dịch trước.
Dưới đây là ví dụ về cách ký một giao dịch trong trường hợp một keyring đã được thêm vào caver.wallet
.
Caver caver = new Caver(Caver.MAINNET_URL);// Add a keyring to caver.walletSingleKeyring keyring = caver.wallet.keyring.createFromPrivateKey("privateKey");caver.wallet.add(keyring);// Create a value transfer transactionValueTransfer valueTransfer = caver.transaction.valueTransfer.create( TxPropertyBuilder.valueTransfer() .setFrom(keyring.getAddress()) .setTo("0x176ff0344de49c04be577a3512b6991507647f72") .setValue(BigInteger.valueOf(1)) .setGas(BigInteger.valueOf(30000)));// Sign the transaction via caver.wallet.signcaver.wallet.sign(keyring.getAddress(), valueTransfer);String rlpEncoded = valueTransfer.getRLPEncoding();System.out.println("RLP-encoded string: " + rlpEncoded)
Mã trên thêm một keyring vào caver.wallet
, tạo ra một giao dịch và ký giao dịch đó qua caver.wallet.sign
.
Khi chạy mã trên, bạn sẽ nhận được kết quả sau. Khi mã trên đã được thực thi, chuỗi mã hóa RLP của giao dịch sẽ hiển thị dưới đây. (Kết quả chuỗi mã hóa RLP mà bạn nhận được có thể khác với kết quả chuỗi hiển thị dưới đây).
RLP-encoded string: 0x08f87e808505d21dba0082753094176ff0344de49c04be577a3512b6991507647f720194ade4883d092e2a972d70637ca7de9ab5166894a2f847f845824e44a0e1ec99789157e5cb6bc691935c204a23aaa3dc049efafca106992a5d5db2d179a0511c421d5e508fdb335b6048ca7aa84560a53a5881d531644ff178b6aa4c0a41
Gửi chuỗi mã hóa RLP của giao dịch đã ký đến Klaytn
Giờ bạn có thể gửi một giao dịch đã ký đến mạng lưới như dưới đây. Nếu bạn muốn chạy thử ví dụ dưới đây, hãy thay thế "rlpEncoding" bằng giá trị của rlpEncoded
trong mã bên trên.
public String sendRawTransaction() { Caver caver = new Caver(Caver.BAOBAB_URL); String rlpEncoding = "rlpEncoding"; String txHash = null; try { // Send the transaction using `caver.rpc.klay.sendRawTransaction`. Bytes32 sendResult = caver.rpc.klay.sendRawTransaction(rlpEncoding).send(); if(sendResult.hasError()) { //do something to handle error } txHash = sendResult.getResult(); } catch (IOException e) { // do something to handle exception } return txHash;}
Nếu bạn muốn ký một giao dịch và gửi nó đến mạng lưới mà không cần caver.wallet
, hãy xem ví dụ bên dưới.
Caver caver = new Caver(Caver.MAINNET_URL);// Add a keyring to caver.walletSingleKeyring keyring = caver.wallet.keyring.createFromPrivateKey("privateKey");caver.wallet.add(keyring);// Create a value transfer transactionValueTransfer valueTransfer = caver.transaction.valueTransfer.create( TxPropertyBuilder.valueTransfer() .setFrom(keyring.getAddress()) .setTo("0x176ff0344de49c04be577a3512b6991507647f72") .setValue(BigInteger.valueOf(1)) .setGas(BigInteger.valueOf(30000)));// Sign the transaction via transaction.signvalueTransfer.sign(keyring);String rlpEncoded = valueTransfer.getRLPEncoding();try { // Send the transaction using `caver.rpc.klay.sendRawTransaction`. Bytes32 sendResult = caver.rpc.klay.sendRawTransaction(rlpEncoded).send(); if(sendResult.hasError()) { //do something to handle error } String txHash = sendResult.getResult(); System.out.println("Transaction Hash : " + txHash);} catch (IOException e) { // do something to handle exception}
Khi mã trên được thực thi, hàm băm của giao dịch (txHash) được hiển thị ra màn hình như ví dụ dưới đây.
Transaction Hash : 0x43e8ab1a2365ad598448b4402c1cfce6a71b3a103fce3a69905613e50b978113
Kiểm tra biên lai
Bạn có thể dùng TransactionReceiptProcessor
để nhận biên lai của giao dịch khi chuyển giao dịch đó đến Klaytn bằng caver.rpc.klay.sendRawTransaction
.
Ví dụ dưới đây cho thấy cách để nhận biên lai bằng PollingTransactionReceiptProcessor.
Caver caver = new Caver(Caver.BAOBAB_URL);String txHash = "0x40552efbba23347d36f6f5aaba6b9aeb6602e004df62c1988d9b7b1f036e676a";//Sleep duration - 1000ms//Attempts count - 15TransactionReceiptProcessor receiptProcessor = new PollingTransactionReceiptProcessor(caver, 1000, 15);try { TransactionReceipt.TransactionReceiptData receiptData = receiptProcessor.waitForTransactionReceipt(txHash);} catch (IOException | TransactionException e) { // do something to handle error.}
Như mô tả trong ví dụ trên, bạn có thể nhận được kết quả của việc gửi giao dịch thông qua TransactionReceiptProcessor. Trường transactionHash
được xác định bên trong đối tượng biên lai.
Bạn có thể dùng phương pháp gọi RPC caver.rpc.klay.getTransactionReceipt
kèm theo chuỗi txHash
để truy vấn biên lai của một giao dịch vào bất kỳ lúc nào từ mạng lưới sau khi giao dịch đã được đưa vào một khối. Ví dụ dưới đây cho thấy cách để lấy biên lai bằng cách gọi RPC caver.rpc.klay.getTransactionReceipt
.
Caver caver = new Caver(Caver.BAOBAB_URL);String txHash = "0x40552efbba23347d36f6f5aaba6b9aeb6602e004df62c1988d9b7b1f036e676a";try { TransactionReceipt receipt = caver.rpc.klay.getTransactionReceipt(txHash).send(); if(receipt.hasError()) { // do something to handle error } TransactionReceipt.TransactionReceiptData receiptData = receipt.getResult();} catch (IOException e) { // do something to handle exception.}
Bạn có thể tìm thấy kết quả của giao dịch qua trạng thái
của biên lai. Để biết thêm chi tiết về các giá trị trả về, hãy xem caver.rpc.klay.getTransactionReceipt
. Nếu một giao dịch thất bại, bạn có thể kiểm tra thêm thông tin về lỗi tại txError
của biên lai. Để biết thêm thông tin về txError
, hãy xem txError: Thông tin chi tiết về các lỗi giao dịch.
Thực thi các loại giao dịch khác
Klaytn cung cấp nhiều loại giao dịch đa dạng để đẩy mạnh khả năng mở rộng và hiệu suất. Để biết thêm thông tin, hãy xem Giao dịch. Mục này mô tả một số ví dụ mà bạn có thể sử dụng với caver-java.