본문 바로가기

백앤드/BlockChain

[ETHEREUM Smart Contract] 이더리움 스마트 컨트랙트 #2 - 계좌 생성 및 채굴(마이닝)

반응형

 

이 글은 최근 2022년 4월 4일 이더리움의 Geth 업데이트로 인한

실행 명령어가 바뀐 부분에 대하여 업데이트 된 포스팅입니다.

 

툴설치 1편을 올린지 벌써 3개월이 지나버렸습니다.

이런 저런 핑계를 말할 수 도 있겠지만, 뭐... 솔직히 귀찮은게 제일 컸습니다.

그래도 흐름 끊기지 않고 이어서 한번 작성해보도록 하겠습니다.

 

이번 포스팅에서는 설치한 이더리움을 프라이빗 네트워크(PrivateNetwork)로 구축하고

구축된 네트워크에서 계좌를 생성해서 채굴(마이닝/Mining)까지하는 과정을 작성해보려 합니다.

 

그럼 하나씩 따라해보도록 하겠습니다! 고고!

 

# 1. genesis.json 만들기

{
    "config": {
        "chainId": 997,
        "homesteadBlock": 0,
        "eip150Block": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock": 0,
        "constantinopleBlock": 0
    },
    "difficulty": "0x10",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "gasLimit": "9999999",
    "alloc": {},
    "extraData": "",
    "nonce": "0xdeadbeefdeadbeef",
    "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp": "0x00"
}

chainId

네트워크에서 망을 식별하는데 사용되는 ID입니다.

동일한 호스트내에서도 각각의 망별로 별도의 네트워크처럼 사용할 수 있습니다.

 

homesteadBlock

이더리움의 릴리즈 버전을 사용하기 위한 속성입니다. 이 포스팅에서는 사용하지 않을 계획입니다.

나머지 다른 값도 모두 0으로 설정하여 사용하지 않는것으로 설정합니다.

(자세한 설명은 알게되면 수정해서 올리도록 하겠습니다.)

 

difficulty

채굴의 난이도를 설정할 수 있습니다. 숫자가 높을 수록 난이도가 높아집니다.

 

gaslimit

하나의 블록에 가능한 gas 수치입니다. 수치를 크게 잡을 수록 하나의 블록에 담을 수 있는 거래양이 많기 때문에

유용하지만 너무 크게 잡게되면 블록이 비대해질 수 있기때문에 적정량을 찾아야합니다.

 

alloc

생성된 계좌에 이더리움을 입금시키게됩니다.

이 포스팅에서는 genesis.json을 먼저 생성한 후에 계좌를 생성하기 때문에 초기에 입금되는 계좌는 없도록 합니다.

 

 이렇게 생성한 genesis.json 파일을 이더리움 네트워크를 실행하기 위한 제네시스 블록으로 초기화를 시키기 위해 아래 명령어를 실행합니다.

geth --datadir .\data init .\config\genesis.json

 

# 2. 채굴할 계좌 생성하기

 아래 처럼 명령어를 입력하게 되면 사진처럼 계정이 생성되고 생성된 주소와 키스토어 파일이 생성될 것을 확인할 수 있습니다. 키스토어 파일은 datadir 옵션으로 지정해준 디렉토리 하위에 자동으로 생성이 됩니다.

geth --datadir .\data account new

 해당 프롬프트창에서 바로 이어서 작업하게 되면 스크롤이 위로 올라가버려서 사라지긴하지만 public key만 별도로 메모장과 같은 에디터에 저장해도 됩니다. 하지만 굳이 저장하지 않아도 키스토어에서 찾아볼 순 있습니다.

 아래 사진을 보시면 키스토어를 에디터로 열어봤을 때, address가 public key입니다.

 

# 3. 이더리움 네트워크 구동하기

아래 명령어를 통해서 이더리움 네트워크를 시작할 수 있습니다. 명령어 복사하신 후 port와 chainid 만 서버에 맞춰서 수정 후 사용하시면 됩니다.

