Block_Chain setting & basic
โ
๐๊ฐ์ํ๊ฒฝ์์ ๋ธ๋ก์ฒด์ธ ์ฑ๊ตด ๋ฐ ๊ธฐ๋ณธ ์์คํ ์ ๋ฆฌ
โ
1. geth(Go-ethereum) ์ค์น
๋ธ๋ก์ฒด์ธ ๊ธฐ์ ์ ์ค์์ง์คํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ๊ธฐ๋ฅผ ๋ค๊ณ ๋์จ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ ์ค์ ์๋ฒ ์ด๋ฐ๊ฒ ์๋ค. ์ฆ ๋๊ตฌ๋ผ๋ ํด๋น ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ์ ์ฐธ์ฌํ๊ณ ์ถ๋ค๋ฉด ์ธ์ ๋ผ๋ ๋ธ๋ก์ฒด์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฑํฌํด์ฃผ๋ ๋ก์ปฌ ํ๋ก๊ทธ๋จ์ ๋ค์ด ๋ฐ์ ์คํํ๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด ๋ธ๋ก์ฒด์ธ ๋คํธ์ํฌ์ ์ฐธ์ฌํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น? ์์ ๋งํ ๋ก์ปฌ ํ๋ก๊ทธ๋จ์ ๋ค์ด ๋ฐ์ผ๋ฉด ์ฐธ์ฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด ํ๋ก๊ทธ๋จ๋ค ์ค ํ๋์ธ GO ๋ก ์ง์ฌ์ง Go Ethereum(์ค์ฌ์, geth)์ ์ค์นํด๋ณธ๋ค.
์์ฑ๋น์ ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ธ 1.9.20 for windows๋ก ๋ค์ด์ ๋ฐ๋๋ค.
-
๋ค์ด ๋ฐ๊ณ ์คํํ๋ฉด ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ๋๋ฐ
์ถ๊ฐ์ ๋ณด
๋๋ฅด๊ณ์คํ
๋๋ฅด๊ณ ์งํํ๋ค. -
devolop ๋ญ์๊ธฐ๋ ์ ํํ์ง ์์๊ณ , next๋ฅผ ๋๋ฃจ๊ณ ์งํํ๋ค.
-
์ค์น๊ฐ ๊น๋ํ ๋ง๋ฌด๋ฆฌ ๋์ง ์๊ณ ๊ฒฝ๊ณ ์ฐฝ์ด ๋ด๋๋ฐ, ํ๊ฒฝ๋ณ์ ์ค์ ํด์ฃผ์๋ค.
- ๊ฒ์ โ ์์คํ ํ๊ฒฝ ๋ณ์ ํธ์ง โ ๊ณ ๊ธ โ ํ๊ฒฝ ๋ณ์ โ Path๋๋ธํด๋ฆญ โ ์๋ก๋ง๋ค๊ธฐ โ C:\Program Files\Geth ์ถ๊ฐ
-
cmd ์ฐฝ์ ์ด์ด(๊ด๋ฆฌ์: ๋ช ๋ น ํ๋กฌํํธ) geth๋ฅผ ์ ๋ ฅํด ์คํ๋๋์ง ํ์ธํ๋ค._______๋
โ
2. Web3 ์ค์น
๋ชจ๋ ์๋ฃ์ ์ ๋ณด๊ฐ ๋ถ์ฐํ, ๋ถ๊ถํ๋ ์ฐจ์ธ๋ ๋คํธ์ํฌ ๊ตฌ์กฐ๋ก์, ์๋ฒ๊ฐ ์๋ ํ์ ์ ์ธ ์ธํฐ๋ท ๋ถ์ฐํ ์น.
web3.js๋ JavaScript ๊ธฐ๋ฐ์ผ๋ก Dapp ์ด๋ ์๋น์ค๋ฅผ ๊ตฌํํ ๋ ๋งค์ฐ ์ ์ฉ. (์ถ์ฒ: ์ํค)
โ
์ด๋ฏธ Vue_CLI ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํด ๋์ ๊ฒ์ด ์์ด์
- Terminal ์์
npm install web3
์ ๋ ฅํด์ web3๋ฅผ ์ค์นํ๋ค.
โ
3. VirtualBox ์ค์น
VirtualBox: ํ๋์จ์ด๋ฅผ ์ํํธ์จ์ด์ ์ผ๋ก ๊ตฌํํด์ ๊ทธ ์์์ ์ด์์ฒด์ ๊ฐ ์๋ํ๋๋กํ๋ ๊ธฐ์
-
Windows hosts ์ All supported platforms ๋๊ฐ๋ฅผ ๋ค์ด ๋ฐ๋๋ค.
-
Windows hosts: ๊ทธ๋ฅ next์ฐํํ์ฌ ์ค์น
-
All supported platforms์ ๋๋ธํด๋ฆญํ์ฌ ์ค์น๋ฅผ ์งํํ๋๋ฐ
-
๐์ ์ฒด ์ค์น๋ ์ด ๋ธ๋ก๊ทธ์ ์ค์น ๋์์์ ์ฐธ๊ณ ํ์ฌ ์ค์น๋ฅผ ์งํ
โ
4. Vagrant ์ค์น
Vagrant๋ ๊ฐ์๋จธ์ ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์ด๋ฏธ ๋๊ตฐ๊ฐ๊ฐ Vagrant๋ก ์ค์ ํด ๋์ ๊ฐ์๋จธ์ Box๋ฅผ ๊ฐ๋จํ ๋ช ๋ น์ด๋ก ์์ฝ๊ฒ ์ค์น ํ ์ ์์ผ๋ฉฐ ๊ฐ์ ๋จธ์ ๊ณผ ํธ์คํธ ๋จธ์ ๊ณผ์ ํ๊ฒฝ์ค์ ๋ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. ๋ค์ด๋ก๋๋ ์ฌ๊ธฐ์ ์งํ.
โ
5. Remix IDE ์ค์
์ด๋๋ฆฌ์
์ค๋งํธ ์ปจํธ๋ํธ
ํ๋ ์์ํฌ
์ฌ๊ธฐ์ ์งํ!
โ
๐๋ณธ๊ฒฉ์ ์ธ ๋ธ๋ก์ฒด์ธ ๊ด๋ จ ๊ฐ์ํ๊ฒฝ ์ธํ ๋ฐ ์ฑ๊ตด ์งํ
20.09.01 ํ ์ผ..
โ ๊ด์ฐ์์ ์ผํ๋ ๊ฒ์ ์์๋ก!
-
VirtualBox(๐): ๋ธ๋ก์ฒด์ธ ์์ฑ ๋ฐ ์ฑ๊ตด์ ์ํ ๊ฐ์ํ๊ฒฝ์ ์ธํ (๋ด๊ฐ ์ฑ๊ตดํ ์ฐ์ ๊ณ ๋ฅด๋ ๊ฒ)
-
Vagrant(๐): ๊ฐ์ํ๊ฒฝ์์ ๋ ธ๋๋ฅผ ์์ฑํ๋ ๋ฑ, ๋ธ๋ก์ฒด์ธ ๊ด๋ จ ํ๋ ์์ํฌ (๊ด๊ตฌ๋ฅผ ์์ฑํ๋ ๊ฒ)
-
geth(๐๐ทโโ๏ธ): ๋ธ๋ก์ฒด์ธ ๋ ธ๋์ ๊ด๋ จ ํ๋ก๊ทธ๋จ (๊ด๊ตฌ์ ์ด๋ค ์ฌ๋์ด ๋ค์ด์ค๊ณ ์ด๋ค ์ฌ๋์ ํ๊ฒฌํ ์ง ๋ฑ๋ฑ)
โ
-
๋ธ๋ก์ฒด์ธ ๊ด๋ จ ์์ ์ ํ ๋๋ ํ ๋ฆฌ ์์ฑ ํ Terminal์ ์ด์ด vagrant ๊ด๋ จ ๋ช ๋ น์ด ์คํ(์ด๋ฏธ ์ค์น๋ ์๋ฃ)
1
> vagrant version #์ค์น ์ฌ๋ถ ๋ฐ ๋ฒ์ ํ์ธ => ๋ฒ์ ๋๋ฒ๊ฐ ๋ณด์ด๋ฉด ok
1
> vagrant plugin install vagrant-scp # ํธ์คํธ & ๊ฐ์๋จธ์ ๊ฐ ์ฐ๋ ํ๋ก๊ทธ๋จ ์ค์น
1 2
> vagrant init # ๋ธ๋ก์ฒด์ธ ์ฑ๊ตด์ ์ํ ๊ธฐ์ด ์ธํ ์์ # ํด๋น ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์์ ํ๋ ๋๋ ํ ๋ฆฌ์ Vagrantfile์ด ์๊ธด๋ค.
- vagrant init ํ ์๊ธฐ๋ Vagrantfile์ ์์ ํด ์ต์ด์ ๋ธ๋ก(genesis.json)์ ์์ฑํด์ผ ํ๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
# Vagrantfile => ๋ด์ฉ์ ์์ ํ๋ค. # -*- mode: ruby -*- # vi: set ft=ruby : # All Vagrant configuration is done below. The "2" in Vagrant.configure # configures the configuration version (we support older styles for # backwards compatibility). Please don't change it unless you know what # you're doing. VAGRANT_API_VERSION = "2" vms = { 'eth0' => "10", 'eth1' => "11" } Vagrant.configure(VAGRANT_API_VERSION) do |config| config.vm.box = "ubuntu/bionic64" vms.each do |key, value| config.vm.define "#{key}" do |node| node.vm.network "private_network", ip: "192.168.50.#{value}" if "#{key}" == "eth0" node.vm.network "forwarded_port", guest: 8545, host: 8545 end node.vm.hostname = "#{key}" node.vm.provider "virtualbox" do |nodev| nodev.memory = 2048 end end end end # ๋ด๊ฐ ์ดํด?ํ ๋ฐ๋ก๋ eth0๊ณผ eth1์ด๋ผ๋ 2๊ฐ์ ๋ ธ๋(๊ด๊ตฌ)๋ฅผ ์ค์ ํ๋ค. ์ ๋
1
> vagrant up # ๋ฐฉ๊ธ ์ค์ ํ eth0๊ณผ eth1 ๋ ธ๋(๊ด๊ตฌ)๋ฅผ ์คํ(์คํ)
1
> vagrant status # ์ค์ ๋์ด ์๋ ๋ ๋ ธ๋(๊ด๊ตฌ)์ ์ํ๋ฅผ ํ์ธ runing์ด๋ฉด ์คํํ ์ํ
โ
-
์ฌ๊ธฐ ๊ฐ์ง ์์ ์ ํ๋ค๋ฉด vitualbox์ ๋๊ฐ์ ๋ ธ๋(๊ด๊ตฌ)๊ฐ ๋ฑ๋ก๋์ด์๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
โ
๋ฑ๋ก๋ ๋ ธ๋(๊ด๊ตฌ) ์ค์์ eth0์ ๋จผ์ ์ค์ ํด๋ณด์
์ง๊ธ๊น์ง ์งํํ ํด๋์์ Terminal์ ์ด๊ณ vagrant ๋ช ๋ น์ด๋ก ๋ ธ๋(๊ด๊ตฌ)๋ฅผ ์ค์ ํด์ค๋ค.
๊ธฐ๋ณธ์ ์ vagrant ๋ช ๋ น์ด
๋ช ๋ น์ด | ์ค๋ช |
---|---|
vagrant up ์ํํ์ธํ ๊ฐ์๋จธ์ ์ด๋ฆ | ๊ฐ์๋จธ์ ๊ธฐ๋ |
vagrant status ์ํํ์ธํ ๊ฐ์๋จธ์ ์ด๋ฆ | ๊ฐ์๋จธ์ ์ํ ํ์ธ |
vagrant ssh ์ ์ํ ๊ฐ์๋จธ์ ์ด๋ฆ | ๊ฐ์๋จธ์ ์ ์ ์ |
vagrant halt ๋ฉ์ถ๊ฐ์๋จธ์ ์ด๋ฆ | ๊ฐ์๋จธ์ ์ ์ง |
vagrant suspend | ๊ฐ์๋จธ์ ํด๋ฉด |
vagrant resume | ๊ฐ์๋จธ์ ํด๋ฉด์์ ๋ณต์ |
vagrant reload | ๊ฐ์๋จธ์ ์ฌ์๋ |
vagrant destroy | ๊ฐ์๋จธ์ ์ ๊ฑฐ |
*๋ชจ๋ ๋ช ๋ น์ด๊ฐ vagrant up ์ํํ์ธํ ๊ฐ์๋จธ์ ์ด๋ฆ ๊ณผ ๊ฐ์ด ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
โ
-
์ด์ ๋ ธ๋(๊ด๊ตฌ)๋ฅผ ์ด์์ผ๋ ์ ์ํด๋ณด์ => vagrant ssh ์ ์ํ ๊ฐ์๋จธ์ ์ด๋ฆ
โ
-
geth๋ฅผ ์ค์นํด์ค๋ค.
*Geth ์ค์น (Go-ethereum client)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# vagrant@eth0:~$ ๊ฐ์๋จธ์ ์์ ์ํ > sudo apt-get update > sudo apt-get install software-properties-common > sudo add-apt-repository -y ppa:ethereum/ethereum > sudo apt-get install ethereum #์ฌ๊ธฐ๊น์ง ์์๋๋ก ์ค์นํ๋ฉด geth์ค์น๋ ์๋ฃ. # ํ๋ผ์ด๋น ์ด๋๋ฆฌ์๋ฅผ ๊ด๋ฆฌํ ํด๋ ์์ฑ > mkdir -p dev/eth_localdata #-p๋ mkdir ์ต์ ์ฌํญ => ์ค๊ฐ๊ฒฝ๋ก๋ ๋ค ๋ง๋ค์ด๋ผ > mkdir database > cd database # ํ๋ผ์ด๋น ์ด๋๋ฆฌ์์ ์ํ genesis.json๋ธ๋กํ์ผ(๋ธ๋ก๋ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ต์ด์ ๋ธ๋ญ) ์์ฑ > vi genesis.json # genesis.json๋ฅผ ๋ง๋ค๊ฒ ๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
# genesis.json์ ๋ด์ฉ ๋ฑ๋ก (์์) i โ ์ ๋ ฅ ํ์ฑํ โ ์๋ ๋ด์ฉ์ ๋ ฅ ํ โ esc โ ZZ(์ ์ฅํ๊ณ ์ข ๋ฃ) { "config": { "chainId": 5245, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, "eip158Block": 0 }, "nonce": "0xdeadbeefdeadbeef", "difficulty": "0x40", "gasLimit": "9999999", "alloc": {}, "extraData": "", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp": "0x00" }
1 2 3
# genesis.json ์ ์ฅ ํ > cd .. ๋ค์ rootํด๋๋ก ์ด๋ํ๋ค.
โ
-
๋์ ์ต์ด์ ๋ธ๋ก(genesis.json)์ ๋ง๋ค์๋ค๋ฉด ๋ฑ๋ก(์ด๊ธฐํ)ํด์ค์ผ ํ๋ค. => โจgeth๋ฅผ ์ฌ์ฉํ์ฌ ์งํ
1
> geth init #์ด ๋ช ๋ น์ด๋ก ๋ฑ๋ก(์ด๊ธฐํ)์ ํ ์ ์๋๋ฐ...
1 2 3 4
# ์์ --datadir์ ์ฐธ๊ณ ํ์ฌ > geth --datadir ~/dev/eth_localdata init ~/database/genesis.json # ~/database ์์น์ ์๋ genesis.json์ ๋ฑ๋ก(์ด๊ธฐํ)ํ๊ณ ๋ฑ๋ก ํ ์๊ธฐ๋ ๊ด๋ จ ์๋ฃ๋ ~/dev/eth_localdata์ ๋ชจ์๋๊ฒ ๋ค๋ ๋ป
โ
-
์ด์ ๋ ธ๋(๊ด๊ตฌ)๋ฅผ ๊ด๋ฆฌํ ๊ณ์ (๐โโ๏ธ์ฌ๋)๋ ๋ฑ๋กํด์ค๋ค.
1 2
> geth account new # ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์์ด๋๋ ์๋์ผ๋ก ์์ฑ๋๊ณ ๋น๋ฐ๋ฒํธ๋ง ์ค์ ํ ์ ์๊ฒ ์งํ๋๋ค.
1 2
# ๊ณ์ ์ด ์ ๋ง๋ค์ด ์ง ๊ฒ์ธ์ง ํ์ธํ๊ธฐ ์ํด์๋ > geth account list
โ
-
์ด์ ๋ ธ๋(๊ด๊ตฌ)์ ์ด๋ค ์ฌ๋๋ค์ด ๋ค์ด์ฌ ์ ์๋์ง์ ์ ์ฅํ๋ ๋ช ๋ น์ด๋ค์ ์ดํด๋ณด์.
- ์ด๋ค์์ผ๋ก ์ ๋ ฅ(์ค์ )ํ๋ ์ง๋ ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์งํํ์๋ค.
1 2 3 4 5 6 7 8 9 10
# eth0์ ๋ ธ๋(๊ด๊ตฌ) ์ ์ฅ ๋ช ๋ น์ด > geth console # ๋ค๋ง ๋ณดํต์ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ๋ ธ๋(eth0)์ ๋ค์ํ ์ฃผ์ ๋ฐ ์ค์ ์ ๋ถ์ด๊ณ ์งํํ๋ค. > geth --networkid 5245 --port 30303 --maxpeers 2 --datadir ~/dev/eth_localdata --rpcaddr 0.0.0.0 --nodiscover --nousb console >> ~/eth0.log # ์ผ๋จ ์ด๊ฑธ๋ก ์ฑ๊ตด ์ฑ๊ณต geth --datadir ~/dev/eth_localdata --nodiscover --nousb --networkid 5245 console # ๋งจ ๋ง์ง๋ง์ 2>> ~/eth0.log๋ฅผ ๋ถ์ด๋ฉด, ์งํ๊ธฐ๋ก์ root์ฃผ์์ eth0.log๋ฅผ ๋ง๋ค์ด ์ ์ฅํ๋ค.๋ ๋ป.
1 2 3 4 5 6 7
# ์งํ ๋์ค ERROR ๋ชจ์ Failed to enumerate USB devices => --nousb ์ถ๊ฐํด์ฃผ๋ฉด ์ฌ๋ผ์ง. #if you want USB wallet support disabled. By default it's enabled. Looking for peers => --nodiscover ์ถ๊ฐํด์ฃผ๋ฉด ์ฌ๋ผ์ง # --nodiscover ์ต์ ์ ๊ฐ์ ์ ๋ค์์ค ๋ธ๋ก๊ณผ ๋คํธ์ํฌID์ ์๋ ๋ ธ๋๋ค์ด ์ฐ๊ฒฐํ๋ ๊ฒ์ ๋ฐฉ์ง
โ
20.09.02 ํ ์ผ..
์ด์ ๊น์ง ์งํํ ๋ด์ฉ ๋ณด๊ฐ & geth ์ง์ (๊ด๊ตฌ) ํ ๋ช ๋ น์ด ์ ๋ฆฌ
๊ด๊ตฌ์ ์ง์ ํ์ผ๋๊น. ์ผํ ์ฌ๋๐ทโโ๏ธ์ ๋ฑ๋กํด์ฃผ๊ณ , ์ฑ๊ตดํ ๊ด๋ฌผ(coin)์ ์ ์ฅํ ๊ณณ๐(coinbase) ๋ฑ ์ถ๊ฐ ๋ฑ๋ก์ด ํ์ํ๋ค.
-
๋จผ์ ์ผํ ์ฌ๋๐ทโโ๏ธ(EOS ๊ณ์ )์ ๋ฑ๋กํด์ฃผ์.
โ ์ฌ๊ธฐ์ ์ ๊น.!
EOS๋?
์ด์ค์ค(EOS)๋ ์์์ง๋ถ์ฆ๋ช (DPoS) ๋ฐฉ์์ ์ฌ์ฉํ๋ ์ 3์ธ๋ ์ํธํํ. ์ด์ค์ค๋ ์ด๋๋ฆฌ์์ ๋๋ฆฐ ์ฒ๋ฆฌ ์๋์ ๋์ ์์๋ฃ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋์์ผ๋ก ๋ฑ์ฅํ์๋ค. ์ด์ค์ค๋ ๋ถ์ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ธ ๋์ฑ(DApp)์ ๊ตฌ๋ํ ์ ์๋ ํ๋ซํผ์ ์ ๊ณตํจ์ผ๋ก์จ ๋ฒ์ฉ์ ์ธ ๋ธ๋ก์ฒด์ธ ์ด์์ฒด์ (OS)๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ํ๋ก์ ํธ.
1 2 3
personal.newAccount("eth") #์ฒ์ ๋ฑ๋ก๋ ์ผํ ์ฌ๋๐ทโโ๏ธ์ ์๋์ผ๋ก ์ ์ฅํ ๊ณณ๐(coinbase) ์ผ๋ก ์ง์ ๋๋ค. #๋๋ ๊ณ์ ์ 2๊ฐ ๋ง๋ค์ด์ ์งํํ๋ค.
personal๋ช ๋ น์ด ์๋ฏธ personal.newAccount(“eth”) eth๋ฅผ ๋น๋ฐ๋ฒํธ๋ก ํ๋ ๊ณ์ ์์ฑ (keystore ์ถ๊ฐ) personal.listAccounts ๋ฑ๋ก๋ ๊ณ์ ๋ฆฌ์คํธ ํ์ธ โ
-
๊ทธ๋ผ ์ด์ ์ฑ๊ตดํด๋ณด์
1
miner.start(1) => #์ฝ์ธ 1๊ฐ ์ฑ๊ตดํ ๋๊น์ง ์งํ
miner(์ฑ๊ตด๊ด๋ จ) ๋ช ๋ น์ด ์๋ฏธ miner.start() ()์์ ์ซ์ ๋งํผ ์ฑ๊ตด. ๋น์๋๋ฉด ๊ณ์ ์ฑ๊ตด. miner.stop() ์ฑ๊ตด ์ค๋จ miner.setEtherbase() ์ฑ๊ตด ๋ณด์์ ์ค ๊ณ์ ์ ๋ฑ๋ก ์ ์์ ์ผ๋ก ์ฑ๊ตด์ด ๋๋ฉด Successfully sealed new block ๊น์ง ํ์ธํ ์ ์๋ค.
โ
์ด์ธ์ eth์์์ ์ฌ์ฉํ๋ ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ์ ๋ฆฌํ๋ค.
eth๋ช ๋ น์ด ์๋ฏธ eth.accounts (personal.listAccounts์ ๋์ผ) ํ์ฌ ์์ฑ๋ ์ด ๊ณ์ ํ์ธ eth.blockNumber ํ์ฌ ์ฑ๊ตด๋ ๋ธ๋ก์ ๋ฒํธ eth.hashrate ํด์๋ ์ดํธ(์งํ์๋?๋ฅผ ์ ์ ์์) eth.coinbase ์ฑ๊ตด์ด ์งํ๋๋ฉด ๋ณด์์ ๋ฐ์ ๊ณ์ . eth.mining ํ์ฌ ์ฑ๊ตด์ค์ธ์ง ์ฌ๋ถ eth.getBalance(account[0]) ๊ณ์ข ์๊ณ ์กฐํ eth.getTranaction() ()์์ ์ซ์๋ฒํธ์ ํธ๋์ญ์ ์ ์ ๋ณด eth.sendTransaction({from:account, to:account, value:wei}) ํธ๋์ญ์ ๋ณด๋ด๊ธฐ eth.pendingTransactions ์ฒ๋ฆฌ ๋๊ธฐ ์ค์ธ ํธ๋์ญ์ *์ด๊ฒ ๋ง๊ณ ๋ ๋ช ๋ น์ด๊ฐ ๋ ์์ ์ ์์ผ๋ ํ์ํ ๊ฒ์ ์ฐพ์๋ณด์.
โ
20.09.03 ํ ์ผ..
์ด์ ๊น์ง ์งํํ ๋ด์ฉ ๋ณด๊ฐ & ์ค์ต ์งํ
โ
โจpublic blockchain๊ณผ private blockchain์ ์ฐจ์ด
- public blockchain์ ์ ์ธ๊ณ ์ฌ๋ ์ด๋ ๋๊ตฌ๋ blockchain์ ์ ๊ทผํ์ฌ data๋ฅผ ์ฝ์ ์๋ ์๊ณ transaction์ ๋ ๋ฆด ์๋ ์๋ค. ๋ํ ์ฑ๊ตด(consensus process)์ ์ฐธ์ฌํ ์๋ ์๋ค.
- private blockchain์ ๊ฐ์ธ ๋๋ ํ๋์ ์กฐ์ง์ด blockchain์ ๋ํ ์ ๊ทผ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค. ์ด๋ก ์ธํด private network์ ์ฐธ์ฌํ๊ธฐ ์ํด์๋ ํด๋น ๊ด๋ฆฌ์์ ํ๋ฝ์ด ํ์ํ๋ค.
โ
์ฑ๊ตด์ด ์ ๋์๋์ง ํ์ธํด๋ณด์.
|
|
โ
์ด๋ฅผ web3์ ์ด์ฉํด ์๊ณ ๋จ์๋ฅผ ๋ฐ๊ฟ ํ์ธํด๋ณด์
|
|
โ
์ด์ EOS๊ณ์ ๊ฐ์ ์ฝ์ธ๋ค์ ์ก๊ธํด์ค๋ณด์ => ์ด๋ฅผ ํธ๋์ญ์ (Transaction) ํ๋ค๊ณ ํ๋ค.
ํ์ฌ EOS๊ณ์ ์ด 2๊ฐ๊ฐ ์๋ค. (personal.listAccounts๋ก ํ์ธ ๊ฐ๋ฅ)
โ
๊ธฐ์ตํด์ผ ํ ์ ์ ๊ณ์ ๋ค์ด ๋ฆฌ์คํธ๋ก ๋ด๊ฒจ ์์ผ๋ฉฐ, ์ด๋
์ด๋ฐ ์์ผ๋ก ํ์ธ(ํํ)์ด ๊ฐ๋ฅํ๋ค.
โ
Transaction
eth0 ์์ account[0] ์ด๋ account[1] ์ด ์๊ณ coinbase๋ accounts[0] ์ธ ์ํฉ์์ account[0]์์ ์ฑ๊ตดํ๊ฑธ account[1]๋ก ๋ณด๋ผ ๊ฒ์ด๋ค. => ์ด๋ฅผ ํธ๋์ญ์ (Transaction) ํ๋ค๊ณ ํ๋ค.
ํธ๋์ญ์ ์ ์ํด์๋ ๋จผ์ ๊ณ์ ๋ค์ ์ ๊ธ ํด์ ๊ฐ ํ์ํ๋ค. EOS๊ณ์ ์ ๋ง๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ธ ์ํ์ธ๋ฐ,
|
|
โ
์ด์ ํธ๋์ญ์ ์ด ์๋์ง ํ์ธํด๋ณด์. (eth.pendingTransactions => ํธ๋์ญ์ ํ์ธ)
์ ๋ ฅํ transaction์ด ์์ผ๋ ๋น์ด์๋ค.
โ
์ด์ ์ก๊ธ(Transaction) ํด๋ณด์.
|
|
์์ด ์ด์๋ ์ฑ๊ณต์ ์ผ๋ก ๋ช ๋ น์ ์ฒ๋ฆฌ ํ ๊ฒ ๊ฐ๋ค.
ํ์ง๋ง accounts[1]๊ณ์ ์ ๋์ด ๋ค์ด์ค์ง ์์๋ค.
โ
ํธ๋์ญ์ ์ ๋ฑ๋ก๋๊ฒ ํ์ธ๋๋ค. ์ ์งํ์ ์๋ฌ์๊น….
ํ์ง๋ง accounts[1]๊ณ์ ์ ๋์ด ๋ค์ด์ค์ง ์์๋ค.
*blockNumber: null
๋ก accounts[0]์์ ๋ณด๋ธ ํธ๋์ญ์
์ด accounts[1]์ ๋ธ๋ก์ ํฌํจ๋์ง ์์์ ์ ์ ์๋ค.
โ
์ก๊ธ ํ์ธ(sendTransaction์ผ๋ก ํธ๋์ญ์ ์ ๋ฐํํด๋ ์ฒ๋ฆฌ์๋จ => ๋ธ๋ก์ฒด์ธ์์๋ ๋ธ๋ก ์์ ๊ทธ ํธ๋์ญ์ ์ด ํฌํจ๋ ๋ ํธ๋์ญ์ ๋ด์ฉ์ด ์คํ)
โจ ๊ฐ๋จํ ํธ๋์ญ์ ์ ๋ฑ๋กํ๊ณ miner.start() command๋ก ์ฑ๊ตด์ ์์ํ๋ ๊ฒฝ์ฐ(๋ธ๋ก ํ์ฑํ?)์ ํธ๋์ญ์ ์ด ๋ฐ์๋๋ค!
|
|
โ
๊ทธ๋ฆฌ๊ณ
|
|
์ฌ๊ธฐ๊น์ง ์งํํ๋ฉด์, ๋ ๋ธ๋ก๊ทธ๋ฅผ ๋งค์ฐ ๋ง์ด ์ฐธ๊ณ ํ๊ณ , ๋์์ด ๋์์ด์ ์๊ฐํ๋ค.
Mr.Latte - [Go Ethereum ์ฌ์ฉ ๋ฒ]
Allg - [Geth ์ค์น ๋ฐ ํ ์คํธ ๋คํธ์ํฌ์์ ์ก๊ธํ๊ธฐ]