debug random = 0

안녕하세요.

쌩광부입니다.

 

이더소셜 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 CASH

쌩광부's 서명

profile

이더소셜(ESN) 채굴풀 (Pool fee 0.5%)

https://esn.topmining.co.kr

칼리스토(CLO) 채굴풀 (Pool fee 0.5%)

https://clo.topmining.co.kr

펄(PIRL) 채굴풀 (Pool fee 0.5%)

https://pirl.topmining.co.kr

메타버스(ETP) 채굴풀 (Pool fee 0.5%)

https://etp.topmining.co.kr

폴엠(FLM) 채굴풀 (Pool fee 0.5%)

https://flm.topmining.co.kr

 

디스코드 https://discord.gg/sjwKhaS

페이스북 https://www.facebook.com/topmining.co.kr

트위터 https://twitter.com/TopMining

Atachment
첨부 '1'
댓글 16
  • profile
    천재소년 2018.12.03 23:54
    책 내셔야 할듯 하네요. 이런 쉽고 자세한 설명은 유료 강좌에서도 찾아보기 힘들듯 합니다.
  • profile
    ddengle BOT 2018.12.03 23:54
    to 천재소년 :
    천재소년님 축하합니다. 5 보너스 캐시에 당첨되셨습니다.!!
  • profile
    쌩광부 2018.12.03 23:59
    to 천재소년 :

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

  • profile
    young69 2018.12.03 23:56
    광부님^^ 무리하지마시고 건강챙기시고^^
    스트레스 받지마세요 ㅎㅎㅎ
  • profile
    쌩광부 2018.12.04 00:00
    to 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
    to 채굴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
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 [Air Drop 이벤트] 게시판을 신설합니다 14 file 41348
땡글운영위원회
2019.05.17
공지 [땡글] (주)이에스엔운영 채용공고 16 file 2 3476
ESN운영
2019.05.14
[AD] [AD] ESN으로만 신청 가능한 광고자리입니다. 14 12162
관리자
2019.01.02
1468 질문 소규모 사무실에서 코인 개발하고 인계하고 개발자가 연락이 안됩니다 그나마 코인러인 저에거 문의를 하길래 아는게 트레이딩 인데;;   일단 ,   비트코인 소스로 코인 개발하고, cpu마이닝 까지는 한다고 합니다. GPU마이닝 환경은 안만들어 주고요..   그래서, 탐색기 explorer 있는지... 7 909
쿠키맨
2018.12.05
1467 개발 해킹 불가능한 거래소 idea   로그인 자체가 없고 거래소는 그냥 TV처럼 거래기록만 방송하는 겁니다 거래소 서버는 항상 off-line 으로 동작하니까 해킹 자체가 불가능! 단 문자메시지로 매도,매수주문받고 시간상0.1초라도 최초 제일 빨리 도... 18 829
내가총대멘다
2018.12.04
» [강좌] 이더소셜 PHP API 서버 만들기 #1. 기본 설계 안녕하세요. 쌩광부입니다.   이더소셜 PHP API 서버 만들기 강좌를 시작하도록 하겠습니다. 이번 시간에는 실제 프로그래밍에 앞서 기본적인 구조에 대해서 설명하도록 하겠습니다.      프롤로그에서 얘기한대로 저... 16 file 23 1889
쌩광부
2018.12.03
1465 개발 트레이딩 봇 만들고 있습니다. 2월쯤에 이쪽에 글올리고, 한동안 구현 못하고 있다가, 최근에 한달정도 달리고 있습니다.   오늘 낮 데이터로 백테스트해보니 이렇게 나오네요. 분봉기준이고요. 저 와중에 안잃어서.. 올려봅니다.   어제쯤해서 실... 6 file 932
jaypark
2018.12.03
1464 개발 블록체인 개발자가 꿈인 백수입니다. 안녕하세요, 개발자를 꿈꾸는 백수입니다. 블록체인 관련 회사에 입사하고 싶고 제가 직접 코인을 개발하고 싶은데요, 저는 현재 C++를 공부중에 있습니다. 네임스페이스 부분 하고있네요..ㅋㅋ 갓난아기 태어나기전 ... 13 1 1782
railgun0
2018.12.03
1463 [강좌] 쌩광부의 모바일 지갑 만들기 #6. 니모닉 지갑 생성 안녕하세요. 쌩광부입니다.   저의 강좌는 오랜시간의 노력과 열정의 결과물입니다. 내용이 길고 지루하더라도, 강좌 내용에 관심없으셔도 &quot;좋아요&quot; 한방 눌러주시면 좋겠습니다. 그럼 더 열심히 강좌를 쓸 수 있겠죠... 11 file 17 1180
쌩광부
2018.12.02
1462 개발 이오스 기반 로또 싸이트 지난 8월에 고수님들께 이것저것 물어보았는데 드디어 완성하고 서버에 올렸습니다.   www.weshareluck.io   이오스 기반으로 만들어보았습니다. (이오스가 전송수수료가 없어서.....ㅎ)   도움 주신분들 감사합니다.... 5 839
친절한냥이
2018.12.01
1461 ProgPOW 그것이 알고싶다? 안녕하세요. 쌩광부입니다.   요즘 ProgPOW 이야기가 많이 나오고 있는데요. 도대체 ProgPOW가 뭔지 제가 좀 찾아봤습니다.   ProgPOW : A programmatic (dynamic) Proof-of-Work 프로그래밍 (동적인)  작업증명   최... 31 20 1897
쌩광부
2018.12.01
1460 [nadana]왕초보의 쌩광부님 지갑(3강) 따라하기 아~~~ 드디어 @쌩광부 님의 모바일 지갑 3강의 내용을 아래와 같이 해 냈습니다. ^^ 많은 우여곡절이 있었지만 지금까지 이것이 왜 안되었는지 함께 공유하고자 글을 올립니다.   1. 쌩광부님의 글을 그대로 복사하고... 9 file 10 516
nadana
2018.11.30
1459 질문 모네로 데몬 연동중에, 자꾸 코인이 없어집니다. 모네로 데몬을 연구 중입니다. 모네로는 빌드 할것도 없이 그냥 압축파일을 받아서 실행하는 형태로 되어있어서 편하네요.   그런데, 모네로 코인을 받으면 조금 있다가 다 사라집니다. (balance = 0) 도저히 이해가 ... 3 323
비폭력무저항
2018.11.30
1458 질문 업비트 rsi 계산 방법 질문있습니다. 현재 파이썬으로 하고 있구요    rsi를 계산해서 지정한 rsi에 알림이 오게 하려고 하는데요    rsi공식을 제가 찾을 수 있는걸로 다 사용해봤는데 다 다르더라구요      기준일 (14일)1004luciferAU(평균상승) / AD(... 2 892
digidigi
2018.11.30
1457 개발 node js 사용 하시는분들 .. 모두 업데이트 하셨나요. ( 해킹 관련)       며칠 째 뗑글에서는 주의보가 안나오는거 같아서 제가 올리네요.    며칠전에 nodejs 패키지 사용하는쪽에서 많이 쓰이는 모듈에 코인 해킹 모듈이 들어가있다고 주의보가 떳습니다.    저 같은 경우 vuejs 로 ... 2 file 2 2388
진주
2018.11.29
1456 스케일링 문제를 비탈릭에게만 맡길 수 없다! 암호화폐 가격이 어디가 바닥인지 모르게 계속 하락하고 있으니 과연, 이게 다시 상승장으로 돌아설 날이 있을까 걱정하는 분들이 많습니다. 한편으로 이런 걱정은 블록체인이나 암호화폐를 제대로 하는 활용한 킬러... 18 file 23 1536
atomrigs
2018.11.28
1455 질문 프라이빗 블록체인 개발 업체인데.. 큰일이 생겼습니다 구매 해주시는 업체 담당자님께서 좀 추천도 다른 곳에 해주시고   저희껏도 결정적으로 판매할 수 있게 도와주셨는데   따로 인사를 살짝 말씀하시는거 같습니다(흘리시긴했지만)   이런 경우엔 어찌..해야되나요? ... 8 1038
딥러닝은개뿔
2018.11.27
1454 질문 우분투 빌드 에러 부탁드립니다.     안녕하세요.   우분투 빌드 에러 부탁드립니다.     구글에서는 openssl 호환성에 문제를 다루고 있어서.. (해외)   우분투 16.04 로 설치해보고 했지만, 바뀌지 않습니다.   종속성은 다 설치 했는데, 빌드 에러... 5 file 363
항시대기
2018.11.27
1453 질문 리플 테스트넷 블록 탐색기 사이트가 있나요?   리플 입출금 들여다 보고 있는데, https://developers.ripple.com/xrp-test-net-faucet.html 에 수도꼭지가 있더라구요.   이 테스트를 블록 탐색기에서 확인해 보고 싶은데 사이트를 못 찾겠네요.   혹시 아시는 ... 2 575
이힛
2018.11.26
1452 질문 [Python] Dataframe 계산된 행까지만 계산하는 코드 관련 문의드립니다. from pandas import Series, DataFrame   raw_data = {'': ['2018-01-01  12:00:00 AM', '2018-01-02  12:00:00 AM', '2018-01-03  12:00:00 AM', '2018-01-04  12:00:00 AM'],             'drop': [None, 1, None, ... 1 292
축당첨
2018.11.25
1451 개발 BTC와 이더리움 전송에 관한 데이터를 수집해보았습니다. *** 답변 댓글이 있을 때 글 내용 삭제시 경고 없이 계정이 정지됩니다. *** *** 개인정보가 포함된 경우 혹은 불법적인 요소의 수정은 가능합니다.*** -----------------------------------------------------------... 3 file 8 497
Null_name
2018.11.25
1450 [강좌] 이더소셜 PHP API 서버 만들기 - 프롤로그 안녕하세요. 쌩광부 입니다.   제가 진행하고 있는 &quot;모바일 지갑 만들기&quot;를 완성하기 위해서는 API 서버가 필수적으로 필요하게 되는데요. 기존 API로는 부족한 것이 조금 있기 때문에 별도의 API 서버를 제작해 보도... 8 19 1909
쌩광부
2018.11.24
1449 질문 Python Dataframe 고수님들께 질문드립니다. 여기가 한국의 stackoverflow 군요!   저는 파이썬으로 알고리즘 매매 개발 중인 자동차 설계 엔지니어입니다.   앞으로 이곳에서 열심히 활동할 수 있을 것 같아 의욕이 활활 타오르네요!       각설하고, MACD를 살... 2 316
축당첨
2018.11.24
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 83 Next
/ 83