develop custom_top_html:no
default debug random = 1 / type = READ / detected = READ / doc_Srl = 10412507

안녕하세요.

쌩광부입니다.

 

이더소셜 PHP API 서버 만들기 강좌를 시작하도록 하겠습니다.

이번 시간에는 실제 프로그래밍에 앞서 기본적인 구조에 대해서 설명하도록 하겠습니다. 

 

ApiStructure.png

 

프롤로그에서 얘기한대로 저희는 Apache2와 PHP를 이용할 예정이고요.

이더리움(geth), 이더소셜(gesn) 등등의 노드에 연결하여 블록정보와 계정잔액을 읽어오게 되고요.

그 자료를 계정별로 분리한 트랜젝션 히스토리를 MySQL에 저장합니다.

 

일반적으로 geth와 같은 노드 데몬에서는 자체적으로 JSON RPC API를 제공하고 있는데요.

그럼 그 API를 이용하면 되지 굳이 왜 별도의 API를 만드는지 궁굼하시죠??

geth의 경우 블록을 생성하고 검증하고 다른 노드와 동기화하는 등등의 기능을 포함하고 있고

계정별로 정보를 가지고 있는 것이 아닌 블록 단위로 저장되므로

계정별 트랜젝션 히스토리를 읽어올 때 상당히 오랜시간이 걸립니다.

또한 그렇게 잦은 호출을 하는 경우 geth에 부하가 증가되어 본연의 노드 기능에 영향을 줄 수 있습니다.

그렇기 때문에 생성되는 블록의 정보를 파악하여 계정별로 별도의 데이터를 저장합니다.

그럼 geth에서 읽을때 보다 훨씬 빠르게 읽을 수 있습니다.

 

1. 계정별 히스토리 정보 저장 방식

서버에서는 블록타임(대략 13초) 보다 짧은 주기로 geth의 JSON RPC로 최신 블록에 대한 정보를 읽어옵니다.

그리고 블록에 포함된 트랜젝션을 확인하여 계정별 인덱스가 가능하도록 MySQL 테이블에 저장합니다.

이때 MySQL 대신 MongoDB 또는 Redis를 이용하셔도 됩니다.

다만 Redis의 경우 메모리 기반의 캐시 데이터베이스이므로 매우 많은 메인 메모리가 필요할 수 있습니다.

 

2. MySQL에 저장하지 않는 정보

계정의 잔액과 트랜젝션의 수, 그리고 토큰의 잔액등은 별도로 MySQL DB에 저장하지 않습니다.

geth의 JSON RPC로 호출하여도 성능에 큰 차이가 없기 때문입니다.

 

3. ERC20 토큰 등록

저희의 API는 ERC20의 토큰에 대한 정보도 표함하고 있는데요.

계정별 히스토리 정보 저장 방식처럼 블록을 읽어와서 그중에 ERC20 토큰 컨트렉트가 생성되었는지 확인합니다.

이더리움의 경우 어떤 트랜젝션이 있을 때 받는 주소가 기록되지 않은 경우 컨트렉트가 생성되는대요.

그때 Input Data값을 확인하여 정상적인 컨트렉트인지 확인합니다.

그후 MySQL에 컨트렉트 주소를 저장해둡니다.

그리고 차후 블록이 생성될때 해당 컨트렉트 주소로 전송한 내역이 있는지 확인하고 그때 ERC20 ABI와 일치하는지 확인합니다.

만약 ERC20 ABI와 일치한다면 그 컨트렉트는 ERC20 토큰이 되는것이겠죠.

이렇게 파악된 ERC20 컨트렉트 주소를 바탕으로 계정별 토큰 히스토리 정보를 저장합니다.

 

4. 트렌젝션의 전송

우리가 만드는 API 서버는 보안을 위해 어떠한 지갑의 Private Key를 가지고 있지 않기 때문에 eth_sendTransaction을 사용할 수 없습니다. 

