Contents

Block_Chain setting & basic

โ€‹

๐ŸŽˆ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ ๋ธ”๋ก์ฒด์ธ ์ฑ„๊ตด ๋ฐ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ ์ •๋ฆฌ

โ€‹

1. geth(Go-ethereum) ์„ค์น˜

๋ธ”๋ก์ฒด์ธ ๊ธฐ์ˆ ์€ ์ค‘์•™์ง‘์ค‘ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜๊ธฐ๋ฅผ ๋“ค๊ณ  ๋‚˜์˜จ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์•™ ์„œ๋ฒ„ ์ด๋Ÿฐ๊ฒŒ ์—†๋‹ค. ์ฆ‰ ๋ˆ„๊ตฌ๋ผ๋„ ํ•ด๋‹น ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ธ์ œ๋ผ๋„ ๋ธ”๋ก์ฒด์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹ฑํฌํ•ด์ฃผ๋Š” ๋กœ์ปฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด ๋ฐ›์•„ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ์— ์ฐธ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ์•ž์„œ ๋งํ•œ ๋กœ์ปฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์šด ๋ฐ›์œผ๋ฉด ์ฐธ์—ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด ํ”„๋กœ๊ทธ๋žจ๋“ค ์ค‘ ํ•˜๋‚˜์ธ GO ๋กœ ์งœ์—ฌ์ง„ Go Ethereum(์ค„์—ฌ์„œ, geth)์„ ์„ค์น˜ํ•ด๋ณธ๋‹ค.

์ž‘์„ฑ๋‹น์‹œ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์ธ 1.9.20 for windows๋กœ ๋‹ค์šด์„ ๋ฐ›๋Š”๋‹ค.

  1. ๋‹ค์šด ๋ฐ›๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ๋Š”๋ฐ ์ถ”๊ฐ€์ •๋ณด๋ˆ„๋ฅด๊ณ  ์‹คํ–‰๋ˆ„๋ฅด๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.

  2. devolop ๋ญ์‹œ๊ธฐ๋Š” ์„ ํƒํ•˜์ง€ ์•Š์•˜๊ณ , next๋ฅผ ๋ˆ„๋ฃจ๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.

  3. ์„ค์น˜๊ฐ€ ๊น”๋”ํžˆ ๋งˆ๋ฌด๋ฆฌ ๋˜์ง€ ์•Š๊ณ  ๊ฒฝ๊ณ ์ฐฝ์ด ๋–ด๋Š”๋ฐ, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

    • ๊ฒ€์ƒ‰ โ†’ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŽธ์ง‘ โ†’ ๊ณ ๊ธ‰ โ†’ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ โ†’ Path๋”๋ธ”ํด๋ฆญ โ†’ ์ƒˆ๋กœ๋งŒ๋“ค๊ธฐ โ†’ C:\Program Files\Geth ์ถ”๊ฐ€
  4. cmd ์ฐฝ์„ ์—ด์–ด(๊ด€๋ฆฌ์ž: ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ) geth๋ฅผ ์ž…๋ ฅํ•ด ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค._______๋

    โ€‹

2. Web3 ์„ค์น˜

๋ชจ๋“  ์ž๋ฃŒ์™€ ์ •๋ณด๊ฐ€ ๋ถ„์‚ฐํ™”, ๋ถ„๊ถŒํ™”๋œ ์ฐจ์„ธ๋Œ€ ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋กœ์„œ, ์„œ๋ฒ„๊ฐ€ ์—†๋Š” ํ˜์‹ ์ ์ธ ์ธํ„ฐ๋„ท ๋ถ„์‚ฐํ˜• ์›น.

web3.js๋Š” JavaScript ๊ธฐ๋ฐ˜์œผ๋กœ Dapp ์ด๋‚˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉ. (์ถœ์ฒ˜: ์œ„ํ‚ค)

โ€‹

์ด๋ฏธ Vue_CLI ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•ด ๋†“์€ ๊ฒƒ์ด ์žˆ์–ด์„œ

  1. Terminal ์—์„œ npm install web3 ์ž…๋ ฅํ•ด์„œ web3๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

