본문 바로가기
728x90
728x90

경일/Block-chain15

[Block-chain / 블록체인] smart contract event(스마트 컨트랙트 이벤트) 등록 및 Back-end 이용하여 contract 실행 0. 목차 1. 개요 2. contract event 등록 3. Back-end 이용하여 contract 실행 1. 개요 이번 포스팅은 저번 포스팅에 이어서 작업을 할거다. 컨트랙트에 이벤트를 등록하고, 서명을 제외한 트랜잭션에 필요한 객체의 내용을 백엔드에서 만들어서 프론트에 응답으로 전해주면, 프론트에선 객체의 내용을 메타마스크에게 전달한다. 메타마스크는 트랜잭션 객체의 내용과 메타마스크에서 관리중인 프라이빗 키를 이용하여 서명을 만들고, 해당 내용을 이더리움네트워크로 던지는 역할을 한다. 백엔드는 MVC 패턴을 따라서 만들려고 한다. 2. Contract Event 등록 만약 지금 내가 만든 페이지에 여러명의 사람이 접속해있다고 치자 (A,B) A라는 사람이 증가 버튼을 눌러서 트랜잭션을 발생시킨 .. 2022. 7. 14.
[Block-chain] smart contract를 이용한 DApp counter 만들기 0. 목차 1. 개요 2. 구성 3. truffle 이용하여 contract 배포 및 실행 4. react로 구현한 페이지에서 contract 실행 1. 개요 리액트와 스마트 컨트랙트를 이용해서 단순한 카운터 애플리케이션을 만들려고 한다. 이제껏 했던것의 총 정리의 느낌이다. geth를 이용하지 않고 ganache를 이용해서 테스트 할것이다. 2. 구성 |- truffle |- client npx create-react-app cleint mkdir truffle && cd truffle truffle init 위 명령어를 차례대로 실행해서 디렉토리 구조를 잡아주었다. 3. truffle 이용하여 contract 배포 및 실행 3-1. truffle 설정 ganache를 이용하기 때문에 config 파.. 2022. 7. 13.
Solidity(솔리디티), smart contract(스마트 컨트랙트) prettier(프리티어) 적용하기 (prettier-plugin-solidity) 0. 목차 1. 개요 2. 플러그인 설치 3. .prettierrc 작성 4. vscode 설정 변경 5. semicolon 1. 개요 최근 컨트랙트를 배우면서 당연하게도 solidity를 사용하게 되었는데, 기존에 있던 prettier 만으로는 solidity 코드에 formmater가 적용이 안된다. 매우.. 매우 불편하다. 그래서 찾다보니 플러그인을 이용해 할 수 있는 방법이 있어서 작성해보려 한다. 2. 플러그인 설치 플러그인을 사용해서 기존 prettier 설정에 추가적인 설정을 부가할 수 있다. 사용할 플러그인의 이름은 prettier-plugin-solidity이다. GitHub GitHub - prettier-solidity/prettier-plugin-solidity: A Prettier.. 2022. 7. 12.
[Block-chain / 블록체인] Truffle(트러플) 활용하여 contract(컨트랙트) 배포 0. 목차 1. 개요 2. truffle 없이 contract 배포 3. truffle 활용하여 contract 배포 1. 개요 저번 포스팅에서는 geth console에서 컨트랙트를 배포해 보았다. 오늘은 javascript 코드 작성을 통해 컨트랙트를 배포 해보며 전체적인 흐름을 이해하고, truffle 을 활요한 컨트랙트 배포를 해보려 한다. 2. truffle 없이 contract 배포 2-1. UTC 파일 복호화 하여 개인키 가져오기 이전의 포스팅에서 javascript에서 web3 라이브러리를 통해 트랜잭션을 구현한 적이 있는데, 그때 ehtereumjs-tx 라이브러리를 이용해서 서명을 만들었었는데 위 라이브러리를 이용해서 서명을 만들기 위해서는 개인키가 필요하다. 사실 오늘 포스팅에서 사.. 2022. 7. 12.
[block-chain / 블록체인] Solidity(솔리디티)작성 과 contract(스마트컨트랙트) 배포 0. 목차 1. 개요 2. Solidity 3. contract 배포 1. 개요 오늘은 솔리디티 코드를 작성하고, 작성한 코드를 최근 진행한 토이프로젝트를 이용해 contract 배포를 진행 해보려 한다. 2. Solidity solidity는 오로지 smart contract 작성을 위해서 존재하는 언어이다. 파일 확장자로는 .sol을 사용한다. 코드를 작성하는데 기존의 vscode에서 작업하던 것과 달리 코드에 색이 입혀지지 않는다면, solidity확장자를 설치해보자. 2-1. Solidity 작성 solidity 문서 최상단에는 항상 버전을 적어주는 것으로 시작한다. pragma solidity ^0.8.15; 그리고 contract라는 예약어를 사용해서 코드를 작성한다. js의 class 와 비.. 2022. 7. 11.
[Block-chain / 블록체인] Geth 이용해서 Private Network 만들기 0. 목차 1. 개요 2. Geth 톺아보기 3. IPC 통신 4. Private Network 1. 개요 저번 포스팅에서 Geth란 Go 언어로 빌드된 ethereum 클라이언트를 뜻한다고 했었다. ehtereum 클라이언트는 여러가지 언어로 빌드가 되어있는데 그중 go 언어로 빌드 된, 즉 Geth 가 근본이라 할수 있다. 오늘은 이걸 가지고 Private Network 생성을 해보려고한다. 2. Geth 톺아보기 우선 geth에 대해 좀더 알아본 뒤에 private network를 구현해보려한다. geth의 설치와 환경변수 설정은 이전의 포스팅에서 다뤄본 적이 있다. geth를 실행시키면 현재 이더리움 메인넷의 데이터를 가져온다. m1 mac 기준으로 가져온 데이터들은 ~/Library/Ethere.. 2022. 6. 30.
[Blockchain/블록체인] ganache(가나슈)와 테스트코드를 통해 Ethereum(이더리움) Transaction(트랜잭션) 만들기 0. 목차 1. 개요 2. ganache(가나슈) 3. curl 4. web3 1. 개요 이번 포스팅에선 가나슈와 테스트코드 작성을 통해(jest) 트랜잭션을 발생시키는 걸 해보려한다. 이전 까지의 포스팅을 통해 전체적인 흐름을 잡았고, 이미 구성 되어있는 이더리움 네트워크를 이용하기 때문에 그닥 어려운 내용은 없는 것 같다. 2. 가나슈 (ganache) 가나슈는 로컬에서만 실행되는 이더리움이다. npm install -g ganache-cli 글로벌로 설치를 해주자. 가나슈는 마이닝 기능과 P2P 기능은 존재하질 않는다. 대신에, 블록과 체인 그리고 트랜잭션의 내용은 구현 되어있는데, Transaction(트랜잭션 이하 Tx)이 발생되면, Tx가 발생되면 자동으로 해당 Tx를 담고 있는 block이 .. 2022. 6. 28.
[Block-chain/블록체인] Mac GETH 설치 0. 목차 1. 개요 2. Go 설치 3. Clone 및 make geth 4. 환경변수 설정 1. 개요 내가 쓰는 랩탑이 Mac이기 때문에, Mac 기준으로 작성할거다. 저번 포스팅에서 얘기했듯, 이번 포스팅에선 GETH를 설치 해보겠다. 2. Go 설치 저번 포스팅에서 설명하였듯이, GETH란 GO + Etereum의 합성어이다. 즉 GO 언어로 작성된 이더리움 네트워크이다. 그러니까 우선적으로 Go를 설치 해야 한다. go version 기존에 go가 설치가 되어있다면 go version go1.18.3 darwin/arm64 뭐 이런게 뜰거다. 만약 zsh : command not found: go 요런게 뜬다면 homebrew를 통해 go 를 설치를 해주자 brew install golang 설.. 2022. 6. 27.
[Block-chain/블록체인] Ethereum(이더리움) / EVM / Account / EOA / CA / Transaction(트랜잭션) / GEth 0. 목차 1. 개요 2. EVM 3. Account 4. Transaction 5. GETH 1. 개요 기존의 포스팅에서 비트코인을 야매로 카피해서 구현했었다. 그리고 오늘 부턴 이더리움에 대해 포스팅을 하려고 한다. 이더리움에는 비트코인에는 존재하지 않는 EVM(이더리움 가삼머신) 이란것이 존재하고, 비트코인과는 Transaction의 내용과 처리도 다르며, account를 만드는 방법도 다르다. (기존 포스팅에서 사용했던 방법이 이더리움의 account 생성 방식을 어줍잖게 따라했었다.) 비트코인은 PublicKey를 2번의 hash화를 거쳐서 만든다 하나씩 알아보자. 2. EVM EVM(Ethereum Virtual Machine = 이더리움 가상머신 이하 EVM)은 스마트 컨트랙트에 작성된 코드.. 2022. 6. 27.
[Blockchain/블록체인] Wallet(지갑)/PrivateKey(개인키)/PublicKey(공개키)/account(계정) 톺아보기 0. 목차 1. 개요 2. 지갑 3. 개인키와 공개키 서명 4. 기능구현 5. 계정 1. 개요 나는 수업을 통해 블록체인에 대해 공부하기 전에는 블록체인과 코인, NFT 그 이외의 기타등등에 대해 완전한 문외한이었다. 그래도 블록체인 지갑(Wallet)이란 말은 몇번 들어본적이 있었고, 그냥 현실세계의 지갑 처럼 코인을 담고있는 무언가라고만 생각을 했었는데, 수업을 통해 내가 유추하던 지갑과는 전혀 다른 것이란 걸 알게되었는데 그 내용을 정리해보려고 한다. 2. 지갑(Wallet) 블록체인에서 말하는 지갑이란, 너무나 당연한 소리지만, 하나의 어플리케이션이다. 그리고 이 어플리케이션을 만드는 방법은 매우 다양하다. 가장 많이 쓰인다고 하는 metamask라는 지갑 어플리케이션은 크롬 익스텐션(Chrome.. 2022. 6. 20.
[Blockchain/블록체인] P2P 서버로 받은 블록 검증 및 업데이트 0. 목차 1. 개요 2. 기능구현 1. 개요 저번 포스팅에서 P2P 네트워크를 통해 각각의 노드가 가지고 있는 블록과 체인을 주고 받아보았다. 상대방에게 전달 받은 블록체인으로 업데이트가 될 필요가 있다면, 해당 블록체인으로 내 노드의 블록체인을 업데이트 해줘야 한다. 그렇다면 우선 전달 받은 블록체인으로 업데이트가 될 필요가 있는지 없는지 부터 확인을 해야 한다. 그리고 업데이트가 될 필요가 있다면, 하지만 업데이트 하기 전에, 상대방에게서 받은 블록체인에 대한 검증이 이뤄져야한다. 검증이 통과 됐다면, 상대방의 블록체인으로 내 블록체인을 업데이트 해주면 된다. 2. 기능구현 위에서 업데이트가 될 필요라고 했는데, 이 필요성을 확인하는 조건이 있다. 전달받은 최신 블록의 height+1이 내가 가진 .. 2022. 6. 15.
[Blockchain/블록체인] P2P 네트워크 이용하여 블록정보 주고 받기 0. 목차 1. 개요 2. 기능 구현 1. 개요 저번 포스팅에서 websocket을 이용해서 기초적인 P2P네트워크를 구현했다. 이번에는 저번에 구현한 네트워크를 이용해, 노드간에 블록을 주고받는 기능을 구현해보려한다. 원래라면 이 과정에 검증과정이 필수 이지만, 우선 오늘은 코드의 흐름을 이해하는게 우선이기 때문에 검증에 대한 부분은 제외하고 구현해보려 한다. P2P 네트워크에서는 클라이언트와 서버의 역할을 각각의 노드가 동시 수행하기 때문에, 각각에 역할에 대한 코드가 나눠져 있지않고 하나의 문서에서 작성된다. 그렇다보니 흐름이 조금 괴랄하긴 한데 최대한 하나하나 풀어서 기술해보려 한다. 2. 기능 구현 index.ts import { BlockChain } from '@src/core'; impor.. 2022. 6. 14.
[Blockchain/블록체인] P2P서버로 네트워크 구축 0. 목차 1. 개요 2. P2P 서버란? 3. P2P 서버 네트워크 구축 1. 개요 또한 블록체인의 핵심 개념 중 하나인 탈중앙화를 위해서는 데이터를 한군데에 모아서 관리하는 것이 아니라, 블록체인의 참여자 각자가 갖고 있는 블록들을 서로 비교하며, 서로의 블록에 대한 검증을 이뤄낸다. 그렇기 때문에, 기존에 내가 배웠던 서버와 클라이언트의 개념과 달리, 각각의 개인 컴퓨터끼리 직접 연결하고, 서로 데이터를 주고받는 방식의 네트워크가 필요하다. 그리고 이러한 방식을 P2P 서버라고 한다. 2. P2P서버란 P2P 서버에 대해 조금 더 자세히 알아볼 필요가 있을 것 같다. P2P 아예 처음 들어보는 단어는 아니다. 아직까지도 흔하게 쓰이는 토렌트, 좀 더 과거로 거슬러 올라가면 당나귀, 프루나, 파일구리.. 2022. 6. 14.
[Block-chain/블록체인] chain/difficulty/mining 구현 0.목차 1. 개요 2. POW(작업증명) 3. chain 구현 4. difficulty구현 5. mining 구현 1. 개요 저번 포스팅에서 block의 생성과 구조에 대해 알아보았다. 이번에는 mining(채굴) 기능을 구현해보려 하는데, 선결 과제가 주어진다. mining을 구현 하기 위해서는 difficulty를 우선 구현 해야한다. 우선은 모르는 개념이 많으니, 개념부터 잡고 가면 좋을 듯 하다. 2. POW(Proof Of Work) 이걸 전체적으로 아우르는 개념을 POW(작업증명)이라 할 수 있다. 작업증명이란 작업을 통해 단순한 연산문제를 풀고, 해당 작업을 마치면, 보상을 받아내는 방식을 일컫는다. 기존에도 사용이 되던 방식이지만(스팸메일을 처리하기우해 사용 됐었음), 비트코인의 창시자 .. 2022. 6. 12.
[Block-chain/블록체인] Block의 구조와 생성(javascript/typescript) 0. 목차 1. 개요 2. Block의 구조 3. Block의 생성 1. 개요 드디어 시작하는 블록체인 블록체인은 결국 블록을 체인을 통해 연결 시켜 놓은 것인데, 오늘은 그중에서 블록의 구조와 class를 이용해 블록을 생성하는 방법에 대해 알아보려한다. 블록을 생성함에 있어 체인으로 연결된 이전 블록의 정보를 가져오는 부분은 현 상황에서는 체인에 대한 기술지식이 없으므로, 기술부채로 남겨두고 우선은 제네시스 블록(최초의 블록)을 만드는 형태로 만들어 보려한다. 2.Block 의 구조 블록은 크게 두가지로 구성되어 있다. 헤더 : 블록에 대한 정보가 담겨있음 version: 블록헤더의 버전을 의미 height: 해당 블록의 인덱스 previousBlockHash hash: 해당 블록의 이름이 되는 암호.. 2022. 6. 8.
728x90
728x90