본문 바로가기

블록체인9

이더리움 프라이버시: 익명성 (Stealth address, Gas Ticketing) 얼마 전 비탈릭 부테린이 이더리움이 성숙해지는 데 필요한 세 가지 전환이라는 주제로 글을 썼다. 그 세 가지는 L2 스케일링, 스마트 컨트랙트 지갑, 프라이버시이며, 이 글에서는 프라이버시에 대해 다룬다. 불과 몇 년 전만 해도 이더리움 계정은 단순히 자산의 전송으로만 사용되었으나, ENS, POAP, NFT, 소울 바운드 토큰 등이 만들어지며 계정에 자산 정보 외에도 여러 데이터가 포함되고 있다. 즉, 계정에 개인 정보들이 포함되기 시작한 것이다. 이에 따라 온체인에서 하는 활동과 개인 정보 간 링크가 생기게 되었고 프라이버시를 갖기 어려워졌다. 예를 들어 프라이버시(i.e. 익명성)가 보장된 온체인 활동을 하고 싶다고 가정해보자. 사용자는 새로운 계정을 만들 것이다. 만들어진 계정은 아무런 내역도, .. 2023. 6. 24.
[이더리움] 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.
[이더리움] chainID, networkID 짧게 읽고 싶다면: chainID: 하드포크된 네트워크로부터의 재전송 공격을 막기 위한 식별자 값이며, 서명값에 포함하여 노드가 다른 네트워크로 전송된 트랜잭션임을 인지할 수 있도록 돕는 값이다. networkID: 노드 통신 과정에서 다른 네트워크의 노드와 연결되는 것을 방지하기 위해 사용하는 유니크한 값이며 노드가 연결 직후 상태 메세지를 주고 받는 과정에서 확인하는 값이다. 이더리움 기반에서 작업을 해본 사람이라면 chainID를 본 적이 있을 것이다. 나의 경우 이더리움과 통신을 돕는 라이브러리(ethers.js)를 사용할 때, 노드 엔드포인트와 chainID를 입력해주는 부분에서 주로 봤다. 조금 더 들어가서, 엔드포인트만 알면 되지 왜 chainID란 것이 필요하지? 라는 궁금증이 생겨 찾아보.. 2023. 4. 27.
[이더리움] 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.
[이더리움] Multicall contract 오늘은 간단하면서도 재밌는 컨셉의 컨트랙트를 발견하여 그와 관련된 글을 적어 보려한다. Multicall (https://github.com/mds1/multicall) Multicall은 한 번의 호출만으로 여러 컨트랙트 조회값을 리턴 받을 수 있는 컨트랙트다. 여러 컨트랙트를 각각 조회하면 되는데, 왜 굳이 다른 컨트랙트를 거쳐서 결과값을 얻어야 할까? 기본적으로 한 번에 많은 요청을 하는 것이 요청을 여러 번 하는 것보다 오버헤드가 적고, Infura와 같은 노드 서비스를 운영한다면 rpc 요청 수에 제한이 있거나, 과금이 발생하기 때문에 다소 번거로움이 있더라도 요청 수를 줄이려는 노력은 합리적으로 보인다. 컨트랙트의 역할에서 유추할 수 있지만, Multicall 컨트랙트 자체가 복잡한 기능을 하.. 2023. 4. 8.