Caver는 자바스크립트(Javascript)로 개발된 caver-js와 자바(Java)로 개발된 caver-java 이 두가지로 제공되고 있습니다 (2020년 2월 기준).
caver-js
caver-js는 Caver 프로젝트의 자바스크립트 구현체입니다. caver-js는 구조와 사용이 web3.js에 유사하여 이더리움(Ethereum) 개발에 익숙하신 분들은 쉽게 사용하실 수 있을거에요. 다음 코드 예제는 0xYOUR_PRIVATE_KEY
에 매칭되는 주소에서 0xRECIPIENT_ADDRESS
로 1 KLAY를 전송하는 예제입니다.
const CaverJS = require('caver-js');
const caver = new CaverJS('https://api.baobab.klaytn.net:8651/');
const wallet = caver.klay.accounts.wallet;
const sender = wallet.add('0xYOUR_PRIVATE_KEY');
let tx = {
type: 'VALUE_TRANSFER',
from: sender.address,
to: '0xRECIPIENT_ADDRESS',
value: caver.utils.toPeb('1', 'KLAY'),
gas: 300000
};
(async () => {
await caver.klay.sendTransaction(tx)
.on('transactionHash', function(txhash) {
console.log('hash first: ', txhash);
})
.on('receipt', function(receipt) {
console.log('receipt later: ', receipt);
})
.on('error', function(err) {
console.error('not good');
});
})();
caver-js와 관련하여 더 자세한 사항은 여기에서 확인하세요.
caver-java
caver-java는 Caver의 자바 구현체입니다. 안드로이드 어플리케이션을 비롯한 자바를 사용하는 프로젝트에서 caver-java를 사용하시면 됩니다. 위 caver-js에서 보여드린 예제와 같은 1 KLAY를 전송하는 코드를 caver-java로 구현하면 다음과 같습니다:
package com.klaytn.example.caver;
/* omitted import statements for brevity */
public class ValueTransferExample {
private static final BigInteger GAS_LIMIT = BigInteger.valueOf(3000000L);
private static final BigInteger GAS_PRICE = BigInteger.valueOf(25000000000L);
private static final DefaultBlockParameter BLK_PARAM = DefaultBlockParameterName.LATEST;
private static final int CHAIN_ID = ChainId.BAOBAB_TESTNET;
private static Caver caver;
private static KlayCredentials sender;
@BeforeClass
public static void setup() {
caver = Caver.build("https://api.baobab.klaytn.net:8651/");
sender = KlayCredentials.create("0xYOUR_PRIVATE_KEY");
}
private KlayTransactionReceipt.TransactionReceipt transfer(KlayCredentials from, KlayCredentials to, BigInteger value) throws IOException {
BigInteger nonce = caver.klay().getTransactionCount(from.getAddress(), BLK_PARAM).send().getValue();
TxTypeValueTransfer tx = TxTypeValueTransfer.createTransaction(
nonce,
GAS_PRICE,
GAS_LIMIT,
to.getAddress(),
value,
from.getAddress()
);
TransactionManager manager = new TransactionManager.Builder(caver, from)
.setTransactionReceiptProcessor(new PollingTransactionReceiptProcessor(caver, 1000, 10))
.setChaindId(CHAIN_ID)
.build();
return manager.executeTransaction(tx);
}
@Test
public void VTTest() throws InvalidAlgorithmParameterException, NoSuchAlgorithmException, NoSuchProviderException, IOException {
BigInteger privKey = Keys.createEcKeyPair().getPrivateKey();
// newly created recipient credential
KlayCredentials recipient = KlayCredentials.create(privKey.toString(16));
KlayTransactionReceipt.TransactionReceipt receipt;
receipt = transfer(sender, recipient, Convert.toPeb("1", Convert.Unit.KLAY).toBigInteger());
Assert.assertNotNull(receipt);
}
}
caver-java와 관련하여 더 자세한 사항은 여기에서 확인하세요.
기타 언어 지원
Ground X는 다른 여러 언어로 Caver 프로젝트를 진행할 계획이며 커뮤니티의 활발한 참여를 기대합니다. 기존의 프로젝트에 기여하시거나 새로운 언어로 Caver 구현체를 만드시는 등 여러 방법으로 Caver와 클레이튼의 활성화에 함께 하세요!