โ€‹

3. VirtualBox ์„ค์น˜

VirtualBox: ํ•˜๋“œ์›จ์–ด๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์„œ ๊ทธ ์œ„์—์„œ ์šด์˜์ฒด์ œ๊ฐ€ ์ž‘๋™ํ•˜๋„๋กํ•˜๋Š” ๊ธฐ์ˆ 

  • Windows hosts ์™€ All supported platforms ๋‘๊ฐœ๋ฅผ ๋‹ค์šด ๋ฐ›๋Š”๋‹ค.

    1. Windows hosts: ๊ทธ๋ƒฅ next์—ฐํƒ€ํ•˜์—ฌ ์„ค์น˜

    2. All supported platforms์„ ๋”๋ธ”ํด๋ฆญํ•˜์—ฌ ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ


๐Ÿ‘์ „์ฒด ์„ค์น˜๋Š” ์ด ๋ธ”๋กœ๊ทธ์˜ ์„ค์น˜ ๋™์˜์ƒ์„ ์ฐธ๊ณ ํ•˜์—ฌ ์„ค์น˜๋ฅผ ์ง„ํ–‰

โ€‹

4. Vagrant ์„ค์น˜

Vagrant๋Š” ๊ฐ€์ƒ๋จธ์‹ ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ Vagrant๋กœ ์„ค์ •ํ•ด ๋†“์€ ๊ฐ€์ƒ๋จธ์‹  Box๋ฅผ ๊ฐ„๋‹จํ•œ ๋ช…๋ น์–ด๋กœ ์†์‰ฝ๊ฒŒ ์„ค์น˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ€์ƒ ๋จธ์‹ ๊ณผ ํ˜ธ์ŠคํŠธ ๋จธ์‹ ๊ณผ์˜ ํ™˜๊ฒฝ์„ค์ •๋„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์šด๋กœ๋“œ๋Š” ์—ฌ๊ธฐ์„œ ์ง„ํ–‰.

โ€‹

5. Remix IDE ์„ค์ •

์ด๋”๋ฆฌ์›€ ์Šค๋งˆํŠธ ์ปจํŠธ๋ž™ํŠธ ํ”„๋ ˆ์ž„์›Œํฌ

์—ฌ๊ธฐ์„œ ์ง„ํ–‰!

โ€‹

๐ŸŽˆ๋ณธ๊ฒฉ์ ์ธ ๋ธ”๋ก์ฒด์ธ ๊ด€๋ จ ๊ฐ€์ƒํ™˜๊ฒฝ ์„ธํŒ… ๋ฐ ์ฑ„๊ตด ์ง„ํ–‰

20.09.01 ํ•œ ์ผ..


โ› ๊ด‘์‚ฐ์—์„œ ์ผํ•˜๋Š” ๊ฒƒ์„ ์˜ˆ์‹œ๋กœ!

  • VirtualBox(๐Ÿž): ๋ธ”๋ก์ฒด์ธ ์ƒ์„ฑ ๋ฐ ์ฑ„๊ตด์„ ์œ„ํ•œ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ์„ธํŒ… (๋‚ด๊ฐ€ ์ฑ„๊ตดํ•  ์‚ฐ์„ ๊ณ ๋ฅด๋Š” ๊ฒƒ)

  • Vagrant(๐ŸŸ): ๊ฐ€์ƒํ™˜๊ฒฝ์—์„œ ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋“ฑ, ๋ธ”๋ก์ฒด์ธ ๊ด€๋ จ ํ”„๋ ˆ์ž„์›Œํฌ (๊ด‘๊ตฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ)

  • geth(๐Ÿ“œ๐Ÿ‘ทโ€โ™‚๏ธ): ๋ธ”๋ก์ฒด์ธ ๋…ธ๋“œ์˜ ๊ด€๋ จ ํ”„๋กœ๊ทธ๋žจ (๊ด‘๊ตฌ์— ์–ด๋–ค ์‚ฌ๋žŒ์ด ๋“ค์–ด์˜ค๊ณ  ์–ด๋–ค ์‚ฌ๋žŒ์„ ํŒŒ๊ฒฌํ• ์ง€ ๋“ฑ๋“ฑ)

    โ€‹

  1. ๋ธ”๋ก์ฒด์ธ ๊ด€๋ จ ์ž‘์—…์„ ํ•  ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ํ›„ 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์ด๋ฉด ์˜คํ”ˆํ•œ ์ƒํƒœ
    

    โ€‹

  2. ์—ฌ๊ธฐ ๊ฐ€์ง€ ์ž‘์—…์„ ํ–ˆ๋‹ค๋ฉด vitualbox์— ๋‘๊ฐœ์˜ ๋…ธ๋“œ(๊ด‘๊ตฌ)๊ฐ€ ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    โ€‹

