$ sudo apt-get iynstall software-properties-common
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum
자동으로 환경변수 설정이 돼서 따로 수정할 필요 없다.
이렇게 나오면 성공이다.
이더리움을 통해 거래를 하려면 계좌가 있어야한다. 은행에 가면 우리가 일단 계좌부터 형성하는 것과 같다.
geth --datadir . account new
password 입력 란에 입력하면 계정이 생성된다. -> 잊어버리지 않게 주의!
해당 경로에 keystore 폴더가 생긴걸 볼 수 있다.
- keystore : 앞으로 만들 계정들을 저장하는 공간
제네시스 블록은 블록체인에서 첫 블록을 가리킨다.
먼저 스타트를 끊어야 뒷 블록이 생길수 있다고 생각하면 된다!
방법 1. puppeth 이용
방법 2. vim 으로 직접 블록 만들기
이번은 puppeth 를 이용하여 제네시스 블록을 생성할 것!
네트워크 이름 설정
제네시스 블록을 만들것이므로 2번
이미 파일이 존재한다면 2번을 눌러도 된다.
pow 를 선택한다.
1, 2 모두 있다면 입력하고 없다면 엔터로 스킵 ㄱㄱ
1. 네트워크 id 를 설정해준다! 나중에 컨트랙트 배포시 필요하므로 기억해 두길 바란다.
2. 제네시스 블록 파일을 추출해야하므로 2번을 선택한다.
3. 2는 오타고 그냥 엔터누르면 default 가 되어 질문에서 제시한 4개의 json 파일 추출이 진행된다. -> 폴더에 넣고 싶으면 엔터가 아닌 폴더 이름을 치면 된다.
생성된 json 파일 중 mynet.json , 이게 주된 제네시스 블록 파일이 된다.
-> 각자 설정한 network 이름으로 json 파일이 추출됨
"config": {
"chainId": 1234,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
config 안 필드들은 체인의 파라미터들을 정의하는데 쓰인다.
chainID : puppeth에서 정했던 네트워크 아이디
ethash : 합의 알고리즘이 작업증명임을 의미
"nonce": "0x0",
"timestamp": "0x610aef41",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x80000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": { .... }
이더리움 가상머신에서 블록생성의 난이도 조절에 쓰임
연속되는 두 개의 블록의 timestamp 차이가 작으면 난이도 올라가고, 크면 내려감
블록들이 올바른 순서로 진행되고 있는지 확인
블록 내 트랜잭션이 소비할수 있는 최대 가스 값
각 블록마다 트랜잭션을 몇개나 처리할 것인가를 제한 → 블록 사이즈 조절
블록의 유효성을 검사할때 사용되는 난이도
채굴자가 블록을 채굴하기위해 퍼즐을 풀면서 연산을 해야하는 횟수가 이 값과 연관
이 값이 높으면 블록 채굴시간 길어짐
지갑 주소의 자금을 미리 할당하는 내용임
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"baseFeePerGas": null
제네시스 블록이기 때문에 number 가 0
블록내에서 여러 트랜잭션을 처리하면서 사용한 모든 gas의 합
제네시스 블록은 처리한 트랜잭션이 없어서 0
부모블록의 hash 의 정보 담고 있음
제네시스는 시작이기때문에 부모 블록이 없어 0 값임
방법 2의 기본적인 genesis.jon 파일 형식은 다음과 같다. (구글링)
{
"config": {
"chainId": 1234,
"homesteadBlock": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"eip150Block" : 0,
"eip155Block": 0,
"eip158Block": 0
},
"difficulty": "0x20000",
"gasLimit": "0x2fefd8",
"alloc": {},
"extraData": "",
"nonce": "0x0000000000000000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
alloc 까지는 필수고 아래는 안쓰는 파일도 있다.
geth --datadir . init ./mynet.json
--datadir : 파일 저장할 위치
init : init 할 파일
geth 폴더가 새로 생성된 것을 볼 수있다. -> genesis block 을 이용해 체인을 형성한 것!
이제 console 에 접속하여 명령어를 내릴 수 있다.