본문 바로가기

블록체인10

[이더리움] Multicall contract 오늘은 간단하면서도 재밌는 컨셉의 컨트랙트를 발견하여 그와 관련된 글을 적어 보려한다. Multicall (https://github.com/mds1/multicall) Multicall은 한 번의 호출만으로 여러 컨트랙트 조회값을 리턴 받을 수 있는 컨트랙트다. 여러 컨트랙트를 각각 조회하면 되는데, 왜 굳이 다른 컨트랙트를 거쳐서 결과값을 얻어야 할까? 기본적으로 한 번에 많은 요청을 하는 것이 요청을 여러 번 하는 것보다 오버헤드가 적고, Infura와 같은 노드 서비스를 운영한다면 rpc 요청 수에 제한이 있거나, 과금이 발생하기 때문에 다소 번거로움이 있더라도 요청 수를 줄이려는 노력은 합리적으로 보인다. 컨트랙트의 역할에서 유추할 수 있지만, Multicall 컨트랙트 자체가 복잡한 기능을 하.. 2023. 4. 8.
[이더리움 코어] Connection 이더리움 클라이언트 중 하나인 go-ethereum은 주변 노드를 찾는 통신(discovery)에는 UDP, 실제 노드와 연결한 뒤 통신은 TCP를 사용한다. 윗 레이어의 코드를 보다보면 Peer라는 구조체를 통해 주변 노드와 메세지를 주고 받지만, TCP를 사용한다면 어디선가 다른 노드로부터의 연결 요청을 accept 해주는(Passive OPEN) 코드가 있을 것이고, 여기서 받은 net.Conn을 Peer 구조체로 래핑하는 코드가 있을 것이다. 오늘은 여기에 대해서 알아본다. 먼저, accept를 해주는 코드가 시작 지점이기 때문에 해당 부분부터 로직을 따라가보자. p2p/server.go -> func (srv *Server) listenLoop() 재밌는 점은 TCP 연결 요청에 대한 rate .. 2023. 3. 21.
이더스캔 분석 2 - 트랜잭션 Overview 페이지 이더스캔 분석 1 -블록 페이지 지난 시간에는 블록 페이지에 대한 분석을 했었다. 이번에는 트랜잭션 페이지에 있는 데이터들을 살펴보려 한다. 블록 페이지와는 다르게 트랜잭션 페이지는 여러 페이지로 나누어져 있다. 크게 Overview, Internal Txs, Logs, State, Comments로 나눌 수 있는데 오늘은 Overview 페이지를 다룬다. 먼저 바로 채워줄 수 있는 필드를 알기 위해 ethclient에서 해당 트랜잭션 데이터를 가져와보자. { "type": "0x2", "nonce": "0x17e", "gasPrice": null, "maxPriorityFeePerGas": "0x1c03a180", "maxFeePerGas": "0x4f0238e10", "gas": "0x44eea", .. 2023. 3. 5.
이더스캔 분석 1 - 블록 페이지 이더스캔 분석 2 - 트랜잭션 Overview 페이지 이더리움 기반에서 개발을 한다면 이더스캔을 한 번쯤은 이용해보았을 것이다. 제공하는 데이터가 풍부하여 디버깅에 많은 도움을 준다. 트랜잭션에서 발생한 이벤트들을 직접 가져와 파싱하는 과정은 꽤 번거로운데, 이더스캔에서는 바로 눈으로 볼 수 있다. 이더스캔에서 보여주는 데이터들은 어디서 어떤걸 얻고, 어떻게 가공되어서 우리에게 보여지고 있을까? 이 값들을 분석하려면 각 필드들이 어떤 역할을 하는지 알고 있어야 하기 때문에, 이를 분석해보는 것은 의미 있는 일이지 않을까 싶다. '이더스캔 분석'에서는 Go언어와 go-ethereum에 속한 ethclient 라이브러리를 이용할 것이다. 그리고 원하는 데이터를 구하는 과정은 기록하지만 DB에 저장하는 과정은.. 2023. 2. 26.