geth --networkid 997 --maxpeers 10 --datadir ./data --allow-insecure-unlock --port 30303 --http -http.addr 0.0.0.0 --http.port 8545 --http.corsdomain "*" --http.api "admin,net,miner,eth,rpc,web3,txpool,debug,personal" --miner.threads 10

명령어의 옵션중에서 간단하게 설명을 하자면 다음과 같습니다.

(Geth 기존 버전에서 --rpc 로 되어있던 모든 옵션이 --http로 변경되었습니다.)

 

networkid

genesis.json 에서 chainid 값과 동일하게 합니다.

 

maxpeers

채굴 및 이더리움 네트워크에 연결을 허용할 최대 노드 수 입니다.

 

datadir

키스토어 및 이더리움 네트워크에서 발생하는 이벤트에 대한 데이터가 저장될 경로를 지정합니다.

 

rpcport

사용자가 지갑이나 이더리움 네트워크에 실제 접속할 때 사용되는 포트입니다.

 

rpcaddr

0.0.0.0 은 누구나, 어떤 아이피를 의미하며 특정 아이피로 작성하는 경우 해당 아이피 대역에서만 접속이 가능하게 됩니다.

 

miner.threads

채굴(마이닝)을 할 때, 사용될 쓰레드 개수를 설정합니다.

 

※ 다른 나머지 설명되지 않은 옵션은 따라하는데 지장이 없는 것도 있고, 제가 아직 파악을 못해서입니다.

 

아무튼 이렇게 명령어를 실행하고 나면 아래 처럼 주르르륵... 로그가 찍히면서 정상적으로 이더리움 네트워크가 구동된 것을 확인할 수 있습니다.

 

# 4. 채굴(마이닝) 준비하기

채굴(마이닝)을 시작하기 위해 아래 명령어를 통해서 이더리움 네트워크로 접속을 합니다.

geth attach http://127.0.0.1:8545

 

접속한 후에 다시 아래 명령어를 통해서 생성된 지갑 목록을 보면 2번 항목에서 채굴할 계좌를 생성했던 계좌가 있는 것을 확인할 수 있습니다.

eth.accounts

 

이번엔 채굴(마이닝)을 성공했을 때, 코인을 지급받을 지갑이 세팅이 되어있는지 확인합니다.

eth.coinbase

 

만약에 코인을 지급받을 지갑이 세팅되어있지 않다면 아래 명령어를 통해서 지갑을 세팅하도록 합니다.

miner.setEtherbase(personal.listAccounts[0])

 

# 5. 채굴(마이닝) 시작하기

간단하게 한줄 명령으로 채굴을 바로 시작할 수 있습니다.

miner.start()

 

이렇게 채굴이 시작되면 구동시킨 이더리움 네트워크에서 로그가 계속 찍히게 됩니다.

로그 내용은 간단하게, 새로운 블록을 만드는데 성공했다는 로그와 블록넘버가 보여지는 것을 확인할 수 있습니다.

 저 같은 경우에는 제 노트북에서 로컬로 테스트넷을 돌려봤는데 6시간정도 계속 돌려놓고 있다보니 노트북 속도가 너무 못쓸정도로 느려져서 어느정도 성능이 뒷받침이 안되면 이더리움 노드로 활동하는건 더더욱 힘이 들지 않을까 생각이 듭니다.

 

# 6. 채굴(마이닝) 종료하기

채굴을 종료하고 싶을 때도 간단하게 아래 한줄만 입력해주면 채굴이 중단됩니다.

miner.stop()

 

이렇게 여기까지 이더리움 네트워크에서 계좌를 생성하고, 생성된 계좌로 채굴을 진행하는 방법을 다뤄보았습니다.

다음 포스팅에서는 이번엔 채굴되서 보상을 받고 있는 계좌를 메타마스크에 등록하고 코인을 확인하고

새로운 지갑을 생성해서 코인을 전송하는 것을 다뤄보도록 하겠습니다.

반응형