달력

12

« 2020/12 »

  •  
  •  
  • 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
  •  
  •  
반응형


 

 

스마트 계약 사례 - Fizzy (피지)

·         2017 세계적인 프랑스 보험회사인 AXA 이더리움 스마트 계약을 이용하여 비행기 지연에 대한 보상 보험을 만들었습니다.

·         보험 계약자는 해당 스마트 계약에 보험료를 납입함으로써 자동으로 계약이 체결됩니다.

·         향후 비행기 운항 정보를 스마트 계약이 수신하여 만약 2시간 이상 지연이 발생하면 보험금을 계약자에게 지급하고, 정상적으로 출항하였다면 보험료를 AXA 가져가게 됩니다.

 

 

 

https://fizzy.axa/en-gb/


 

 


 



반응형
Posted by codedragon codedragon

댓글을 달아 주세요

반응형


 

 

P2P(개인 개인) 네트워크 방식 장점

 

장점

설명

거래 중개자의 개입이 불필요

·         거래의 효율성과 투명성은 높아집니다.

·         적은 비용으로 더욱 빠르고 안전한 거래를 있습니다

거래 정보의 위변조가 불가능

·         거래의 신뢰성이 높아집니다.

·         거래정보의 추적이 쉬워집니다

 

 


반응형
Posted by codedragon codedragon

댓글을 달아 주세요

반응형


 

 

블록체인 저장 방식

·       거래가 발생하게 되면 거래된 정보의 검증을 위해 일정 시간(10) 동안 발생한 거래를 모아서 블록(block) 생성하고, 이러한 블록들을 순차적으로 연결하여 체인(chain) 형태를 구성하게 되기 때문에  블록체인이라고 부르는 것입니다.

·       블록체인은 블록들을 모아서 체인으로 묶어 놓은 일종의 데이터를 저장하는 방식과 같습니다.


 

암호화폐는 블록체인 위에 암호화폐 거래내역을 블록체인에 저장하거나 암호화폐를 발생하는 방법을 블록체인에 기록한다든가 블록체인의 블록을 새로쓴 사람에게 암호화폐를 발행해준다는 든가 하는 방식으로 블록체인과 서로 연결되어 있는 기술이기때문에 암호화폐와 블록체인이 같은 것은 아닙니다.

 


반응형

'Security > BlockChain' 카테고리의 다른 글

스마트 계약 사례 - Fizzy (피지)  (0) 2019.05.15
P2P(개인 대 개인) 네트워크 방식 장점  (0) 2019.05.07
블록체인 저장 방식  (0) 2019.04.29
이더리움의 송금 및 채굴 (Step by Step)  (0) 2019.04.24
이더리움 백서의 구조  (0) 2019.04.19
Struct  (0) 2019.04.13
Posted by codedragon codedragon

댓글을 달아 주세요

반응형



 

 

이더리움의 송금 채굴  (Step by Step)

Ethereum Testnet 설치하고 Ethereum 송금하는 실습과정입니다.

 

Step1: 제네시스 블록 생성 네트워크 구성

Step2: 테스트 네트워크 구동

Step3: 계정 생성 확인

Step4: 이더 송금

Step5: 이더 잔고 확인

Step6: 채굴

Step7: 이더 송금

Step8: balance 체크

Step9: 정보확인

 

 

 

 

 

Step1: 제네시스 블록 생성 네트워크 구성

 

Testnet 구성

mkdir testnet이라는 명령어를 통해서 Testnet 데이터를, 블록체인 데이터를 저장할 디렉터리를 만들어 줍니다.

 

 

osboxes@osboxes:~$ mkdir testnet
osboxes@osboxes:~$
cd testnet/
osboxes@osboxes:~/testnet$ pwd
/home/osboxes/testnet
osboxes@osboxes:~/testnet$

 

 

genesis.json 파일을 생성

 

genesis.json이라는 파일을 생성을 주는데 이것이 genesis 블록을 생성하기 위한 설정 정보를 갖다 주는 것입니다.

 

osboxes@osboxes:~/testnet$ vi genesis.json

 

 

 

 

genesis.json 파일 내용 확인 - Windows

Windows에서 genesis.json 파일을 오픈한 모든 내용을 복사합니다.


 

 

 

genesis.json 파일 내용 붙여넣기

Ubuntu 돌아와서 우분투 콘솔 메뉴에서 붙여넣기 합니다.

메뉴: [Edit] >> [Paste] 붙여넣기 합니다.


 

 

:wp 입력하여 수정한 내용을 파일에 저장한 vi 편집기를 빠져나옵니다.

:wp

 

osboxes@osboxes:~/testnet$ vi genesis.json
osboxes@osboxes:~/testnet$

 

 

 

 

genesis 블록을 생성

geth init 명령어로 genesis 블록을 생성하기 위한, private 블록체인을 운영하기 위한 준비 작업을 마무리하도록 하겠습니다.

datadir 옵션을 주는 datadir 계정폴더 밑의 만든 testnet이라고 하는 디렉터리를 지정하도록 하겠습니다.

