728x90
루트 디렉토리에서 @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/blockHeader.ts (typescript)
export class BlockHeader implements IBlockHeader {
public version: string
public height: number
public timestamp: number
public previousHash: string
constructor(_previousBlock: IBlock) {
this.version = BlockHeader.getVersion()
this.timestamp = BlockHeader.getTimeStamp()
this.height = _previousBlock.height + 1
this.previousHash = _previousBlock.hash
}
public static getVersion() {
return '1.0.0'
}
public static getTimeStamp() {
return new Date().getTime()
}
}
implements
implements 키워드는 class의 interface에 만족하는지 여부를 체크할 때 사용된다. implements한 interface의 타입이 없다면 에러를 반환한다.
여기서 주의할 점은, implements는 오직 타입 체크를 위해 사용되는 것이지, 안의 값을 자동으로 바꾸어주지 않는다.
**blockchain/block.ts (typescript)
import { SHA256 } from 'crypto-js'
import merkle from 'merkle'
import { BlockHeader } from './blockHeader'
export class Block extends BlockHeader {
public hash: string
public merkleRoot: string
public data: string[]
constructor(_previousBlock: Block) {
super(_previousBlock) //BlockHeader 뜻하는거임
this.hash = ''
this.merkleRoot = ''
this.data = []
}
}
**block.test.ts (typescript)
import { Block } from '@core/blockchain/block' //따로 별칭 정한 것이므로, 각자 디렉토리에 맞는 경로 설정해야함!!
describe('Block 검증', () => {
let genesisBlock: Block = {
version: '1.0.0',
height: 0,
hash: '0'.repeat(64),
timestamp: 123523132,
previousHash: '0'.repeat(64),
merkleRoot: '0'.repeat(64),
data: ['hello block'],
}
it('블록생성', () => {
const data = ['Block #2']
const newBlock = new Block(genesisBlock)
console.log(newBlock)
})
})
728x90
'블록체인' 카테고리의 다른 글
[Typescript] 타입스크립트로 블록체인 P2P 구현해보기(찍먹) (0) | 2022.06.14 |
---|---|
[Typescript] 타입스크립트로 블록체인 마이닝(채굴) 구현하기 (0) | 2022.06.14 |
블록체인 P2P 기술에 대해 알아보자. (0) | 2022.06.14 |
[Typescript] 타입스크립트로 블록체인 블록 검증하기 (0) | 2022.06.14 |
[블록체인] 블록체인 특징, 구성, 블록 만들어보기 (0) | 2022.06.08 |