Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Towards Ethereum Equivalence

kakao
PRO
December 09, 2022

Towards Ethereum Equivalence

#Klaytn #EthereumEquivalence

클레이튼은 이더리움을 포크(fork)하여 시작하였지만, 다양한 성능 및 기능 개선을 거치며 이더리움과 많이 달라지는 부분이 발생했습니다. 하지만 클레이튼은 이더리움 만큼 개발환경이 갖춰져 있지 않기 때문에 많은 개발자분들이 개발하는데 어려움을 겪으셨고, EVM은 동일한데 이더리움 툴을 그대로 쓰지 못하는 한계가 있었습니다. 클레이튼은 이 점을 극복하고자 이더리움 인터페이스를 그대로 지원하도록 개선하였으며, 그 개선 과정에서 겪었던 어려움과 해결책들을 이야기하고자 합니다.

발표자 : colin.klaytn
클레이튼 메인넷부터 개발에 참여했습니다. 더 많은 사람들이 클레이튼을 사랑하고, 사용성이 좋은 더 많은 응용프로그램들이 클레이튼 위에서 개발되기를 노력하며 여러가지 활동들을 하고 있습니다.

kakao
PRO

December 09, 2022
Tweet

More Decks by kakao

Other Decks in Programming

Transcript

  1. 김정현 colin.klaytn


    크러스트 유니버스
    Copyright 2022. Kakao Corp. All rights reserved. Redistribution or public display is not permitted without written permission from Kakao.
    Towards Ethereum Equivalence
    if(kakao)2022
    이더리움 동등성을 향해


    View Slide

  2. 발표자 소개
    - Junghyun (Colin) Kim


    - 삼성전자 (2016~2018)


    - 타이젠 개발환경 개선


    - 신경망 런타임 개발


    - 그라운드X (2018-2022)


    - 블록체인 코어 프로토콜 개발


    - Klaytn API Service 개발


    - 클립 드롭스, 크래프터스페이스 개발


    - 크러스트 유니버스 (2022~)


    - 블록체인 코어 프로토콜 개발

    View Slide

  3. 클레이튼 소개


    이더리움 동등성


    이더리움 동등성 확인해보기

    View Slide

  4. View Slide

  5. 클레이튼 생태계

    View Slide

  6. - 성능


    - 지연시간(Latency): 실제 실험으로 측정한 평균 2초의 트랜잭션 처리 능력


    - 처리량(Throughput): 실제 실험으로 측정한 4000 TPS


    - 기능


    - 플랫폼 레벨에서 지원되는 대납 기능


    - 플랫폼 레벨에서 지원되는 키 변경 기능
    클레이튼의 장점? - 기술 측면

    View Slide

  7. - Developed by Kakao


    - 안정적인 사업/개발 구조


    - 한국 시장 점유율


    - 성공한 Web2 회사가 한국 블록체인 산업에 진입할 때의 컨설팅
    클레이튼의 장점? - 사업 측면

    View Slide

  8. 트랜잭션 지연 시간 비교
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Klaytn
    Solana
    H
    arm
    ony
    BSC
    Avalanche
    Fantom
    Polygon
    H
    edera
    Elond
    Polkadot
    https:/
    /medium.com/klaytn
    -
    kr/메타버스에-적합한-블록체인은-d42b7a437616

    View Slide

  9. 트랜잭션 안정성 비교
    https:/
    /medium.com/klaytn
    -
    kr/메타버스에-적합한-블록체인은-d42b7a437616

    View Slide

  10. 낮은 지연시간과


    높은 안정성
    더 좋은 사용성 클레이튼의 사용성이


    가장 좋다!
    사용성

    View Slide

  11. 클레이튼 소개


    이더리움 동등성


    이더리움 동등성 확인해보기

    View Slide

  12. - 이더리움은 사실상 블록체인 응용프로그램을 위한 블록체인으로 자리잡음


    - 이더리움의 네트워크 효과는 갈수록 증대됨


    - 수많은 사용 사례들이 이더리움 위에서 만들어짐


    - 수많은 개발 툴들이 EVM과 호환되어 동작함


    - 다른 L1/L2 블록체인들도 이더리움(EVM) 호환성을 가져가려 노력함


    - 더 많은 사용자와 개발자와 혁신을 자신들의 생태계로 가져가기 위해


    - 이더리움 호환성에 대한 수요가 증대됨
    이더리움 호환성

    View Slide

  13. - EVM 호환성


    - 솔리디티로 컴파일된 바이너리가 EVM에서 동작할 수 있음


    - 이더리움 호환성


    - EVM 뿐만 아니라 API request/response까지 호환되어야 함


    - 이더리움 동등성


    - API request/response가 동일하여 이더리움 개발툴이 그대로 동작할 수 있어야 함


    - 응용 프로그램을 돌리는 차원에서 필요한 EIP 지원
    이더리움 동등성 (Equivalence)

    View Slide

  14. Klaytn 1.0: 이더리움 호환 체인
    - 이더리움 호환성보다 클레이튼 고유 기능에 더 집중함


    - 최신의 EVM 버전을 지원하지 않음


    - 몇몇 JSON
    -
    RPC API의 의미 및 request/
    response 포맷이 달라짐
    이더리움 앱/개발환경을


    클레이튼에 가져오기 어려워짐

    View Slide

  15. 다른 블록체인들의 EVM 지원
    - Cosmos와 Polkadot은 별도의 체인으로 EVM을 지원


    - NEAR와 Solana는 EVM 실행환경을 지원
    Basechain Project Name Type Tx fee token Token Use
    Cosmos Evmos EVM+chain EVMOS Securing Network
    Polkadot Moonbeam EVM+chain GLMR Securing Network
    NEAR Aurora EVM ETH Governance
    SOLANA Neon EVM NEON or any ERC-20 Governance
    https:/
    /doseofde
    fi
    .substack.com/p/evm
    -
    compatibility
    -
    and
    -
    the
    -
    future

    View Slide

  16. 클레이튼의 이더리움 동등성
    End
    -
    to
    -
    end Solutions for Domains (DeFi, NFT, Game, …)
    Ethereum Dev Tools Klaytn Dev Tools
    DApp
    Dev Env
    Blockchain


    Core EVM+
    Governance Reward
    Storage & Network
    Consensus
    JSON
    -
    RPC (klay_)
    JSON
    -
    RPC (eth_)

    View Slide

  17. 클레이튼의 이더리움 동등성 (계속)
    End
    -
    to
    -
    end Solutions for Domains (DeFi, NFT, Game, …)
    Ethereum Dev Tools Klaytn Dev Tools
    DApp
    Dev Env
    Blockchain


    Core EVM EVM+
    Governance Reward
    Storage & Network
    Consensus
    JSON
    -
    RPC (eth_) JSON
    -
    RPC (klay_)

    View Slide

  18. 최신 EVM


    호환성
    클레이튼


    기능 지원
    이더리움 API


    동등성
    클레이튼 이더리움 동등성
    클레이튼의 이더리움 동등성

    View Slide

  19. 최신 EVM 호환성
    Homestead
    Tangerine


    Whistle
    Spurious

    Dragon
    Byzantium
    Constantinople
    Petersburg
    London
    Berlin
    Istanbul

    View Slide

  20. 이더리움 API 동등성
    Blockchain


    Core EVM EVM+
    Governance Reward
    Storage & Network
    Consensus
    JSON
    -
    RPC (eth_) JSON
    -
    RPC (klay_)

    View Slide

  21. 클레이튼 기능 지원
    Blockchain


    Core EVM EVM+
    Governance Reward
    Storage & Network
    Consensus
    JSON
    -
    RPC (klay_)
    JSON
    -
    RPC (eth_)

    View Slide

  22. 최신 EVM


    호환성
    클레이튼


    기능 지원
    이더리움 API


    동등성
    클레이튼 이더리움 동등성
    클레이튼의 이더리움 동등성 (다시보기)

    View Slide

  23. 2022/03/31
    Klaytn v1.8.0 부터 이더리움 동등성이 제공

    View Slide

  24. 정말요?
    이더리움 개발툴을 쓸 수 있는지 확인해봅시다.

    View Slide

  25. 클레이튼 소개


    이더리움 동등성


    이더리움 동등성 확인해보기

    View Slide

  26. - 이더리움 API를 이용한 예제


    - Web3.js & Ethers.js


    - Truf
    fl
    e


    - Hardhat


    - 클레이튼 API를 이용한 예제


    - 클레이튼 고유 기능


    - caver
    -
    js


    - caver
    -
    java
    이더리움 동등성 확인해보기

    View Slide

  27. 이더리움 API를 이용한 예제

    View Slide

  28. - 이 Github Repo를 다운로드


    - https:/
    /github.com/Yeonju
    -
    Kim/klaytn
    -
    examples
    -
    ethereum
    -
    api


    - NPM 패키지 인스톨


    - .env 파일 설정


    - 아래처럼 실행


    web3.js & ethers.js
    $ npm install
    $ cp .env.template .env
    // web3.js


    $ node web3_sendTx.js


    // ethers.js


    $ node ethers_sendTx.js

    View Slide

  29. web3.js - rpcUrl만 변경 필요
    const web3 = new Web3(rpcUrl);


    const signer = web3.eth.accounts.privateKeyToAccount(privateKey);


    const address = signer.address;


    // Get balance


    const balance = await web3.eth.getBalance(address);


    // Get latest nonce


    const nonce = await web3.eth.getTransactionCount(address);


    const transaction = {


    to: address, value: 0, nonce: nonce, gas: 21000 }


    // Sign transaction


    const signedTx = await signer.signTransaction(transaction);


    // Send signed transaction


    await web3.eth.sendSignedTransaction(signedTx.rawTransaction);


    View Slide

  30. ethers.js - rpcUrl만 변경 필요
    const HTTPSProvider = new ethers.providers.JsonRpcProvider(rpcUrl)


    const wallet = new ethers.Wallet(privateKey)


    const address = wallet.address


    // Get Balance


    const balance = await HTTPSProvider.getBalance(address)


    // Get latest nonce


    const nonce = await HTTPSProvider.getTransactionCount(address)


    // Get Chain ID


    const { chainId } = await HTTPSProvider.getNetwork()


    // Get Gas Price


    const gasPrice = await HTTPSProvider.getGasPrice();


    // Sign Transaction


    const transaction = {


    chainId: chainId, to: address, value: 0,


    nonce: nonce, gasPrice: gasPrice, gasLimit: 21000 }


    const signedTx = await wallet.signTransaction(transaction);


    // Send Signed Transaction


    const response = await (await HTTPSProvider.sendTransaction(signedTx)).wait();

    View Slide

  31. - Truf
    fl
    e 설치


    - 예제 다운로드


    - 클레이튼 지갑 provider 설치


    Truf
    fl
    e
    $ nvm use 12 # node v12 or higher


    $ npm install -g truffle
    $ truffle unbox sgerogia/hello_truffle_box
    $ npm install [email protected]

    View Slide

  32. - klaytn
    -
    online
    -
    toolkit을 이용하여 Private Key 생성
    Truf
    fl
    e

    View Slide

  33. - Faucet에서 TestKLAY 받기


    - https:/
    /baobab.wallet.klaytn.foundation/faucet
    Truf
    fl
    e

    View Slide

  34. Truf
    fl
    e
    // truffle-config.js


    const HDWalletProvider = require("truffle-hdwallet-provider-klaytn");


    const privateKey = "0x123 ...";


    module.exports = {


    networks: {


    ...


    baobab: {


    provider: () => {


    return new HDWalletProvider(privateKey, "https://api.baobab.klaytn.net:8651");


    },


    network_id: "1001", //Klaytn baobab testnet's network id


    gas: "8500000",


    gasPrice: null,


    },


    ...


    }


    }


    View Slide

  35. - 컨트랙트 배포
    Truf
    fl
    e
    $ truffle deploy --network baobab

    View Slide

  36. - Hardhat 설치
    Hardhat
    $ npm install --save-dev hardhat && npx hardhat

    View Slide

  37. Hardhat
    // hardhat.config.js


    require("@nomicfoundation/hardhat-toolbox");


    const privateKey = "0x123...";


    /** @type import('hardhat/config').HardhatUserConfig */


    module.exports = {


    solidity: "0.8.9",


    networks: {


    goerli: {


    url: "https://goerli.prylabs.net",


    accounts: [privateKey],


    },


    baobab: {


    url: "https://api.baobab.klaytn.net:8651",


    accounts: [privateKey],


    }


    }


    };


    View Slide

  38. - 컨트랙트 배포
    Hardhat
    $ npx hardhat --network baobab run scripts/deploy.js

    View Slide

  39. 클레이튼 API를 이용한 예제

    View Slide

  40. - 플랫폼 레벨의 대납기능 (Klaytn Docs)


    - https:/
    /ko.docs.klaytn.foundation/dapp/sdk/caver
    -
    js/getting
    -
    started#fee
    -
    delegation


    - https:/
    /ko.docs.klaytn.foundation/dapp/sdk/caver
    -
    java/getting
    -
    started#fee
    -
    delegation


    - 키와 주소의 분리 (Klaytn Docs)


    - https:/
    /github.com/klaytn/caver
    -
    js
    -
    examples/tree/master/account


    - https:/
    /github.com/klaytn/caver
    -
    java
    -
    examples/tree/master/account


    - 예제 Github Repo


    - https:/
    /github.com/klaytn/caver
    -
    js
    -
    examples


    - https:/
    /github.com/klaytn/caver
    -
    java
    -
    examples
    클레이튼 고유기능

    View Slide

  41. 클레이튼에 대해 더 잘 알고 싶다면? 크러스트 유니버스는 지금 채용 중!

    View Slide