본문 바로가기
비트코인

블록체인 애플리케이션 개발 실전 입문 : Solidity를 이용한 이더리움 스마트 계약 구현 (위키북스 해킹 & 보안 시리즈 11) 2장-4

by 자유코딩 2018. 3. 31.

블록체인 애플리케이션 개발 실전 입문 : Solidity를 이용한 이더리움 스마트 계약 구현 (위키북스 해킹 & 보안 시리즈 11) 2장-4

 

2.4 테스트 네트워크에서 Ether 송금

 

2.4.1.계정 생성

 

이더리움에는 2가지 종류의 계정이 있다.

 

1.EOA(Externally Owned Account)

일반 사용자가 사용하는 계정으로 , 비밀키로 관리된다.

Ether를 송금하거나 , 계약을 실행 할 수 있다.

 

2.Contract

계약용 계정이라고 부른다.

계약을 블록체인에 배포할 때 만들어지고 블록체인에 존재한다.

다른 계정으로부터 메시지를 수신해 코드를 실행하고 계정에 메시지를 보낼 수 있다.

 

 

pass0는 계정의 패스워드입니다.

 

영어, 숫자 , 기호를 사용한 임의의 문자열로 지정하면 됩니다.

 

여기서는 단순하게 지정했지만 실제 환경에서 사용 할때는 조금 더 복잡하게 지정하는 것이 좋습니다.

 

아래 0x6eㅁㅁㅁㅁ 라고 표시되는 문자열은 생성된 계정의 주소입니다.

 

이 주소를 지정해서 송금등을 할 수 있습니다.

 

여기서 주소는 유일 값을 갖도록 생성됩니다.

 

계정(EOA)는 eth.accounts 명령으로 확인 할 수 있습니다.

 

 

[0],[1] 처럼 인덱스 형태로 지정해서 확인 할 수도 있습니다.

 

 

exit를 입력하면 Geth 프로세스가 종료됩니다.

 

ps 명령으로 Geth 프로세스가 동작하지 않는 것을 확인 할 수 있습니다.

 

geth 명령을 사용해서 계정을 만들 수 있습니다.

 

 

계정을 생성하고 확인하는 화면입니다.

 

passphrase, repeat passphrase 에 pass2 를 입력했습니다.

 

 

tree 명령으로 확인한 화면입니다.

 

2.4.2 채굴

 

먼저 Geth 를 구동합니다.

 

 

eth.accounts 로 계정을 확인합니다.

 

eth.coinbase가 miner.setEtherbase 명령어를 통해서 변경되는 것도 확인 할 수 있습니다.

 

 

eth.accounts[0] 명령은 현재 계정의 잔고를 표시하는 명령입니다.

 

eth.blockNumber 명령으로는 블록체인의 블록 수를 확인 할 수 있습니다.

 

현재는 잔고와 블록 수 모두 0 입니다.

 

이제 채굴을 시작해보도록 하겠습니다.

 

 

miner.start(1) 명령으로 채굴을 수행합니다.

 

괄호 안의 숫자는 채굴에 사용할 쓰레드의 수 입니다.

 

첫번째 채굴에서는 DAG(Directed Acyclic Graph) 가 생성되기 때문에 채굴이 완료되기까지 약간 시간이 걸립니다.

 

DAG는 채굴의 ASIC 내성을 위해 만들어지는 약 1GB 크기의 파일로 , 30,000블록(약 125시간마다 다시 만들어진다. Geth 콘솔이 실행되고 있는 터미널에서 exit 명령어로 빠져나오면 Geth 도 종료되므로 별도의 터미널을 열어 로그 파일을 확인해봅니다.)=Geth.log파일

 

DAG 파일은 $(home)/.ethash/full-R(임의 숫자)-(숫자) 형식으로 만들어집니다.

 

tree .ethash/ 명령으로 DAG 파일 명을 확인 할 수 있습니다.

 

 

마이닝을 시작하고 시간이 지나면 getBalance 명령을 통해서 채굴된 것을 확인 할 수 있다.

 

eth.hashrate 명령으로 해시속도 , eth.blockNumber 명령으로 블록길이를 확인 할 수 있다.

 

 

마이닝을 종료하고 잔고를 확인해보겠습니다.

 

getBalance 로부터 출력되는 단위는 wei 입니다.

 

명령어를 통해서 ether 단위로 변환했습니다.

 

현재 블록의 길이는 1입니다.

 

채굴로 받을 수 있는 보상은 1 블록에 5ether입니다.

 

5ether가 채굴되었습니다.

 

다음 글에서는 다른 계정으로 송금해보도록 하겠습니다.

 

댓글