본문 바로가기

블록체인10

퀵노드 특정 케이스 크레딧 절감 이 글을 작성하는 2024년 5월 4일에는 QuickNode RPC 별 크레딧 사용량이 개편되어 eth_getTransactionReceipt, eth_getBlockReceipts 동일하게 20 크레딧이 소요된다. 개편되기 전에 eth_getTransactionReceipt 은 2 크레딧, eth_getBlockReceipts 는 60 크레딧이 소요됐었는데, go-ethereum 같은 경우 LevelDB 의 특정 키에 블록의 모든 receipt 가 저장되어 있고 eth_getTransactionReceipt 는 블록의 모든 receipt 를 가져와서 해당 트랜잭션의 receipt 를 찾아 반환하는 방식으로 구현되어 있기 때문에 eth_getBlockReceipts 의 크레딧이 매우 크게 책정된 것은 .. 2024. 5. 4.
이더리움 프라이버시: 익명성 (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.