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

Towards Ethereum Equivalence

kakao
December 09, 2022

Towards Ethereum Equivalence

#Klaytn #EthereumEquivalence

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

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

kakao

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 이더리움 동등성을 향해
  2. 발표자 소개 - Junghyun (Colin) Kim - 삼성전자 (2016~2018) -

    타이젠 개발환경 개선 - 신경망 런타임 개발 - 그라운드X (2018-2022) - 블록체인 코어 프로토콜 개발 - Klaytn API Service 개발 - 클립 드롭스, 크래프터스페이스 개발 - 크러스트 유니버스 (2022~) - 블록체인 코어 프로토콜 개발
  3. - 성능 - 지연시간(Latency): 실제 실험으로 측정한 평균 2초의 트랜잭션

    처리 능력 - 처리량(Throughput): 실제 실험으로 측정한 4000 TPS - 기능 - 플랫폼 레벨에서 지원되는 대납 기능 - 플랫폼 레벨에서 지원되는 키 변경 기능 클레이튼의 장점? - 기술 측면
  4. - Developed by Kakao - 안정적인 사업/개발 구조 - 한국

    시장 점유율 - 성공한 Web2 회사가 한국 블록체인 산업에 진입할 때의 컨설팅 클레이튼의 장점? - 사업 측면
  5. 트랜잭션 지연 시간 비교 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
  6. - 이더리움은 사실상 블록체인 응용프로그램을 위한 블록체인으로 자리잡음 - 이더리움의

    네트워크 효과는 갈수록 증대됨 - 수많은 사용 사례들이 이더리움 위에서 만들어짐 - 수많은 개발 툴들이 EVM과 호환되어 동작함 - 다른 L1/L2 블록체인들도 이더리움(EVM) 호환성을 가져가려 노력함 - 더 많은 사용자와 개발자와 혁신을 자신들의 생태계로 가져가기 위해 - 이더리움 호환성에 대한 수요가 증대됨 이더리움 호환성
  7. - EVM 호환성 - 솔리디티로 컴파일된 바이너리가 EVM에서 동작할 수

    있음 - 이더리움 호환성 - EVM 뿐만 아니라 API request/response까지 호환되어야 함 - 이더리움 동등성 - API request/response가 동일하여 이더리움 개발툴이 그대로 동작할 수 있어야 함 - 응용 프로그램을 돌리는 차원에서 필요한 EIP 지원 이더리움 동등성 (Equivalence)
  8. Klaytn 1.0: 이더리움 호환 체인 - 이더리움 호환성보다 클레이튼 고유

    기능에 더 집중함 - 최신의 EVM 버전을 지원하지 않음 - 몇몇 JSON - RPC API의 의미 및 request/ response 포맷이 달라짐 이더리움 앱/개발환경을 클레이튼에 가져오기 어려워짐
  9. 다른 블록체인들의 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
  10. 클레이튼의 이더리움 동등성 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_)
  11. 클레이튼의 이더리움 동등성 (계속) 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_)
  12. 최신 EVM 호환성 클레이튼 기능 지원 이더리움 API 동등성 클레이튼

    이더리움 동등성 클레이튼의 이더리움 동등성
  13. 이더리움 API 동등성 Blockchain Core EVM EVM+ Governance Reward Storage

    & Network Consensus JSON - RPC (eth_) JSON - RPC (klay_)
  14. 클레이튼 기능 지원 Blockchain Core EVM EVM+ Governance Reward Storage

    & Network Consensus JSON - RPC (klay_) JSON - RPC (eth_)
  15. 최신 EVM 호환성 클레이튼 기능 지원 이더리움 API 동등성 클레이튼

    이더리움 동등성 클레이튼의 이더리움 동등성 (다시보기)
  16. - 이더리움 API를 이용한 예제 - Web3.js & Ethers.js -

    Truf fl e - Hardhat - 클레이튼 API를 이용한 예제 - 클레이튼 고유 기능 - caver - js - caver - java 이더리움 동등성 확인해보기
  17. - 이 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
  18. 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);
  19. 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();
  20. - 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]
  21. 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, }, ... } }
  22. 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], } } };
  23. - 플랫폼 레벨의 대납기능 (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 클레이튼 고유기능