집돌이 공대남 IT

블록체인 채굴 프로그램 확장하기! P2P 네트워크와 트랜잭션 본문

IT/파이썬

블록체인 채굴 프로그램 확장하기! P2P 네트워크와 트랜잭션

집공이 2023. 8. 5. 12:00

안녕하세요! 공대남입니다!

이번 포스팅에서는 이전에 만들었던 간단한 블록체인 채굴 프로그램을 확장하여 P2P 네트워크와 트랜잭션을 처리하는 기능을 추가해보겠습니다.

1. 피어 투 피어 (P2P) 네트워크

블록체인의 가장 중요한 특징 중 하나는 분산된 네트워크, 즉 P2P 네트워크를 통해 데이터를 공유한다는 점입니다. 우리는 이를 WebSocket을 이용해 구현해봅시다.

WebSocket 패키지를 설치해줍니다.

npm install ws

WebSocket 서버를 생성하고, 메시지를 받았을 때의 동작을 정의합니다.

var WebSocket = require('ws');

var sockets = [];
var initP2PServer = function(port) {
    var server = new WebSocket.Server({port: port});
    server.on('connection', function(ws) {
        initConnection(ws);
    });
    console.log('listening websocket p2p port on: ' + port);
};

var initConnection = function(ws) {
    sockets.push(ws);
    initMessageHandler(ws);
    write(ws, queryChainLengthMsg());
};

2. 트랜잭션

트랜잭션은 블록체인에서 데이터를 전송하는 기본 단위입니다. 우리의 채굴 프로그램에 트랜잭션을 추가해봅시다.

class Transaction {
    constructor(fromAddress, toAddress, amount){
        this.fromAddress = fromAddress;
        this.toAddress = toAddress;
        this.amount = amount;
    }
}

3. 블록 생성

블록 생성 함수를 트랜잭션을 포함하도록 수정합니다.

var createNewBlock = function(transactions) {
    var newBlock = new Block(blockchain.length, getLatestBlock().hash, new Date().getTime(), transactions);
    newBlock.hash = calculateHashForBlock(newBlock);
    return newBlock;
};

4. 트랜잭션 처리

새로운 트랜잭션을 받아들이는 함수와 블록에 포함된 모든 트랜잭션을 처리하는 함수를 만들어봅시다.

var processTransactions = function(transactions) {
    // check transaction validity
    // if valid, add transaction to block
};

var addTransaction = function(transaction) {
    // check if transaction is valid
    // if valid, add to transaction pool
};

5. 테스트

마지막으로, 새로 추가한 기능이 잘 작동하는지 테스트해봅시다.

var testTransaction = new Transaction('address1', 'address2', 100);
addTransaction(testTransaction);
console.log('Blockchain: ', blockchain);

이번에는 블록체인 채굴 프로그램을 확장하여 P2P 네트워크와 트랜잭션 처리 기능을 추가해보았습니다. 다음 실습에서는 이를 더욱 발전시켜 실제 코인의 트랜잭션을 처리하는 블록체인 시스템을 만들어 볼 예정입니다.