그리고 마지막 인자로 genesis 블록에 대한 설정 정보가 있는 genesis.json 파일을 위치를 알려줍니다.

이렇게 하면 지금 genesis 블록에 대한 설정이 완료가 되어서 이제 Ethereum, Testnet 기동하기 위한 준비는 끝나게 됩니다.

 

 

geth init --datadir /home/osboxes/testnet /home/osboxes/testnet/genesis.json

osboxes@osboxes:~/testnet$ geth init --datadir /home/osboxes/testnet /home/osboxes/testnet/genesis.json
WARN [04-02|23:53:45.292] Sanitizing cache to Go's GC limits       provided=1024 updated=328
INFO [04-02|23:53:45.294] Maximum peer count                       ETH=25 LES=0 total=25
INFO [04-02|23:53:45.296] Allocated cache and file handles         database=/home/osboxes/testnet/geth/chaindata cache=16 handles=16
INFO [04-02|23:53:45.422] Writing custom genesis block
INFO [04-02|23:53:45.422] Persisted trie from memory database      nodes=0 size=0.00B time=11.499
µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [04-02|23:53:45.423] Successfully wrote genesis state         database=chaindata                            hash=5704d0
9bc5b0
INFO [04-02|23:53:45.423] Allocated cache and file handles         database=/home/osboxes/testnet/geth/lightchaindata cache=16 handles=16
INFO [04-02|23:53:45.442] Writing custom genesis block
INFO [04-02|23:53:45.442] Persisted trie from memory database      nodes=0 size=0.00B time=3.633
µgcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [04-02|23:53:45.443] Successfully wrote genesis state         database=lightchaindata                            hash=5704d0
9bc5b0
osboxes@osboxes:~/testnet$

 


 

 

 

 

정상 설치 확인

정상적으로 되었는지는 이렇게 tree라는 명령어를 통해서 현재 디렉터리, testnet 디렉터리를 보면 이렇게 데이터들, 블록체인 데이터를 저장하기 위한 설정들이 완료되었음을 확인할 수가 있습니다.

이상으로 여기까지가 genesis 블록 생성을 통한 Ethereum private 네트워크를 또는 테스트 네트워크를 기동하기 위한 준비가 끝난 상황입니다.

 

osboxes@osboxes:~/testnet$ tree .
.
├── genesis.json
├── geth
   ├── chaindata
      ├── 000001.log
      ├── CURRENT
      ├── LOCK
      ├── LOG
      └── MANIFEST-000000
   └── lightchaindata
       ├── 000001.log
       ├── CURRENT
       ├── LOCK
       ├── LOG
       └── MANIFEST-000000
└── keystore

4 directories, 11 files
osboxes@osboxes:~/testnet$

 


 

 

 

 

 

 

 

 

Step2: 테스트 네트워크 구동

 

Testnet 기동을 보도록 하겠습니다.

Testnet geth consol 통해서 Testnet, Ethereum 네트워크를 기동을 시키고 콘솔에 접속을 하게 됩니다.

네트워크 아이디는 현재 우리가 Testnet 구성하는 네트워크의 고유한 아이디인데 숫자로 임의의 값을 설정을 주시면 됩니다.

nodiscover 다른 노드에서 현재 우리가 만든 Testnet, 노드를 검색하지 않도록, nodiscover 통해서 private 블록체인이 되는 것입니다.

maxpeers 통해서 단독 노드를 구성을 합니다.

데이터 디렉터리는 전에 생성했던 testnet으로 설정합니다.

 

geth console --networkid 2080 --nodiscover --maxpeers 0 --datadir /home/osboxes/testnet

osboxes@osboxes:~/testnet$ geth console --networkid 2080 --nodiscover --maxpeers 0 --datadir /home/osboxes/testnet
WARN [04-03|01:19:43.834] Sanitizing cache to Go's GC limits       provided=1024 updated=328
INFO [04-03|01:19:43.948] Maximum peer count                       ETH=0 LES=0 total=0
INFO [04-03|01:19:44.002] Starting peer-to-peer node               instance=Geth/v1.8.23-stable-c9427004/linux-amd64/go1.10.4
INFO [04-03|01:19:44.002] Allocated cache and file handles         database=/home/osboxes/testnet/geth/chaindata cache=164 handles=2048
INFO [04-03|01:19:45.054] Initialised chain configuration          config="{ChainID: 33 Homestead: 0 DAO: <nil> DAOSupport: false EIP150: <nil> EIP155: 0 EIP158: 0 Byzantium: <nil> Constantinople: <nil>  ConstantinopleFix: <nil> Engine: unknown}"
INFO [04-03|01:19:45.054] Disk storage enabled for ethash caches   dir=/home/osboxes/testnet/geth/ethash count=3
INFO [04-03|01:19:45.055] Disk storage enabled for ethash DAGs     dir=/home/osboxes/.ethash             count=2
INFO [04-03|01:19:45.055] Initialising Ethereum protocol           versions="[63 62]" network=2080
INFO [04-03|01:19:45.219] Loaded most recent local header          number=0 hash=5704d0
9bc5b0 td=256 age=49y11mo2w
INFO [04-03|01:19:45.220] Loaded most recent local full block      number=0 hash=5704d0
9bc5b0 td=256 age=49y11mo2w
INFO [04-03|01:19:45.220] Loaded most recent local fast block      number=0 hash=5704d0
9bc5b0 td=256 age=49y11mo2w
INFO [04-03|01:19:45.254] Regenerated local transaction journal    transactions=0 accounts=0
INFO [04-03|01:19:45.707] New local node record                    seq=1 id=7e17b0edf5fc5969 ip=127.0.0.1 udp=0 tcp=30303
INFO [04-03|01:19:45.707] Started P2P networking                   self="enode://c7f5e565736a8957105e708ca4c122a10076b9c66d12b245025

