본문 바로가기

IT/블록체인 Blockchain

[Ethereum] 이더리움 사설 네트워크 구성, 어카운트 생성 및 Ether 할당

반응형


안녕하세요?

지난 번 포스팅을 작성하고 몇 개월의 시간이 흘러서, geth도 업데이트가 되어서 사설 네트워크 구성 방법이 약간 변경되었습니다.

기존에는 --genesis 옵션으로 genesis block생성이 가능했는데, 이것이 init 명령어로 대치 되었네요.

그래서 이번 포스팅에서는 다시 사설 네트워크 구성에서부터 어카운트 생성, ether 할당까지 설명해 보겠습니다.

 

먼저, Ubuntu linux에 etherum package를 설치했다고 가정하고 (아직 안 하셨으면 이전 포스팅을 참조하시기 바랍니다) 사설 네트워크에서 사용할 블록체인을 생성하겠습니다.

블록체인의 첫 번째 블록인 genesis block을 생성하는데요, 생성될 genesis block에 대한 정보를 json파일 형식으로 아래처럼 정의해 줍니다.


1
2
3
4
5
6
7
8
9
10
11
{
  "nonce""0x0000000000000076",
  "timestamp""0x0",
  "parentHash""0x0000000000000000000000000000000000000000000000000000000000000000",
  "extraData""0x0",
  "gasLimit""0x8000000",
  "difficulty""0x40",
  "mixhash""0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase""0x3333333333333333333333333333333333333333",
  "alloc": {}
}
cs



여기서 주의깊게 볼 부분은 "difficulty" 와 "alloc" 입니다.

difficulty는 추후 마이닝을 할 때 난이도를 설정합니다. (비트코인과 동일하게, 블록을 생성하기 위해서는 마이닝 작업이 필요하죠) 작은 값으로 해 주는것이 마이닝 시간을 단축할 수 있습니다. 마이닝에 대해서는 다음 포스팅에서 자세히 설명하도록 하겠습니다.

alloc은 특정 어카운트에 ether (Etherum에서 사용하는 cryptocurrency입니다. 비트코인 네트워크에서 사용하는 비트코인과 동일한 개념이죠) 를 미리 할당해 줄 수 있습니다. 지금 비워둔 이유는 아직 어카운트 생성을 하지 않았기 때문이죠.

 

저는 위 파일을 CustomGenesis.json 이라는 이름으로 /home/dh/ 밑에 저장했습니다.

그리고 아래와 같은 명령을 실행 합니다.

 

 geth --datadir "/home/dh/private_ether" init /home/dh/CustomGenesis.json


여기서 datadir 은 블록체인 및 어카운트 파일 등이 저장될 위치입니다. 이 디렉토리위치가 해당 블록체인의 루트 디렉토리라고 생각하면 되겠네요. 사용자분들의 환경에 따라 설정해 주시기 바랍니다.

 

여기까지 하면 CustomGenesis.json 설정에 따라서 datadir 밑에 블록체인이 생성됩니다.

그 다음은 어카운트를 생성해 보겠습니다.

해당 datadir에 geth console을 실행합니다.

 

 

그러면 geth console모드로 들어갑니다. 아래 화면처럼 보이면 정상적으로 접속 된 것입니다.

 

콘솔에서 어카운트를 생성하는 명령어는 간단합니다.

 

 

명령어를 입력하고, 패스워드를 2번 입력해 주면 약간의 시간이 흐른 후 어카운트가 생성됩니다.

생성된 어카운트는 40자리의 알파벳/숫자로 구성되어 있습니다.

저는 테스트를 위해 어카운트 2개를 생성해 보았습니다.

 

 

이제 어카운트도 생성이 되었으니 Ether를 할당해 줄 차례입니다.

Ether를 할당해 주기 위해서는 CustomGenesis.json 파일을 수정하고, genesis block을 다시 생성해야 합니다.

