EVM 아키텍처와 동작 과정을 자세히 알아보고자 글을 작성합니다. 또한, 해당 글은 이더리움 Docs에서 소개하는 Ethereum EVM illustrated PPT의 내용을 참고 및 인용하여 작성되었습니다. 들어가기에 앞서 먼저 헤매지 않기 위해 선수 지식이 필요합니다.키워드 : Memory, Stack, Smart Contract, Merkle tree, etc... EVM은 왜 필요한가?비트코인은 UTXO 모델과 제한된 스크립팅 언어를 사용해 단순한 송금 조건만 검증할 수 있었기 때문에, 반복문이나 동적 메모리/상태 저장 같은 복잡한 로직을 온체인에서 실행할 수 없었습니다. 이로 인해 분산형 거래소나 DApp은 비트코인 네트워크 위에서 전적으로 운용될 수 없었고, 항상 외부 서버나 오프체인 로직에 ..
들어가기 앞서 해당 글의 내용과 사진들은 은 Ethrerum Docs에서 제공하는 Ethereum EVM illustrated PDF를 참고 및 인용하여 작성된 글임을 밝힙니다. 이더리움의 계정 기반이란?쉽게 표현하면 아래와 같은 사진들로 표현이 가능합니다. 각 고유한 주소(계정)마다 해당 계정의 상태를 매핑하고 있는 관계로써 존재합니다. 각 계정은 고유하기 때문에 객체가 될 수 있으며 Table처럼 표현할 수도 있습니다. 계정 상태에는 어떤 것이 들었는가?Account state에는 nonce, balance, storage hash, code hash 등이 존재합니다. 각 필드들은 아래와 같이 설명이 가능합니다.nonce : 트랜잭션을 처리할 때 또는 계약 생성시 사용하는 숫자입니다. 1씩 증가하는..
PBFT 합의 과정을 살펴보다가 왜 꼭 두 번의 합의를 거쳐야 하는지 의문이 들어 자료들을 찾아보게 되었다. PBFT란?PBFT란 악의적인 노드, 배신자 노드가 f개 존재할 때, 총 노드 개수가 3f + 1개 이상이면 해당 네트워크에서 이루어지는 합의는 신뢰할 수 있다는 것을 수학적으로 증명한 알고리즘이다. 아래와 같이 각 단계가 나뉜다. 1. request : Client는 상태 변환을 요청하는 Request Message m을 Leader (Primary Node)에 전송한다. - Leader(Primary Node) : 처음 상태변환 요청을 받은 노드, 그림에서는 1번 노드를 의미 2. Leader(Primary)가 요청을 받으면 먼저 Pre-prepare라는 절차를 시행한다.해당 요청에 대응하는..
해당 글에서는 이더리움 테스트넷을 구성하기 위해 Kurtosis와, bloskcout의 개념을 알아본다. Kurtosis1. 무엇인가?Kurtosis란 분산 시스템에서 복잡한 로컬 개발 테스트 환경을 한 번에 띄우고 관리할 수 있도록 도와주는 오픈소스 프레임워크이다.ex) API 서버, 메시지 브로커, DB, 대시보드 등을 지원한다.2. 왜 사용할까?여러 컨테이너를 일일이 docker compose로 띄우려면 연결을 설정하는 일이 번거롭다.이러한 번거로움을 자동화하여 해결하며 실제 환경인 것처럼 재현이 가능하다.예를 들어 아래 처리 Kurtosis의 yml을 구성한다면 Geth를 Client로 하고 CL을 Lighthouse로 한 노드를 띄운다.여기서 중요한점은 포트포워딩을 안 했다는 것이다. Kurto..
개인키개인키는 무작위로 생성한 256bit 길이의 숫자로 구성된다.단 타원곡선의 위수인 1.158 * 2⁷⁷ 보다 작아야 한다. 대략 이 값은 2²⁵⁶보다 약간 작은 값이다.위수란 해당 타원곡선의 정의된 유한체에서 타원곡선의 위의 점의 개수를 의미한다.쉽게 말해 타원곡선 위의 모든 점의 개수이다. 벼락을 13번 연속으로 맞을 확률개인키를 생성하는 과정에서 다른 사용자와 내 개인키가 중복될 수도 있지 않을까 생각해 볼 수 있다. 하지만 2²⁵⁶은 정말 어마어마한 숫자다. 이를 10진수로 표현하면 약 10⁷⁷정도 된다.예를 들어보자면 벼락에 맞을 확률은 8.2 ×10⁻⁷이다. (미국 NOAA 기준). 하지만 개인키가 중복 생성될 확률은 8.64 ×10⁻⁷⁸이다.즉, 길을 걸어 다니다 연속으로 벼락을 13번 ..
들어가기에 앞서오랜만에 글을 쓴다. 왜냐면.. 어쩌다보니 블록체인 분야에서 2달 정도 일하게 되었다.처음시작하니 당연히 블록체인이 어떻게 연결되고 어떻게 합의, 검증을 하는지 아무 것도 몰랐다. 솔직히 그냥 합의, 검증이라는 단어 자체도 프로그래밍으로 합의, 검증?.. 이라는 생각이 들었다. 보안 쪽을 전공한 것도 아니어서 좀 더 어려웠던 것 같다.하지만 참고할 문서들은 많았고 오늘은 그중에서 Blockchain_go, 비트코인을 기반으로 작성된 Golang 오픈소스를 소개하고, 처음 시작할 때 가장 필요한 이론부분에서 도움을 받았던 글을 소개할려고 한다.먼저 유명한 오픈소스인데 Golang으로된 오픈소스이다. Github를 사용했다보니 Blockchain에 당장 gRPC, Reed-Solomon을 적용..