340dfb939ae1b96046687b018dc202e673accbcdf4028b627214152efcb77197

fa00a1d59d2b5@127.0.0.1:30303?discport=0"
INFO [04-03|01:19:45.711] IPC endpoint opened                      url=/home/osboxes/testnet/geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.23-stable-c9427004/linux-amd64/go1.10.4
 modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

Testnet 기동, Ethereum 네트워크가 기동이 되었고 지금 자바스트립트 콘솔에 접속이 되어서 명령어를 실행할 있는 상태입니다.

 

 

 

 

 

 

 

Step3: 계정 생성 확인

 

 

ether0 계정 생성

personal.newaccount 명령을 통해서 계정을 생성을 하도록 하겠습니다. 이때 geth0라고 하는 인자는 어카운트의 암호가 됩니다. 이렇게 하면 주소가 새로 생성된 Ethereum 계정입니다.

 

> personal.newAccount("ether0")
"
0x8c16404f2ed65382234fdf83ab63c549d3155515"
>

 

 

 

 

ether1 계정 생성

하나 생성해 보도록 하겠습니다.

 

> personal.newAccount("ether1")
"0xf85e2d6674b7c9e12fc805e7e8e28f31397f9536"
>

 

이렇게 해서 2개의 지갑을 생성 또는 2개의 Ethereum 계정을 생성을 했습니다.



 

 

 

 

마이너의 전자지갑 주소 확인하기

eth.coinbase 명령어는 전자지갑 주소, 마이너의 전자지갑 주소를 알려줍니다.

Ethereum 제일 처음에 시작하면 디폴트로 제일 처음 생성된 주소(ether0) 마이너의 주소이기도 합니다.

 

> eth.coinbase
INFO [04-03|01:29:39.464] Etherbase automatically configured       address=0x8C16404f2ED65382234fDf83AB63C549D3155515
"
0x8c16404f2ed65382234fdf83ab63c549d3155515"
>

 

 

 

마이너 주소 바꾸기

만약에 마이너 주소를 번째 생성된 마이너(ether1) 바꾸기 위해 주소를 복사를 합니다.

그리고 miner.setEtherbase라는 명령어를 통해서 그래서 현재 노드의 채굴자의 획득하는 전자지갑 주소를 바꿔줍니다.

 

> miner.setEtherbase("0xf85e2d6674b7c9e12fc805e7e8e28f31397f9536")
true
>

 

 

 

 

바뀐 마이너의 전자지갑 주소 확인하기

eth.coinbase 확인해 보시면 새로운 주소, 번째 전자지갑 주소(ether1), 그러니까 Ethereum 계정 주소로 바뀌어 있음을 확인할 있습니다.

> eth.coinbase
"
0xf85e2d6674b7c9e12fc805e7e8e28f31397f9536"
>

 

 

 

원래대로 돌리기

다시 원래대로 ether0 주소로 돌리도록 하겠습니다.

그리고 다시 eth.coinbase 확인합니다.

> miner.setEtherbase("0x8c16404f2ed65382234fdf83ab63c549d3155515")
true
>
eth.coinbase
"0x8c16404f2ed65382234fdf83ab63c549d3155515"
>

정상적으로 번째 계정(ether0)으로 채굴자 주소가 설정되어 있는 것을 확인할 수가 있습니다.

 

 

 

 

 

 

생성된 전자지갑 주소 확인하기

eth.accounts라고 하는 명령어가 있는데 제가 일일이 이런 20바이트 이상의 전자지갑 주소 또는 Ethereum 계정을 기억하거나 복사하는 것이 번거롭기 때문에 eth.accounts라고 하는 명령어를 통해서 생성된 전자지갑 주소를 확인할 있습니다.

 

> eth.accounts
["0x8c16404f2ed65382234fdf83ab63c549d3155515", "0xf85e2d6674b7c9e12fc805e7e8e28f31397f9536"]
>

 

 

 

eth.accounts 주소에 대한 Array 배열입니다.

그래서 eth.accounts[0] 또는 [1] 이런 식으로 해서 순서대로 생성된 전자지갑 주소를 접근할 수가 있습니다.

 