๋“ฑ๋ก๋œ ๋…ธ๋‘(๊ด‘๊ตฌ) ์ค‘์—์„œ eth0์„ ๋จผ์ € ์„ค์ •ํ•ด๋ณด์ž

์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰ํ•œ ํด๋”์—์„œ Terminal์„ ์—ด๊ณ  vagrant ๋ช…๋ น์–ด๋กœ ๋…ธ๋“œ(๊ด‘๊ตฌ)๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค.

๊ธฐ๋ณธ์ ์€ vagrant ๋ช…๋ น์–ด

๋ช…๋ น์–ด ์„ค๋ช…
vagrant up ์ƒํƒœํ™•์ธํ• ๊ฐ€์ƒ๋จธ์‹ ์ด๋ฆ„ ๊ฐ€์ƒ๋จธ์‹  ๊ธฐ๋™
vagrant status ์ƒํƒœํ™•์ธํ• ๊ฐ€์ƒ๋จธ์‹ ์ด๋ฆ„ ๊ฐ€์ƒ๋จธ์‹  ์ƒํƒœ ํ™•์ธ
vagrant ssh ์ ‘์†ํ• ๊ฐ€์ƒ๋จธ์‹ ์ด๋ฆ„ ๊ฐ€์ƒ๋จธ์‹ ์— ์ ‘์†
vagrant halt ๋ฉˆ์ถœ๊ฐ€์ƒ๋จธ์‹ ์ด๋ฆ„ ๊ฐ€์ƒ๋จธ์‹  ์ •์ง€
vagrant suspend ๊ฐ€์ƒ๋จธ์‹  ํœด๋ฉด
vagrant resume ๊ฐ€์ƒ๋จธ์‹  ํœด๋ฉด์—์„œ ๋ณต์›
vagrant reload ๊ฐ€์ƒ๋จธ์‹  ์žฌ์‹œ๋™
vagrant destroy ๊ฐ€์ƒ๋จธ์‹  ์ œ๊ฑฐ

*๋ชจ๋“  ๋ช…๋ น์–ด๊ฐ€ vagrant up ์ƒํƒœํ™•์ธํ• ๊ฐ€์ƒ๋จธ์‹ ์ด๋ฆ„ ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

