9_P_B_T5//home/ddenglecom/www//

안녕하세요.

쌩광부입니다.

 

지난 강좌

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,848 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

댓글 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
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 [ESN 300만 블록 기념 이벤트] 206 updatefile 27 7461
ESN운영
2019.04.19
공지 Seedblock 게시판을 신설합니다. 3 file 1 919
땡글운영위원회
2019.04.19
[AD] [AD] 신개념 커뮤니티 개판을 소개합니다. 9 updatefile 2 1282
관리자
2019.04.16
1570 질문 설마했는데 저도 해킹 당했네요 설날 마지막날  2월6일 저녁 6시 10비트 가량 도둑 맞았네요 빗썸 api 키를 빼가서 해킹한 것으로 추측 됩니다. 사이버 수사대 신고는 했는데 크게 기대하기는 어려울것 같습니다.   당해보니 며칠동안 정신을 못차리... 11 2201
둔산
2019.02.15
1569 질문 해커놈 추적하는데 자문 좀 구합니다   보시면 이 hacker address 주소에서  bc1qq0tmfdy8cjgraqphmw2d0pu7wlqxvztfjh3gtn   이 주소로 돈이 보내진 것 같은데 1EimBpXgYqKP3twh5QPmgjpAVeGjCpbVgJ  . ..........조금 특이한 게  bc1qq0tmfdy8cjgraqphmw2... 14 file 1 2058
내가총대멘다
2019.02.13
1568 질문 해커를 추적하다보니 잔돈을 많이 모았던데 이 놈이 채굴하는 녀석일까요?         hacker 해커를 추적하다보니 주소가 있던데.... 여기저기서 수수료를 저렇게 받은 건가요?? 채굴하는 놈일까요??? 잔돈을 엄청 많이 받아서 0.40076499 BTC  BTC 돼 있습니다     해커놈 주소입니다 18i1p8gR... 1231
내가총대멘다
2019.02.13
1567 질문 제가만든 ERC20 컨트랙트를 테스트해보고 싶은데 질문있습니다. 제가 만든 컨트랙트를 mainnet으로 배포하기전 testnet으로 배포한다음 토큰 송금, 지갑과 컨트랙트간의 이더 교환등의 기본적인 테스트를 해보고 싶은데요.   제 컴퓨터에 설치된 가상머신 2개를 이용해 사설 네트워... 3 593
나비잠
2019.02.12
» 개발 [강좌] 이더소셜 PHP API 서버 만들기 #5. 블록 내용 살펴보기 안녕하세요. 쌩광부입니다.   지난 강좌 https://steemit.com/@topmining https://www.ddengle.com/@TopMining   오늘 강좌 내용은 트랜잭션(거래내역)을 MySql DB로 옮기기 위해 필요한 사항을 알아보겠습니다.   그... 4 8 1276
쌩광부
2019.02.12
1565 질문 geth 콘솔을 이용해 erc20 토큰을 송금하려고 하는중에 질문있습니다. https://nuclearcryptobuddha.blog/2017/06/how-to-send-receive-and-check-balance-of-erc20-tokens-using-geth/ 위의 URL을 참고해서 erc 20 콘트랙트 주소와 abi 정보를 이용해 토큰을 송금하려고 합니다.    여기... 8 434
나비잠
2019.02.11
1564 질문 직원은 구하지 않습니다... 쪽지로 직원이 되고프다며 자기 PR을 하시는 분이 종종있는데.... 전 돈이 없습니다..나비 코인이라면 얼마든지 드리겠지만.. 암호화폐를 투기성 화폐가 아닌 다른 방향으로 흐르게 할 방법이 없을까요...           ... 9 2119
Xmessiah
2019.02.08
1563 질문 비트코인 시간봉, 분봉을 더 길게 볼 수 있는 사이트가 있을까요? 비트코인(btc) 백테스트를 하는데,   시간봉은 6개월, 분봉은 이틀치밖에 못받네요...   데이터를 더 많이 받을 수 있는 사이트가 있을까요?   가급적 코인마켓캡 것을 받고 싶긴한데, 코인마켓캡 돈 내면 분단위, 시... 7 632
축당첨
2019.02.06
1562 개발 비트맥스 지정가 주문(post only 로) 을 넣는 방법   안녕하세요.   비트맥스 api 를 이용하여 트레이딩을 하고 있는데요. 비트맥스 사이트에 보면 지정가주문을 위해 손으로 거래하는 경우 post only 를 체크하게 되어 있는데요. (taker fee를 받기 위해)   봇을 이용... 1 712
부자아들
2019.02.06
1561 질문 코인 개발 목적에 관하여.. 각 나라의 화폐 최소 단위 1개당  1개의 나비코인을 판매한다면.. 그러니까 대한민국은 1원에 나비코인 1개, 미국은 1센트에 1 나비, 개발도상국도 마찬가지로... 이러면, 나비코인이 성공한다면 어떤 영향이 있을까... 13 1 1505
Xmessiah
2019.02.04
1560 개발 코인 개발 완료... 혼자 잡고 열심히 개발하였습니다. 미흡한 점이 많지만 소스를 공개하였습니다. Go언어로 되어있으니 필요하신분은 참고하셨으면 합니다..   덧, 고정 아이피에서만 작동합니다.   PoW이고 특이 점은 코인을 보낼시 ... 15 2 2710
Xmessiah
2019.02.03
1559 질문 안녕하세요. 국내 eos, eth, trx dapp관련 큰 커뮤니티 혹시 아시나요?     2019년은 dapp의 해가 될 것 같은데 해당 커뮤니티 아시면   추천부탁드리겠습니다!   행복한 연휴되세요!!   ------------------------------------- 꼬리말 * 게시글 내용 삭제시 레벨 강등 * 질문은 각 주제별... 1 641
코인코1
2019.02.02
1558 질문 흥미가 생겨서 코인을 만들던중 궁금한게 있어서 남깁니다.   https://etherscan.io/token/0x59f2e9311cc43f731e18bd2b9b573aca42f670c1#readContract     보면 Readcontract 다른 코인들은 다 기입이 되어있는걸 알고있습니다   그래서 저도 보이게 하려고 Verify Your Contra... 4 1 910
빵빵한포도알
2019.02.02
1557 질문 거래소에서 ERC20 코인 지갑생성과 관련되어 질문있습니다. 업비트 거래소에서 ERC20코인 지갑을 생성하고 이더스캔에 생성된 지갑 주소를 검색하면 지갑 타입이 Address가 아닌 Contract형으로 나오는데    굳이 Smart Contract 형의 주소로 발급해야 하는 특별한 이유나 이점... 1 688
나비잠
2019.02.01
1556 질문 이더리움을 개발하는 사람들은 모두 몇명이나 되나요?     이더리움 재단의 비탈릭같은 개발자들이 몇명있나 있는지 문득 궁굼하네요   혹 아시는분 있으시면 부탁드려요                   ------------------------------------- 꼬리말 * 게시글 내용 삭제시 레벨 강등... 3 1362
신화창조7
2019.01.31
1555 질문 리플 질문입니다~       안녕하세요 리플 공부중입니다 .   포스트맨으로 rpc테스트중인데  {     "method": "wallet_propose",     "params": [         {             "seed": "snoPBrXtMeMyMHUVTgbuqAfg1SUTb",             "key_ty... 4 641
피로
2019.01.30
1554 개발 [강좌] 이더소셜 PHP API 서버 만들기 #4. 계정 트랜젝션 개수 확인하기 안녕하세요. 쌩광부입니다.   한동안 ESN 재단 설립 때문에 너무 바빠서 강좌를 못했었는데요. 오늘 ESN 재단 구성원 모집이 완료되어 한시름 놓았습니다. 그리하여... 다시 강좌를 시작하도록 하겠습니다.   지난 강... 3 13 2029
쌩광부
2019.01.29
1553 질문 메타마스크 문의드립니다. 컴퓨터 밀고 재설치했습니다. 구글 로그인하고 메타마스크 들어가보니 다시 가입하라고 나오더라구요. 가입하면 전에 지갑 다시 나오겠지 했는데... 새로 가입된걸로 되있습니다. 예전 계정으로 다시 되돌리려면 어떻... 4 549
심퉁이
2019.01.29
1552 질문 이걸 이용해서 다른게시판 ..   https://github.com/esoodev/crawler-inven-archeag   자꾸 죄송합니다 ㅠㅠ..이걸 이용해서 오버워치 인벤 제목만 파싱하고싶은데 url만 바꾸면 될까요?                   -------------------------------------... 4 627
허니잼
2019.01.28
1551 질문 인벤게시판 파싱을 하고싶은데..     파이썬을 이용해서 게시글 제목을 파싱하고싶은데.. 초보라서 잘이해를 못하겠습니다..ㅜㅜ도움 부탁드립니다..                   ------------------------------------- 꼬리말 * 게시글 내용 삭제시 레벨 강... 5 623
허니잼
2019.01.28
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 82 Next
/ 82