안녕하세요.

쌩광부입니다.

 

지난 강좌

https://steemit.com/@topmining

https://www.ddengle.com/@TopMining

 

오늘 강좌 내용은 트랜잭션(거래내역)을 MySql DB로 옮기기 위해 필요한 사항을 알아보겠습니다.

 

그런데 왜 블록이 기록된 트랜잭션을 MySql로 옮겨야 되는것일까요?

 

일반적으로 하나의 블록에는 다양한 트랜잭션이 기록되어서 체인으로 연결되어 있는데요. 거기서 특정 주소의 트랜잭션만 모아서 뽑으려고 한다면 어느 블록에 기록되어 있는지를 모르기 때문에 첫 블록부터 마지막 블록까지 모두 뒤져서 특정 주소와 연관된 트랜잭션을 찾아야 합니다. 만약 현재 100만 블록이 생성되었다 치면 100만 개의 블록을 확인해야 되기 때문에 사실상 엄청나게 느릴 수밖에 없습니다. 이더리움 계열의 블록체인에서 사용하는 DB는 MySql과 같은 DB처럼 완벽한 검색 기능이 없기 때문에 매우 느립니다.

결론적으로 빠른 속도로 트랜잭션을 검색하기 위해 각각의 트랜잭션을 MySql에 저장하는 것입니다. 물론 MongoDB, Redis 등을 이용해도 되겠죠. ^^

 

그럼 코인을 전송할 때도 계정의 잔액을 확인하기 위해 블록을 전부 다 체크해야 되는 건가요?

 

그건 아닙니다.

이더리움 계열 코인은 블록체인을 보조하기 위해 스테이트를 가지고 있는데요.

예를 들어 특정 계정의 현재 잔액, 컨트랙트의 변수값 같은 내용을 저장한 데이터입니다.

이 스테이트 데이터를 따로 저장하고 있기 때문에 코인 전송과 같은 처리를 빠르게 검증할 수 있죠.

 

그럼 블록체인의 블록에 기록되어 있는 트랜잭션이 어떻게 구성되어있는지 살펴보겠습니다.

 

우분투 콘솔에서 아래와 같이 호출해봅니다. (JSON RPC)

맨뒤 IP와 포트는 설정된 값을 넣어주시면 되고요.

$ curl -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0x16E34", true],"id":1}' "http://127.0.0.1:9545" 

 

eth_getblockbynumber는 params에 블록번호를 Hex(16진수)값으로 넣어 블록의 정보를 읽어오는 명령입니다.

위 예제는 93748번째(Hex 0x16E34) 블록정보를 읽어오겠죠.

eth_getblockbynumber에 대한 자세한 정보는 아래 링크를 확인하세요.

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

 

결과값은 JSON 형태로 되어 있는데요.

