develop custom_top_html:no
default debug random = 0 / type = READ / detected = READ

안녕하세요.

쌩광부입니다.

 

#3. 계정 잔액 확인하기

 

우선 이더소셜 노드에서 잔액을 읽어오기 위해 노드를 설치해야합니다.

 

1. 이더소셜 노드 설치하기

 

이더소셜 노드의 빌드를 위해 필요한 패키지들을 설치하고 설정합니다.

이더소셜 또는 이더리움 코인의 경우 대부분 golang 프로그래밍 언어를 사용하므로 golang도 설치해야 합니다.

sudo apt-get install -y build-essential

cd ~

wget https://dl.google.com/go/go1.11.linux-amd64.tar.gz

tar zxvf go1.11.linux-amd64.tar.gz

sudo mv go /usr/local

 

export GOROOT=/usr/local/go

export PATH=$GOROOT/bin:$PATH

 

재부팅시에도 golang을 사용하려면 아래 .profile 파일 맨 하단에 아래 두 줄을 입력합니다.

vi ~/.profile

 

export PATH="$PATH:/usr/local/go/bin"

export PATH="$HOME/.yarn/bin:$PATH"

 

이제 이더소셜 노드를 다운 받고 빌드합니다.

cd ~

git clone https://github.com/ethersocial/go-esn

cd go-esn

