이더 송금하기
현재 처리 대기중인 트랜잭션 목록을 조회합니다.
> eth.pendingTransactions
[]
account 1에서 account 0로 2이더를 전송합니다. 송금에는 eth.sendTransaction()을 사용합니다. 트랜잭션이 생성되면 트랝잭션 해시가 출력됩니다. 송금 후 잔액 변동이 없는 이유는 트랜잭션이 블록에 올라가지 않았기 때문입니다.
// 잔액 존재
> eth.getBalance(eth.accounts[1])
50000000000000000000
// 2 이더를 송금합니다.
> eth.sendTransaction({
...... from:eth.accounts[1],
...... to:eth.accounts[0],
...... value:web3.toWei(2, 'ether'),
...... data:web3.toHex('send message')
...... })
// 트랜잭션 해시
"0xdf00808c0e01376c9c111a3e1b2a0f473eca50a7e90d6b7215e813a79464e06f"
// 잔액 변동 없음
> eth.getBalance(eth.accounts[0])
300000
- from : 트랜잭션을 보내는 계정 주소
- to : 수신자 계정 주소
- value : 전송 금액
- data : 전송 메시지
- web3.toHex : 인자로 주어진 값들을 16진수로 변환합니다. 문자열은 UTF-8 문자열로 표현합니다
현재 처리 대기중인 트랜잭션을 확인합니다. 방금 생성한 트랜잭션이 pending 되어 있습니다. 또한 blockHash, blockNumber, transactionIndex가 모두 null로 되어 있습니다. 아직 트랜잭션이 블록에 올라가지 않았기 때문입니다.
> eth.pendingTransactions
[{
blockHash: null,
blockNumber: null,
from: "0x1a9d8ca79769da4e7fd27e94f688e6438761f14a",
gas: 21816,
gasPrice: 1000000000,
hash: "0xdf00808c0e01376c9c111a3e1b2a0f473eca50a7e90d6b7215e813a79464e06f",
input: "0x73656e64206d657373616765",
nonce: 0,
r: "0x8ae2218ac5b5ea0ccf798572294509379292abb2bf505f1e479b9f32f87063",
s: "0x234c82dd9206a5c527cc1e0e01cdb1e4b45dbe8ce3fd2c7231e8d110ab731bcb",
to: "0x4d3ef63064ccc938a80791a0d80df671aceae315",
transactionIndex: null,
type: "0x0",
v: "0x426b",
value: 2000000000000000000
}]
채굴하기
트랜잭션을 블록에 올리기 위해서는 블록을 생성 / 검증 목적으로 채굴이 진행되어야 합니다. 난이도가 낮게 설정되어 있어 그런지 채굴이 금방됩니다.
// coinbase를 지정하고 채굴을 시작합니다.
> miner.start(10)
null
// 현재 채굴중인지 확인합니다.
> eth.mining
true
// 채굴을 시작하면 blockNumber가 증가합니다.
> eth.blockNumber
19
> eth.blockNumber
21
// 채굴을 중단합니다.
> miner.stop()
null
채굴 후 처리 대기중인 트랜잭션을 확인하면 사라진 것을 확인할 수 있습니다.
> eth.pendingTransactions
[]
계정 0의 잔액을 확인해보면 송금이 정상적으로 된 것을 확인할 수 있습니다.
> eth.getBalance(eth.accounts[0])
2000000000000300000
> web3.fromWei(eth.getBalance(eth.accounts[0]), 'ether')
2.0000000000003
트랜잭션 확인하기
송금시 출력되었던 트랜잭션 해시값을 가지고 트랜잭션 세부 정보를 확인할 수 있습니다. 채굴을 진행했으므로 blockHash, blockNumber, transactionIndex가 모두 채워져 있습니다. 이번 트랜잭션은 11번째 블록에 올라갔습니다.
> eth.getTransaction("0xdf00808c0e01376c9c111a3e1b2a0f473eca50a7e90d6b7215e813a79464e06f"
... )
{
blockHash: "0x57009d022c810a496e3d346dccb6748056c00843e6e9a9cf2f1f91df8109b3cd",
blockNumber: 11,
from: "0x1a9d8ca79769da4e7fd27e94f688e6438761f14a",
gas: 21816,
gasPrice: 1000000000,
hash: "0xdf00808c0e01376c9c111a3e1b2a0f473eca50a7e90d6b7215e813a79464e06f",
input: "0x73656e64206d657373616765",
nonce: 0,
r: "0x8ae2218ac5b5ea0ccf798572294509379292abb2bf505f1e479b9f32f87063",
s: "0x234c82dd9206a5c527cc1e0e01cdb1e4b45dbe8ce3fd2c7231e8d110ab731bcb",
to: "0x4d3ef63064ccc938a80791a0d80df671aceae315",
transactionIndex: 0,
type: "0x0",
v: "0x426b",
value: 2000000000000000000
}
트랜잭션 해시 뿐만 아니라 블록 번호로도 트랜잭션을 조회할 수 있습니다.
> eth.getTransactionFromBlock(11)
{
blockHash: "0x57009d022c810a496e3d346dccb6748056c00843e6e9a9cf2f1f91df8109b3cd",
blockNumber: 11,
from: "0x1a9d8ca79769da4e7fd27e94f688e6438761f14a",
gas: 21816,
gasPrice: 1000000000,
hash: "0xdf00808c0e01376c9c111a3e1b2a0f473eca50a7e90d6b7215e813a79464e06f",
input: "0x73656e64206d657373616765",
nonce: 0,
r: "0x8ae2218ac5b5ea0ccf798572294509379292abb2bf505f1e479b9f32f87063",
s: "0x234c82dd9206a5c527cc1e0e01cdb1e4b45dbe8ce3fd2c7231e8d110ab731bcb",
to: "0x4d3ef63064ccc938a80791a0d80df671aceae315",
transactionIndex: 0,
type: "0x0",
v: "0x426b",
value: 2000000000000000000
}
트랜잭션 뿐만 아니라 블록 정보를 조회할 수 있습니다.
> eth.getBlock(11)
{
difficulty: 131072,
extraData: "0xd883010a14846765746888676f312e31382e31856c696e7578",
gasLimit: 2122649,
gasUsed: 21816,
hash: "0x57009d022c810a496e3d346dccb6748056c00843e6e9a9cf2f1f91df8109b3cd",
logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
miner: "0x1a9d8ca79769da4e7fd27e94f688e6438761f14a",
mixHash: "0x8b56e0b2e00b68e668de43512e77e9ea22fd6c40654b5262aae490b824bc2741",
nonce: "0x5eb0dfd3473e982d",
number: 11,
parentHash: "0x70cc16b76c203a5488077a419bda2865fd0488c162b0339c002eea3c1b8d703c",
receiptsRoot: "0xdba3a73f21d55e0138f960ff4edf3be9dbb2be8c3dc61ca6e558899e5ebc865e",
sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 661,
stateRoot: "0x929d32c889d87fbb78a836b3213d0f1069bc88bda01dbed07783be206950cb6c",
timestamp: 1657028482,
totalDifficulty: 1444692,
transactions: ["0xdf00808c0e01376c9c111a3e1b2a0f473eca50a7e90d6b7215e813a79464e06f"],
transactionsRoot: "0x68ed1573039e8348653bcf96625fe5d1a34b23a01aed06f40ebcf199d6be723e",
uncles: []
}
송금 수수료
위의 케이스에서는 보내는 계정이 coinbase 였으므로, 수수료 차감이 되지 않았습니다. 채굴에 대한 보상으로 블록 생성시 새로 발급되는 암호화폐 + 거래 수수료가 지급되는데, coinbase 계정은 이미 수수료를 받으므로 본인이 낸 수수료를 본인이 받는 꼴입니다.
이를 확인하기 위해 account 0에서 account 1로 1이더를 전송합니다.
> eth.sendTransaction({
from : eth.accounts[0],
to : eth.accounts[1],
value : web3.toWei(1, 'ether')
})
"0xeb03239c88209e74f677d73a73a6b85d76b7cf85e29f73ef6991abf54910af9a"
잔액이 분명 2 이더가 있었는데, 1이더 송금 후 잔액이 1 이하로 떨어졌습니다. 0.000021 정도가 거래 수수료(가스비)로 지불된 것입니다.
> web3.fromWei(eth.getBalance(eth.accounts[0]), 'ether')
0.9999790000003
account 1의 잔액을 확인해보면 거래 수수료가 고스란히 coinbase 계정에 들어간 것을 확인할 수 있습니다.
> web3.fromWei(eth.getBalance(eth.accounts[1]), 'ether')
154.000021
'Blockchain' 카테고리의 다른 글
[Blockchain] 스마트 컨트랙트란? (0) | 2022.07.07 |
---|---|
[Blockchain] 이더리움 머클 패트리시아 트리(MPT)란? (0) | 2022.07.06 |
[Blockchain] 이더리움 Geth 사용 방법 (0) | 2022.07.05 |
[Blockchain] 이더리움 Geth 설치 방법(Ubuntu Docker) (0) | 2022.07.05 |
[Blockchain] 클레이튼(Klaytn) 블록체인 이란? (0) | 2022.07.04 |
댓글