본문 바로가기

전체 글28

[이더리움] Access list 현재 이더리움의 트랜잭션 타입은 총 세 가지(Legacy, Dynamic fee, Access list)가 존재한다. Legacy와 Dynamic fee에 대해서는 파악하고 있는데, Access list는 무엇인지 전혀 모르고 있다는 걸 깨달았다. 그도 그럴게 인터넷의 여러 자료들을 봐도 Access list를 사용하는 예제나 코드는 찾아볼 수가 없었고, 자연스레 관심을 가지지 않게 되었던 것 같다. 이 글을 작성하게 된 계기는, 이더리움 상하이 하드 포크 업데이트 내용을 보다가 EIP-3651: Worm COINBASE 가 적용된 것을 보고 궁금증이 생겨 EIP 내용을 봤더니 Access list와 관련된 내용이 나와 이해하기가 힘들다고 느꼈다. 글을 작성하고 나면 Access list 트랜잭션이 무엇.. 2023. 4. 12.
[Go] 메모리 할당 위치 해당 글의 대부분은 https://dave.cheney.net/2014/06/07/five-things-that-make-go-fast 글을 번역한 내용입니다. 링크의 글은 'Go를 빠르게 만드는 5가지'라는 주제로 여러 예시와 함께 잘 정리되어 있습니다. Most of this article is a translation of an article from 'https://dave.cheney.net/2014/06/07/five-things-that-make-go-fast'. The article at the link is called "5 things that make Go fast" and is well organized with lots of examples. This post is not mone.. 2023. 4. 11.
[이더리움] Multicall contract 오늘은 간단하면서도 재밌는 컨셉의 컨트랙트를 발견하여 그와 관련된 글을 적어 보려한다. Multicall (https://github.com/mds1/multicall) Multicall은 한 번의 호출만으로 여러 컨트랙트 조회값을 리턴 받을 수 있는 컨트랙트다. 여러 컨트랙트를 각각 조회하면 되는데, 왜 굳이 다른 컨트랙트를 거쳐서 결과값을 얻어야 할까? 기본적으로 한 번에 많은 요청을 하는 것이 요청을 여러 번 하는 것보다 오버헤드가 적고, Infura와 같은 노드 서비스를 운영한다면 rpc 요청 수에 제한이 있거나, 과금이 발생하기 때문에 다소 번거로움이 있더라도 요청 수를 줄이려는 노력은 합리적으로 보인다. 컨트랙트의 역할에서 유추할 수 있지만, Multicall 컨트랙트 자체가 복잡한 기능을 하.. 2023. 4. 8.
[어원] 코로나 몇 해 동안 마스크를 쓰게 했던 COVID-19는 전세계 사람들이 모두 알고 있을 것이다. 보통 우리는 실생활에서 '코로나에 걸렸다', '코로나 양성이 나왔다' 같이 말하는데 코로나란 무엇일까? 코로나는 고대 그리스어 korone를 어원으로 갖는 라틴어 corona 이고 이는 머리에 쓰는 관을 의미한다. 영어로 번역하자면 crown이 되겠다. 왜 바이러스에 코로나라는 이름을 붙였을까? 전자현미경으로 바이러스를 보면, 둥근 몸체에 왕관처럼 튀어 나온 돌기가 나와 있어 코로나바이러스라고 부른다고 한다. 이제 와서 코로나바이러스라고 하면 COVID-19를 의미하는 말처럼 되어버렸지만, 이전에도 우리는 코로나바이러스를 겪은 경험이 있다. 사스와 메르스 또한, 위 사진을 보면 알겠지만 왕관처럼 튀어 나온 돌기를 .. 2023. 3. 30.
[번역] Istanbul Byzantine Fault Tolerance (EIP-650) Istanbul Byzantine Fault Tolerance ** EIP에 제안된 초기 IBFT 관련 내용입니다(즉, 1.0 버전) ** 원문 용어 Validator: 블록 검증 참여자 Proposer: 합의 라운드에서 블록을 제안하도록 선택된 블록 검증 참여자 Round: 합의 라운드. 라운드는 제안자가 블록 제안을 생성하는 것으로 시작하여 블록 commitment 또는 라운드 변경으로 끝납니다. Proposal: 합의 처리가 진행 중인 새로운 블록 생성 제안입니다. Sequence: 제안의 시퀀스 번호. 시퀀스 번호는 이전의 모든 시퀀스 번호보다 커야 합니다. 현재 제안된 각 블록의 높이는 해당 블록과 관련된 시퀀스 번호입니다. Backlog: 향후 합의 메시지를 보관하는 저장소입니다. Round .. 2023. 3. 28.
[이더리움 코어] 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.