해당 포스트의 docker은 아래 출처에서 다운받아 사용하였습니다.
https://hub.docker.com/r/pjt3591oo/ethereum-geth
Docker Hub
hub.docker.com
"
이더리움 컨테이너 생성
"
$docker run -it --name ethereum.test p 8545 : 8645 -p 30303:30303 pjt3591oo/ethereum-geth:1.90 /bin/bash
ethereum.test라는 이름을 갖은 컨테이너를 생성합니다. docker에서 image는 프로그램을 의미하고, 컨테이너는 image를 통해 만들어진 실제 동작하는 프로세스를 의미합니다.
run명령어를 사용하여 컨테이너를 생성합니다. run 명령어는 기본적으로 다음과 같은 형식으로 쓰여집니다.
$docker run 이미지의 REPOSITORY:TAG |
REPOSITORY와 TAG는 다음 명령어를 치면 확인 할 수 있습니다.
$docker images |
명령어를 치면 아래와 같은 결과를 확인 할 수 있습니다.
run 명령어에서는 상황에 따라 다양한 옵션을 추가 할 수 있습니다.
-it는 해당 컨테이너에 접속해서 명령어를 사용해야할 경우 추가하는 옵션입니다. 우리는 컨테이너를 생성하여 명령어를 입력할것이기 때문에 해당 옵션을 추가하였습니다.
--name 은 컨테이너의 이름을정하는 옵션입니다. 우리는 ethrerum.test라는 이름을 붙여주겠습니다.
-p 는 포트 포워딩을 할 경우 사용합니다. 포트 포워딩이란 특정 포트로 들어온 트래픽을 다른 시스템의 포트로 트랙픽을 넘겨주는 행위 입니다. 우리는 호스트 OS로 window를 사용하고 있고 그 위에 게스트 OS로 ubuntu를 사용하고 있습니다. 즉, 게스트 OS인 ubuntu에 8454, 30303포트 번호로 들어온 요청(트래픽)을 컨테이너의 8454, 30303포트로 넘겨 주기위하여 위와 같은 옵션을 사용하였습니다.
/bin/bash는 컨테이너에서 /bin/bash를 실행시키라는 명령어입니다.
정상적으로 명령어를 입력하면 아래와 같이 계정@컨테이너ID:/#형태로 터미널의 형태가 변하게됩니다.
"
이더리움 block 살펴보기
"
제네시스 블록이란 최초의 블록을 의미합니다. 즉, 블록 번호가 0인 블록입니다. 이더스캔 사이트에 접속해 실제 이더리움 네크워크의 제네시스 블록에 대해 살펴보겠습니다.
위의 링크로 접속하면 아래와 같은 화면을 볼 수 있습니다. 어떤 정보들을 알 수 있는지 간단하게 살펴보게습니다.
Block Height : 블록의 높이입니다. 즉 몇번째 블록인지를 알려줍니다. genesis블록은 최초의 블록이므로 '0'인것을 볼 수 있습니다.
Timestamp : 해당 블록이 생성된 시간을 볼 수 있습니다.
Mined by: 블록을 생성한 지갑의 주소입니다. 제네니스 블록은 임의로 만들기 때문에 0x00000....으로 표기합니다. Mined by에 명시된 주소로 블록 보상을 받습니다.
Block Reward : 블록을 생성하고 얼마의 보상(eth)를 제공했는지를 나타냅니다. 블록 보상은 블록 개수에 따라 점점 줄어듭니다. (8290382번째 블록 약 2.1 Eth)
Difficulty : 채굴 난이도를 나타냅니다. 블록 생성 속도에 따라 조절됩니다.
Total Difficulty : 지금까지 생성된 모든 블록 Difficulty의 총합입니다.
Size : 해당 블록의 크기입니다. 블록의 사이즈 제한이 존재합니다.
Gas Used : 해당 블록에 포함된 트랜잭션의 Gas 사용량의 총합입니다.
Gas Limit : 해당 블록에 포함된 트랜잭션 Gas 한도의 총합입니다. Gas는 Gas Limit까지 소모할 수 있습니다.
Extra Data : 임으로 넣을 수 있는 데이터입니다. 해당 데이터는 블록을 생성하는 계정에서만 넣을 수 있고 넣는 방법이 어렵습니다.
"
genesis 블록 생성을 위한 계정 생성
"
아래와같이 디렉토리를 하나 만들어 줍니다.
$ mkdir node1 |
만든 디렉토리로 이동해줍니다.
$ cd node1 |
계정을 생성하기 위해 아래와 같은 명령어를 입력합니다. 계정을 생성하는 명령어는 다음과 같은 구조로 이루어집니다.
$ geth --datadir [경로] account new |
$geth --datadir $PWD account new
$PWD는 현재 디렉토리를 의미합니다. 즉 우리가 생성한 node1 디렉토리에 계정 정보가 담긴 파일 또는 디렉토리를 생성하게 됩니다.
위의 명령어를 치게되면 아래와 같이 비밀번호를 입력하라고 나옵니다. 비밀번호는 화면에 나타나지 않습니다. 비밀번호를 입력하면 계정이 생성되게 됩니다.
비밀번호를 입력하면 생성된 계정의 주소를 볼 수 있습니다. 또한 node1 디렉토리 안에 keystore파일이 생성됩니다. keystore 파일은 비밀번호와 함께 개인키를 만들어 주는 내용을 포함하고 있는 파일입니다.
"
genesis 블록 생성을 위한 genesis1.json파일 만들기
"
vi 편집기를 이용하여 genesis1.json 파일을 node1 디렉토리 안에 생성합니다.
입력코드는 다음과 같습니다.
{
"config": {
"chainId": 190128,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {
"주소": { "balance": "할당할 Eth" }
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x20000",
"extraData": "",
"gasLimit": "0x2fefd8",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
코드를 입력할때 아래 사진과 같이 붉은색 네모안에는 위에서 생성한 계정의 주소를 적어주고 , 할당할 Eth를 적어주어야합니다.
이더리움에서의 기본단위는 Wei입니다. 1ETH = 1*10^18이므로 5 이더를 할당하기위해 5뒤에 0을 18개 붙여주었습니다.
"
genesis 블록 생성
"
genesis블록을 생성하기 위해 genesis1.json 파일이 있는 디렉토리에서 아래와 같은 명령어를 입력해줍니다.
$ geth --datadir $PWD init genesis1.json
성공적으로 genesis블록이 생성된 경우 아래와 같은 콘솔창을 볼 수 있습니다.
"
genesis 블록 확인하기
"
$ geth --datadir $PWD --networkid 123 console
networkid는 프라이빗 네트워크를 실행시키기 위해 입력하는 명령어입니다. 1~4번까지는 메인네트워크와 테스트네트워크이므로 이를 제외한 아무값이나 넣어주도록 합니다.
console은 프라이빗 네트워크에 접속하여 이더리움을 조작하기위해 입력하는 명령어입니다. console을 입력하지 않으면 단지 이더리움 노드만 실행되게 됩니다.
정상적으로 노드가 실행되게 되면 콘솔의 모양이 아래와 같이 '>' 로 변하게 됩니다.
아래와 같은 명령어를 입력하여 블록갯수, 블록정보, 계정 확인, 계정잔액조회를 해보겠습니다.
블록갯수
eth.blockNumver
아직 genesis블록밖에 없으므로 블록의 갯수는 0 입니다.
블록정보 확인
eth.getBlock(블록번호)
위에서 살펴본 메인넷의 genesis블록의 정보와 거의 일치하는것을 볼 수 있습니다.
계정조회
eth.accounts
genesis블록을 생성하기 위한 계정 하나만을 생성했기때문에 계정조회시 1개의 계정 주소만 나오는것을 볼 수 있습니다.
계정 잔액 조회
eth.getBalance(지갑주소)
위에서 조회한 계정의 주소를 복사해서 붙여넣어도되고, eth.accounts[0]의 형태로 써주어도 됩니다.
위에서 genesis블록 생성을 위한 genesis1.json 파일에서 초기 Eth할당으로으로 5Eth를 할당하였으므로 5*10^18Wei 즉, 5Eth가 있는것을 확인 할 수 있습니다.
'Ethereum > Geth' 카테고리의 다른 글
Ethereum_(2)이더리움 Transaction (0) | 2019.11.07 |
---|
댓글