안녕하세요.
쌩광부입니다.
한동안 ESN 재단 설립 때문에 너무 바빠서 강좌를 못했었는데요.
오늘 ESN 재단 구성원 모집이 완료되어 한시름 놓았습니다.
그리하여... 다시 강좌를 시작하도록 하겠습니다.
지난 강좌는 땡글 블로그와 스팀잇에서 보실 수 있고요.
https://steemit.com/@topmining
https://www.ddengle.com/@TopMining
오늘 강좌는 계정 트랜젝션 개수를 확인하는 방법인데요.
트랜젝션 개수가 왜 필요한 걸까요?
트랜젝션 개수는 새로운 트랜젝션을 만들기 위한 Nonce 값으로 활용됩니다.
코인을 전송하기 위해서 트랜젝션이 필요한데요.
Nonce는 그 트랜젝션의 일련번호라고 보시면 되겠습니다.
즉, 맨 처음 전송을 할 때는 트랜젝션의 일련번호는 0입니다.
그다음은 1입니다.
이런 식으로 자신의 트랜젝션이 생성될 때마다 고유한 번호를 붙여줘야 하는데요.
그때 사용하기 위해 이전에 생성된 자신의 트랜젝션의 개수를 읽어와 Nonce 값으로 적용하게 되는 것이죠.
- get_txcount.php 파일을 만들고 아래와 같이 코딩합니다.
<?php
require "json-rpc.php";
require "api-config.php";
header('Content-type: application/json');
$account = array_key_exists('account', $_GET) ? $_GET['account'] : '';
if(strlen($account) == 42 && ctype_alnum($account) && strpos($account, '0x') >= 0) {
$id = 1;
$json = getEtherRpc($api_host, $api_port, 'eth_getTransactionCount', '"'.$account.'", "latest"', $id++);
$data = json_decode($json, true);
$error = array_key_exists('error', $data) ? $data['error'] : null;
$result = array();
if($error) {
$result['error'] = $error;
}
else {
$value = $data["result"];
$result['error'] = null;
$result['result']['count'] = hexdec(str_replace('0x', '', $value));
}
echo json_encode($result);
}
else {
$result = array();
$result['error']['code'] = '-1';
$result['error']['message'] = 'Invalid address';
echo json_encode($result);
}
한 줄 한 줄 살펴볼까요?
require "json-rpc.php";
require "api-config.php";
require를 이용해 필요한 파일들을 로드하고요.
header('Content-type: application/json');
출력 Content-type을 JSON 형태로 지정합니다.
$account = array_key_exists('account', $_GET) ? $_GET['account'] : '';
HTTP GET 형식으로 지갑 주소를 받습니다.
if(strlen($account) == 42 && ctype_alnum($account) && strpos($account, '0x') >= 0) {
지갑 주소에 대한 유효성 검사를 하고요.
$json = getEtherRpc($api_host, $api_port, 'eth_getTransactionCount', '"'.$account.'", "latest"', $id++);
지정된 IP와 포트로 JSON-RPC를 호출합니다.
eth_getTransactionCount는 계정 트랜젝션 개수를 받아오는 RPC 명령입니다.
id의 경우 큰 의미는 없는데 내가 보낸 RPC의 고유번호라고 보면 됩니다.
여러 명령을 한 번에 보낼 때 유용하게 사용할 수 있지만 지금은 한 건만 보내기 때문에 큰 의미는 없습니다.
$data = json_decode($json, true);
받아온 데이터가 JSON 문자열이므로 PHP 배열로 변경합니다.
$error = array_key_exists('error', $data) ? $data['error'] : null;
오류가 있는지 확인하고요.
$result['error'] = $error;
오류가 있는 경우 오류 메시지를 출력합니다.
$result['result']['count'] = hexdec(str_replace('0x', '', $value));
16진수(Hex)값으로 되어있는 개수 값을 10진수로 변경하여 출력합니다.
echo json_encode($result);
최종 결과값은 JSON 형태로 변경하면 되는 거죠.
이것으로 트랜젝션 개수 가져오는 코딩은 끝나는 거죠.
참~~ 쉽죠!
그럼 결과값을 봅시다.
http://서버주소/get_txcount.php?account=지갑주소
{
"result": {
"count": 10
}
}
위와 같이 나오면 성공입니다.
이 강좌의 전체 소스는
https://github.com/topmining/ethersocial-php-api
여기서 확인하면 되고요.
오류가 있으면 언제든 제보해주시면 감사하겠습니다.
그럼 다음 강좌도 많이 기대해주세요~~