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
를 통해서도 트랙잭션 내용을 조회할 수 있다
eth.getTransactionFromBlock("블록번호")
eth.getBlock("블록번호")
송금이 완료된 후, accounts[0]의 잔고는 어떨까?
기존 잔액에서
송금한 금액 + 수수료
가 빠져야 할 것이다
근데?
eth.getBalance
로 확인해보면 트랜잭션 수수료가 빠져 나가지 않았다
카카오페이나 토스처럼 이더리움도 수수료 무료 이벤트를 하는 걸까...?
아니다
송금 시 수수료(gas)는 출금되고 트랜잭션을 담은 블록의 채굴자에게 수수료가 돌아간다
아까 블록 채굴을 무슨 계정으로 했는지 기억하는지?
-> accounts[0]
eth.accounts[0]가 송금자인 동시에 채굴자이므로
송금자인 accounts[0]
의 계좌에서 수수료가 출금되어
채굴자인 accounts[0]
의 계좌에 입금된 것
accounts[2]
를 만들고 코인베이스
로 지정accounts[0]
에서 accounts[1]
로 송금accounts[2]
가 블록 채굴eth.getBalance(eth.accounts[n])
으로 각 잔액 확인편하게 받기만 한 accounts[1]
은 2이더씩 2번 총 4 ether
가 깔끔하게 들어 있다
중요한 것은 accounts[0]
과 accounts[2]
약 0.000021 ether
가 송금자인 accounts[0]
로부터 채굴자인 accounts[2]
에게 이동했다
이처럼 트랜잭션을 처리하기 위해서는 수수료가 필요하다
Gas
는 블록을 만들 때 주는 보상으로 채굴자에게 지급된다
채굴자는 다시 말해, 블록을 생성한 노드의 Etherbase
gasPrice
: 1gas의 가격. 단위는 wei/gas
gas
: 지불 가능한 최대 gas
실제로 해당 트랜잭션을 처리하는 데 지불한 gas가 아니다
실제로 지불한 gas는 트랜잭션에서 지정한 gas의 값보다 작다