본문 바로가기

Ethereum/Geth

Ethereum_(2)이더리움 Transaction

"

account 생성하기

 

"

[기존 계정 생성방법]

$geth --datadir $PWD account new

위의 명령어를 통해 계정을 생성하고 genesis 블록을 생성했습니다. 이번에는 이더리움 노드를 실행한 후 Transaction을 위한 계정을 생성해보겠습니다. 

 

 

 

[이더리움 노드에서 계정 생성]

Personal.newAccount()

노드에 접속하여 위와같은 명령어를 입력하면 아래 사진과 같이 비밀번호를 입력하라는 콘솔이 나타납니다. 비밀번호를 입력하면 계정이 생성되는것을 확인할 수 있습니다. 

 

Personal.newAccount("1234")

위와 같이 괄호 안에 비밀번호를 미리 입력하여 계정을 생성할 수도 있습니다. 이때 비밀번호는 "" 또는 '' 로 감싸줘야합니다. 

 

 

[계정 조회]

eth.accounts

계정을 조회해보면 genesis블록 생성을 위해 미리 만든 계정 1개와 이번에 만든 계정 2개 총 3개의 계정이 있는것을 확인 할 수 있습니다. 

 

 

 

 

"

Transaction

 

"

 

[계정잔고 조회]

eth.getBalance(account[0])

Transaction 전에 계정 잔고를 조회해보겠습니다. 저는 처음 genesis블록을 만들때 accounts[0]에 3ETH(이전 포스팅에서는 5ETH, 얼마를 할당할지는 알아서 결정해도 무방)를 할당하였으므로 3ETH가 있는것을 확인 할 수 있습니다. 이제 accounts[0]에서 accounts[1]으로 1ETH를 보내보겠습니다. 

 

[Transaction - error]

 eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value: 1000000000000000000})

Transcaction에 실패했습니다. 이더를 보내는 eth.accounts[0] 계정의 상태가 Locked 상태이면 Transaction 발생시 에러가 발생하게 됩니다. 이를 위해서 계정의 잠금상태를 풀어줘야합니다. 

 

 

[계정 unlock]

personal.unlockAccount(eth.accounts[0],'1234')

최초 개정생성시 입력했던 비밀번호를 넣어서 계정의 상태를 unlock으로 바꿔줍니다. 

 

 

[Transaction]

 eth.sendTransaction({from:eth.accounts[0], to:eth.accounts[1], value: 1000000000000000000})

Transaction 발생에 성공하게되면 아래와 같이 트랜잭션 해시값을 반환하여 출력하게 됩니다. 

다만, Transaction이 발생하였다고하여 받는 계좌의 이더 보유량은 변하지 않습니다. 받는 계좌의 계좌 잔고를 조회해보니 0 인것을 확인할 수 있었습니다. 이는 해당 트랜잭션은 아직 블록에 포함되지 않았기 때문입니다. 블록에 포함시키기 위해서는 mining을 해야합니다. 

 

 

 

"

Transaction 조회

 

"

 

mining에 앞서 발생시킨 Transaction을 조회해보도록 합니다.

 

[Transaction 조회]

 eth.getTransaction("Transaction 해시값")

트랜젝션을 보면 알 수 없는 r, s, v 가 생성됩니다. r, s, v는 트랜잭션 송신자의 서명을 위해 필요한 값입니다. 서명을 통해 해당 트랜잭션을 송신자가 발생시켰다는것을 증명하게 됩니다. 

해당 트랜잭션이 아직 블록에 포함되지 않았으므로 blockNumver이 null인것을 확인 할 수 있습니다. 

 

 

[Pending Transaction 조회]

 eth.pendingTransactions

Transaction pending 이란, 트랜잭션이 블록에 포함되지 않고 트랜잭션 풀에 저장된 상태를 의미합니다. blockHash 와 blockNumber이 아직 null 인것을 확인할 수 있습니다. 

 

 

 

 

 

"

Transaction 처리 (mining)

 

"

[mining 보상 지갑 확인]

eth.coinbase

mining을 하게되어 블록을 생성하게되면 보상으로 eth를 받게 됩니다. 이 보상을 받을 지갑이 어떤 지갑인지 조회해보도록합니다. 현재 최조 제네시스 블록을 생성했을때의 주소가 보상을 받을 주소로 되어있습니다. 

miner.setEtherbase(계정 주소)

보상받을 지갑을 변경하고 싶을 경위 위와같은 명령어를 사용하면됩니다. 

 

 

[mining]

miner.start()

위의 명령어를 치면 mining을 시작하게 됩니다. 

miner.stop()

mining을 중지시키려면 위의 명령어를 치고 조금 기다리면 mining이 멈추게 됩니다. 

 

[계정 잔고 조회]

 

 

 

[Transaction 조회]

앞에 발생시킨 트렌잭션이 1번 블록에 포함되었습니다.

 

[Pending Transaction 조회]

Pending Transaction이 비워진것을 확인 할 수 있습니다. 

'Ethereum > Geth' 카테고리의 다른 글

Ethereum_(1)이더리움 네트워크 만들기  (0) 2019.08.05
Ethereum _Epilogue  (0) 2019.07.22