"
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 |