> eth.accounts[0]
"0x8c16404f2ed65382234fdf83ab63c549d3155515"
>
eth.accounts[1]
"0xf85e2d6674b7c9e12fc805e7e8e28f31397f9536"
>

 

accounts[0], accounts[1]이라고 각각의 주소를 호칭하도록 하겠습니다.

 

 

 

 

 

 

 

 

Step4: 이더 송금

ether 송금을 하는 것이 실습의 목표인데 ether 송금을 보도록 하겠습니다.

 

 

accounts[0] -> accounts[1] 1 ether 송금하기 (Error)

eth.sendTransaction 통해서 accounts[0]에서 accounts[1] 1 ether 보내라고 하는 명령어를 수행합니다.

 

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

> eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1, "ether")})
Error: authentication needed: password or unlock
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at <anonymous>:1:1

>

 

실행을 하면 실행이 됩니다.


오류를 보면 패스워드를 넣으라고 이야기하는데 송금을 하기 위해서는 from 송금을 패스워드 unlock 줘야 됩니다.

 

 

 

 

패스워드 unlock

그래야만 송금을 수가 있고요. 그래서 unlock 하는 명령어, personal.unlockAccount라는 명령을 통해서 수가 있습니다. 그리고 인자로는 계정을 생성할 입력했던 패스워드를 넣어 줍니다.

> personal.unlockAccount(eth.accounts[0], "ether0")
true

 

 

 

다시 송금을 시도합니다.

다시 에러가 발생하면서 실행이 되지 않습니다. 왜냐하면, 번째 이유로 지금 계정에 ether 잔고가 없기 때문입니다.

> eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1, "ether")})
Error: insufficient funds for gas * price + value
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at <anonymous>:1:1

>

 

 

 

 

 

 

Step5: 이더 잔고 확인

ether 잔고를 확인하는 방법은 eth.getbalance ether 잔고를 확인할 수가 있습니다.

 

 

accounts[0] ether 잔고 확인

먼저 accounts[0]번의 잔고를 확인하도록 하겠습니다. 0이고요.

 

> eth.getBalance(eth.accounts[0])
0
>

 

 

 

accounts[1] ether 잔고 확인

accounts[1] 주소에도 0 ether입니다. 그래서 ether 없기 때문에 지금 보낼 수가 없습니다.

> eth.getBalance(eth.accounts[1])
0
>

 

계정에 ether 잔고가 없는 것을 확인할 있습니다.


 

 

 

 

 

 

 

 

Step6: 채굴

ether 받는 방법은 3가지가 있다고 했는데 그중에 우리가 사용할 방법은 마이닝을 통해서 ether 받도록 하겠습니다.

 

miner.start(1) 하면 실행을 하면 마이닝이 시작됩니다.

먼저 명령어가 실행되면 마이닝을 있는 준비 작업을 하게 됩니다.

 

> miner.start(1)
INFO [04-03|01:55:00.059] Updated mining threads                   threads=1
INFO [04-03|01:55:00.072] Transaction pool price threshold updated price=1000000000
null
>
INFO [04-03|01:55:00.140] Commit new mining work                   number=1 sealhash=6a83f1fe9759 uncles=0 txs=0 gas=0 fees=0 elapsed=51.956ms
INFO [04-03|01:55:06.023] Generating DAG in progress               epoch=0 percentage=0 elapsed=4.881s
INFO [04-03|01:55:10.778] Generating DAG in progress               epoch=0 percentage=1 elapsed=9.635s
INFO [04-03|01:55:16.108] Generating DAG in progress               epoch=0 percentage=2 elapsed=14.965s
INFO [04-03|01:55:23.096] Generating DAG in progress               epoch=0 percentage=3 elapsed=21.953s

 

 


이렇게 콘솔에 메시지들이 계속 나오기 때문에 작업에 방해가 되므로 일단 작업을 중지한 다시 한번 나갔다가

에러 메시지, 또는 콘솔 메시지를 로그 파일로 저장하는 그런 명령어를 실행해서 다시 작업을 실행하도록 하겠습니다.

 

 

Ctrl+C 누르다음 > 프롬프트가 나오면 바로 exit 명령어를 쳐서 빠져나옵니다.

INFO [04-03|01:55:16.108] Generating DAG in progress               epoch=0 percentage=2 elapsed=14.965s
INFO [04-03|01:55:23.096] Generating DAG in progress               epoch=0 percentage=3 elapsed=21.953s
^C
>
exit
INFO [04-03|01:55:40.499] IPC endpoint closed                      url=/home/osboxes/testnet/geth.ipc
INFO [04-03|01:55:40.500] Blockchain manager stopped
INFO [04-03|01:55:40.500] Stopping Ethereum protocol
INFO [04-03|01:55:40.500] Ethereum protocol stopped
INFO [04-03|01:55:40.518] Transaction pool stopped
INFO [04-03|01:55:40.577] Database closed                          database=/home/osboxes/testnet/geth/chaindata
osboxes@osboxes:~/testnet$

 

 

