공대생 정리노트
geth 사설망 실행하기 본문
https://geth.ethereum.org/docs/interface/private-network
private network
http://www.yes24.com/Product/Goods/61189103
먼저 Go Ethereum을 설치한다
https://github.com/ethereum/go-ethereum
make geth 실행 후 geth를 실행할 수 있게 geth 바이너리 파일을 path에 등록한다.
이후 제네시스 블록을 만든다.
// genesis.json
{
"config": {
"chanId": 33,
"homesteadBlock": 0,
"eip150Block" : 0,
"eip155Block": 0,
"eip158Block":0
},
"nonce": "0x0000000000000013",
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x8000000",
"difficulty": "0x100",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": {}
}
geth --datadir ./private_net/ init genesis.json
위 명령어를 실행하면 json 파일에 정의된 대로 geth node를 초기화한다.
초기화에 성공하면 다음 명령으로 geth console을 실행한다.
geth --networkid 10 --datadir ./private_net --port 10052 console 2>> ./error.log
제네시스 블록의 데이터 디렉토리를 사용함으로써 Geth의 데이터베이스를 초기화하는데 성공하였다.
블록체인 노드간 연결을 할 때 둘 다 같은 제네시스 블록을 사용하고 네트워크 id를 사용해야 한다. 그래서 --networkid로 네트워크 id를 설정해주는 것이다.
채굴을 하는 명령은 다음과 같이 수행하였다.
$ personal.newAccount()
> Passphrase: "비밀번호"
> Repeat passphrase: "비밀번호"
> "0x60da2a27c0417c9b2214f83407506b006e0842d8"
$ eth.accounts
> ["0x60da2a27c0417c9b2214f83407506b006e0842d8"]
// 코인베이스 계정 주소 확인. 블록을 생성하려고 채굴했을 때 보상을 받는 계정 주소
$ eth.coinbase
> "0x60da2a27c0417c9b2214f83407506b006e0842d8"
// 제네시스 블록 확인. 몇 번째 블록을 확인하고 싶을 때 사용하는 명령
$ eth.getBlock(0)
>
{
baseFeePerGas: 100000000,
difficulty: 131072,
...
}
// 채굴 시작 : miner.start(스레드수)
$ miner.start(1)
> null
// 채굴 확인
$ eth.mining
> true
// 코인베이스 계정 주소 잔액 확인(wei)
$ eth.getBalance(eth.accounts[0])
> 124000000000000000000
// 채굴 중지
$ miner.stop()
채굴을 했으니 이제 다른 계좌로 송금을 해보자.
$ eth.accounts
> ["0x9004ef55b0d60f1de68631b27aba7421f0a096f3", "0x60da2a27c0417c9b2214f83407506b006e0842d8", "0xc27c8321e73abe3415bd933f4e1d0e9d9a481ed9"]
$ eth.getBalance(eth.accounts[2])
> 0
// accounts[1]의 이더 확인
$ web3.fromWei(eth.getBalance(eth.accounts[1]),"ether")
> 76
// accounts[1]에서 accounts[2]로 1이더 송금 시도
> eth.sendTransaction({from: eth.accounts[1], to: eth.accounts[2], value: web3.toWei(1,"ether")})
Error: authentication needed: password or unlock
at web3.js:6365:37(47)
at send (web3.js:5099:62(35))
at <eval>:1:20(21)
그냥 송금을 하려 하면 인증이 필요하다며 에러가 뜬다.
송금을 하려면 계정 잠금을 먼저 풀어야 하기 때문이다.
$ personal.unlockAccount(eth.accounts[1])
> Unlock account 0x60da2a27c0417c9b2214f83407506b006e0842d8
> Passphrase:
> true
$ eth.sendTransaction({from: eth.accounts[1], to: eth.accounts[2], value: web3.toWei(1,"ether")})
> "0x88acff28cd27e5148d10162ec0816c1abf7e300c2ff088b1d6dbc1e789904a3e"
$ eth.getTransaction("0x88acff28cd27e5148d10162ec0816c1abf7e300c2ff088b1d6dbc1e789904a3e")
> {
accessList: [],
blockHash: null,
blockNumber: null,
chainId: "0xa",
from: "0x60da2a27c0417c9b2214f83407506b006e0842d8",
gas: 21000,
gasPrice: 1000000074,
hash: "0x88acff28cd27e5148d10162ec0816c1abf7e300c2ff088b1d6dbc1e789904a3e",
input: "0x",
maxFeePerGas: 1000000074,
maxPriorityFeePerGas: 1000000000,
nonce: 0,
r: "0x96bda0abdc538e0733ec894f597778de6994f9bd6ea75f4dc475fe66fc664272",
s: "0x3ef2f4d3c223c9f01d14cff28af173fb2185f2aa23566bc12b5192d6ff351b2c",
to: "0xc27c8321e73abe3415bd933f4e1d0e9d9a481ed9",
transactionIndex: null,
type: "0x2",
v: "0x0",
value: 1000000000000000000
}
$ web3.fromWei(eth.getBalance(eth.accounts[2]),"ether")
> 0
트랜잭션의 blockNumber 항목이 null로 되있는 것을 볼 수 있다. 이 거래가 아직 블록에 저장되지 않았기 때문이다.
실제로 받는 주소의 잔액을 확인해보면 아직 0인 것을 볼 수 있다.
거래를 확정하려면 블록을 생성한 후 블록에 저장을 시켜야 한다.
$ miner.stat(1)
> null
$ web3.fromWei(eth.getBalance(eth.accounts[2]),"ether")
> 1
$ eth.getTransaction("0x88acff28cd27e5148d10162ec0816c1abf7e300c2ff088b1d6dbc1e789904a3e")
> {
accessList: [],
blockHash: "0x59479f238407afa96210ff7b72bf87a4545edb4e6014f51ecf3310f8f6825bcf",
blockNumber: 130,
chainId: "0xa",
from: "0x60da2a27c0417c9b2214f83407506b006e0842d8",
gas: 21000,
gasPrice: 1000000033,
hash: "0x88acff28cd27e5148d10162ec0816c1abf7e300c2ff088b1d6dbc1e789904a3e",
input: "0x",
maxFeePerGas: 1000000074,
maxPriorityFeePerGas: 1000000000,
nonce: 0,
r: "0x96bda0abdc538e0733ec894f597778de6994f9bd6ea75f4dc475fe66fc664272",
s: "0x3ef2f4d3c223c9f01d14cff28af173fb2185f2aa23566bc12b5192d6ff351b2c",
to: "0xc27c8321e73abe3415bd933f4e1d0e9d9a481ed9",
transactionIndex: 0,
type: "0x2",
v: "0x0",
value: 1000000000000000000
}
$ web3.fromWei(eth.getBalance(eth.accounts[2], 130), "ether")
> 1
$ eth.getTransactionReceipt("0x88acff28cd27e5148d10162ec0816c1abf7e300c2ff088b1d6dbc1e789904a3e")
> {
blockHash: "0x59479f238407afa96210ff7b72bf87a4545edb4e6014f51ecf3310f8f6825bcf",
blockNumber: 130,
contractAddress: null,
cumulativeGasUsed: 21000,
effectiveGasPrice: 1000000033,
from: "0x60da2a27c0417c9b2214f83407506b006e0842d8",
gasUsed: 21000,
logs: [],
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
status: "0x1",
to: "0xc27c8321e73abe3415bd933f4e1d0e9d9a481ed9",
transactionHash: "0x88acff28cd27e5148d10162ec0816c1abf7e300c2ff088b1d6dbc1e789904a3e",
transactionIndex: 0,
type: "0x2"
}
blockNumber의 값이 바뀐 것을 볼 수 있다.
'블록체인' 카테고리의 다른 글
이더리움 개발 스택 (0) | 2022.01.09 |
---|---|
Layer 2 / the lightening Network (1) | 2021.12.15 |
Bitcoin: A Peer-to-Peer Electronic Cash System - Satoshi Nakamoto 요약 (0) | 2021.12.02 |
Geneva Report 1장 - Impact of Blockchain Technology on Finance 요약 (0) | 2021.11.27 |
블록체인 이해하기 (0) | 2021.11.21 |