블록체인 220520 TIL) createNewBlock(),createNewTransaction()

2022. 5. 21. 00:24BlockChain

blockchain.js 

function Blockchain() {

    this.chain=[];
    this.newTransactions=[];
};

//새로운 블록 만들기
Blockchain.prototype.createNewBlock = function(nonce,previousBlockHash,hash){ 
    const newBlock = { // Blockchain 안의 새로운 블록 
        index: this.chain.length+1, // 블록 넘버 
        timestamp:Date.now(), //타임스탬프=블록이 생성된 시점 
        transactions:this.newTransactions, //새로운 블록을 만들었을 때 모든 새로운 트랜잭션,UTXO가 담김
        nonce:nonce, //자격증명에서 온 단순한 값. PoW를 통해 적법하게 새로운 블록을 만들었다는 증거
        hash:hash, // newBlock 객체에서 온 값 > newTransactions를 해싱 함수에 매개변수에 전달 (현재 블록 데이터 해싱)
        previousBlockHash:previousBlockHash, //(이전 블록 데이터 해싱)
    };
    this.newTransaction=[]; // 새로운 트랜잭션 배열을 초기호해야 새롭게 다음 블록을 생성할 수 있음
    this.chain.push(newBlock); //새로운 블록을 체인에 추가
    return newBlock;
}

module.exports=Blockchain;

test.js

const Blockchain = require('./blockchain');

const bitcoin=new Blockchain();
console.log(bitcoin);

실행 결과 

 

 

 

 

createNewBlock() 메소드 테스트

chain의 배열 안에는 한 개의 블록, 또는 한 개의 객체가 담겨있다. 

블록은 매개변수로 넘긴 nonce,previousBlockHash,hash 값을 갖고 있다. 

timestamp,index 값도 가지고 있다. 

 

createNewBlock 메소드 안에 여러가지 테스트 데이터를 넣어보자.

 

마주한 에러 1) 

JS에서 배열에 요소를 추가하려고 하는 함수에서 오류 = 배열 안에 데이터가 정상적으로 추가되지 못함 

 

해결 방법 : 중간에 배열 이름을 바꿨었는데 나도 헷갈려서 처음에 했던 배열명으로 다시 하고 나니 해당 오류는 없어졌다. 

 

마주한 에러 2)

TypeError:  is not a function

난 함수로 정의했는데? 왜 이런 오류가 발생했는지 해당 메소드를 주석처리하고 다시 보니 

해결 방법 : 나는 getLastBlock 이라고 선언했는데 

함수를 호출할 때 getlastBlock()이라고 호출한 것이다. 그래서 위와 같은 오류가 발생한 것이다. 

정리하자면 

메소드(함수) 선언 : getLastBlock() 

메소드(함수) 호출 : getlastBlock() 으로 한 것이다. 

 

 

미결 트랜잭션들을 추가하기 위해서는 새로운 블록을 생성해야 한다.

기존에 블록이 2개 있었는데, 미결된 3가지의 트랜잭션을 처리하기 위해 새로운 블록을 만들고 

console.log(bitcoin.chain[2])로 확인해보니 미결된 트랜잭션들이 새로운 3번째 블록에 잘 추가된 것을 확인하였다. 

 

 

데이터 해싱하기 

블록체인에서는 SHA256(어떤 입력값이든 주어진 입력값에 대해 언제나 동일한 출력값 반환)

ex) 안녕하세요 2C68318E352971113645CBC72861E1EC23F48D5BAA5F9B405FED9DDDCA893EB4

안녕하세요를 SHA256 변환기에 넣을때마다 한 번은 2C, 한 번은 3P ~ 이런 식으로 나오는게 아니라 

변환기에 '안녕하세요'를 넣을때마다 위와 같이 동일한 해싱 값이 나온다는 것이다.

 

SHA256을 사용하기 위한 npm 라이브러리 설치를 하려고 했으나 너무 오래된 라이브러리라 그런지,, Error가 발생하며 

hash.js를 사용할 예정이다. 

 

npm i sha 256--save