4 분 소요


Ethereum

Ethereum 이란 무엇인가

이더리움과 비트코인 ( 1세대 블록체인 ) 차이점

  • 암호 해시함수
    • 1세대는 SHA 계열의 해시함수를 사용
    • 이더리움은 ASIC 저항성을 향상하고 채굴의 중앙화 해소를 위해 Ethash 라는 KECCACK 기반의 해시 알고리즘을 개발하여 사용
  • MPT ( Modified Merkle Patricia Trie )
  • 암호화폐의 관리 기술에 관한 차이
    • 비트코인은 ‘소비되지 않은 거래 출력 ( 잔액 )’ , 즉 UTXO ( Unspent Transaction Output )를 기반으로 한다. 즉 암호화폐 중심 으로 관리
    • 이더리움은 ‘사용자 계정’ 에 기반하여 암호화폐를 관리한다. 즉 사용자 중심 으로 관리

이더리움 클라이언트 종류

  • geth ( 81.1% )
  • openethereum
  • parity-ethereum
  • nethermind
  • coregeth
  • besu
  • parity

이더리움 블록체인 네트워크 분류

Public Network 퍼블릭 네트워크


  • 메인넷
    • 거래소에 있는 이더리움
    • 실제 스마트 컨트랙트를 접할 수 있는
  • 테스트넷
    • 메인넷에 하기 전에 이더리움을 경험해볼 수 있는 네트워크
    • 롭슨 (Ropsten), 코반 (Kovan), 링키비 (Rinkeby), 고얼리 (Roerli)

Private Network 프라이빗 네트워크

  • Test용, 실습용
  • 실제로 이더가 왔다갔다 하지만 메인넷처럼 Valuable 한 이더를 교환하는 것이 아닌 개인적으로 마음껏 이더를 채굴하고 스마트 컨트랙트를 배포할 수있고 이더를 거래할 수 있는 환경이다.
  • 진정한 의미의 블록체인 X

이더리움 네트워크 개념도


  • 이더리움 네트워크는 많은 노드로 구성되어져있다. ( 로컬PC는 노드1개 )
  • 노드들은 수많은 이더리움에 들어있는 데이터들을 다 동기화해서 똑같이 가지고 있다.
  • 블록의 형태로 가지고 있다.
  • 이 노드들을 활용해서 이더리움 네트워크를 활용할 수 있다.
  • 네트워크에 참여하기 위해서는 이더리움 클라이언트가 필요하다.
  • geth라는 클라이언트를 사용한다.

환경 설정

  • Chocolatey 설치

    • 윈도우 소프트웨어를 위한 머신 수준의 명령 줄 패키지 관리자 이자 인스톨러이다.
    • 참고 링크 : https://chocolatey.org/install
    • Powershell에 설치 명령 ( 관리자로 실행 )


    • 사전 필요 요소 설치
    # git
    > choco install git -y
    # go language -> geth가 go language로 되어있다 -> git에서 go 다운 받아 이용하기 때문
    > choco install golang -y
    > choco install mingw -y
    
  • Geth 설치 ( Go Ethereum)

    • cmd 창에서 설치
    # 디렉토리 생성
    > mkdir src\github.com\ethereum
    # git clone ( go ethereum source code )
    > git clone https://github.com/ethereum/go-ethereum --branch v1.9.24 src\github.com\ethereum\go-ethereum
    # 디렉토리로 이동
    > cd src\github.com\ethereum\go-ethereum
    # compile 작업
    > go get -u -v golang.org/x/net/context
    # install 작업
    > go install -v ./cmd/...
    
    # 설치 확인 ( cmd 창을 닫았다가 다시 실행 )
    > geth version
    # 1.9.24-stable 버전 확인
    
  • ganache 설치

    • ganache ( 가나슈 )
      • 이더리움 개발 툴
      • 로컬PC내에 이더리움 블록체인 가상 네트워크를 생성
      • 스마트 계약 트랜젝션 송신 가능
      • MetaMask 지갑으로 송금가능
      • Ganache와 MetaMask 연동으로 이더리움 블록체인 개발 가능
    • node.js 설치

      • powershell 에서 설치
      > choco install nodejs-lts
      
    • ganache-cli 설치

      • cmd 에서 설치
      > npm install -g ganache-cli
      
      • cmd 에서 설치 확인
      > ganache-cli --version
      
  • MetaMask 설치 지갑 프로그램

    • 설치 링크 : MetaMask
    • 크롬 확장 프로그램으로 설치
      1. 지갑 생성하기
      2. 동의
      3. 비밀번호 등록
      4. 이더리움 지갑 생성 완료

