TypeScript 8

[typescript] NFT 토큰 민팅하는 dApp 간단히 구현하기

목차 - 디렉토리 구조 - 모듈 설치 및 기본 설정 - 구현 코드 - 결과 디렉토리 구조 모듈 설치 및 기본 설정 프론트 npx create-next-app@latest --typescript front npm i @chakra-ui/react @emotion/react@^11 @emotion/styled@^11 framer-motion@^6 npm install web3 샤크라라는 라이브러리를 사용해서 이미 만들어져있는 리액트 컴포넌트를 사용해서 편하게 작업할 것임 백 mkdir truffle cd truffle truffle init cd contracts npm init npm i openzeppelin-solidity truffle.config.js에서 development 주석 해제 https:..

[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, 블록체인] P2P 네트워크를 통한 브로드캐스팅 구현하기

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

블록체인 2022.06.15

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

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

블록체인 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

[Typescript] 타입스크립트 interface

목차 - 인터페이스(interface란?) - 예제 코드 인터페이스란? 인터페이스는 일반적으로 타입 체크를 위해 사용되며 변수, 함수, 클래스에 사용할 수 있다. 인터페이스는 여러가지 타입을 갖는 프로퍼티로 이루어진 새로운 타입을 정의하는 것과 유사하다. 인터페이스에 선언된 프로퍼티 또는 메소드의 구현을 강제하여 일관성을 유지할 수 있도록 하는 것이다. ES6는 인터페이스를 지원하지 않지만 TypeScript는 인터페이스를 지원한다. 인터페이스는 프로퍼티와 메소드를 가질 수 있다는 점에서 클래스와 유사하나 직접 인스턴스를 생성할 수 없고 모든 메소드는 추상 메소드이다. 단, 추상 클래스의 추상 메소드와 달리 abstract 키워드를 사용하지 않는다. 예제 코드 example/interface.ts int..

[Typescript] 기본 설정, 세팅

'작성중' type script 는 런타임이 없다! --> 번들링을 무조건 해야함 즉, 자바스크립트로 바꿔주어야한다. tsc index.ts /dist/app.js #json { "compilerOptions": { "outDir": "./dist/" } } npx tsc --build #json 별칭 경로 설정(paths) { "compilerOptions": { "outDir": "./dist/", "baseUrl": ".", "paths": { "@core/*": ["src/core/*"] } } } npm install -D @types/node ┌ [프로젝트] ├ /src ├─ /core ├── index.ts ├─ utils.ts **index.ts** #typescript -특정 경로를 아래..