{"jsonrpc":"2.0","id":1,"result":{"difficulty":"0xfb51d13207","extraData":"0xd682020084....

 

https://codebeautify.org/jsonviewer 등의 도구를 이용하면 아래 처럼 이쁘게 볼 수 있겠죠.

 

{  

    "jsonrpc":"2.0",

    "id":1,

    "result":{  

        "difficulty":"0xfb51d13207",

        "extraData":"0xd6820200846765746887676f312e392e32856c696e7578",

        "gasLimit":"0x47e7c4",

        "gasUsed":"0xa410",

        "hash":"0xc8a29230fec30c0da7556fd4df3d79188576fb4db6ceab7d690440d247ecb3c9",

        "logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",

        "miner":"0x6e869c68511c1458f4fbed9a4c5296fe961eb47e",

        "mixHash":"0xf49553a261d5076fb22c0b6242cb6b6d465f9c1e95fbba4de3fbf6b456743a6b",

        "nonce":"0x91b62cb0079eb884",

        "number":"0x16e34",

        "parentHash":"0x23d8f2c14a2214fab4dcb0db8a8f3676187a5e76a9b10cb84197f6c85924fa86",

        "receiptsRoot":"0x153e6bb470fffe949f0965348033f17df6b6323d00a9950ee4d09141dfdedd46",

        "sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",

        "size":"0x300",

        "stateRoot":"0x5ee14af9355d6d35bdad5ceac3e45f4eedba8da5eae3511d0a0cfd170dc79ec5",

        "timestamp":"0x5a76cbef",

        "totalDifficulty":"0x113c171495d1459",

        "transactions":[  

            {  

                "blockHash":"0xc8a29230fec30c0da7556fd4df3d79188576fb4db6ceab7d690440d247ecb3c9",

                "blockNumber":"0x16e34",

                "from":"0x0514c1151f356070ace281435f25c86b58280715",

                "gas":"0x15f90",

                "gasPrice":"0x430e23400",

                "hash":"0x104ff8fe7357acd6621140071630fd6508772d535ca3771a215e56875b5c594b",

                "input":"0x",

                "nonce":"0x65f1",

                "to":"0xfbc9a3c3c429990cc306710b3dd44174dcc72ad4",

                "transactionIndex":"0x0",

                "value":"0xe4ce0abfa0a2800",

                "v":"0x1b",

                "r":"0xc2c8c09023d42921c3756116c15623bb36f275b7c58b8e6904da31ee9aff268e",

                "s":"0x339da00a32cffe0baf68a278d27718114d2b3dc3dc86d93ac9647e716847157b"

            },

            {  

                "blockHash":"0xc8a29230fec30c0da7556fd4df3d79188576fb4db6ceab7d690440d247ecb3c9",

                "blockNumber":"0x16e34",

                "from":"0x2eb64b8ab13f0d7823158217d15ba310ed3d0e58",

                "gas":"0x15f90",

                "gasPrice":"0x430e23400",

                "hash":"0xe7a8298b63efd2bc965c5b91fddff9c37e78cd03cc096bf7af7249f43fef1075",

                "input":"0x",

                "nonce":"0x337e",

                "to":"0xadda124baed2e1fdc1acc7b4a048eab0cd249212",

                "transactionIndex":"0x1",

                "value":"0x420945f974a84e00",

                "v":"0x1b",

                "r":"0x73a5333a3e2fd12bfa9eca16d1df7cc2d2f42294f1ac8a3d4d9c71fc0d44ff6d",

                "s":"0x22348ebdd83d1a75a0270b9b26fec393093dcb974b955b62979c0a9060a9ebb2"

            }

        ],

        "transactionsRoot":"0x2600aa4902f36dd672e61c55656b12d94ba8c4cd61e2f597d02882c3bc597908",

        "uncles":[  

 

        ]

    }

}

 

중요한 정보 몇 가지만 설명하면요.

 

[블록 정보]

number: 블록 번호

hash: 블록 해시

difficulty: 난이도

miner: 채굴자 주소와

gasLimit: gas 한도

gasUsed: 사용된 gas의 양

transactions: 트랜잭션 내역

 

[트랜잭션 정보]

from: 보낸 주소

to: 받은 주소

gas: gas 수량

gasPrice: gas 가격

hash: 트랜잭션 해시

input: 추가 정보

nonce: 보낸 사람의 트랜잭션 순서

transactionIndex: 트랜잭션 배열의 순서

value: 전송 수량

v, r, s: 디지털 서명을 위한 값

 

우리가 중요하게 봐야 하는것은 from, to, value, gas, gasPrice 인데요.

누가(from) 누구(to)에게 몇개(value)의 코인을 수수료 몇개(gas * gasPrice)를 지불하여 전송하였느냐를 알수 있겠죠. ^^

모든 수치들은 Hex(16진수)값으로 되어 있으며 수량과 gas에 관련된 것들은 모두 gwei(10의 18승 gwei = 1이더)단위라고 보시면 됩니다.

 

우리는 위와 같은 정보를 첫 블록부터 현재 블록까지 검색하여 MySql에 저장하고

그 이후는 주기적으로 대략 14초마다 추가된 블록을 검색하여 저장하면 됩니다.

 

오늘 강좌는 여기서 마무리하겠고요.

다음 시간에는 다시 PHP 코딩으로 들어가겠습니다.

 

그럼 다음 강좌도 많이 기대해주세요~~

 

 

-------------------------------------

꼬리말

* 게시글 내용 삭제레벨 강등

* 질문은 각 주제별 게시판에 적어주세요.

 

비트코인 암호화화폐 커뮤니티 땡글~ 땡글~

-------------------------------------

1,833 CASH

Who'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

Comment '4'
  • profile
    엘카 2019.02.12 00:23
    좋은강의~ 감사합니다.
  • profile
    더라 2019.02.12 00:50
    와우 감사합니다^^
  • profile
    천재소년 2019.02.12 14:06
    다음 강좌 빨리요~ 현기증 난단 말이에요~
  • ?
    반복반복 2019.02.20 20:58
    잘 보고 갑니다 감사합니다

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 [AD] 암호화폐 장외거래 및 커뮤니티 데바야 update 259
관리자
2019.02.21
공지 [AD] 거래소 제작, 코인, 토큰 제작, 전자지갑 제작, 암호화폐 결제 시스템 구축 1 updatefile 721
김대박
2019.02.20
1584 질문 스마트폰 앱 개발하시는 분께 질문이 있습니다. 구상하는하고 있는게 있는데 현재 아이디어 수준입니다. 제가 앱개발은 전혀 몰라서 질문좀 드릴려구요.   어떤 블루투스 디바이스가 있고 이 디바이스는 스마트폰과 블루투스로 통신하면서 약1분 주기로 특정포맷의 ... 13 new 373
꿀맨
2019.02.22
1583 질문 이더리움 동기화모드를 full로 하신분 계신가요? 이더리움 동기화모드를 fast로 하지 않고 full 로 할경우 현시점에 블록데이터 크기가 어떻게 되는지 알수 있을까요? 혹은 알 수있는 방법이 있을까요?                       -------------------------------------... 7 480
나비잠
2019.02.21
1582 질문 G MAIL도 못 믿을 듯     코인을 G MAIL에 연동시켜 두신 분 많은 것 같은데 해커놈이 어떻게 흔적도 없이 비번을 바꿔놓고 발자국을 다 지웠을까요? 잘 찾아보면 발자국을 찾을 수 있을까요?   구글봇은 MAC주소를 자동수집해서 새로운 ... 4 file 1 1052
내가총대멘다
2019.02.20
1581 질문 거래소에 상장되는 토큰들에 관하여 erc-20 토큰을 만드는 것은 간단하다고 알고 있습니다. 그렇다면 거래소에 토큰을 상장하는 작업은 erc-20 토큰을 만드는 것보다 훨씬 어려운 작업인가요? 그 과정과 배경에 대해 알고싶습니다.                   --... 2 365
코크코크
2019.02.19
1580 질문 안녕하세요. 개발자님들!   안녕하세요. 땡글 개발자님들 정보의 상향평준화를 꿈꾸고 있는 코인코입니다!   유명한 블록체인 프로젝트들과 Q&A 진행을 주기적으로 해보려고합니다.   많은 개발자님들이 참여하셨으면 해서 이렇게 글을 남... 287
코인코1
2019.02.19
1579 개발 10억이 팔린 미술품 코인과 동일한것을 개발 해보았습니다. 그리고 이후 이 글의 목적: 포에버로즈 와 동일한 코인 개발완료 이후 활성화에대한 이야기 이 글의 목표: 개발이 다가아니다, 개발이후 가치를 만드는작업은 더 어려울수도 혹은 아주 어려운작업이다 라는것을 말하고자 합니다. ... 625
연개소문_2019
2019.02.19
1578 개발 비트코인 보물 찾기, RAIDS 플랫폼을 개발중입니다. 안녕하세요. 초밥매니아입니다.   땡글에 오랜만에 글을 올리네요^^    예전에 제가 올린 글중 비트코인 채굴이 아닌 도굴? 이란 제목으로 글을 올린 적이 있습니다(https://www.ddengle.com/develop/9694510). 여러 ... 34 file 4 781
초밥매니아
2019.02.18
1577 개발 NodeRed Flow-based 개발툴 소개합니다. NodeRed - Flow-based 개발툴 소개합니다.     한번쯤 지나가다 들어봤을 법한...프로그래밍툴 Node-Red입니다.   API를 이용하는 간단한 웹프로그램은 손쉽게 구현이 가능합니다. 전문가분들께는 많이 모자른 프로그... 4 1 448
까치섬
2019.02.18
1576 질문 ERC20 개발 하면서 궁금한게 몇 가지 있습니다.     1. 현재 테스트 넷(Ropsten)을 이용해 ERC20 개발 중인데요 . 제가 만든 ERC20 컨트랙트를 배포하면 롭스텐 이더스캔에서 반영이 잘 되는데 막상 컨트랙트를 배포한 제 노드에서 배포한 계정의 밸런스를 확인해보... 3 403
나비잠
2019.02.17
1575 개발 구글봇이 자동으로 전세계에 HACKER 비트코인 주소 소문내주고 있습니다     고맙게도 구글봇이 저렇게 자동으로 전세계에 해커의 bitcoin address를 소문내주고 있었습니다     거래소의 주소 조회 필터링 시스템만 더 발전하면 아마도 돈을 현금화 하진 못할 것 같습니다     전세계 누구... 14 file 973
내가총대멘다
2019.02.17
1574 개발 블록체인에 정보기록 개발하기 개요: 판문점선언을 블록체인에 기록했다는데 이걸 만약 직접 개발 한다면 어떻게 해야할까요 ? 블록체인에 정보기록을하는 사례들이 많아 지고있습니다, 예를들면, 결혼식을 기념해서 메타정보및 서약서를 블록체인... 13 506
세줄
2019.02.16
1573 개발 비트코인(블록체인) 마이닝 개발 강의 개요: 마이닝개발 하려면 어떻게 해야할까요 ? 궁금해서 공부를 해서 정리를 하고 실제 구현도 해보았습니다. 3달정도 걸린것같네요  한국어로 자료가 잘없고 영어로도 자료가 정리된것이 없어서 고생을 많이 하긴 했... 376
세줄
2019.02.16
1572 개발 이더리움 개발시 도커 세팅 방법 개요: 이더리움 개발(블록체인개발)을 하기위해서 무엇부터 해야할까요 ? 블록체인 개발을 위한 도커설정하는 법부터 해야겠지요 ? (물론 도커를 안해도 상관은없지만, 안하고 차이의 생산성은 매우 큰 것같습니다.) ... 290
세줄
2019.02.16
1571 질문 설마했는데 저도 해킹 당했네요 설날 마지막날  2월6일 저녁 6시 10비트 가량 도둑 맞았네요 빗썸 api 키를 빼가서 해킹한 것으로 추측 됩니다. 사이버 수사대 신고는 했는데 크게 기대하기는 어려울것 같습니다.   당해보니 며칠동안 정신을 못차리... 11 1591
둔산
2019.02.15
1570 질문 해커놈 추적하는데 자문 좀 구합니다   보시면 이 hacker address 주소에서  bc1qq0tmfdy8cjgraqphmw2d0pu7wlqxvztfjh3gtn   이 주소로 돈이 보내진 것 같은데 1EimBpXgYqKP3twh5QPmgjpAVeGjCpbVgJ  . ..........조금 특이한 게  bc1qq0tmfdy8cjgraqphmw2... 14 file 1 1598
내가총대멘다
2019.02.13
1569 질문 해커를 추적하다보니 잔돈을 많이 모았던데 이 놈이 채굴하는 녀석일까요?         hacker 해커를 추적하다보니 주소가 있던데.... 여기저기서 수수료를 저렇게 받은 건가요?? 채굴하는 놈일까요??? 잔돈을 엄청 많이 받아서 0.40076499 BTC  BTC 돼 있습니다     해커놈 주소입니다 18i1p8gR... 928
내가총대멘다
2019.02.13
1568 질문 제가만든 ERC20 컨트랙트를 테스트해보고 싶은데 질문있습니다. 제가 만든 컨트랙트를 mainnet으로 배포하기전 testnet으로 배포한다음 토큰 송금, 지갑과 컨트랙트간의 이더 교환등의 기본적인 테스트를 해보고 싶은데요.   제 컴퓨터에 설치된 가상머신 2개를 이용해 사설 네트워... 3 377
나비잠
2019.02.12
» 개발 [강좌] 이더소셜 PHP API 서버 만들기 #5. 블록 내용 살펴보기 안녕하세요. 쌩광부입니다.   지난 강좌 https://steemit.com/@topmining https://www.ddengle.com/@TopMining   오늘 강좌 내용은 트랜잭션(거래내역)을 MySql DB로 옮기기 위해 필요한 사항을 알아보겠습니다.   그... 4 8 1003
쌩광부
2019.02.12
1566 질문 geth 콘솔을 이용해 erc20 토큰을 송금하려고 하는중에 질문있습니다. https://nuclearcryptobuddha.blog/2017/06/how-to-send-receive-and-check-balance-of-erc20-tokens-using-geth/ 위의 URL을 참고해서 erc 20 콘트랙트 주소와 abi 정보를 이용해 토큰을 송금하려고 합니다.    여기... 8 256
나비잠
2019.02.11
1565 질문 직원은 구하지 않습니다... 쪽지로 직원이 되고프다며 자기 PR을 하시는 분이 종종있는데.... 전 돈이 없습니다..나비 코인이라면 얼마든지 드리겠지만.. 암호화폐를 투기성 화폐가 아닌 다른 방향으로 흐르게 할 방법이 없을까요...           ... 8 1616
Xmessiah
2019.02.08
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 80 Next
/ 80