본문 바로가기

분류 전체보기30

이더스캔 분석 1 - 블록 페이지 이더스캔 분석 2 - 트랜잭션 Overview 페이지 이더리움 기반에서 개발을 한다면 이더스캔을 한 번쯤은 이용해보았을 것이다. 제공하는 데이터가 풍부하여 디버깅에 많은 도움을 준다. 트랜잭션에서 발생한 이벤트들을 직접 가져와 파싱하는 과정은 꽤 번거로운데, 이더스캔에서는 바로 눈으로 볼 수 있다. 이더스캔에서 보여주는 데이터들은 어디서 어떤걸 얻고, 어떻게 가공되어서 우리에게 보여지고 있을까? 이 값들을 분석하려면 각 필드들이 어떤 역할을 하는지 알고 있어야 하기 때문에, 이를 분석해보는 것은 의미 있는 일이지 않을까 싶다. '이더스캔 분석'에서는 Go언어와 go-ethereum에 속한 ethclient 라이브러리를 이용할 것이다. 그리고 원하는 데이터를 구하는 과정은 기록하지만 DB에 저장하는 과정은.. 2023. 2. 26.
MTU (Maximum Transmission Unit) MTU란 단어는 네트워크 기초를 공부하다보면 한번쯤은 접하게 되는 용어이며, 특정 네트워크 계층에서 전송할 수 있는 최대 크기를 의미한다. 데이터 링크 계층인 이더넷에서 MTU가 몇일까 생각해보면 보통은 1500이란 값을 떠올린다. 이는 기본 MTU 값으로 정해져 있기 때문인데, 초기 네트워크 인터페이스 카드에는 많은 양의 프레임(바이트)을 포함할 수 있는 큰 버퍼가 없었기 때문에 당시에는 1500바이트가 "괜찮은" 것처럼 보였다고 한다. 하지만 현대에 와서는 네트워크 속도가 빨라지고 전송해야 할 데이터의 크기도 급속하게 증가하고 있기 때문에 1500바이트란 값이 작다고 느껴질 수 있다. 큰 데이터를 잘게 잘라서 여러 번 보내는 것보다는 큰 덩어리로 적게 보내는 것이 더 빠른것은 당연한 결과일 것이다. .. 2023. 2. 26.
[기타] 칭다오 흔히 말하는 맥주 칭다오의 이름은 중국의 지역 칭다오(청도)다 (성도(청두)랑은 다름). 그래서 어떤 양꼬치 집을 가면 청도 맥주라고 적힌 것을 볼 수 있기도 하다. 중국에 칭다오 맥주 공장은 지역별로 많은데 칭다오 지역에서 나는 맥주는 또 맛이 다르며 칭다오 지역 내에서도 '로우산' 이라는 산에서 내려오는 물로 만든 칭다오는 더욱 더 각별하다고 하다. 이전에 골목식당에 막걸리 집이 나왔었는데, 거기서도 막걸리를 만들 때 쓰는 물을 바꾸라는 조언을 했던 것 같고... 이름은 기억안나는데 어떤 양주도 좋은 물터를 구해 그곳에 양조장을 만들고 술을 만들었다는 이야기도 어디선가 들었었다. 한국에서도 옛 조상들은 술을 빚을 때 발효가 잘되고 원료가 잘 삭는 물을 ‘힘 센물’이라 하고 그 반대 성질을 지니는 물을.. 2023. 2. 25.
[기타] 마리 앙투아네트의 유언 미안해요, 고의가 아니었어요. 마리 앙투아네트는 프랑스 혁명 과정에서 프랑스 역사상 처음이자 마지막으로 단두대에서 처형당한 왕 루이 16세의 왕비이다. 루이 16세가 처형당하며 마리 앙투아네트도 혁명 정부로부터 유죄판결을 받고 처형장으로 이송되었고, 도착한 마리 앙투아네트가 실수로 사형 집행자의 발을 밟으며 한 말이 유언이 되었다. 미안해요, 고의가 아니었어요. 곧 처형 당할, 두려운 순간에 자신의 목을 칠 사람의 발을 밟고 사과를 한다는 것은 그저 습관에서 나온 것일 수도 있고, 혁명 정부로부터 유죄 판결을 받았어도 본인은 죄가 없다라는 강렬한 믿음에서 기인한 어떠한 도덕적 행위라고 볼 수도 있다. 그녀의 속마음을 누가 알겠느냐만은, 어느 이유로 그랬건 참 인상 깊은 유언이라는 생각이 든다. (+) 마.. 2023. 2. 25.
[Go] 파일 존재 여부에 대한 os.Stat() vs os.Open() os.Stat() vs os.Open() 일단, 위의 두 메서드는 사용처가 다르다. os.Stat()의 경우 파일에 대한 정보를 얻을 때 사용하며, os.File()의 경우, 파일을 컨트롤 할 때 사용한다. 내가 이 글에서 비교하고자 하는 상황은, 파일이 존재하는지 확인하는 경우이다. 결론 단순히 생각해보았을 때, 파일에 대한 정보만 가져오는 os.Stat()이 훨씬 빠를 것 같다. 실제로도 더 빠르다. package test import ( "os" "testing" ) func BenchmarkStatExistFile(b *testing.B) { for i := 0; i < b.N; i++ { _, _ = os.Stat("./source") } } func BenchmarkOpenExistFile(b.. 2023. 2. 25.
[Go] strings.ToLower() vs bytes.ToLower() strings.ToLower() vs bytes.ToLower() Golang의 ToLower(). 뭐가 더 빠를까? 결론 strings.ToLower를 사용하는 것보다 string을 []byte로 변환하여 bytes.ToLower 사용하는 것이 훨씬 빠르다. package test import ( "bytes" "strings" "testing" ) const TestString = "Lower Testing StaRtINg. Files Containing teSts shoUld bE CalLeD." func BenchmarkStringLower(b *testing.B) { for i := 0; i < b.N; i++ { _ = strings.ToLower(TestString) } } func Benc.. 2023. 2. 25.