본문 바로가기

전체 글28

[이더리움] Signature API 클라이언트 이더리움 스마트컨트랙트의 메서드 호출, 이벤트 식별은 Signature를 Keccak256 처리한 값으로 가능하다. Signature란 'transfer(address,uint256)', 'Transfer(address,uint256)'과 같은 문자열을 의미하고, Keccak256 처리를 한 뒤 메서드의 경우 8글자(4 byte), 이벤트의 경우 64글자(32 byte)를 앞에서 추출한 것을 Selector 또는 ID 라고 부른다. Keccak256('transfer(address,uint256)')[0:4] -> 0xa9059cbb Keccak256('Transfer(address,address,uint256)')[0:32] -> 0xddf252ad1be2c89b69c2b068fc378daa952ba7.. 2023. 5. 16.
[이더리움 코어] event.Feed go-ethereum에는 모듈 사이에 특정 액션이 발생했을 때 이벤트를 송수신할 수 있는 Feed 모듈이 존재한다. 예를 들어 core.Blockchain 모듈에서 로그 생성, 블록 생성과 같이 체인에 관련된 이벤트나, 새로운 트랜잭션이 트랜잭션 풀에 들어오는 이벤트를 사용자에게 전달해주는 eth_newFilter, eth_newBlockFilter등의 API가 Feed를 이용한 대표적인 경우다. 생각해보면 여러 종류의 이벤트를 내보내고, 받아 처리하고 있을텐데 어떻게 Feed 모듈 하나로 이를 처리해주고 있을까? type Feed struct { once sync.Once // ensures that init only runs once sendLock chan struct{} // sendLock ha.. 2023. 5. 10.
[어원] 와중과 도중 바쁘신 와중에 시간 내주셔서 감사합니다. 나는 '와중'과 '도중'이 비슷한 단어라고 생각했다. 최근에 이메일을 주고 받는데 문득 해당 문장이 올바른지 궁금증이 생겨 구글에 검색해봤다. 그런데 놀랍게도 와중과 도중은 완전히 다른 말이었다. 이에 대해 알아보자. '와중'은 소용돌이 와(渦)와 가운데 중(中)으로 이뤄진 한자어로 큰 일이 일어났을 때에 사용하는 것이 올바르다. 예를 든다면 '지진이 발생한 와중에도 나는 내 맥북을 챙겼다', '화재가 발생해 대피하던 와중에 지갑을 잃어버렸다'와 같이 아주 시끄럽거나 복잡한 일이 벌어지는 경우에 사용하는 것이 자연스럽다. 하지만 시끄럽다거나 복잡하다는 말은 주관적인 느낌이기 때문에 '와중'이란 말을 써도 잘못된 문장이라고 말하기는 애매하다. 예를 들어 가장 위에 .. 2023. 5. 3.
[이더리움] chainID, networkID 짧게 읽고 싶다면: chainID: 하드포크된 네트워크로부터의 재전송 공격을 막기 위한 식별자 값이며, 서명값에 포함하여 노드가 다른 네트워크로 전송된 트랜잭션임을 인지할 수 있도록 돕는 값이다. networkID: 노드 통신 과정에서 다른 네트워크의 노드와 연결되는 것을 방지하기 위해 사용하는 유니크한 값이며 노드가 연결 직후 상태 메세지를 주고 받는 과정에서 확인하는 값이다. 이더리움 기반에서 작업을 해본 사람이라면 chainID를 본 적이 있을 것이다. 나의 경우 이더리움과 통신을 돕는 라이브러리(ethers.js)를 사용할 때, 노드 엔드포인트와 chainID를 입력해주는 부분에서 주로 봤다. 조금 더 들어가서, 엔드포인트만 알면 되지 왜 chainID란 것이 필요하지? 라는 궁금증이 생겨 찾아보.. 2023. 4. 27.
[번역] There is No Now 분산 시스템의 시간 및 상태 1. There is No Now 2. Time, Clocks, and the Ordering of Events in a Distributed System 3. Virtual Time and Global States of Distributed Systems 4. Why Logical Clocks are Easy 5. Hybrid logical clocks There is No Now (지금은 없습니다) 분산 시스템의 동시성 문제 Justin Sheehy 원문 "지금" 제가 이 글을 쓴 시점과 여러분이 이 글을 읽은 시점 사이에는 최소 2주 이상의 시간이 흘렀습니다. 이런 종류의 지연은 우리가 당연하게 여기고 서면 매체에서는 생각조차 하지 않는 것입니다. "지금" 만약 우리가 .. 2023. 4. 27.
NAT-PMP 에러 처리 본 내용을 다루기에 앞서, NAT-PMP(Port Mapping Protocol)에 대한 간단한 설명으로 글을 시작한다. NAT-PMP는 NAT 내부에 할당된 [IP, 포트]와 NAT의 포트를 매핑시켜, 사설 네트워크의 호스트가 외부 네트워크의 호스트와 end-to-end 통신 할 수 있도록 돕는 프로토콜이다. 예를 들어, 다른 네트워크에 있는 사용자가 '192.168.10.111' 라는 사설 IP를 갖고 있는 나에게 연결하려는 상황을 가정해보자. 외부에 있는 호스트는 나에게 직접 접근할 방법이 없다. 만약 내가 NAT 관리자라면 포트 포워딩을 해주면 되겠지만, 그렇지 않은 사용자가 대다수이다. 이럴 때 NAT-PMP를 사용한다면 [internal: '192.168.10.111:8080', extern.. 2023. 4. 22.