이전의 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": [
        "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
}


▌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
}

위 처럼 Request 를 보내면, 정상적인 Transaction 이 발생 되었다면 아래와 같은 응답이 온다.

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

Receipt 결과
{
  "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
}

Balance 확인 응답
{
  "id"100,
  "jsonrpc""2.0",
  "result""0x0821ab0d4414980000"
}

위 처럼 150 ether 가 잘 이체되었음을 알 수 있다.


이렇게 JSON RPC API 를 사용한 방법은 아주 간결하다. 다만 Bitcoin 과 프로세스 상 다른부분들이 있어서 까다로워 보일 뿐이다.
이제 기본적인 Transaction 발생까지 해보았으니, 다음부터는 Web3 API 나 RPC 를 사용한 Smart Contract 로 들어가볼까 한다.

반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,