geth console --networkid 2080 --nodiscover --maxpeers 0 --datadir /home/osboxes/testnet 2>> /home/osboxes/testnet/geth.log

osboxes@osboxes:~/testnet$ geth console --networkid 2080 --nodiscover --maxpeers 0 --datadir /home/osboxes/testnet 2>> /home/osboxes/testnet/geth.log
Welcome to the Geth JavaScript console!

instance: Geth/v1.8.23-stable-c9427004/linux-amd64/go1.10.4
coinbase: 0x8c16404f2ed65382234fdf83ab63c549d3155515
at block: 0 (Wed, 31 Dec 1969 19:00:00 EST)
 datadir: /home/osboxes/testnet
 modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

>

 


 

 

 

 

geth.log 파일 모니터링 - console1

 

새로운 터미널창을 하나 띄워서 tail -f라는 명령어는 파일을 모니터링을 하라는 명령어입니다.

 


 


 

 

osboxes@osboxes:~$ tail -f /home/osboxes/testnet/geth.log
INFO [04-03|01:59:43.179] Initialising Ethereum protocol           versions="[63 62]" network=2080
INFO [04-03|01:59:43.211] Loaded most recent local header          number=0 hash=5704d0
9bc5b0 td=256 age=49y11mo2w
INFO [04-03|01:59:43.212] Loaded most recent local full block      number=0 hash=5704d0
9bc5b0 td=256 age=49y11mo2w
INFO [04-03|01:59:43.212] Loaded most recent local fast block      number=0 hash=5704d0
9bc5b0 td=256 age=49y11mo2w
INFO [04-03|01:59:43.212] Loaded local transaction journal         transactions=0 dropped=0
INFO [04-03|01:59:43.212] Regenerated local transaction journal    transactions=0 accounts=0
INFO [04-03|01:59:43.257] IPC endpoint opened                      url=/home/osboxes/testnet/geth.ipc
INFO [04-03|01:59:43.287] New local node record                    seq=2 id=7e17b0edf5fc5969 ip=127.0.0.1 udp=0 tcp=30303
INFO [04-03|01:59:43.287] Started P2P networking                   self="enode://c7f5e565736a8957105e708ca4c122a10076b9c66d12b2

45025340dfb939ae1b96046687b018dc202e673accbcdf4028b627214152

efcb77197fa00a1d59d2b5@127.0.0.1:30303?discport=0"
INFO [04-03|01:59:43.538] Etherbase automatically configured       address=0x8C16404f2ED65382234fDf83AB63C549D3155515

 


 

 

 

콘솔창 재배치

모니터링하면서 작업하기 위해 콘솔창을 재배치합니다.

위쪽이 console1이고 아래쪽이 console0입니다.


 

 

 

 

마이닝 시작 - console0

다시 마이닝을 시작하도록 하겠습니다.

 

miner.start(1)

> miner.start(1)
null
>

 


console0 창으로는 메시지가 나오지 않고 console1 창으로 메시지가 나오는 것을 확인할 수가 있습니다.

 

 

 

[0], [1] 이더 확인

Generating DAG in progress 상태는 아직 마이닝 준비 작업하고 있는 상태입니다.

아직 마이닝 전이라 ether 확인해 보시면 아직 ether 없음을 확인할 있습니다.

 

> miner.start(1)
null
>
eth.getBalance(eth.accounts[0])
0
>
>
eth.getBalance(eth.accounts[1])
0
>

 


 

 

 

지금 마이닝을 하기 위한 작업들이 끝났고 지금 이렇게 마이닝(mined potential block) 되고 있는 것을 확인할 있습니다. balance 다시 확인합니다.

> eth.getBalance(eth.accounts[0])
5000000000000000000
>
eth.getBalance(eth.accounts[1])
0
>

 


 

 

 

 

 

 

 

Step7: 이더 송금

 

[0], [1] 이더 확인

> eth.getBalance(eth.accounts[0])
5000000000000000000
>
eth.getBalance(eth.accounts[1])
0
>

 

 

 

 

1ether 송금

송금을 보도록 하겠습니다.

 

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

> eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1, "ether")})
Error: authentication needed: password or unlock
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at <anonymous>:1:1

> personal.unlockAccount(eth.accounts[0], "ether0")
true
>
eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value:web3.toWei(1, "ether")})
"0xe4a4a3f443282a3a1c76d305c2d5ff19f19368eb4bfc6da409cfa820c422fd43"
>

 

 

명령어를 실행하면 Transaction id 나오고요. Transaction id 통해서 확인을 수가 있습니다. 송금이 되었습니다.

 

 

 

 

 

 

 

Step8: balance 체크

 

마이닝 중단 (옵션)

마이닝을 중단시키면 ether 충분하지 않아 pedding Transaction 확인할 있습니다.

minor.stop()

 

 

 

[0], [1] 이더 확인