chmod 755 build/*

make gesn

sudo cp ~/go-esn/build/bin/gesn /usr/local/bin/

 

screen을 이용해 별도의 터미널에서 이더소셜 노드를 실행합니다.

screen -S gesn1

gesn --cache=1024 --rpc --rpcaddr 127.0.0.1 --rpcport 9545 --rpcapi "eth,net,web3" console

 

screen 터미널에서는 Ctrl + a, d로 빠져나오면 실행중인 노드가 중단되지 않고 계속 백그라운드로 작동됩니다.

 

2. 필요한 PHP 패키지 설치

 

지난 강좌에서 얘기한대로 composer를 이용해 필요한 PHP 패키지를 설치합니다.

이더리움 계열 코인들은 소수점 18자리까지 정확하게 처리하여야 하므로 BigInteger, BigDecimal 클래스를 사용해야 하는데요.

저희는 Brick/Math를 이용합니다.

 

cd /var/www/html

composer require Brick/Math

 

위와 같이 Brick/Math을 패키지를 설치합니다.

Apache2를 설치하면 기본 홈 디렉토리가 /var/www/html 이기 때문에 그곳으로 이동해서 composer를 실행합니다.

 

3. api-config.php 파일을 만듭니다.

 

전체 소스는 아래 링크에서 확인하세요.

https://github.com/topmining/ethersocial-php-api

 

노드의 RPC 주소와 포트를 입력합니다.

 

<?php

$api_host = "127.0.0.1";

$api_port = 9545;

 

4. json-rpc.php 파일을 만듭니다.

 

curl을 이용해 JSON-RPC 호출 함수를 만듭니다.

 

<?php

function getEtherRpc($host, $port, $method, $params, $id) {

$ch = curl_init();

 

curl_setopt($ch, CURLOPT_URL, $host);

curl_setopt($ch, CURLOPT_PORT, $port);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

curl_setopt($ch, CURLOPT_POST, TRUE);

curl_setopt($ch, CURLOPT_POSTFIELDS, '{"jsonrpc":"2.0","method":"'.$method.'","params":['.$params.'],"id":'.$id.'}');

 

$ret = curl_exec($ch);

curl_close($ch);

 

return $ret;

}

 

JSON-RPC에 대한 자세한 사항은 아래 링크를 참고하세요.

https://github.com/ethereum/wiki/wiki/JSON-RPC

 

5. get_balance.php 파일을 만듭니다.

 

노드에서 잔액을 읽어옵니다.

 

<?php

ini_set('display_errors', 'On');

 

require "json-rpc.php";

require "api-config.php";

require __DIR__."/vendor/autoload.php";

 

use Brick\Math\BigDecimal;

use Brick\Math\BigInteger;

use Brick\Math\RoundingMode;

 

header('Content-type: application/json');

 

$account = $_GET['account'];

 

$id = 1;

$json = getEtherRpc($api_host, $api_port, 'eth_getBalance', '"'.$account.'", "latest"', $id++);

 

$data = json_decode($json, true);

$value = $data["result"];

$value = str_replace("0x", "", $value);

 

$wei = BigInteger::parse($value, 16);

$ether = BigDecimal::of($wei)->dividedBy("1000000000000000000", 9, RoundingMode::DOWN);

$balance = "$ether";

 

$result = array();

$result["result"] = array("balance"=>$balance);

 

echo json_encode($result);

 

간단하죠?

미리 만들어둔 getEtherRpc 함수를 이용해 노드에 eth_getBalance를 호출하고 hex값으로 되어있는 잔액을 읽어와서 Json형태로 출력하는 내용입니다.

 

require "json-rpc.php";

...

require를 이용해 필요한 파일들을 로드하고요.

 

use Brick\Math\BigDecimal;

...

use를 이용해 사용할 클래스를 지정합니다.

 

$json = getEtherRpc($api_host, $api_port, 'eth_getBalance', '"'.$account.'", "latest"', $id++);

지정된 IP와 포트로 JSON-RPC를 호출합니다.

eth_getBalance는 잔액을 가져오는 요청합니다.

 

$wei = BigInteger::parse($data["result"], 16);

$ether = BigDecimal::of($wei)->dividedBy("1000000000000000000", 9, RoundingMode::DOWN);

이더리움의 경우 내부적으로 wei 단위(1 ether = 1000000000000000000 wei)를 사용하기 때문에 BigInteger, BigDecimal을 사용해 소수점 9자리(gwei 단위)까지 표시하도록 합니다.

 

$balance = "$ether";

PHP 해본분들은 다 아실텐데요. 문자열안에 변수를 넣으면 그 변수가 바로 문자로 변경되어 저장됩니다.

매우 유용한 기능이죠.

 

결과값을 확인해볼까요?

 

http://서버주소/get_balance.php?account=지갑주소

 

{

  "result": {

    "balance": "100.000000000"

  }

}

 

위와 같이 나오면 정상입니다.

물론 정상적인 잔액이 나오려면 노드에서 모든 블록이 동기화되어야 하는데요.

이더소셜의 경우 서버 성능에 따라 틀리지만 수십 분 이내에 동기화가 완료됩니다.

 

이상으로 이번 강좌를 마치도록 하겠습니다.

감사합니다.


[알림: 이 게시글은 관리자에 의해 ''에서 '개발'로 이동되었습니다]
8,411

쌩광부님의 서명

댓글 4
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
220 개발 채굴 관리프로그램 MINE ASSIST 베타버전 공개 안녕하세요. 저는 S전자에서 개발자로 일하다가 지금은 작은 스타트업을 하고 있는 파이리입니다.   얼마 전에 채굴기 관리 프로그램을 개발하고 있다고 글을 올린적이 있었는데, 베타 테스트에 ... 180 file 39 14954
파이리
2017.06.17
219 개발 블록체인 소스에 관하여 질문드립니다 안녕하세요 늘 질문만 남기는것 같아 죄송합니다 블록체인 자체를 이해하고 싶은데 자료 찾기가 수월하지않아 땡글분들의 도움을 받고자 글을 남깁니다ㅜ 비트코인은 오픈소스이며 블록체인 네트... 2 0 2149
철수찰스
2017.06.17
218 개발 이더리움의 토큰안에 토큰이 생성될 수 있나요? 제가 잘 몰라서요.   A토큰을 만들고 그 A토큰 기반의 또 다른 B토큰의 생성이 가능한가 해서요. 이게 가능하다면, 토큰안의 토큰이 무한대로 생성될 수 있지 않을까... 하는 망상을 해봤는데,..... 1 0 1031
꿀맨
2017.06.16
217 개발 크억!!! 실수로 핸드폰의 바이트볼을 지웠습니다.    실수로  핸드폰의 바이트볼 앱을 지웠습니다.    그안에 20기가 바이트볼의 수량이 있습니다. 어떻게 해야 하나요?    제발 도와주세요 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ 4 0 2335
대군림
2017.06.15
216 개발 위탁 채굴장용 관리프로그램 개발중입니다.   이제 거의 80%정도 개발이 완료됐습니다.   보시는 화면은 코인 설정화면인데 코인하고 연결된 관리프로그램 셋팅해놓으면   각 채굴기에서 어떤 코인 채굴할지만 설정하면 되게 만들어놨습니... 43 file 6 4816
AMDMANIA
2017.06.14
215 개발 @쌍둥아빠 운영자님, 판매자에게 포인트를 소모하게 하는 시스템.. 어떤가요? 안녕하세요.   모 하드웨어 취급하는 커뮤니티는 활동(글, 댓글)할때 포인트를 적립하고, 판매글을 올릴때 포인트를 차감하는 방식을 사용합니다. 더 많은 판매글을 올리고 싶은 사람은, 포인트... 5 1 972
캐왕항우
2017.06.14
214 개발 운영자님?. 닉네임 변경은 불가능한가요? 땡글운영자님 안녕하세요. 사이버광부 입니다. 사실은, GPU가 없어서 광업은 전혀 못하고 있습니다. 그런 저런 쓸데없는 이유로 닉네임을 바꾸고 싶다는 생각이 문득 들었습니다.   닉네임 변경 ... 3 0 692
사이버광부
2017.06.13
213 개발 리플 시스템에 관하여 질문 드립니다 안녕하세요 리플에 대하여 알아보다가 도저히 알기가 힘들어서 결국에 땡글에 글을 남깁니다. 처음에 리플이 블록체인 기반이 아닌 중앙 집권 방식을 갖춘 금융 거래를 중심으로 움직인다고 알고... 3 1 1459
철수찰스
2017.06.13
212 개발 Claymore's 마이너 모니터링 툴 개발중입니다 마이너 모니터링 툴 개발중입니다.   사실 다른방법으로 수백대 까지 관리하는 툴 개발중이였는데 리소스가 너무 많이 들어가서 패스하고 클래이모어 마이너 모니터링 툴 개발로 선회했습니다.  ... 11 file 2 2849
m8928
2017.06.13
211 개발 빗썸 api 질문드립니다.   안녕하세요.   가상화폐 입문 2주차 신입입니다. 처음 알게된 싸이트가 빗썸이여서 빗썸에서 거래를 하고있는데,  거래 상황을 보기가 너무 불편하더라구요 ㅡ.ㅡ; 그래서 API를 이용해서 거래... 1 file 0 3788
찌아
2017.06.12
210 개발 리플 코인의 개념... 그리고 활용 분야 이것도 저의 개인적인 추론입니다.   쌍둥아빠님의 글을 읽고 쓰게 됬습니다.  ㅎㅎㅎ   리플이 금융권의 송금 시스템을 타겟으로 만들어진것은 다들 아시리라 생각합니다...   그래서,   우리들... 0 2504
연마공
2017.06.12
209 개발 【 비트코인 세계시세 비교차트 】 비트코인 세계시세 비교차트 입니다.   [ 사이트 주소 ] AresTrader.com   [ 사이트 설명 ] 개인 용도로 제작한 프로그램의 데이터를 공유하기 위한 사이트입니다. 웹으로 포팅하기 위해서 시간... 1 file 1 2752
AresTrader
2017.06.12
208 개발 [테스트]거래소 시세 모니터링 웹 거래소 시세 모니터링용 웹 페이지를 만들어보았습니다.   웹은 처음하는거라 어렵네요...   거래소 데이터 폴링 주기는 약 5초 입니다.   사이트 주소는    http://www.goingcoin.com/   시세는... 47 13 4975
분홍몸매
2017.06.09
207 개발 기술 개발 Bitlattice 작년 이맘때네요. Ethereum mist 지갑과 Geth 가 tx 를 생성하기 위해 사용자 암호를 user privilege level 에서 plain text 로 복호화 시켜 처리한다는 기초적이며 심각한 보안 문제를 나 자신... 22 9 2422
stardust
2017.06.08
206 개발 채굴기 관리 프로그램을 만들고 있습니다.   (혹시 광고 글이라고 생각되신다면 연락 주시면 장터로 옮기겠습니다)  처음엔 제 채굴기 관리가 필요해서 만들어볼까 했는데, 조금 생각해보니 이것도 좋은 시장이 될 수 있을 것 같아서 제... 45 file 21 8419
파이리
2017.06.06
205 개발 질문드립니다 nxt코인,아더 지갑을 만들려고 합니다 안녕하세요   질문드립니다   nxt지갑을 만들려고 합니다 원래 아더지갑을 만들려고했지만 아직 서비스되지않아서 아더를 옮길수있는 nxt지갑부터 찾아보았습니다.    홈페이지에 가보았는데 nxt... 0 2399
이더로
2017.06.06
204 개발 블록체인을 이용한 주거나 차량 공유 시스템을 개발 프로젝트 블록체인을 이용한 주거나 차량 공유 시스템을 개발해 보려고 합니다. 생각건대 기존의 우버나, 에어비앤비는 공유경제라는 거창한 타이틀을 걸고 운영하고 있지만 사실 그것이 진정한 형태의 공... 8 0 2127
미르삼촌
2017.06.05
203 개발 비트코인 거래시스템? 이 궁금합니다 ㅎ      코인 자체의 거래소 형태가 아니라... 뉴스 검색하다가 보게 됐는데 파리바게트 아드님께서 비트코인 거래 프로그램 개발을 하셔서   빵 판매를 비트코인으로 받으셨다고.. ㅎㅎ 좀 되긴 했... 3 0 2002
lenity
2017.06.04
202 개발 비트코인이나 이더리움같은 코인을 만들려면 어느정도의 비용이 들까요? 개발무식자인데요   비트코인이나 이더리움 오픈소스로 다른기능추가없이 이름과 총발행수량정도만 조정해서   새로운 코인을 만들려면 어느정도의 비용이 소모될까요??     어디선가 50만원만 ... 5 0 3426
될까
2017.06.02
201 개발 빗썸 과 동일한 기능을 가진 거래소 제작 문의 빗썸 과 동일한 기능을 가진 https://www.bithumb.com/   사이트 제작의뢰 합니다   의뢰자인대 거래에대한 시세나 비전에 대해서만 알고 있지 제작에 대한 전반적인 지식은 없는 상태 입니다 다... 10 0 11997
채굴왕자
2017.06.02
Board Pagination Prev 1 ... 77 78 79 80 81 82 83 84 85 86 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