[Klaytn 사용기] Caver가 뭐야? - 2

Junho Bae·2020년 11월 13일
0

Caver가 뭐야?

목록 보기
1/1

지난 포스트에서 열심히 keyring을 만들어서 wallet에 추가했었죠..
이번에는 baobap network에서 caver-js를 사용해 KLAY를 보내는 방법을 살펴보겠습니다.

출처-Klaytn Docs


트랜잭션 전송

일단은 Baobab 테스트넷에서 테스트 클레이를 받아야겠죠? Klaytn Wallet에서 faucet을 통해 테스트넷 클레이를 받아봅시다.

트랜잭션을 보내기 위해서는 1.서명을 하고 2.네트워크에 전파해야 합니다. 두가지 단계가 다음과 같다고 합니다.

  1. 트랜잭션 서명

-만약 지금까지 했던 것 처럼 keyring이 caver.wallet에 추가가 되어 있다면, caver.wallet.sign function을 사용해 서명을 할 수 있습니다.

-만약 caver.wallet에 keyring을 추가하지 않고 따로 관리한다면, transaction.sign함수를 사용하여 서명합니다.

  1. RLP 인코딩된 서명된 트랜잭션을 caver.rpc.klay.sendRawTransaction을 통해 Klaytn에 전달합니다.

*RLP 인코딩? (Recursive Length Prefix) : 임의의 깊이와 개수로 중첩된 배열을 binary 데이터로 표현하는 인코딩 방식. 직렬화에 사용. 이더리움의 머클 패트리샤 트리 만드는데 사용되나 봅니다.
출처-슭의 개발 블로그

async function testFunction6() {
    // Add a keyring to caver.wallet
    const keyring = caver.wallet.keyring.createFromPrivateKey('private key')
    caver.wallet.add(keyring)

    // Create a value transfer transaction
    const valueTransfer = new caver.transaction.valueTransfer({
        from: keyring.address,
        to: '0x176ff0344de49c04be577a3512b6991507647f72',
        value: 1,
        gas: 30000,
    })

    // Sign the transaction via caver.wallet.sign
    await caver.wallet.sign(keyring.address, valueTransfer)

    const rlpEncoded = valueTransfer.getRLPEncoding()
    console.log(`RLP-encoded string: ${rlpEncoded}`)

    const receipt = await caver.rpc.klay.sendRawTransaction(rlpEncoded)
    console.log(receipt)
}

지금까지 했던 것과 마찬가지로, private key를 통해 keyring을 생성하고, caver.wallet.sign을 이용하여 sign을 합니다.

이후 나온 rlpEncoding을 추출해서 sendRawTransaction에 인자로 넣어준다면 transaction을 보낼 수 있습니다.

많이 보던 이런 transaction 결과가 나오는 군요.

klay scope에서도 transaction을 확인할 수 있습니다. 확실히 이더리움보다 처리가 빠르기는 한 것 같습니다.

wallet에 keyring을 추가하지 않고 사용하려면, keyring 생성을 한 후 wallet에 add 하지 않고 transaction에 한가지만 추가하
면 됩니다.

await valueTransfer.sign(keyring)
profile
SKKU Humanities & Computer Science

0개의 댓글