esn custom_top_html:no
default debug random = 4 / type = READ / detected = READ
개발
2020-07-04 07:50:13

오랜만에 쓰는 풀 개발 이야기

오랜만에 개발 이야기를 씁니다.

 

이더리움 풀을 운영하는 경우, geth 노드로부터 전달받을 수 있는 마이닝 작업을 getWork JSONRPC 호출을 통해 가져오고, 이렇게 가져온 마이닝 작업(getWork)를 풀에 연결된 마이너에게 뿌려 주는 방식을 사용하고 있습니다.

 

대표적인 예로 open-ethereum-pool의 경우, 풀에 연결된 노드에 getWork JSONRPC 요청을 120ms 간격으로 받아서

새로운 마이닝 작업이 발견되면 이를 마이너에게 뿌려주는 방식이죠.

 

https://github.com/sammy007/open-ethereum-pool/blob/master/config.example.json#L12 (오픈-이더리움-풀 소스코드의 기본 값이 120ms)

 

이를 도식화 해보면 새로운 마이닝 작업은 3단계를 통해 들어오게 되는 것입니다.

(풀) -- JSON RPC CALL --> (노드) -- JSON RPC 응답 --> (풀) --> JSON RPC notify --> (마이너)

 

그러나 이 방식 보다는 다음과 같은 방식을 쓴다면 이는 2단계가 되어 마이닝 작업이 좀 더 빠르게 전송이 될 것입니다.

 

(노드) -- 새작업 정보 알림 --> (풀) -- JSON RPC notify --> (마이너)

 

응답 속도가 대략 10ms라고 했을때에, 기존 3단계의 경우 120 ms + 10ms * 3 = 150ms 즉, 최소 지연이 30ms ~ 최대 지연 150ms

notify 방식은 지연이 없으므로 2단계 응답속도인 10ms * 2 = 20ms 정도의 응답 속도를 가지게 됩니다.

 

이러한 푸쉬 방식을 2018년까지 geth 노드에서 제대로 지원하지 않고 있다가 2018년 8월부터 --miner.notify 옵션을 통해 지원하고 있습니다.

푸쉬 notify 소스코드 위치 https://github.com/ethereum/go-ethereum/blob/master/consensus/ethash/sealer.go#L359-L366

커밋 2018년 8월 8일 https://github.com/ethereum/go-ethereum/commit/f0998415ba9a73f0add32f9b5aed2aec98b9a7f3

Geth v1.8.14 버전부터 지원 시작. (2018년 8월22일)

 

다만 geth의 --miner.notify 옵션을 open-ethereum-pool에서 지원하지 않고 있기때문에 이를 지원하려면 open-ethereum-pool 소스코드를 수정해야 합니다. (제가 기존 소스코드를 참조해서 고친 다음 소스코드를 참조하실 수 있습니다.)

https://github.com/EthersocialNetwork/open-ethereum-pool/commit/8a566fe37e246a8203fd1c6fea246cb53cfb7dc4

 

이를 풀에 실제로 적용하여 보니 다음과 같은 장점이 있었습니다.

- push notify 하는 방식이 좀 더 빠르다.

- 아주 가끔은 push notify하는 방식이 job을 세개 연속적으로 보내는 경우, 기존 방식은 두개만 보내는 경우가 있다. 즉, 기존 방식은 120ms 간격으로 getwork를 통해 끌어오면서 시간 지연등의 이유로 마이닝 job을 놓치는 경우가 있다.

- 여러 노드를 통해서 push notify하는 것이 가능하기때문에, 여러 노드중에 가장 빠르게 push notify 하는 작업이 풀을 통해 보내지게 된다.

 

실제로 다른 풀과 비교를 해보니 아주 미세한 차이로 pool 작업이 먼저 도착하는 것을 확인할 수 있었습니다.

 

open-ethereum-pool을 운영하시는 분들은 이를 참고하시기 바랍니다~

 

※추가: 급조한 PR입니다만 open-ethereum-pool 깃허브 PR로도 넣어보았습니다. https://github.com/sammy007/open-ethereum-pool/pull/457

1,532

ethminer님의 서명

주업은 오픈소스 프로그래머

 

ESN 디스코드 - https://discord.gg/hqHm69E

ESN 텔레그램 - https://t.me/ethersocialofficial

 

ESN 주소: 0x0c74e46b115e19726997dd559d2b6ff1bfb79af6

ETH 주소: 0x89307cb2fa6b9c571ab0d7408ab191a2fbefae0a

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

ESN

이더소셜 네트워크

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
10 개발 2020년 하반기 오픈소스 활동 보고 2020년을 정리하는 차원에서 지난번에 2020년 전반기 보고 이후로 쓰는 글입니다. (https://www.ddengle.com/esn/12111236)   전반기 보고에 이미 밝혔던 것처럼 2020년은 ESN운영위를 관두고 개발자 본연의 자세로 ... 7 11 3561
ethminer
2020.12.12
9 개발 전반기 오픈소스 활동 보고 오랜만에 쓰는 개발 글입니다.   운영위를 그만 둔 뒤로, 개발자 본연의 자세로 돌아와 2019년 제대로 활동하지 못했던 오픈소스 활동을 다음과 같이 하였습니다. - 전반기 보고라고 썻으나, 대부분 6월이후의 작업물... 4 file 8 1733
ethminer
2020.08.23
개발 오랜만에 쓰는 풀 개발 이야기 오랜만에 개발 이야기를 씁니다.   이더리움 풀을 운영하는 경우, geth 노드로부터 전달받을 수 있는 마이닝 작업을 getWork JSONRPC 호출을 통해 가져오고, 이렇게 가져온 마이닝 작업(getWork)를 풀에 연결된 마이... 1 6 565
ethminer
2020.07.04
7 개발 익스플로러 개선 PR이 받아들여졌습니다 https://www.ddengle.com/esn/11537628   일전에 익스플로러 개선 PR을 이더클래식 익스플로러에 제출한바 있습니다. https://github.com/ethereumclassic/explorer/pull/327   지난 10월경 제출했던 PR인데, 제가 바... 1 file 6 206
ethminer
2019.12.19
6 개발 땡글지갑 베타테스트 진행중입니다 가칭 땡글지갑 베타테스터 모집을 안내해 드린바 있습니다. https://www.ddengle.com/esn/11626918 11월22일, 1차 베타테스트를 발표하였고 현재 베타테스터 분들에게 피드백받으며 의견을 참고해서 조금씩 보완중입... 1 file 7 201
땡글개발자
2019.11.23
5 개발 가칭 "땡글 지갑" 베타테스터를 모집합니다. 지난 3월에 디스코드상에서 잠깐 소개되었던 가칭 "땡글 지갑"을 소개합니다. 기능 자체는 이미 수개월전에 완성되었으나 UI 및 OTP / SMS 인증등의 2중 보안등의 장치에 대한 보완을 마치고, 이제야 일반 유저들이 ... 36 file 18 1605
땡글개발자
2019.11.15
4 개발 Gesn 0.4.0 릴리스 go-ethereum 1.9.3을 기반으로한 Gesn 0.4.0을 릴리스하였습니다.   https://github.com/Ethersocial/go-ethersocial/releases/tag/v0.4.0   ※ 참고: https://www.ddengle.com/11476240 (9월9일) ※ 참고: 이더리움 1.... 6 file 12 505
ethminer
2019.11.04
3 개발 이더리움 노드 버전 1.9.3 최신 적용 이더리움 최신 버전 1.9.3이 어느정도 안정화가 되었으므로 이를 ESN에 적용할 예정입니다.   https://github.com/Ethersocial/go-ethersocial/pull/7   이더리움 1.9.3에는 제가 2019년에 제출했던 PR이 적용되어 있... 1 file 8 703
ethminer
2019.09.09
2 개발 EtherSocial Network Stats 업데이트 예정 안내 노드 상황판 -- 기존에 운영중이던 https://escstats.gonsmine.com 서비스의 새소식이 있어 게시합니다.   @ethminer 님의 개발로 기능이 추가된 버전을 실서비스전에 테스트 중입니다. 테스트 버전 : https://stats.... 9 file 12 1994
천재성곤
2019.03.18
1 개발 초기 구현 완료된 기부 기능과 구현 설명 약간 1차 초기 구현이 완료된 기부 기능을 애니메이션 gif로 만들어봤습니다~   지난번 잠깐 맛뵈기로 보여드렸던 땡글 사이트 디앱화의 일환인 회원간 ESN / 이더 송수신 초기 구현을 완료했습니다~   이것은 이러한 작동... 19 file 16 2313
ethminer
2019.03.07
Board Pagination Prev 1 Next
/ 1
default debug random = 0 / type = READ / detected = READ