โ€‹

  1. ์ด์ œ ๋…ธ๋“œ(๊ด‘๊ตฌ)๋ฅผ ์—ด์—ˆ์œผ๋‹ˆ ์ ‘์†ํ•ด๋ณด์ž => vagrant ssh ์ ‘์†ํ• ๊ฐ€์ƒ๋จธ์‹ ์ด๋ฆ„

    โ€‹

  2. 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ํด๋”๋กœ ์ด๋™ํ•œ๋‹ค.
    

    โ€‹

  3. ๋‚˜์˜ ์ตœ์ดˆ์˜ ๋ธ”๋ก(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์— ๋ชจ์•„๋†“๊ฒ ๋‹ค๋Š” ๋œป
    

    โ€‹

  4. ์ด์ œ ๋…ธ๋“œ(๊ด‘๊ตฌ)๋ฅผ ๊ด€๋ฆฌํ•  ๊ณ„์ •(๐Ÿ™‹โ€โ™‚๏ธ์‚ฌ๋žŒ)๋„ ๋“ฑ๋กํ•ด์ค€๋‹ค.

    1
    2
    
    > geth account new
    # ์ด ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์•„์ด๋””๋Š” ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง„ํ–‰๋œ๋‹ค.
    
    1
    2
    
    # ๊ณ„์ •์ด ์ž˜ ๋งŒ๋“ค์–ด ์ง„ ๊ฒƒ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 
    > geth account list
    

    โ€‹

  5. ์ด์ œ ๋…ธ๋“œ(๊ด‘๊ตฌ)์— ์–ด๋–ค ์‚ฌ๋žŒ๋“ค์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š”์ง€์™€ ์ž…์žฅํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์„ ์‚ดํŽด๋ณด์ž.

    • ์–ด๋–ค์‹์œผ๋กœ ์ž…๋ ฅ(์„ค์ •)ํ•˜๋Š” ์ง€๋Š” ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ง„ํ–‰ํ•˜์˜€๋‹ค.
     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) ๋“ฑ ์ถ”๊ฐ€ ๋“ฑ๋ก์ด ํ•„์š”ํ•˜๋‹ค.

  1. ๋จผ์ € ์ผํ•  ์‚ฌ๋žŒ๐Ÿ‘ทโ€โ™‚๏ธ(EOS ๊ณ„์ •)์„ ๋“ฑ๋กํ•ด์ฃผ์ž.

    โœ‹ ์—ฌ๊ธฐ์„œ ์ž ๊น.!

    EOS๋ž€?

    ์ด์˜ค์Šค(EOS)๋Š” ์œ„์ž„์ง€๋ถ„์ฆ๋ช…(DPoS) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ์ œ3์„ธ๋Œ€ ์•”ํ˜ธํ™”ํ. ์ด์˜ค์Šค๋Š” ์ด๋”๋ฆฌ์›€์˜ ๋Š๋ฆฐ ์ฒ˜๋ฆฌ ์†๋„์™€ ๋†’์€ ์ˆ˜์ˆ˜๋ฃŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์•ˆ์œผ๋กœ ๋“ฑ์žฅํ•˜์˜€๋‹ค. ์ด์˜ค์Šค๋Š” ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ธ ๋””์•ฑ(DApp)์„ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๋ฒ”์šฉ์ ์ธ ๋ธ”๋ก์ฒด์ธ ์šด์˜์ฒด์ œ(OS)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ.

    1
    2
    3
    
    personal.newAccount("eth")
    #์ฒ˜์Œ ๋“ฑ๋ก๋œ ์ผํ•  ์‚ฌ๋žŒ๐Ÿ‘ทโ€โ™‚๏ธ์€ ์ž๋™์œผ๋กœ ์ €์žฅํ•  ๊ณณ๐Ÿ›’(coinbase) ์œผ๋กœ ์ง€์ •๋œ๋‹ค.
    #๋‚˜๋Š” ๊ณ„์ •์„ 2๊ฐœ ๋งŒ๋“ค์–ด์„œ ์ง„ํ–‰ํ•œ๋‹ค.
    
    personal๋ช…๋ น์–ด ์˜๋ฏธ
    personal.newAccount(“eth”) eth๋ฅผ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํ•˜๋Š” ๊ณ„์ • ์ƒ์„ฑ (keystore ์ถ”๊ฐ€)
    personal.listAccounts ๋“ฑ๋ก๋œ ๊ณ„์ • ๋ฆฌ์ŠคํŠธ ํ™•์ธ

    โ€‹

  2. ๊ทธ๋Ÿผ ์ด์ œ ์ฑ„๊ตดํ•ด๋ณด์ž

    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์— ์ฐธ์—ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด๋‹น ๊ด€๋ฆฌ์ž์˜ ํ—ˆ๋ฝ์ด ํ•„์š”ํ•˜๋‹ค.

โ€‹

์ฑ„๊ตด์ด ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

1
2
3
4
eth.getBalance(eth.accounts[0])
eth.getBalance(eth.accounts[1])

