본문 바로가기
매일코딩/블록체인-자바스크립트

자바스크립트로 블록체인 구현 강좌3 - 나만의 비트코인 발행하기

by 인생여희 2018. 5. 26.
반응형

자바스크립트로 블록체인 구현 강좌3 - 나만의 비트코인 발행하기



이번포스팅에서는 마지막 블록을 얻는 함수, 새로운거래가 발생할때 거래 트랜잭션 데이터를 생성하는 함수를 만들어 보도록 하겠다.

먼저 blockchain.js 로가서 이어서 코드를 작성해보자.


Blockchain.prototype.createNewBlock  ... 생략. 이 코드 아래에 마지막 블록을 가져오는 함수를 작성한다.


//마지막 블록 얻기 - chain 배열에는 블록데이터가 들어간다. 맨마지막 블록을 가져와라.
Blockchain.prototype.getLastBlock = function(){
return this.chain[this.chain.length - 1];
}


그 밑에 새로운 트랜잭션이 발생했을 때 작동되는 함수를 작성한다.

참고로 거래가 발생할때 마다 생성되는 데이터를 트랜잭션이라고 하는데, 중요한건 트랜잭션은 거래로 인해 발생한 어떤 것이지 블록이 아니다. 블록이 되려면 채굴자들이 마이닝, 즉 컴퓨팅 파워로 채굴을 해야 한다. 그래서 아직 완결이 안된 데이터라고도 할 수 있다. 우리는 맨위에 function Blockchain(){} 데이터 구조에서 this.newTransaction = [] 배열을 생성했다. 이 이름을 좀 더 직관적으로 pendingTransaction으로 바꿔주도록 하자. 아직 대기상태의, 미완결된 값이기 때문에 이렇게 작명을 해주겠다. 전부다 바꿔주도록 하자.

//새로운 트랜젝션(거래)가 발생했을 때 작동되는 함수
//인자값으로, 총액수, 보내는사람, 받는사람이 들어간다.
Blockchain.prototype.createNewTransaction = function(amount,sender,recipient){
const newTransaction = {
amount: amount,
sender: sender,
recipient: recipient
}

//맨위 트랜잭션 배열에 값을 넣어준다.
this.pendingTransaction.push(newTransaction);

//마지막 블록의 index 에서 + 1
return this.getLastBlock()['index'] + 1
}


blockchain.js의 전체 코드는 아래와 같다. 다음 포스팅에서는 test.js에서 이번 포스팅에서 만든 함수들이 어떻게 출력이되는지 찍어보도록 하겠다. 

//블록체인 데이터 구조
function Blockchain(){
this.chain = [];
this.pendingTransaction = [];
}


//블록체인 프로토 타입 함수 정의
Blockchain.prototype.createNewBlock = function(nonce,previousBlockHash,hash){
//새 블록 객체
const newBlock = {
index: this.chain.length + 1,
timestamp: Date.now(),
transactions: this.pendingTransaction,
nonce:nonce,
hash:hash,
previousBlockHash:previousBlockHash
};

//다음 거래를 위한 거래내역 배열 비워주고 새로운 블록을 chin 배열에 추가
this.pendingTransaction = [];
this.chain.push(newBlock);

return newBlock;

}

//마지막 블록 얻기 - chain 배열에는 블록데이터가 들어간다. 맨마지막 블록을 가져와라.
Blockchain.prototype.getLastBlock = function(){
return this.chain[this.chain.length - 1];
}

//새로운 트랜젝션(거래)가 발생했을 때 작동되는 함수
//인자값으로, 총액수, 보내는사람, 받는사람이 들어간다.
Blockchain.prototype.createNewTransaction = function(amount,sender,recipient){
const newTransaction = {
amount: amount,
sender: sender,
recipient: recipient
}

//맨위 트랜잭션 배열에 값을 넣어준다.
this.pendingTransaction.push(newTransaction);

//마지막 블록의 index 에서 + 1
return this.getLastBlock()['index'] + 1
}

//Blockchain 모듈화
module.exports = Blockchain;



반응형

댓글