Step 04. javascript로 블록 체인 만들기_블록 만들기

BlockChain,NFT,Web3.0 2021. 12. 17. 18:00
반응형
function Blockchain(){
    this.chain = [];
    this.newTransactions = [];
}

Blockchain.prototype.createNewBlock = function(nonce, previousBlockHash, hash){
    const newBlock = {
        index: this.chain.length+1,
        timestamp: Date.now(),
        transactions:this.transactions,
        nonce: nonce,
        hash: hash,
        previousBlockHash: previousBlockHash
    };

    this.newTransactions = [];
    this.chain.push(newBlock);
    
    return newBlock;
};

module.exports = Blockchain;

블록체인 내부에 있는 블록을 만듭니다 
그리고 데이터들을 블록 내부에 저장 합니다 
index는 블록 번호 입니다 
블록이 생성될때마다 1씩 증가 합니다 
그리고 블록체인에 있는 블록 번호로써 첫번째 블록인지 두번째 블록인지 세번째 블록인지 등으로 사용할 예정입니다 
timestamp는 블록이 언제 만들어졌는지를 기록 합니다 
transactions는 새로운 거래들과 동일 합니다 
기본적으로 새 블록을 만들때 모든 새 트랜잭션을 또는 방금 생성된 보유중인 모든 트랜잭션을 이 새로운 블록이 우리 블록체인의 내부에 있고 절대 변경 될수 없도록 합니다 
새로 만들어진 블록의 모든 트랜 잭션을 의미 합니다 
블록에 배치 되기를 기다리는 새 트랜잭션이어야 합니다 
nonce는 메모 입니다 
기본적으로 Announce는 작업 증명에서 나오며 우리의 경우 nonce는 단순히 숫자에 불과 합니다 
작업 증명 방식을 사용해 합법적인 방법으로 이 새로운 블록을 만들었습니다 
다음 속성은 hash입니다 
기본적으로 이 hash가 데이터가 됩니다 
새로운 거래의 기록의 hash값 입니다 
모든 트랜잭션이 기본적으로 단일 파일로 압축 된다는 것입니다 
새 블록의 마지막 속성은 이번블록 해시입니다 
이것은 이전 블록의 해시이며 이전 블록을 참조 하는데 사용합니다 

다음은 새 트랜잭션을 설정 해야 합니다 
이것을 하는 이유는 새 블록을 생성하기 때문입니다 
모든 새로운 트랜잭션을 이 블록에 넣고 있음으로 완전히 새로운 트랜잭션을 만들어야 합니다 
그리고 체인에 추가 합니다 
마지막으로 생성된 블록을 반환하면 됩니다 
생성된 블록에 우리의 거래가 있다는것을 명심 하세요 
마지막 블록이 채굴된 이후 생성되었습니다 
새 블록을 생성한 후 새 트랜잭션을 지우고 새 블록을 만들어 반환 하기만 하면 됩니다 


 

이제 모듈로 만들고 블록을 생성하는 테스트를 해봅시다 

const Blockchain = require('./blockchain');
const bitcoin = new Blockchain();
bitcoin.createNewBlock();
console.log(bitcoin);

 

 

이 메서드는 3개의 매개변수(announce, previousBlockHash, hash)를 사용합니다 
임의의 숫자를 넣어주고 이전 블록 해시와 해시에 더미 해시값을 넣어 줍니다 

https://emn178.github.io/online-tools/sha256.html

 

SHA256 Online

 

emn178.github.io

 

 

announce : 2389
previousBlockHash : aa076b957679b7ec6813f2a416e025858824268e6ea7b869b3f1027d62ca04b0
hash : d04b98f48e8f8bcc15c6ae5ac050801cd6dcfd428fb5f9e65c4e16e7807340fa

 

const Blockchain = require('./blockchain');
const bitcoin = new Blockchain();
bitcoin.createNewBlock(2389, 'd04b98f48e8f8bcc15c6ae5ac050801cd6dcfd428fb5f9e65c4e16e7807340fa', '3e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d');
console.log(bitcoin);

 

 

몇개의 블록을 더 만들어 봅니다 

const Blockchain = require('./blockchain');
const bitcoin = new Blockchain();
bitcoin.createNewBlock(2389, '2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6', '21e721c35a5823fdb452fa2f9f0a612c74fb952e06927489c6b27a43b817bed4');
bitcoin.createNewBlock(1111, '4dae36178441e95b5487169e3cd5876d4f0fc2b6bc701a8ff646f77a84a33e80', '049160e29deb2138996b82a797ab59e5c60e79e843ad96a2180a6130c4e70ef4');
bitcoin.createNewBlock(233, '09d96eeb75b7a434aa1268abd836bf86fc1edd4d37536536fc018fb61cef6ba3', 'c0d986daabecf3484f1762bd79aa4d7c185f62b7f395291fdabe050ead48c2a7');
bitcoin.createNewBlock(298, '84f67d61cd04d62185178d1a7e4965f4cbda873d473e6191004f63e3f399759e', '03bf3c5dd8f169baabb5c1f7bee75e29a80017c004aa4d423c5728241d7b46c6');
console.log(bitcoin);
D:\workspace2\blockchain\dev>node test
Blockchain {
  chain: [
    {
      index: 1,
      timestamp: 1639732820494,
      transactions: undefined,
      nonce: 2389,
      hash: '21e721c35a5823fdb452fa2f9f0a612c74fb952e06927489c6b27a43b817bed4',
      previousBlockHash: '2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6'
    },
    {
      index: 2,
      timestamp: 1639732820494,
      transactions: undefined,
      nonce: 1111,
      hash: '049160e29deb2138996b82a797ab59e5c60e79e843ad96a2180a6130c4e70ef4',
      previousBlockHash: '4dae36178441e95b5487169e3cd5876d4f0fc2b6bc701a8ff646f77a84a33e80'
    },
    {
      index: 3,
      timestamp: 1639732820494,
      transactions: undefined,
      nonce: 233,
      hash: 'c0d986daabecf3484f1762bd79aa4d7c185f62b7f395291fdabe050ead48c2a7',
      previousBlockHash: '09d96eeb75b7a434aa1268abd836bf86fc1edd4d37536536fc018fb61cef6ba3'
    },
    {
      index: 4,
      timestamp: 1639732820494,
      transactions: undefined,
      nonce: 298,
      hash: '03bf3c5dd8f169baabb5c1f7bee75e29a80017c004aa4d423c5728241d7b46c6',
      previousBlockHash: '84f67d61cd04d62185178d1a7e4965f4cbda873d473e6191004f63e3f399759e'
    }
  ],
  newTransactions: []
}

D:\workspace2\blockchain\dev>

전테 블록 체인 데이터 구조와 체인 속성안에 배열로 생성된 블록들을 확인 할수 있습니다 

반응형
: