Cute Bow Tie Hearts Blinking Pink Pointer

분류 전체보기 102

[Typesript] 암호화폐 지갑 웹으로 구현해보기(트랜잭션&정보입력)

넌작스 다운로드 해주기. wallet/server.ts import express from 'express' import nunjucks from 'nunjucks' import { Wallet } from './wallet' import axios from 'axios' const app = express() const userid = process.env.USERID || 'podo' const userpw = process.env.USERPW || '1234' const baseurl = process.env.BASEURL || 'http://localhost:3000' const baseAuth = Buffer.from(userid + ':' + userpw).toString('base64') c..

블록체인 2022.06.17

[Typescript] 암호화폐 지갑 대~충 구현해보기(찍먹)

오늘 할 것은 암호화폐에 필요한 비밀키(개인키) 생성, 공개키 생성, 디지털 서명, 검증, 계정생성이다. 타원곡선이 블록체인에 어떻게 이용되는가? ↓ 타원곡선과 블록체인 (brunch.co.kr) 타원곡선과 블록체인 "이거 진짜 너가 보낸 트랜잭션 맞아?" | 시작하기 전에 이 글은 블록체인에 타원곡선이 어떤 식으로 이용되는지에 초점을 둔 글 입니다. 주제의 특성상 너무 기술적으로 들어가는 부분들이 있는 brunch.co.kr src/core/wallet/wallet.test.ts import { randomBytes } from 'crypto' import { SHA256 } from 'crypto-js' import elliptic from 'elliptic' const ec = new ellipti..

블록체인 2022.06.16

암호화폐 지갑(wallet)이란?

목차 - 분산 원장이란? - 암호화폐 지갑 구조 분산원장 분산원장은 거래 정보를 기록한 원장을 특정 기관의 중앙화된 서버가 아닌 분산화된 네트워크에서 참여자들이 공동으로 기록 및 관리하는 기술을 의미한다. 광범위하게 널리 분포되어 있음을 의미하는 분산(Distributed)과 거래 내역을 적은 장부를 의미하는 원장(Ledger)이 합쳐진 분산원장은 블록체인 기술의 핵심이다. 분산원장의 장점은 중앙 집중형 방식에 비해 높은 효율성, 시스템 안정성, 보안성, 투명성이다. 기존 시스템의 경우 인증과 데이터 거래 증명을 위해 여러 중간 매개체 또는 인증기관이 필요했다. 하지만 분산원장은 사용자가 거래 내역을 직접 공유할 수 있는 시스템이라는 차별성을 가진다. 이러한 특성 때문에 중앙화된 시스템을 관리시 사용되는..

블록체인 2022.06.16

[Typescript, 블록체인] P2P 네트워크를 통한 브로드캐스팅 구현하기

목차 -브로드캐스팅 -코드 구현 브로드캐스팅 탈 중앙화 시스템에서 거래는 '브로드 캐스팅'을 통해 이루어진다. 중앙화 시스템(우리가 사용하는 은행을 예로들면)에서는 나의 거래 데이터를 중앙 서버에 전송한다. 이에 반해 탈 중앙화 시스템에서는 나의 거래 데이터를 나와 연결된 모든 노드(피어)에게 전송한다. 이렇게 탈 중앙화 시스템에서는 시스템에 참여하는 모든 노드가 서로 데이터를 전송한다. 이론상 모든 노드가 순서는 다르지만 모두 같은 데이터를 가지고 있어야 한다. 하지만 현실에서는 네트워크의 상황이나 네트워크 오류, 피어의 관계 등에 따라(데이터 전달 속도가 다르므로) 특정 시점에 모든 노드가 가지고 있는 데이터는 서로 상의할 수 있다. 이때, 데이터를 가지고 있다고 해당 데이터가 무조건 '기록'되는 것..

블록체인 2022.06.15

[Typescript] 타입스크립트로 블록체인 P2P 구현해보기(찍먹)

타입스크립트로 블록체인에 이용되는 p2p를 찍먹해보겠다. index.ts import { BlockChain } from '@core/index' //블록정보가 담겨있는 객체임. 전 글에서 확인가능합니다 import express from 'express' import { P2PServer } from './src/serve/p2p' const app = express() const bc = new BlockChain() const ws = new P2PServer() app.use(express.json()) app.get('/', (req, res) => { res.send('Chain') }) app.get('/chains', (req, res) => { res.json(bc.chain.getChi..

블록체인 2022.06.14

[Typescript] 타입스크립트로 블록체인 마이닝(채굴) 구현하기

채굴을 위해 사용되는 mining 함수는 이전 블록의 해시값, 시간, 거래내역, 난이도(diff)를 인자로 받는다. 그리고 해당 값과 난스, 해시값을 합쳐 블록(block)을 만든다. 블록은 반복적인 해시값 계산을 통해 난이도를 통과하면 최종적으로 반환된다. 이렇게 난스를 증가시켜가며 난이도에 맞는 해시값을 발견하는게 바로 '채굴(마이닝)'이다. 따라서, 마이닝을 위해선 difficulty를 알아야하는데, 이를 위해서 일단 chain을 생성해주어야한다. chain은 쉽게 말하면 배열이다. difficulty는 지속적으로 변하는데(난이도조정), 기준이 이전 블록이므로, 연결은 반드시 이루어져 있어야한다. 코드를 작성하기 전에, 라이브러리를 설치해주는 것을 잊지말자! merkle, crypto-js, hex..

블록체인 2022.06.14

블록체인 마이닝(채굴하기)에 대해 알아보자.

블록체인에서 가장 이해가 안될수도 있는 채굴에 대해서 알아보겠다. 채굴은 퍼블릭 블록체인에서 상당히 중요한 개념이며, 보상과 사용자에게 참여를 유도시키는 핵심기술중 하나이다. 다들, 채굴이 뭔지는 대충은 알고 있을 것이다. 비트코인을 예로 들면, 문제를 맞춘 정답자에게 비트코인을 주게 되는 것이고, 퀀텀은 소유한 양에 맞춰서 이자를 주게 되는 방식이 있다. 그리고 이오스같은 경우는 간접 민주주의 방식으로 모든 사용자에게 동등한 권리를 주지 않고, 대표자들에게 채굴의 권한을 준 후 나눠주는 방식이 있다. 이러한 채굴에 대해서, 하나둘 모두 비교를 하고 싶으나 내용이 워낙 방대할 수 있어서 여기에는 일반적인 비트코인에서 사용되는 채굴 방식을 사례로 들겠다. 채굴의 의미 블록체인에서 채굴을 한다고 할 때, 사..

카테고리 없음 2022.06.14

블록체인 P2P 기술에 대해 알아보자.

목차 -P2P란? -P2P 장점 -P2P 단점 P2P(Peer-to-Peer Or Point to Point) 블록체인의 가장 핵심중에 하나는 탈중앙화입니다. 비슷한 사례로 MP3서비스의 혁명 "소리바다"를 기억하시나요? 소리바다는 사람들끼리 직접 연결을 시켜서 MP3를 공유하던 서비스입니다. 최근에는 토렌트(torrent)같은 서비스가 나왔지만 2000년대 초에는 소리바다가 P2P 서비스의 최고봉이었죠. 즉 P2P는 사람과 사람을 직접 연결하는 기술입니다. 블록체인은 일명 CS구조라고 하는 Client-Server를 채택하지 않습니다. 이미 Server라는 말이 "중앙"화라는 말을 의미 할 수 있기 때문입니다. 물론 P2P도 다른 의미로 CS를 보여줄 수 있습니다. 예를 들어 사람과 사람간의 연결을 하..

블록체인 2022.06.14

[Typescript] 타입스크립트로 블록체인 블록 검증하기

중간에 누군가 데이터를 바꿀 수도 있기 때문에 블록이 변조되지 않았는지, 검증이 필요하다. 블록을 검증하는 조건은 아래와 같이 총 3가지인데, 이를 모두 만족해야한다. 1) 새로운 블럭height 값 = 이전 블럭 height 값 + 1 : height가 1 씩 증가 2) 이전 블럭의 hash 값 = 새로운 블럭의 previousHash 값 3) 블럭의 version, merkleRoot, timestamp, height, previousHash 값을 조합해 hash를 생성했을 때, 블럭의 hash와 값과 동일한지 : 같은 데이터기 때문에 hash도 당연히 같아야한다. 1. 타입선언 @types/Failable.d.ts declare type Result = { isError: false; value: ..

블록체인 2022.06.14

[Typescript] 타입스크립트로 블록체인 블록 구현하기

루트 디렉토리에서 @types 라는 이름의 디렉토리를 하나 생성한다. 그 안에 Block.d.ts 라는 이름으로 파일을 하나 만들어주겠다. 이 파일에서 interface를 정의해줄 것이다!! (interface:타입을 전역적으로 선언하는 것이라고 보면 됨) **blockchain/Block.d.ts (typescript) declare interface IBlock { merkleRoot: string hash: string data: string[] height: number } declare interface IBlockHeader { version: string height: number timestamp: number previousHash: string } **blockchain/blockHea..

블록체인 2022.06.09