먼저 CustomGenesis.json 파일의 alloc항목을 아래처럼 수정하고 저장합니다. (어카운트는 본인의 시스템에 생성된 어카운트로 수정해서 저장하는것, 다 아시죠?)

 

 

그리고 조금 전 생성된 어카운트 키 (key) 가 저장되어 있는 디렉토리인 keystore를 제외한 다른 디렉토리를 모두 삭제합니다.

데이터디렉토리 내의 history 파일, geth 디렉토리를 삭제합니다.

 

 

그리고 다시 위에서 실행한 것과 동일하게 genesis block을 다시 생성합니다.

 

 

그리고 콘솔로 접속해서 어카운트 밸런스를 확인해 보면, Ether가 각 어카운트에 할당되어 있는 것이 보입니다.

 

 

이번 포스팅은 여기까지입니다.

다음 포스팅에서는 어카운트 간 Ether transfer (트랜잭션) 실행, 트랜잭션 내용을 블록에 저장하는 작업 (마이닝) 을 해 보겠습니다.

 

반응형
  • kbk 2017.09.07 14:02

    좋은 자료 남겨주셔서 감사합니다.
    CumstomGenesis.json 파일을 생성하고
    geth --datadir "/home/kbk/private_ether" init /home/kbk/CustomGenesis.json 을 명령하면
    다음과 같은 오류 메세지가
    WARN No etherbase set and no accounts found as default
    INFO Allocated cache and file handles
    database = /home/kbk/private_ether/geth/chaindata
    cache = 16 handles = 16
    Fatal : Failed to write genesis block: genesis has no chain configuration
    나와서
    json 파일 내에 config 데이터를 입력해주었더니 에러가 사라졌네요~
    참고
    https://github.com/ethereum/go-ethereum/issues/14352

    • 상크스 2017.09.08 16:26 신고

      geth도 굉장히 자주 업데이트 되기 때문에 어제 되던 것이 오늘 안되는 경우가 많은 것 같습니다. 아마도 버전의 업데이트 때문인 것 같고요, 좋은 정보 알려주셔서 감사합니다~

  • kbk 2017.09.26 10:39

    안녕하세요~혹시
    로컬 테스트 말고 두 노드간 이더 트랜스퍼 하는 자료 아시는 분 계신가요.
    전 지금 두 개의 가상머신을 만들어서 노드 정보와 아이피,포트를 통해 addPeer를 맺어서
    로컬처럼 두 노드간 이더 트랜스퍼 하는것을 하려고 하는데 핑테스트,포트개방확인을 했지만 addPeer가 잘 되지 않네요..
    제네시스 블록이 동일해야 한다고 하는데 이것 역시 이해가 잘 되지 않아서
    진행이 어려워 지고 있어요.
    참고 : https://ethereum.stackexchange.com/questions/18291/how-do-i-connect-two-peers-on-different-machines-in-a-private-network?rq=1

  • 메로니 2018.11.16 16:47

    안녕하세요~ 글잘봤습니다 ㅎㅎ 계좌를 2개 설치했다는 것은 노드를 2개 설치했다는것과 같은 의미로 해석할 수 있을까요??

    • 상크스 2018.11.16 17:05 신고

      어카운트와 노드는 다른 개념입니다. 노드는 블록체인 네트워크를 구성하는 peer이고, 어카운트는 블록체인 속에 존재하는 하나의 주소라고 할 수 있겠네요.

  • 메로니 2018.11.18 13:41

    답변 감사합니다 ㅎㅎ 그렇다면 하나의 사설 네트워크에 노드를 여러개는 어떻게 생성할 수 있을까요?? virtual box 여러개 켜서 생성된 사설 네트워크에 서로 연결해야 되나요??

    • 상크스 2018.11.19 23:36 신고

      예, 저도 사설 네트워크에서 노드를 여러 개 연결해 보지는 못했지만 말씀하신 방법으로 가능할 것 같네요. 다만 각 노드들이 공통적인 블록체인을 가지도록 잘 세팅해 주셔야 할것 같습니다..