Geth - 트랜잭션 생성과 채굴

이민정·2022년 2월 26일
0

blockChain

목록 보기
9/10
post-thumbnail

eth.pendingTransactions: 처리해야 하는 트랜잭션 목록

처리해야 하는 트랜잭션이 아무것도 없다면 아래와 같이[] 빈 배열이 출력된다


이더 전송하기

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

from: 트랜잭션을 보내는 계정의 주소
to: 수신자 계정의 주소
value: 전송 금액

메시지도 함께 보내고 싶다면 data: web3.toHex("메시지 내용")을 추가
web3.toHex는 인자로 주어진 값을 16진수로 변환하고, 문자열은 UTF-8 문자열로 표현

정상적으로 트랜잭션이 만들어지면 트랜잭션 해시가 출력된다!
(아래 사진의 oxff0c28...)
아래에서 eth.getTransaction() 함수에서 사용할 예정이니 잘 모셔 두자

새롭게 생성된 트랜잭션은 pending 상태이므로 eth.pendingTransactions에서 확인할 수 있다

blcokHash, blockNumber , transactionIndex 주목!!

아직 트랜잭션이 블록에 담겨 채굴되지 않아서 null인 상태


송금을 위해 블록 채굴하기

miner.start(1): 채굴 시작
miner.stop(): 채굴 종료

채굴 중에 eth.pendingTransactions로 pending 상태의 트랜잭션이 처리되었는지 확인
-> [] 빈 배열로 모두 처리되었다면 채굴 종료


잔액 확인하기

eth.getBalance(eth.accounts[1])을 확인하면 땡전 한 푼 없던 [1] 계정에 잔액이 생긴 걸 볼 수 있다

ether로 변환하고 싶다면 web3.fromWei(eth.getBalance(eth.accounts[1]), 'ether')


트랜잭션 해시값으로 정보 확인

위에서 트랜잭션을 생성하면서 반환 받은 해시값으로 트랜잭션의 정보를 얻을 수 있다
eth.getTransaction("트랜잭션 해시값")

input: eth.sendTransaction()에서 입력한 data
나는 data를 입력하지 않았으므로 "0x"만 뜬다

value: 전송한 금액

blockNumber: 해당 트랜잭션이 포함되어있는 블록 번호

blockNumber를 통해서도 트랙잭션 내용을 조회할 수 있다


blockNumber로 정보 확인

트랙잭션 정보

eth.getTransactionFromBlock("블록번호")

블록 정보

eth.getBlock("블록번호")


송금 수수료 확인

송금이 완료된 후, accounts[0]의 잔고는 어떨까?

기존 잔액에서 송금한 금액 + 수수료가 빠져야 할 것이다
근데?
eth.getBalance로 확인해보면 트랜잭션 수수료가 빠져 나가지 않았다

카카오페이나 토스처럼 이더리움도 수수료 무료 이벤트를 하는 걸까...?

아니다

왜 수수료가 출금되지 않았는가

송금 시 수수료(gas)는 출금되고 트랜잭션을 담은 블록의 채굴자에게 수수료가 돌아간다

아까 블록 채굴을 무슨 계정으로 했는지 기억하는지?
-> accounts[0]

eth.accounts[0]가 송금자인 동시에 채굴자이므로
송금자인 accounts[0]의 계좌에서 수수료가 출금되어
채굴자인 accounts[0]의 계좌에 입금된 것


채굴자와 송금자가 다르다면 수수료가 나가겠지

  1. 새로운 계정인 accounts[2]를 만들고 코인베이스로 지정

  1. 다시 accounts[0]에서 accounts[1]로 송금

  1. accounts[2]가 블록 채굴

  1. eth.getBalance(eth.accounts[n]) 으로 각 잔액 확인

편하게 받기만 한 accounts[1]은 2이더씩 2번 총 4 ether가 깔끔하게 들어 있다

중요한 것은 accounts[0]accounts[2]

약 0.000021 ether송금자인 accounts[0]로부터 채굴자인 accounts[2]에게 이동했다

이처럼 트랜잭션을 처리하기 위해서는 수수료가 필요하다
Gas는 블록을 만들 때 주는 보상으로 채굴자에게 지급된다

채굴자는 다시 말해, 블록을 생성한 노드의 Etherbase


gas와 gasPrice

gasPrice: 1gas의 가격. 단위는 wei/gas

gas: 지불 가능한 최대 gas
실제로 해당 트랜잭션을 처리하는 데 지불한 gas가 아니다
실제로 지불한 gas는 트랜잭션에서 지정한 gas의 값보다 작다

profile
안뇽

0개의 댓글