> eth.getBalance(eth.accounts[0])
5000000000000000000
>
eth.getBalance(eth.accounts[1])
0
>

 

 

 

송금을 했습니다. 각각의 balance [0], [1]번을 확인해 보면 아직 ether 변화가 없는 것을 확인할 있습니다.


 

 

 

 

 

pending transaction 확인

지금 상황은 Transaction pending 상태인 경우입니다.

이것은 전에 마이닝을 중지를 시켰기 때문에 채굴이 되지 않아서 지금 현재 pending 상태에 있는 것입니다.

그래서 pending 상태에 있는 Transaction들은 pendingTransacion 명령어를 통해서 확인할 수가 있습니다.

 

> eth.pendingTransactions
[{
    blockHash: null,
   
blockNumber: null,
    from: "0x8c16404f2ed65382234fdf83ab63c549d3155515",
    gas: 90000,
    gasPrice: 1000000000,
    hash: "0xe4a4a3f443282a3a1c76d305c2d5ff19f19368eb4bfc6da409cfa820c422fd43",
    input: "0x",
    nonce: 0,
    r: "0x1551f0e6619671b68779c6948267a97ef3cf76f56fa3d0ebbfe7c4f8b923838f",
    s: "0x38a9da49679700cbed9e5499d2a6c31c188a88e2481d4e16ea084ce7fa76e1b1",
    to: "0xf85e2d6674b7c9e12fc805e7e8e28f31397f9536",
    transactionIndex: 0,
    v: "0x65",
    value: 1000000000000000000
}]
>

 

현재 pending 상태에 있는 거래들을 확인할 수가 있습니다.

블록 넘버가 null이기 때문에 채굴이 되고 pending 상태라는 것을 있습니다.


 

 

 

다시 마이닝을 시작하도록 하겠습니다. (옵션)

마이닝을 중단하고 pendding transaction 확인한 경우 확인 다시 마이닝을 시작합니다.

miner.start(1)

 

 

마이닝 시작이 되어 새로운 신규 불록이 생성이 되었기 때문에 pendingTransaction 없습니다.

> eth.pendingTransactions
[]
>

 

 

 

[0], [1] 이더 확인

송금을 했습니다. 각각의 balance [0], [1]번을 확인해 보면 1ether 송금되어 변화가 있는 것을 확인할 있습니다.

> eth.getBalance(eth.accounts[0])
9000000000000000000
> eth.getBalance(eth.accounts[1])
1000000000000000000
>

 


 

 

 

 

 

 

Step9: 정보 확인

 

트랜잭션 정보 확인

 

Transaction id 복사를 하고요. 그래서 저희가 eth.getTransaction 해서 Transaction id 입력을 하면 Transaction 정보를 확인할 있습니다.

 