# ์ด์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ EOS๊ณ„์ •๋ณ„๋กœ ํ™•์ธ

โ€‹

์ด๋ฅผ web3์„ ์ด์šฉํ•ด ์ž”๊ณ ๋‹จ์œ„๋ฅผ ๋ฐ”๊ฟ” ํ™•์ธํ•ด๋ณด์ž

1
2
web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")

โ€‹

์ด์ œ EOS๊ณ„์ • ๊ฐ„์— ์ฝ”์ธ๋“ค์„ ์†ก๊ธˆํ•ด์ค˜๋ณด์ž => ์ด๋ฅผ ํŠธ๋žœ์žญ์…˜(Transaction) ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

ํ˜„์žฌ EOS๊ณ„์ •์ด 2๊ฐœ๊ฐ€ ์žˆ๋‹ค. (personal.listAccounts๋กœ ํ™•์ธ ๊ฐ€๋Šฅ)

โ€‹

๊ธฐ์–ตํ•ด์•ผ ํ•  ์ ์€ ๊ณ„์ •๋“ค์ด ๋ฆฌ์ŠคํŠธ๋กœ ๋‹ด๊ฒจ ์žˆ์œผ๋ฉฐ, ์ด๋Š”

์ด๋Ÿฐ ์‹์œผ๋กœ ํ™•์ธ(ํ‘œํ˜„)์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

โ€‹

Transaction

eth0 ์•ˆ์— account[0] ์ด๋ž‘ account[1] ์ด ์žˆ๊ณ  coinbase๋Š” accounts[0] ์ธ ์ƒํ™ฉ์—์„œ account[0]์—์„œ ์ฑ„๊ตดํ•œ๊ฑธ account[1]๋กœ ๋ณด๋‚ผ ๊ฒƒ์ด๋‹ค. => ์ด๋ฅผ ํŠธ๋žœ์žญ์…˜(Transaction) ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜์„ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ๊ณ„์ •๋“ค์˜ ์ž ๊ธˆ ํ•ด์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. EOS๊ณ„์ •์„ ๋งŒ๋“ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž ๊ธˆ ์ƒํƒœ์ธ๋ฐ,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# ์ž ๊ธˆํ•ด์ œ command ๋กœ ํ•ด์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. (์ด๋”๋ฅผ ๋ณด๋‚ด๋Š” EOS๊ณ„์ •๋งŒ ์ž ๊ธˆ์„ ํ’€์–ด์ฃผ๋ฉด ๋œ๋‹ค.)

personal.unlockAccount(eth.accounts[0])
#๊ธฐ๋ณธ์ ์ธ ์„ธํŒ…, ์ž…๋ ฅ ํ›„ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ๊ณ„์ • ์ž ๊ธˆ ํ•ด์ œ(์ž ๊ธˆ ํ•ด์ œ ์œ ํšจ์‹œ๊ฐ„ ๊ธฐ๋ณธ - 300์ดˆ)

personal.unlockAccount(eth.accounts[0], "inputpassword")
#๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ž…๋ ฅ๋˜์–ด ๊ณ„์ • ์ž ๊ธˆ ํ•ด์ œ(๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํ•„์š”X)

personal.unlockAccount(eth.accounts[0], "inputpassword", 0)
#๊ณ„์ • ์ž ๊ธˆ ํ•ด์ œ(0 - Geth ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•ด์ œ)

โ€‹

์ด์ œ ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž. (eth.pendingTransactions => ํŠธ๋žœ์žญ์…˜ ํ™•์ธ)

์ž…๋ ฅํ•œ transaction์ด ์—†์œผ๋‹ˆ ๋น„์–ด์žˆ๋‹ค.

โ€‹

์ด์ œ ์†ก๊ธˆ(Transaction) ํ•ด๋ณด์ž.

1
2
3
eth.sendTransaction({from: eth.accounts[0], to: eth.accounts[1], value: web3.toWei(10, "ether")})

