Last active
January 22, 2019 09:19
-
-
Save goodGid/0067ca063bcdf9a5c5fdfac5b84cbf1f to your computer and use it in GitHub Desktop.
Ethereum education
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## 빌드 환경 구성 및 빌드 | |
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 를 통해서 연결된 노드를 확인 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
죄송한데 질문이 있습니다.
[1] 개발 환경 설정 방법.txt, [2] 개발 환경 설정 방법.txt 에서 geth를 설치하는 방법의 차이 그리고 실행하는 방법의 차이가 있는데
그것이 바로 프라이빗 블록체인 네트웍으로 구성하느냐 (2번) 안하느냐 (1)의 차이 인 것인가요???
1번 방법으로 구성후 2번매뉴얼에 언급된 ## 03 스마트 계약 개발 (1)을 진행해도 되는 것이지요???
답변 부탁드립니다.