eth.getTransaction("0xe4a4a3f443282a3a1c76d305c2d5ff19f

19368eb4bfc6da409cfa820c422fd43")

> eth.getTransaction("0xe4a4a3f443282a3a1c76d305c2d5ff19f19368eb4bfc6da409cfa820c422fd43")
{
  blockHash: "0x6063fa361b960378a952ec17519880a1f8444318439fd055cf21b6f5465a2682",
 
blockNumber: 2,
  from: "0x8c16404f2ed65382234fdf83ab63c549d3155515",
  gas: 90000,
  gasPrice: 1000000000,
  hash: "0xe4a4a3f443282a3a1c76d305c2d5ff19f19368eb4bfc6da409cfa820c422fd43",
  input: "0x",
  nonce: 0,
  r: "0x1551f0e6619671b68779c6948267a97ef3cf76f56fa3d0ebbfe7c4f8b923838f",
  s: "0x38a9da49679700cbed9e5499d2a6c31c188a88e2481d4e16ea084ce7fa76e1b1",
  to: "0xf85e2d6674b7c9e12fc805e7e8e28f31397f9536",
  transactionIndex: 0,
  v: "0x65",
  value: 1000000000000000000
}
>

 

아까는 블록 넘버(blockNumber)하고 블록 캐시가 null 값이었는데 지금은 블록, Transaction 포함된 블록에 대한 정보를 확인할 수가 있습니다. blockNumber 2 블록에 대해서 포함되어 있습니다.


 

 

 

 

 

블록 정보 확인

 

eth.getBlock(2)

> eth.getBlock(2)
{
  difficulty: 131072,
  extraData: "0xd883010817846765746888676f312e31302e34856c696e7578",
  gasLimit: 133955714,
  gasUsed: 21000,
  hash: "0x6063fa361b960378a952ec17519880a1f8444318439fd055cf21b6f5465a2682",
  logsBloom: "0x000000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",

  miner: "0x8c16404f2ed65382234fdf83ab63c549d3155515",
  mixHash: "0x3b4ad37422073f88b32bac40973b4d09ccf52f30bc78ea0e5c2da4815158f8c6",
  nonce: "0x40d3e7c36d79962b",
  number: 2,
  parentHash: "0x5804a522b5b693b93ae17b6b74a28b4faa19c0af9554e99f691f41e9fb29a188",
  receiptsRoot: "0xd2b06aa381626fd89678b24c934e8669909cabc8a34345a579b920ca50097a70",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 650,
  stateRoot: "0x46a2ab8b904e751eb6aa7cc583bef0e75ed48445646f802b2b292d8c8287a27a",
  timestamp: 1554289542,
  totalDifficulty: 262400,
  transactions: ["0xe4a4a3f443282a3a1c76d305c2d5ff19f19368eb4bfc6da409cfa820c422fd43"],
  transactionsRoot: "0x5c8963e6875a024221c3657e5d1f39c79e055fa66eb6c2083909a314605b7fae",
  uncles: []
}
>

 

 

블록 넘버 2 넣으면 마이너에 대한 지갑 아이디, 난이도, 사용된 Gas, Gas limit, 해시 블록이 포함하고 있는 Transaction들을 확인할 수가 있습니다.


 

 

 

 



반응형

'Security > BlockChain' 카테고리의 다른 글

P2P(개인 대 개인) 네트워크 방식 장점  (0) 2019.05.07
블록체인 저장 방식  (0) 2019.04.29
이더리움의 송금 및 채굴 (Step by Step)  (0) 2019.04.24
이더리움 백서의 구조  (0) 2019.04.19
Struct  (0) 2019.04.13
MetaMask 계정 생성  (0) 2019.04.08
Posted by codedragon codedragon

댓글을 달아 주세요

반응형


 

 

이더리움 백서의 구조

이더리움 백서는 4개의 파트로 구성되어 있습니다.

 

·       비트코인과 기존 개념에 대한 소개

·       이더리움의 기술 요소

·       이더리움 기술을 응용한 분산 애플리케이션

·       이슈들과 기타

 



반응형

'Security > BlockChain' 카테고리의 다른 글

블록체인 저장 방식  (0) 2019.04.29
이더리움의 송금 및 채굴 (Step by Step)  (0) 2019.04.24
이더리움 백서의 구조  (0) 2019.04.19
Struct  (0) 2019.04.13
MetaMask 계정 생성  (0) 2019.04.08
이더리움 디자인 철학  (0) 2019.04.02
Posted by codedragon codedragon

댓글을 달아 주세요

2019. 4. 13. 12:17

Struct Security/BlockChain

반응형


 

Struct

·       개발자 정의 데이터 유형

·       키워드 struct 의해서 선언됩니다.

·       C언어의 struct 같은 개념으로 여러 state variables 포함하는 구조체 변수입니다.

 


반응형

'Security > BlockChain' 카테고리의 다른 글

이더리움의 송금 및 채굴 (Step by Step)  (0) 2019.04.24
이더리움 백서의 구조  (0) 2019.04.19
Struct  (0) 2019.04.13
MetaMask 계정 생성  (0) 2019.04.08
이더리움 디자인 철학  (0) 2019.04.02
Sublime text - SublimeEthereum install(설치하기)  (0) 2019.03.27
Posted by codedragon codedragon

댓글을 달아 주세요

반응형



 

 

 

MetaMask 계정 생성

·         MetaMask 구글 크롬 익스텐션 설치

·         MetaMask 계정 생성하기

 

 

 

MetaMask 구글 크롬 익스텐션 설치

MetaMask라고 하는 구글 크롬의 익스텐션에서 Ethereum 받을 있습니다.

 

https://metamask.io/


 

 

 

페이지 중앙의 [GET CHROME EXTENSION] 클릭합니다.


 

 

우측 상단의 [Chrome 추가(Add to Chrome)] 버튼을 클릭하여 MetaMask 크롬에 설치합니다.

http://bit.ly/2uHZEUr


 

 

[확장 프로그램 추가(확장앱 추가)]


 


 

 

MetaMask 익스텐션이 설치되었습니다.


 

 


 

 

 

 

 

MetaMask 계정 생성하기

 

 

[GET STARTED] 클릭


 

 

[CREATE A WALLET]


 

[I AGREE]


 

 

패스워드 입력 >>

[I have read and agree to the Terms of Use] 체크 >>

[CREATE]


 

 

[CLICK HERE TO REVEAL SECRET WORDS] 클릭하면 12개정도의 단어로 문장들이 나옵니다. MetaMask 대한 계정을 복구하기 위해서는 12개의 문장이 순서대로 필요합니다.

보관하시기 바랍니다.

 

 


 

 

12개의 문장된 단어를 순서대로 클릭한 >> [CONFIRM] 클릭


 


 

 

 

[ALL DONE]


 

 

Ethereum 계정이 생성된 것을 확인할 수가 있습니다.

[DETAILS] 버튼을 누르면 QR 코드도 확인할 있습니다.

복사 아이콘을 클릭하면 이더리움계정의 전체 주소를 복사합니다.

현재 0 ehter 갖고 있는 것을 확인할 있습니다.


 

 

 

 


반응형

'Security > BlockChain' 카테고리의 다른 글

이더리움 백서의 구조  (0) 2019.04.19
Struct  (0) 2019.04.13
MetaMask 계정 생성  (0) 2019.04.08
이더리움 디자인 철학  (0) 2019.04.02
Sublime text - SublimeEthereum install(설치하기)  (0) 2019.03.27
블록해쉬의 구조  (0) 2019.03.20
Posted by codedragon codedragon

댓글을 달아 주세요

반응형



 

 

이더리움 디자인 철학

이더리움 백서는 이더리움 개발에 대한 5가지 디자인 철학을 밝히고 있습니다.

·         단순함(Simplicity)

·         보편성(Universality)

·         모듈화(Modularity)

·         민첩성(Agility)

·         차별 검열 금지

 

 

 

 

단순함(Simplicity)

·         이더리움은 단순함을 유지합니다.

·         추가적인 데이터 저장 비용이나 시간 비효율성이 발생하더라도 가급적 단순함을 유지해야 합니다. 이는 평균적인 개발자라도 이더리움의 명세를 준수 있도록 함으로써, 이더리움의 사명인 개방성을 유지하여 암호화폐가 가져올 민주주의의 가치를 구현하기 위함입니다.

 

 

 

 

 

보편성(Universality)

·         이더리움은 보편성을 띄어야 합니다.

·         이더리움 디자인 철학의 핵심은 이더리움이 개별 특징을 가지지 않는 있습니다.

·         대신 튜링 완전한 프로그래밍 언어를 내장하여 보편적인 스마트 계약을 구현 있도록 하고 있습니다.

 

 

 

 

 

모듈화(Modularity)

·         이더리움 프로토콜은 가급적 모듈화되고 분리될 있도록 제작합니다.

·         모듈화를 통해 프로토콜의 수정에도 불구하고, 이더리움 블록체인 기반의 생태계에 영향을 최소화합니다.

 

 

 

 

 

민첩성(Agility)

·         이더리움은 민첩성을 고려합니다.

·         성능 보안에 상당한 향상을 얻기 위해서라면 최상위 구성도 기민하게 수정합니다.

 

 

 

 

 

차별 검열 금지

·         이더리움은 특정 사용을 제한하거나 금지하지 않습니다.

·         특정 목적의 애플리케이션을 제약하는 대신 직접적인 피해를 규제하는 방식으로 설계합니다.

 

·         ex) 이더리움 네트워크상에서 무한 루프를 실행하는 애플리케이션도 개발을 있습니다.

 


