본문 바로가기

Blockchain113

2023년 블록체인에 집중해야 하는 이유 2022년은 crypto currency의 겨울이었습니다. CeFi 거래소들이 줄줄이 파산을 면치 못하면서 3조달러에 달하는 암호화폐시장이 8천억 달러까지 시총이 내려왔습니다. 루나 프로토콜, 셀시우스, 3AC, FTX 까지 빠른 외형 성장을 위해 거래소간 물고 물리는 도미노 시스템이 붕괴되기 시작한 것이다. 그럼에도 불구하고 2023년 암호화폐에 대한 관심은 끊이지 않고 있습니다. 중개인을 제외한 제3자 거래가 가능하게 하는 시스템은 많은 개발도상국들로 부터 러브콜을 받고 있습니다. 미국을 제외한 엘살바도르, 중앙아프리카공화국 등 GDP가 낮은 국가에서는 여전히 정부가 아닌 외부 경제 시스템을 선호합니다. 반복되는 역사 1929년 대공황 이후 예금보험제도가 도입되었고, 글래스-스티걸 법이 통과되었습니다.. 2022. 12. 19.
Solidity virtual function(가상 함수)란? 이더리움 기반 ERC20 토큰을 발행할 때 Interface Contract를 작성한 후 토큰 발행 컨트랙트를 작성하게 됩니다. 이 때 흔히 볼 수 있는 solidity keyword가 바로 virtual 입니다. virtual은 무슨 의미일까요? virtual override 예를 들어서 ERC20토큰을 발행하는 컨트랙트가 아래와 같이 있습니다. 먼저 실제 구현을 하지 않고 함수만 추상화 시켜 놓은 interface contract를 작성합니다. 💡 Interface Solidity에서 Interface는 추상 계약(Abstract Contract)와 유사하지만 모든 함수가 추상화 되어 있다는 특징이 있습니다. Interface 특징은 다음과 같습니다. 1) 다른 컨트랙트를 상속받을 수 없습니다. 2).. 2022. 11. 29.
[Dex PJ] #1 프로젝트 시작 Dex Project 시작 블록체인을 공부하면서 막연하게 DeFi에 관심이 갔다. 대학교에서 금융공학을 전공한 이력 때문인지 블록체인을 활용할 수 있는 프로젝트 중 거래소, 스왑, 디파이, Dex에 관심이 가는건 어쩌면 당연한 이치라고 생각한다. Dex 프로젝트를 준비하면서 Klayswap 컨트랙트를 많이 참조하게 된다. Dex란 Decentralized Exchange를 의미하며 중앙화된 주체 없이 탈중앙화된 거래소라고 쉽게 이해할 수 있다. 이번 프로젝트에서는 크게 Front / Contract / Backend로 Role을 구분했고 나는 코인데몬 서버 1대와 API 서버 1대 해서 백엔드를 담당하게 되었다. Dex에서 API 콜을 보내는 경우가 많지 않고, 인증기능도 추가되지 않아 생각보다 간단해보.. 2022. 10. 28.
[블록체인 만들기 #6] P2P 네트워크 블록체인에 참여하는 노드들은 스스로 클라이언트이자 서버가 됩니다. 모든 노드들이 동일한 체인을 보유해야 하기 때문에 broadcasting을 하게 되는데, P2P 네트워크를 WS와 HTTP 프로토콜을 이용해 구현할 수 있습니다. HTTP 프로토콜은 블록데이터를 반환하는 용도 / WS는 P2P 네트워크를 담당합니다. HTTP/WS 환경 구성 터미널에서 필요한 모듈을 먼저 설치합니다. $ npm install express ws $ npm install -D @types/express @types/ws P2P 서버 구성 블록체인에서는 노드가 클라이언트가 되면서 동시에 서버가 됩니다. 즉, 서버 쪽 코드와 클라이언트 코드를 동시에 작성해줘야 합니다. ./src/server/p2p.ts 파일을 작성하고 아래 코.. 2022. 10. 12.
[블록체인 만들기 #5] PoW 합의 알고리즘 비트코인 블록체인에서는 PoW 합의 알고리즘을 통해 새로운 블록을 생성한 채굴노드에게 비트코인으로 보상을 지급하게 됩니다. PoW는 분산 합의 알고리즘의 한 종류로, 쉽게 말해 지정된 Nonce 값 보다 작은 값을 찾아내는 작업에 성공한 노드를 선정하는 일입니다. 블록체인에서 합의 알고리즘이 필요한 이유는 네트워크에 참여한 모든 노드들이 동일한 상태를 가질 수 있도록 올바른 블록만 연결해야 하기 때문입니다. 악의적인 노드가 올바르지 않은 블록을 추가하려고 할 때 이를 필터링 해줄 수 있어야 합니다. 또한 합의 알고리즘을 통해 동시에 2개의 블록이 생성되지 않도록 사전 예방하는 작업이기도 합니다. 비트코인에 사용되는 작업증명 합의 알고리즘은 Difficulty를 조정함으로써 10분에 1블록이 생성되도록 유.. 2022. 10. 11.
[블록체인 만들기 #4] Chain 만들기 이전 포스팅에서는 Block과 BlockHeader를 통해 블록체인을 구성하는 개별 블록을 생성했습니다. 이번 포스팅에서는 블록들을 연결하는 Chain을 생성합니다. 생성된 블록들을 배열에 담아 연결만 하면 됩니다. 앞서 생성한 블록들은 이미 Hash 값으로 체인을 구성하고 있으므로, 블록의 hash값이 변경되면 자연스레 chain이 끊어지게 됩니다. 이미 연결되어 있는 블록들을 담는 Chain 클래스를 구성하는 가장 큰 이유는 난이도 계산을 위해서입니다. 블록이 생성될 수록 nonce 값을 찾을 확률은 줄어들게 되고 difficulty는 올라가야 정상적인 크립토 이코노미를 구성할 수 있기 때문입니다. 체인 클래스 src/core/blockchain/chain.ts 파일을 생성합니다. import { B.. 2022. 10. 10.
Transpile VS Compile 차이점? Babel, Typescript는 Javascript를 컴파일하는 도구입니다. 웹 브라우저가 이해할 수 있는 이전 버전의 Javascript로 트랜스컴파일러로 Babel을 사용합니다. 또한 Typescript는 정적 타입 기능을 추가해 Javascript로 트랜스파일 한다고 합니다. 사실 대부분의 개발자들이 Transpile과 Compile을 혼용해서 사용하고 있는데, 키워드가 2개인걸 보면 분명한 차이점이 있다는 겁니다. Compile이란? 컴파일이란 한개의 언어로 작성된 Code를 다른 언어로 변환하는 작업을 의미합니다. 대표적으로 Java로 작성된 파일을 컴파일하면 JVM이 이해할 수 있도록 bytecode로 구성된 class 파일이 생성됩니다. C 언어로 작성된 코드를 컴파일 하면 assembly.. 2022. 10. 9.
[블록체인 만들기 #3] Unit Test (Jest) 이전 포스팅에서는 블록과 블록헤더를 생성하고, GENESIS 블록까지 만드는 방법을 알아보았습니다. 이제 생성된 블록들이 정상적으로 연결되는지 확인해볼 필요가 있습니다. Typescript Unit Test는 Jest로 진행해보겠습니다. Node.js 환경에서 Unit Test 프레임워크로는 Mocha, Jest가 있지만 Typescript에서 사용하기 위해서는 추가적인 환경설정이 필요합니다. 이런 불편한 추가설정을 하면서 까지 Typescript를 이용하는 이유는 그만큼 TS가 제공하는 정적 타입의 프로그램이 파워풀하기 때문입니다. Jest, Unit Test 환경구성 Jest를 사용하기 위해서 필요한 모듈을 설치해줍니다. $ npm i -D ts-jest @types/jest babel-core @b.. 2022. 10. 9.
[블록체인 만들기 #2] Genesis Block 생성 (Typescript) Typescript로 블록체인 만들기에서 기본적인 환경구성과 Block을 생성하는 방법에 대해 알아보았습니다. 하지만 Block , BlockHeader 클래스에서 이전 블록을 인자로 전달받고 있는 상황이었기 때문에 GENESIS 블록을 생성하지 못하는 문제가 남아있었습니다. 이번 포스팅에서는 GENESIS 블록을 생성합니다. 제네시스 블록 만들기 블록체인에서 제네시스 블록은 체인상 가장 앞에 있는 블록을 의미합니다. Genesis 블록은 하드코딩으로 생성합니다. 💡 하드코딩이란? 코드를 통해 생성되는 변수가 아니라, 직접 타이핑을 쳐서 생성하는 데이터를 의미합니다. src/core/config.ts 파일에서 제네시스 블록을 생성합니다. hash, previousHash, merkleRoot 는 32By.. 2022. 10. 9.
[블록체인 만들기 #1] Block 구성 (Typescript) 블록체인은 정보를 담은 여러개의 블록을 해시를 이용해 연결한 분산원장입니다. 네트워크에 참여한 노드들은 동일한 정보를 담은 블록들을 가지게 되고, 여러개의 블록들은 체인으로 연결되어 블록체인을 구성합니다. 이번 포스팅에서는 Typescript를 이용해 블록체인을 구성합니다. Typescript 환경설정 환경구성 Typescript는 동적타입을 지원하는 javascript을 개량한 언어입니다. 정적 타입을 지원하며 컴파일 시 변수의 타입을 결정하게 됩니다. Typescript로 블록체인을 구성하기 위해 환경설정을 해줍니다. $ npm i -D typescript ts-node @types/node typescript : typescript 언어를 사용합니다. -g 옵션으로 글로벌 설치를 할 수도 있지만 로.. 2022. 10. 9.
블록체인 개발자 기술 면접 준비 질문 정리 블록체인 개발자 면접 질문 📚️ 블록체인 기본 ❓️ 블록체인이 뭔지 정의해주세요 블록체인은 분산 원장 기술과 합의 알고리즘을 기반으로 이중 지불 문제를 해결하는 네트워크입니다. ❓️블록체인 트릴레마에 대해 설명해주세요 블록체인 기술 중 3대 요소인 확장성, 보안성, 탈중앙성 모두 만족할 수는 없다는 개념입니다. ❓️코인과 토큰의 차이점은 무엇인가요? 메인넷 유무에 따라 구분됩니다. 메인넷을 보유하고 있으면, 코인이라 불리고 없으면 토큰이라 불립니다. ❓️크립토 이코노미 VS 토큰 이코노미의 차이점을 설명해주세요 크립토 이코노미란 블록체인 서비스 내에서 암호화폐(코인)으로 작동하는 경제 시스템을 의미합니다. 이해관계를 조정해주는 거버넌스가 필요합니다. 블록체인 경제가 작동하기 위해서는 채굴하는 사람이 필요.. 2022. 10. 6.
[Node.js] 디지털 서명 SHA256 32Bytes 비대칭키 사용방법 디지털 서명은 비대칭키를 이용한 증명 방식 중 하나다. 공개키 방식의 비대칭키와는 다르게, 데이터 자체를 암호화 해서 보안을 중요시 여긴다기 보다 데이터를 전송한 사람의 진위를 증명하는데 초점이 맞춰져 있는 방식이다. 디지털 서명 방식에는 비밀키 비대칭키를 사용한다. 디지털 서명이란 아래 글에서는 디지털 서명에 대해 자세하게 다루고 있다. 혹시 개념이 안잡히시는 분들이라면 필독을 추천한다. 우선 디지털 서명을 하기 위해서는 비밀키/공개키 쌍이 필요하다. 원본 데이터를 해시 한 후 자신의 비밀키로 암호화를 진행해야 하기 때문이다. [Security] 디지털 서명(Digital Signature)이란? 검증 확인 원리 공개 키 방식(PKC, Public Key Cryptographym)은 전형적인 비대칭키 .. 2022. 9. 15.
IPFS Web3.Storage 사용법 NFT를 발행하거나, 블록체인 컨트랙트를 작성할 때 저장소로 많이 사용하는 곳이 IPFS 혹은 FileCoin입니다. IPFS를 Node.js 환경에서 접속해서 파일을 바로 업로드하고 해시값으로 반환되는 CID를 사용할 수 있습니다. Web3.Storage 설치 IPFS에 접근할 수 있는 모듈이 많지만 일반 파일을 업로드 할 때는 Web3.Storage를 사용하고, NFT를 발행할 때 필요한 tokenURI는 NFT Storage를 많이 사용했습니다. Web3.Storage 설치법 $ npm install web3.storage Web3.Storage를 사용하기 위해서는 API Token을 발급받아야 합니다. Web3.Storage 홈페이지로 가셔서 이메일을 등록하시면 바로 회원가입이 됩니다. 회원가입 .. 2022. 9. 7.
Truffle migrate Error You must specify a network id in your development configuration in order to use this network Error Code Truffle에서 컨트랙트를 컴파일 + 배포하는 과정에서 에러가 발생한다. Truffle migrate Error You must specify a network id in your development configuration in order to use this network 에러의 내용은 Truffle에서 컴파일 후 배포할 네트워크를 지정해주지 않았다는 것이다. Solved truffle-config.js 파일에 들어가서 현재 배포할 네트워크 설정이 정상적으로 되어 있는지 확인한다. 만약 배포할 네트워크의 network_id를 모른다면 '' 빈 문자열이라도 입력해야 에러가 해결된다. 하지만 네트워크를 명시하지 않으면 컴파일 된 컨트랙트가 갈 방향이 안잡히기 때문에 해당 블록체인의.. 2022. 9. 2.
[Klaytn] Caver-js 사용법 설치 contract call send Caver-js Klaytn 블록체인을 Javascript를 사용해 접근하기 위해서는 Caver-js를 사용한다. caver-js는 HTTPS, 웹 소켓 연결로 Klaytn 블록체인과 Javascript 간 상호작용을 가능하게 한다. Caver-js 사용법 Caver-js 설치 우선 caver-js 모듈을 설치해준다. npm install caver-js Klaytn Endpoint Node 접속 caver-js를 통해 Provider를 제공해준다. Klaytn의 EN 노드 엔드포인드 URL을 인자로 보내주면 된다. 예제에서는 Klaytn baobab 테스트넷으로 접속한다. const Caver = require('caver-js'); const caver = new Caver("https://api.b.. 2022. 9. 1.