이전의 JSON RPC API 기본의 연장이다.
이번에는 JSON RPC 를 통해 실제 Ether 를 이체시키는 Transaction 을 발생시켜보자.
▌Unlock Account
Geth 와 Eth 모두 Account 로 부터 Transaction 을 발생시키기 위해서는 From 이 되는 Account 를 unlock 해야 한다.
Account 를 Unlock 하기 위해서는 Account 를 생성했을 당시 입력한 패스워드를 반드시 알고 있어야 한다.
일단, 아래와 같이 Request 를 한다.
{
"jsonrpc":"2.0",
"method":"personal_unlockAccount",
"params": [
0
],
"id":100
"jsonrpc":"2.0",
"method":"personal_unlockAccount",
"params": [
"0x2c6191a4792a3a33cbd2f8b7b7e583a61fb33b23",
"1111",0
],
"id":100
}
"params" Object 의
1번째 파라미터는 "Unlock 을 하고자 하는 자기 Account 의 주소"이다
Wallet 안에 해당 Account 가 존재해야 하며, Wallet 의 위치는 datadir 에 따라 다르므로, geth account list 나 JSConsole 또는 RPC 로 현재 자신의 Wallet 내의 account 를 확인한 후 입력하자
2번째 파라미터는 "Account 의 Password" 이다
3번째 0 은 Unlock 의 Timout 을 "초" 단위로 입력한다.
0 으로 지정하면, 이번 Session (Geth 의 Instance 가 살아있는) 동안은 계속 unlock 하게 된다.
성공 했다면 아래와 같은 response 가 온다
{
"id": 100,
"jsonrpc": "2.0",
"result": true
}
"id": 100,
"jsonrpc": "2.0",
"result": true
}
▌Ether 보내기
일단 다른 Node 에 Account 를 하나 추가하였다. Address 는 "0xd33cbaced7b3990554667391708350cbbe3083a6" 로 EOA 를 생성했고, 아직 balance 는 0 이다.
2c6191a4792a3a33cbd2f8b7b7e583a61fb33b23 계좌에서 위 계좌로 150 ether 를 이체 해보겠다.
Transaction 을 보낼때는 Wei 단위를 쓰며, 150 이더는 150,000,000,000,000,000,000 Wei 이다. 이걸 HEX 값으로 바꾸면 0x821ab0d4414980000 이 된다.
{
"jsonrpc":"2.0",
"method":"eth_sendTransaction",
"params": [{
"from": "0x2c6191a4792a3a33cbd2f8b7b7e583a61fb33b23",
"to": "0xd33cbaced7b3990554667391708350cbbe3083a6",
"value": "0x821ab0d4414980000"
}],
"id":100
}
"jsonrpc":"2.0",
"method":"eth_sendTransaction",
"params": [{
"from": "0x2c6191a4792a3a33cbd2f8b7b7e583a61fb33b23",
"to": "0xd33cbaced7b3990554667391708350cbbe3083a6",
"value": "0x821ab0d4414980000"
}],
"id":100
}
위 처럼 Request 를 보내면, 정상적인 Transaction 이 발생 되었다면 아래와 같은 응답이 온다.
{
"id": 100,
"jsonrpc": "2.0",
"result": "0x265be2659d440ccd894370a9354bb189123f71ad17fea55f3b7dc2f8900d1664"
}
"id": 100,
"jsonrpc": "2.0",
"result": "0x265be2659d440ccd894370a9354bb189123f71ad17fea55f3b7dc2f8900d1664"
}
Result 로 보내준 값은 Transaction 의 Hash 이다.
▌Receipt 조사하기
Ethereum 은 Miner 가 생성한 Block 을 Import할 때 Transaction 을 처리하였다면, Receipt 를 만들어서 저장한다. 그래서, Transaction 이 정상적으로 Block 으로 묶여서 처리되었다면 Receipt 가 생기게 되어있다. Receipt 에는 해당 Transaction 처리에 소모된 Gas 와 Transaction 이 묶인 Block 의 번호 등이 포함되며, Smart Contract 를 Create 한 경우, Contract Account 의 Address 도 들어가게 된다.
Receipt 요청
{
"jsonrpc":"2.0",
"method":"eth_getTransactionReceipt",
"params":[
"0x265be2659d440ccd894370a9354bb189123f71ad17fea55f3b7dc2f8900d1664"
],
"id":100
}
"jsonrpc":"2.0",
"method":"eth_getTransactionReceipt",
"params":[
"0x265be2659d440ccd894370a9354bb189123f71ad17fea55f3b7dc2f8900d1664"
],
"id":100
}
Receipt 결과
{
"id": 100,
"jsonrpc": "2.0",
"result": {
"transactionHash": "0x265be2659d440ccd894370a9354bb189123f71ad17fea55f3b7dc2f8900d1664",
"transactionIndex": "0x0",
"blockNumber": "0x7a7",
"blockHash": "0xb760b2d919227cf557f7289c3a5181f09fb0deda669df35b50c510af189cdc5a",
"cumulativeGasUsed": "0x5208",
"gasUsed": "0x5208",
"contractAddress": null,
"logs": []
}
}
"id": 100,
"jsonrpc": "2.0",
"result": {
"transactionHash": "0x265be2659d440ccd894370a9354bb189123f71ad17fea55f3b7dc2f8900d1664",
"transactionIndex": "0x0",
"blockNumber": "0x7a7",
"blockHash": "0xb760b2d919227cf557f7289c3a5181f09fb0deda669df35b50c510af189cdc5a",
"cumulativeGasUsed": "0x5208",
"gasUsed": "0x5208",
"contractAddress": null,
"logs": []
}
}
해당 Transaction 이 Mining 되어 Block 들어갔고, Block Hash 도 보여준다.
이제 잔고를 확인해보면 된다.
▌잔고 확인하기
위 이체 작업이 잘 되었는지 잔고를 확인해보도록 하겠다.
Balance 확인 요청
{
"jsonrpc":"2.0",
"method":"eth_getBalance",
"params": [
"0xd33cbaced7b3990554667391708350cbbe3083a6"
],
"id":100
}
"jsonrpc":"2.0",
"method":"eth_getBalance",
"params": [
"0xd33cbaced7b3990554667391708350cbbe3083a6"
],
"id":100
}
Balance 확인 응답
{
"id": 100,
"jsonrpc": "2.0",
"result": "0x0821ab0d4414980000"
}
"id": 100,
"jsonrpc": "2.0",
"result": "0x0821ab0d4414980000"
}
위 처럼 150 ether 가 잘 이체되었음을 알 수 있다.
이렇게 JSON RPC API 를 사용한 방법은 아주 간결하다. 다만 Bitcoin 과 프로세스 상 다른부분들이 있어서 까다로워 보일 뿐이다.
이제 기본적인 Transaction 발생까지 해보았으니, 다음부터는 Web3 API 나 RPC 를 사용한 Smart Contract 로 들어가볼까 한다.
반응형
'Blockchain > Ethereum' 카테고리의 다른 글
Ethereum 응용 개발 - Smart Contract 의 이해 (3) | 2016.07.06 |
---|---|
Ethereum 응용 개발 - web3.js 사용하기 (0) | 2016.07.03 |
Ethereum 응용 개발 - JSON RPC API 기본 (1) | 2016.03.20 |
이더리움 Smart Contract - 개념 (1) | 2016.03.13 |
C+++ Ethereum, Private Network 구성하기 #3 - eth 실행하기 (2) | 2016.03.06 |