Preloader image
DDD

블럭체인

이더리움 시작하기 - Geth

작성자 관리자 (admin)
조회수 13,076
입력일 2018-11-26 17:49:04

이더리움 시작하기

http://www.etherstudy.net/documents/geth.pdf

6 MONTHS AGO7 MINUTES READ (ABOUT 1019 WORDS)

블록체인이란?

블록체인이란 수정 불가능한 분산형 원장을 의미하며, 특정 정보의 목록이 다수의 컴퓨터에 동시에 저장되고 수정될 수 있는 시스템을 의미합니다.
기존의 시스템은 단일 서버에 모든 정보가 저장되기 때문에 서비스 사용자들이 정보를 알 수 없고, 기업이나 혹은 악한 의도를 가진 사용자에 의해 플랫폼이 훼손될 수 있어 안전하지 못했다면, 블록체인은 수정이 불가능하기 때문에 신뢰할 수 있는 특징이 있습니다.

이러한 블록체인은 반드시 BFT를 가져야 하는데

기본 개념

이더리움에서의 기본 단위는 account 이며 이러한 account는 다음과 같이 두 종류로 나뉘게 됩니다.

  1. EOA(External Owned Account)
  2. Countract Account

여기서 EOA란 계정정보를 포함한 계약을 의미하며 외부 사용자가 private key 를 통해 제어합니다.
이러한 EOA 는 Contract Account의 내부 함수들을 사용할 수 있으며 Contract Account의 내부 함수들은 오직 EOA에 의해서만 호출될 수 있습니다.

Install ethereum command line interface (Ethereum CLI)

  1. 윈도우 go-ethereum(geth) 다운로드
    다운로드

  2. geth 실행

    1

    geth console

테스트 네트워크 구축하기

  1. genesis.json 생성하기

    {
      "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
      },
      "difficulty": "20",
      "gasLimit": "2100000",
      "alloc": {
      "7df9a875a174b3bc565e6424a0050ebc1b2d1d82":
          { "balance": "300000" },
      "f41c74c9ae680c1aa78f42e5647a62f353b7bdde":
          { "balance": "400000" }
      }
    }
     
  2. 블록체인 초기화 하기

    1

    geth init genesis.json --datadir ethereum_private

  3. geth console 로 geth 노드 열기

    1

    geth --networkid 123 --datadir ethereum_private console

  4. account 만들기

    1

    personal.newAccount("testuser1")

  5. mining 시작하기

    1

    miner.start()

  6. 자신이 위치한 노드 확인하기

    1

    admin.nodeInfo.enode

  7. 다른 노드 연결하기
    위에서 받은 nodeurl을 받아 다른 클라이언트에서 다음 명령어를 실행한다.

    1

    admin.addPeer("_nodeurl_")

이를 통해 노드와 노드가 연결될 수 있다.

  1. 다른 클라이언트들의 로그 확인

    1

    geth console 2>>geth.log

참조 블로그

이더리움 공식 가이드

geth 명령어

geth 가동

1 2 3

geth --datadir ~/.ethereum_private init ~/dev/genesis.json geth --fast --cache 512 --ipcpath ~/Library/Ethereum/geth.ipc --networkid 1234 --datadir ~/.ethereum_private console

계좌 생성

1 2

personal.newAccount("testuser1") personal.newAccount("testuser2")

 

계좌 확인

1

eth.accounts

 

잔고 확인

1

eth.getBalance(eth.accounts[0])

 

블록 수 확인

1

eth.blockNumber

 

채굴 시작하기

1

miner.start()

 

채굴 정지

1

miner.stop()

 

트랜잭션 발행

 

eth.sendTransaction({from: 'id', to:'id', value:web3.toWei(1,"ether")})
please unlocak account id

or

eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1,"ether")})

트랜잭션 발행하는 계좌의 암호를 입력

 

geth 기동

1 2

mkdir eth_data geth --networkid "123" --rpc --rpcaddr "222.239.251.75" --rpcport 8545 --rpccorsdomain "*" --rpcapi "net,eth,web3,personal" --datadir "eth_data" --olympic console

 

기본 원리

proof of work -> 어려운 문제를 푼 사람이 토큰을 가져간다.
풀기는 어렵지만 증명은 쉬운 해쉬를 사용한다.

컴퓨터는 nonce에 무작위값을 계속 대입하여 해쉬를 풀고 이를 mining 이라고 한다.
mine이 된 이후에는 점점 난이도가 올라간다.

이더리움의 활용

이더리움은 개인과 개인간의 약속에 기반한 모든 경제적 모델을 온라인 상에서 도입하는 것을 매우 간편하게 만들어 준다.
가령 국가가 특정 공약을 내세우고 이를 위한 자금을 이더리움에서 모금한다고 하면, 해당 공약이 이루어지지 않을 경우 스마트 계약에 따라 참여자에게 돈이 재분배 되게 되는 방식을 사용하는 예처럼 스스로에게 약속 불이행시 제약을 둠으로써 신뢰도 높은 거래를 할 수 있다.

즉, 이더리움은 실제 경제모델과 정치모델을 모두 온라인 상에서 신뢰도있게 구현이 가능하다는 측면에서 그 가치가 높다.