그렇기 때문에 geth의 eth_sendRawTransaction JSON RPC 명령을 그대로 이용합니다.

 

오늘 강의는 여기까지에요~~!!

관심 있으신 분들은 이더리움 위키의 JSON RPC를 둘러보시는 것도 좋을것 같습니다.

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

 

다음 시간에는 서버 세팅방법에 대해서 설명하도록 하겠습니다.

좋아요!! 쾅쾅 부탁드립니다.

 

쌩광부, 이더리움, 이더소셜, PHP, API


[알림: 이 게시글은 관리자에 의해 ''에서 '개발'로 이동되었습니다]
24,194
댓글 16
  • profile
    천재소년 2018.12.03 23:54
    책 내셔야 할듯 하네요. 이런 쉽고 자세한 설명은 유료 강좌에서도 찾아보기 힘들듯 합니다.
  • profile
    ddengle BOT 2018.12.03 23:54
    @천재소년
    천재소년님 축하합니다. 5 보너스 캐시에 당첨되셨습니다.!!
  • profile
    쌩광부 2018.12.03 23:59
    @천재소년

    제가 그렇게 유식하지 않으니 쉽게 설명할 수 밖에 없네요. ^^

  • profile
    young69 2018.12.03 23:56
    광부님^^ 무리하지마시고 건강챙기시고^^
    스트레스 받지마세요 ㅎㅎㅎ
  • profile
    쌩광부 2018.12.04 00:00
    @young69
    신경써주셔서 감사합니다. ^^
  • ?
    깡통컴사랑 2018.12.04 00:49
    강좌 기대할께요^^
  • profile
    김재현 2018.12.04 01:42
    좋아요 국~ 오타 꾹~
  • ?
    채굴start2018 2018.12.04 03:18

    <p>PHP current version is ' . phpversion() . '</p>

  • ?
    채굴start2018 2018.12.04 03:19
    @채굴start2018
    헉~ 안되네요 ㅋㅋ
  • ?
    AppA 2018.12.04 08:49
    내용중에 찾고 있던 내용이 있네요. 고맙습니다~~
  • ?
    퍼런하늘 2018.12.04 08:52
    고맙습니다. 좋아요~~~~
  • profile
    디엠스토리 2018.12.04 11:25
    좋은 내용 작성해주셔서 감사합니다
  • ?
    토토짱 2018.12.05 11:02
    잘읽었습니다.
  • ?
    샤리 2018.12.11 15:17
    다음 글 기다리고 있습니다.
  • ?
    로텔 2019.01.16 17:04
    좋은 강의 감사합니다.
  • ?
    성공할거야 2019.04.10 22:54
    잘 보고 갑니다.

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 [땡글운영위] 이사진 구성원 변경 공지 9 file 14 1336
땡글운영위
2019.09.03
공지 로그인이 안되시는 분은 문의해주시기 바랍니다. 4 4 2104
땡글개발자
2019.08.21
공지 개인 정보 유출에 따른 사과문 55 file 8 4328
땡글개발자
2019.08.21
1480 비트코인을 현금처럼 쓸수있는 기술 라이트닝 네트워크 _ 블록체인 쿠키     비트코인은 10분에 한 번씩 거래내역들을 받아서 처리합니다. 초당 7건 정도의 거래를 처리할수 있다고 합니다.그러니 초당 거래 수가 7건을 넘어가면 필연적으로 거래가 밀리게 됩니다. 게다가 거래가 밀리지 않... 31 24 2218
도원Dowon
2018.12.11
1479 질문 업비트 매도 주문 에러 문의 업비트 API를 쓰고있는데요   똑같은코드로 매수 매도 가격(body 값만변경)만 변경하여 주문함수가 동작중입니다.   그런데 매수는 이상없이 되는데 매도는 'Jwt의 query를 검증하는데 실패'하였다고 뜨네요   아무리... 2 1547
마지막시드
2018.12.10
1478 개발 블록체인 강의 04 - 암호화(1) *** 답변 댓글이 있을 때 글 내용 삭제시 경고 없이 계정이 정지됩니다. *** *** 개인정보가 포함된 경우 혹은 불법적인 요소의 수정은 가능합니다.*** -----------------------------------------------------------... 17 14 1144
쌍둥아빠
2018.12.10
1477 질문 외부 커뮤니티 홍보를 하려면 어디에 하면 좋을지.. 제가 작은 블록체인 개발자 커뮤니티를 만들어서 이 게시판에 홍보를 했다가 경고를 먹고 삭제가 되었는데요.. 홍보를 하고 싶은데 딱히 어디에다가 하면 좋을지 잘 모르겠네요.. 네이버 검색에도 광고를 올리긴 했는... 6 530
블록체인나라
2018.12.10
1476 질문 현재 이더리움 메인넷의 코어 크기(사이즈)가 몇기가 정도 되나요?   지금 서버를 임대해서 이더리움을 설치하고 geth 명령으로 이더리움서버를 실행했습니다.   2대를 실행해놨는데 한대는 체인데이타가 360기가가 넘었고 다른 한대(fast모드)는 150기가 정도됩니다...   그런데 360... 1 2 1212
로텔
2018.12.10
1475 ProgPOW는 확실한 Anti-ASIC이 될 수 있을까요? ProgPOW에 대한 의문점 몇 가지.  ProgPOW는 확실한 Anti-ASIC이 될 수 있을까요?   https://eips.ethereum.org/EIPS/eip-1057 ProgPOW에 대하여 오늘 이 페이지를 정독해봤습니다. 아래 내용은 영어 번역이 미흡하여... 29 21 2099
쌩광부
2018.12.09
1474 개발 웹디자이너분 계신가요? 안녕하세요..... 저 혼자 하나 만들었는데 디자인 센스가 없어서 사이트가 허름하네요 ㅠㅠ 웹디자인 도와주실분 없나요???   사이트는 www.weshareluck.io 입니다.   한번 둘러보시고 도와주실분 메일이나 카톡 주세... 4 623
친절한냥이
2018.12.09
1473 [강좌] 쌩광부의 모바일 지갑 만들기 #7. 지갑 불러오기 안녕하세요. 쌩광부입니다.   저의 강좌는 오랜시간의 노력과 열정의 결과물입니다. 내용이 길고 지루하더라도, 강좌 내용에 관심없으셔도 &quot;좋아요&quot; 한방 눌러주시면 좋겠습니다. 그럼 더 열심히 강좌를 쓸 수 있겠죠... 9 file 19 1316
쌩광부
2018.12.09
1472 질문 Truffle 관련 질문 (이더리움 Dapp 개발) 거래소 api 공부하다가 최근 이더리움 Dapp 개발에 관심을 두게 되었고 Truffle을 사용하며 공부하고 있습니다.     oraclize 테스트 코드(https://docs.oraclize.it/#ethereum-quick-start)를 써서 공부하고 있는데 ... 3 521
빗코매앤
2018.12.08
1471 개발 업비트 호가창 멈춤 (api) api로 트레이딩하는 사람입니다. 오늘 새벽 4시 30분 경에 업비트 호가창이 멈췄는데요. 호가창이 멈췄는데 그 가격을 보고 주문하면 또 체결은 정상적으로 되어 버려서 손해를 봤네요 ㅠ 이번에 저는 이더리움이랑 ... 5 875
비락식
2018.12.08
1470 질문 알트제작중 지갑오류 문제 질문...     안녕하세요...   litecoin 8.7.4 버전을 포킹하여 수정제작을 해보고있사옵니다..   월렛 gui 까지 모두 코딩이 완료되었으나..   월렛을 실행을 하게되면 out of sync로 나타나며,, 연동이안되는거같은데요   이... 7 file 500
shinpok
2018.12.05
1469 질문 이더리움 코인이안보내집니다 ㅜ           안녕하세요 이더리움 연구중입니다. 테스트넷 패리티로 블록쌓고 동기화까지잘되었습니다. 코인전송받기 테스트중인데 코인받는건 테스트넷 수도꼭지로 잘받아집니다. 받은코인을 메타마스크로 보내려고하... 5 468
피로
2018.12.05
1468 질문 소규모 사무실에서 코인 개발하고 인계하고 개발자가 연락이 안됩니다 그나마 코인러인 저에거 문의를 하길래 아는게 트레이딩 인데;;   일단 ,   비트코인 소스로 코인 개발하고, cpu마이닝 까지는 한다고 합니다. GPU마이닝 환경은 안만들어 주고요..   그래서, 탐색기 explorer 있는지... 7 1046
쿠키맨
2018.12.05
1467 개발 해킹 불가능한 거래소 idea   로그인 자체가 없고 거래소는 그냥 TV처럼 거래기록만 방송하는 겁니다 거래소 서버는 항상 off-line 으로 동작하니까 해킹 자체가 불가능! 단 문자메시지로 매도,매수주문받고 시간상0.1초라도 최초 제일 빨리 도... 18 966
내가총대멘다
2018.12.04
[강좌] 이더소셜 PHP API 서버 만들기 #1. 기본 설계 안녕하세요. 쌩광부입니다.   이더소셜 PHP API 서버 만들기 강좌를 시작하도록 하겠습니다. 이번 시간에는 실제 프로그래밍에 앞서 기본적인 구조에 대해서 설명하도록 하겠습니다.      프롤로그에서 얘기한대로 저... 16 file 23 2547
쌩광부
2018.12.03
1465 개발 트레이딩 봇 만들고 있습니다. 2월쯤에 이쪽에 글올리고, 한동안 구현 못하고 있다가, 최근에 한달정도 달리고 있습니다.   오늘 낮 데이터로 백테스트해보니 이렇게 나오네요. 분봉기준이고요. 저 와중에 안잃어서.. 올려봅니다.   어제쯤해서 실... 6 file 1081
jaypark
2018.12.03
1464 개발 블록체인 개발자가 꿈인 백수입니다. 안녕하세요, 개발자를 꿈꾸는 백수입니다. 블록체인 관련 회사에 입사하고 싶고 제가 직접 코인을 개발하고 싶은데요, 저는 현재 C++를 공부중에 있습니다. 네임스페이스 부분 하고있네요..ㅋㅋ 갓난아기 태어나기전 ... 13 1 2695
railgun0
2018.12.03
1463 [강좌] 쌩광부의 모바일 지갑 만들기 #6. 니모닉 지갑 생성 안녕하세요. 쌩광부입니다.   저의 강좌는 오랜시간의 노력과 열정의 결과물입니다. 내용이 길고 지루하더라도, 강좌 내용에 관심없으셔도 &quot;좋아요&quot; 한방 눌러주시면 좋겠습니다. 그럼 더 열심히 강좌를 쓸 수 있겠죠... 11 file 17 1620
쌩광부
2018.12.02
1462 개발 이오스 기반 로또 싸이트 지난 8월에 고수님들께 이것저것 물어보았는데 드디어 완성하고 서버에 올렸습니다.   www.weshareluck.io   이오스 기반으로 만들어보았습니다. (이오스가 전송수수료가 없어서.....ㅎ)   도움 주신분들 감사합니다.... 5 927
친절한냥이
2018.12.01
1461 ProgPOW 그것이 알고싶다? 안녕하세요. 쌩광부입니다.   요즘 ProgPOW 이야기가 많이 나오고 있는데요. 도대체 ProgPOW가 뭔지 제가 좀 찾아봤습니다.   ProgPOW : A programmatic (dynamic) Proof-of-Work 프로그래밍 (동적인)  작업증명   최... 31 20 2177
쌩광부
2018.12.01
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 ... 85 Next
/ 85
PC debug / slots = 2 / size = 0 / random = 0