Skip to content

Instantly share code, notes, and snippets.

@goodGid
Last active January 22, 2019 09:19
Show Gist options
  • Save goodGid/0067ca063bcdf9a5c5fdfac5b84cbf1f to your computer and use it in GitHub Desktop.
Save goodGid/0067ca063bcdf9a5c5fdfac5b84cbf1f to your computer and use it in GitHub Desktop.
Ethereum education
## 빌드 환경 구성 및 빌드
1. Git 설치
A. sudo apt-get install git
2. 우분투 환경 업데이트
A. sudo apt-get update
3. 빌드 필수 구성요소 설치
A. sudo apt-get install build-essential
4.Go 설치 및 환경설정
A. wget https://storage.googleapis.com/golang/go1.10.linux-amd64.tar.gz
B. sudo tar -C /usr/local -xzf go1.10.linux-amd64.tar.gz
C. ~/.profile 파일에 환경변수 추가
a. export PATH=$PATH:/usr/local/go/bin 추가
b. export GOROOT=/usr/local/go 추가
D. 작업디렉터리 생성
a. mkdir ethereum
b. cd ethereum
c. mkdir bin
d. mkdir db
e. mkdir logs
f. mkdir src
g. cd db
h. mkdir pnet
E. ~/.profile 파일에 환경변수 추가
a. export ETH_HOME=$HOME/ethereum
5. Git을 통한 go-Ethereum 소스 클론 및 빌드
A. git clone https://github.com/ethereum/go-ethereum
    B.   git tag : 버전확인
C. git checkout v1.8.1(최신버전으로 설정)
D. make all
6. 작업폴더에 symlink
A. ln -s /home/{:user}/go-ethereum/build/bin/* /home/{:user}/ethereum/bin (go-Ethereum 에서 사용하는 명령을 작업공간에서 사용할 수 있도록 링크 추가)
ex) ln -s /home/ubuntu/Ethereum/go-ethereum/build/bin/* /home/ubuntu/Ethereum/bin
7. 버전 확인
A. go env
## Main Net 및 Modern Net 접속
1. Data directory 를 변경하여 실행하는 방법
A. --datadir 옵션을 추가하여 geth를 실행함
Ex) $./geth --datadir $HOME/db/mainnet
$./geth –testnet --datadir $HOME/db/testnet
B. .ethash ($HOME/.ethash)
- Mining 시 Dagger Hashimoto 알고리즘에서 사용하게 되는 DAG 파일들이 위치 epoch (30,000 Block) 마다 생성되며, 마지막 epoch DAG 만 필요 모든 Client Instance 들이 공용함
    C.   Folders 및 files
         Blog참고 ( https://goodgid.github.io/Build-Development-Environment/ )
## Private Network 구성
1. Geth 옵션
Blog참고 ( https://goodgid.github.io/Build-Development-Environment/ )
2. Node Start
        A. Account 생성
./geth --datadir=$ETH_HOME/db/pnet account new
- 생성된 주소를 클립보드에 복사(coinbase)
B. Genesis Block 정의
- Genesis Block 정의를 위한 json 파일 생성
- $ETH_HOME/db/pnet 폴더 안에 pnet.json 이름으로 파일 저장
pnet.json
----------------------------------------------------------------------------------
{
"config": {
"chainId": 63,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000042",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0x4c4b40",
"difficulty": "0x0400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
                            "0x { 계정 주소 }" : {
                                  "balance": " { 값 } "
                            }
                  }
}
-----------------------------------------------------------------------------------
C. DB 초기화 하기
              - ./geth --datadir=$ETH_HOME/db/pnet init /home/{:user}/Ethereum/db/pnet/pnet.json
        D.   Console 창으로 노드 실행 (2가지 방법 / 차이점은 옵션의 유무)
- ./geth --datadir=$ETH_HOME/db/pnet --networkid=63 --port=60606 console
- ./geth --identity "PrivateNetwork" --datadir "./db" --port "30303" --rpc --rpcaddr 0.0.0.0 --rpcport "8123" --rpccorsdomain "*" --nodiscover --networkid 1900 --nat "any" --rpcapi "db,eth,net,web3,miner" console
E. 계정 확인
- eth.accounts
F. 블록넘버 확인
- eth.blockNumber
G. 마이닝 여부 확인
- eth.mining
H. 네트워크 버전 확인
- net.version
I. 연결된 노드 확인
- net.peerCount
J. 계정 생성하기
- personal.newAccount()
- Passphrase 입력
- Repeat Passphrase 입력
- 생성된 주소 기록
K. 코인베이스 생성
- 현재 생성된 계정의 주소를 코인베이스로 사용
- eth.coinbase
L. 마이닝 시작하기
              - miner.start(1) // 매개변수값은 쓰레드의 숫자를 지정해준다.
- 마이닝에 성공하면 miner.stop() 으로 마이닝 중지
M. 트랜잭션의 위한 또 하나의 계정 생성
- personal.newAccount()
- eth.accounts
N. 전송을 하기 위해 계정을 unlock
- personal.unlockAccount(eth.accounts[0])
O. account[0] 에서 account[1] 로 이러리움을 전송
- var txHash = eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(5, "ether")})
- txHash : 트랜잭션 해시값 확인
P. 현재 pending 되어 있는 트랜잭션 조회
- txpool.content.pending
Q. Confirm 전의 계정 잔액 조회
- eth.getBalance(eth.accounts[0])
R. confirm 을 위한 마이닝 시작
- miner.start(1)
S. confirm 후 계정 잔액 조회
- eth.getBalance(eth.accounts[1])
T. Confirm 이후 트랜잭션 조회
- eth.getTransaction(txHash)
* 노드를 연결하는 방법
- 콘솔에서 admin.nodeInfo 를 통해 본인 노드의 enode 값을 찾아냄
- enode://ef38d54292152ea50c6965cfc4c5a993a46062025c0fe6bba3df607ed6873613c018afc10e1d407b932d7d1babad78952f6c0c0c566d41cd8167450878bc3c8e@1.225.203.86:60606
- 상대방의 콘솔에서 admin.addPeer('연결하고자 하는 노드의 아이디값')
- 연결후 admin.peers 를 통해서 연결된 노드를 확인
@flyyou
Copy link

flyyou commented Jan 22, 2019

죄송한데 질문이 있습니다.
[1] 개발 환경 설정 방법.txt, [2] 개발 환경 설정 방법.txt 에서 geth를 설치하는 방법의 차이 그리고 실행하는 방법의 차이가 있는데
그것이 바로 프라이빗 블록체인 네트웍으로 구성하느냐 (2번) 안하느냐 (1)의 차이 인 것인가요???
1번 방법으로 구성후 2번매뉴얼에 언급된 ## 03 스마트 계약 개발 (1)을 진행해도 되는 것이지요???
답변 부탁드립니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment