Caver(클레이튼 SDK)가 지원하는 언어

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와 클레이튼의 활성화에 함께 하세요!

1 Like