반응형

'Security > BlockChain' 카테고리의 다른 글

Struct  (0) 2019.04.13
MetaMask 계정 생성  (0) 2019.04.08
이더리움 디자인 철학  (0) 2019.04.02
Sublime text - SublimeEthereum install(설치하기)  (0) 2019.03.27
블록해쉬의 구조  (0) 2019.03.20
비트코인 단위  (0) 2019.03.14
Posted by codedragon codedragon

댓글을 달아 주세요

반응형

 

 

SublimeEthereum - install(설치하기)

 

 

Sublime text 실행합니다.


 

 

Install Package 실행(Ctrl+Shift+P) >>

pcip 입력후 >> [Package Control:Install Package] 선택


 

Ethereum 검색 >>

[Enter] 또는 마우스로 해당 항목 클릭


 

 

메뉴: [View] >> [Syntax] >> [Ethereum] 항목이 생긴것을 확인할 있습니다.


 


반응형

'Security > BlockChain' 카테고리의 다른 글

MetaMask 계정 생성  (0) 2019.04.08
이더리움 디자인 철학  (0) 2019.04.02
Sublime text - SublimeEthereum install(설치하기)  (0) 2019.03.27
블록해쉬의 구조  (0) 2019.03.20
비트코인 단위  (0) 2019.03.14
비트코인(BitCoin) 특징  (0) 2019.03.09
Posted by codedragon codedragon

댓글을 달아 주세요

반응형


 

 

블록해쉬의 구조

블록해쉬는 블록 Header 해쉬 값입니다.

 

 


 

구분

설명

블록 Header

블록 Header 버전(version), 이전블록해쉬(Previous Block Hash), 머클해쉬(Merkle Hash), 시간(time), 난이도(bits), 난스(nonce) 6개의 정보로 구성되어 있습니다.

블록 Body

블록 Body 거래정보들로 구성되어 있습니다.

 

 

 

 

 

블록 Header 구성정보

구분

설명

버전(version)

블록체인 소프트웨어 프토토콜 버전

이전블록 해쉬(Previous Block Hash)

이전 블록의 블록 해쉬

머클해쉬(Merkle Hash)

거래(transaction) 정보 트리 구조의 최상위(root) 해쉬

시간(time)

블록이 생성된 시간(timestamp)

난이도(bits)

채굴(mining) 난이도를 나타내는 숫자

난수(nonce)

최초 0으로부터 조건을 만족하는 해쉬 값을 찾기 까지 계산횟수

 

 


반응형
Posted by codedragon codedragon

댓글을 달아 주세요