본문 바로가기

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 (트랜잭션) 실행, 트랜잭션 내용을 블록에 저장하는 작업 (마이닝) 을 해 보겠습니다.

 

반응형