# eth.accounts[0]์—์„œ eth.accounts[1]๋กœ web3๋‹จ์œ„๋กœ 10์ด๋”๋ฅผ ๋ณด๋‚ด๊ฒ ๋‹ค.๋Š” ๋œป.

์ƒ‰์ด ์ด์˜๋‹ˆ ์„ฑ๊ณต์ ์œผ๋กœ ๋ช…๋ น์„ ์ฒ˜๋ฆฌ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

ํ•˜์ง€๋งŒ accounts[1]๊ณ„์ •์— ๋ˆ์ด ๋“ค์–ด์˜ค์ง€ ์•Š์•˜๋‹ค.

โ€‹

ํŠธ๋žœ์žญ์…˜์€ ๋“ฑ๋ก๋œ๊ฒŒ ํ™•์ธ๋œ๋‹ค. ์™œ ์ง„ํ–‰์€ ์•ˆ๋ฌ์„๊นŒ….

ํ•˜์ง€๋งŒ accounts[1]๊ณ„์ •์— ๋ˆ์ด ๋“ค์–ด์˜ค์ง€ ์•Š์•˜๋‹ค.

*blockNumber: null๋กœ accounts[0]์—์„œ ๋ณด๋‚ธ ํŠธ๋žœ์žญ์…˜์ด accounts[1]์˜ ๋ธ”๋ก์— ํฌํ•จ๋˜์ง€ ์•Š์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

โ€‹

์†ก๊ธˆ ํ™•์ธ(sendTransaction์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ๋ฐœํ–‰ํ•ด๋„ ์ฒ˜๋ฆฌ์•ˆ๋จ => ๋ธ”๋ก์ฒด์ธ์—์„œ๋Š” ๋ธ”๋ก ์•ˆ์— ๊ทธ ํŠธ๋žœ์žญ์…˜์ด ํฌํ•จ๋  ๋•Œ ํŠธ๋žœ์žญ์…˜ ๋‚ด์šฉ์ด ์‹คํ–‰)

โœจ ๊ฐ„๋‹จํžˆ ํŠธ๋žœ์žญ์…˜์„ ๋“ฑ๋กํ•˜๊ณ  miner.start() command๋กœ ์ฑ„๊ตด์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ(๋ธ”๋ก ํ™œ์„ฑํ™”?)์— ํŠธ๋žœ์žญ์…˜์ด ๋ฐ˜์˜๋œ๋‹ค!

1
2
3
> miner.start(1)				# ์ด๊ฑธ๋กœ ์ž ์‹œ ์ฑ„๊ตด์„ ์ผฐ๋‹ค๊ฐ€.
> miner.stop()					# ์œผ๋กœ ์ฑ„๊ตด์„ ๊บผ์ฃผ๊ณ 
> eth.pendingTransactions		# ์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๋‚ด์šฉ์„ ๋‹ค์‹œ ํ™•์ธํ•ด์ฃผ๋ฉด ๋น„์–ด์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

โ€‹

๊ทธ๋ฆฌ๊ณ 

1
2
3
4
5
# EOS๊ณ„์ •(accounts[1])์˜ ์ž”์•ก์„ ํ™•์ธํ•ด๋ณด๋ฉด

> eth.getBalance(eth.accounts[1])
> web3.fromWei(eth.getBalance(eth.accounts[1]), "ether")
#๋‘˜๋‹ค ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋ฉฐ ์†ก๊ธˆ์ด ์ž˜ ์ง„ํ–‰๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋ฉด์„œ, ๋‘ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งค์šฐ ๋งŽ์ด ์ฐธ๊ณ ํ–ˆ๊ณ , ๋„์›€์ด ๋˜์—ˆ์–ด์„œ ์†Œ๊ฐœํ•œ๋‹ค.

Mr.Latte - [Go Ethereum ์‚ฌ์šฉ ๋ฒ•]

Allg - [Geth ์„ค์น˜ ๋ฐ ํ…Œ์ŠคํŠธ ๋„คํŠธ์›Œํฌ์—์„œ ์†ก๊ธˆํ•˜๊ธฐ]