이더리움 계정

  1. 개인키 생성: 256bit의 무작위 숫자 -> 64자리 Hex 값으로 인코딩
  2. 타원곡선전자서명 알고리즘(ECDSA, secp256k1)을 사용하여 공개키 생성
  3. Keccak-256 hashing
  4. 마지막 20Byte가 계정 주소

이더리움 지갑 생성 과정

로컬 네트워크 활용 및 실습

  • 가나슈 구동

    • 직접 이더리움 네트워크에 연결하면 복잡하다.
    • 이더리움 네트워크에 연결한 것 처럼 로컬 PC에서 경험할 수 있음.
    • cmd창에 geth가 다운받아진 디렉토리에 가서
    > ganache-cli -d -m -p 7545 -a 5
    # -d -m ( --deterministic --mnemonic ) HD Wallet 생성 시 니모닉 구문 사용
    # -p ( --port ) 포트 지정 ( default : 8545 )
    # -a ( --account ) 구동 시 생성할 계정 수 ( default 10 )
    
    # 명령어 옵션 확인
    > ganache-cli --help
    
    • 가나슈 구동 화면


  • Geth로 네트워크 접속

    • 구조


    • Geth 명령어로 가나슈 테스트넷에 접속 ( 새 cmd )

    > geth attach http://localhost:7545
    
  • 네트워크 기본 사항 확인

    • cmd 창

    • 연결성 확인 Connectivity Check

    # listening 상태인지
    > net.listening
    # peer가 얼마나 있는지 -> local은 없다
    > net.peerCount
    
    • 계정 목록 확인
    # 계정 정보 리스트로
    > eth.accounts
    
    • 계정 보유 잔액 확인
      > web3.fromWei(eth.getBalance(eth.accounts[0]))
      
  • MetaMask로 네트워크 접속

    • 사용자 정의 RPC > 네트워크 추가
    • 네트워크 이름 : Localhost 7545
    • 새로운 RPC URL : http://localhost:7545
    • chainId : geth console에서 chainId 확인
    > eth.chainId()
    "0x539"
    
  • MetaMask 계정으로 이더 전송

    • geth console로 이동 ( cmd )
    # 1 Ether = 10^18 Wei
    > tx = { from : "가나슈_제공_계정_중_하나" , to : "메타마스크_계정", value : 1e18}
    # 전송
    > eth.sendTransaction(tx)
    
    • MetaMask를 확인하면 1 이더가 전송된 것을 볼 수 있다.
  • Transaction 정보 확인

    > eth.getTransaction("hash")
    
  • from 주소 잔액 확인

    > eth.getBalance(eth.accounts[0])
    98999580000000000000
    # gas 값 때문에 딱 안 떨어진다
    
    • 잔액 : 98.99958 Ether
    • total gas : 420000GWei ( 21000 * 20GWei ) = 0.00042 Ether
    • ( value + 소요 가스 ) 만큼 차감
  • 단위 환산

    > web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
    98.99958
    
  • Text ( Data ) 같이 첨부하기

    # 1 이더를 "hello" 라는 메세지와 함께 보내기
    > eth.sendTransaction({from:"가나슈_제공_계정_중_하나", to:"메타마스크_계정", value:web3.toWei(1,"ether"),data:web3.toHex("hello")})